系统功能 SFC1 用于读取 CPU 的系统时钟。系统时钟存储在数据类型为DATE_AND_TIME的变量里。通过指针访问系统时钟的单个组成元素。
数据类型DATE_AND_TIME所包含的关于年、月、日、时等信息是以 BCD 码的格式存储在 8 个字节里。该数据类型显示的范围是:
DT#1990-1-1-0:0:0.0 到 DT#2089-12-31-23:59:59.999
下表给出了实例表示 2014 年1月 2 日,星期四,3点 5 分 11.854 秒对应数据类型DATE_AND_TIME的每个字节所包含的内容。
DATE_AND_TIME为64位复杂数据类型
绝对地址 | 内容 | 例子 |
字节0 | 年 | B#16#14 |
字节1 | 月 | B#16#01 |
字节2 | 日 | B#16#02 |
字节3 | 小时 | B#16#03 |
字节4 | 分钟 | B#16#05 |
字节5 | 秒 | B#16#11 |
字节6+字节7高4位* (字6) | 毫秒 | W#16#8545 |
字节7 (低四位*) | 星期: 1:星期日 2:星期一 3:星期二 4:星期三 5:星期四 6:星期五 7:星期六 | B#16#45 |
*毫秒最大值999的BCD码需要占用12位。因此,毫秒值占用字节6以及字节7的高4位。字节7的剩下低4位用于表示星期。
用SFC1 (READ_CLK)读取系统时钟的说明:
案例:
打开SCL软件在静态变量里定义 一个DATE_AND_TIME数据类型的变量
利用‘AT’继承将64位时间变量拆分出来
AT指令可以使用户能够以不同的数据类型来访问一个已经声明的变量。此指令类似于高级编程语言中的“继承”概念。此指令有如下特点:
特点一:定义仅在块内有效,在接口参数中不出现。
特点二:在块中可以使用其他数据类型的视图。
特点三:它只是让另外一些变量继承了某个变量的特性,仅仅数据类型是新的,其他特性相同。
如果使用全部的时间,例如进行WINCC面板显示可以直接使用''DAT''变量。
如果使用单个时间就可以使用拆分后的时间
这里有个小技巧:
因为我们上面说到毫秒值占用字节6以及字节7的高4位。星期占用字节7的剩下低4位。
那如何将一个16位字拆分成12位和4位呢?
这里我们可以利用“与”的方式
MB52 := WORD_TO_BYTE(TMP_DAT.Q7 AND 16#FFF0)
“与”16#FFF0不就是“与”2#1111111111110000正好提取出12位出来
完整代码: