系统功能SFC1和SFC0分别用于读取和设置CPU的系统时钟。系统时钟存储在数据类型为DATE_AND_TIME的变量里。通过指针访问系统时钟的单个组成元素。
说明
可以使用系统功能SFC1(READ_CLK)和SFC0(SET_CLK)分别读取和设置CPU的系统时钟。系统时钟存储在数据类型为“DATE_AND_TIME”的变量里。数据类型DATE_AND_TIME所包含的关于年、月、日、时等信息是以BCD码的格式存储在8个字节里。该数据类型显示的范围是:
DT2089-12-31-23:59:59.999
下表给出了实例表示2014年1月2日,星期四,3点5分11.854秒对应数据类型DATE_AND_TIME的每个字节所包含的内容。

*毫秒最大值999的BCD码需要占用12位。因此,毫秒值占用字节6以及字节7的高4位。字节7的剩下低4位用于表示星期。
通过指针访问数据类型DATE_AND_TIME的单个变量。这种读取和设定系统时钟的步骤下面以样例说明,样例在OB1中用了4个网络段的程序。
用SFC1(READ_CLK)读取系统时钟的说明
1.调用系统功能SFC1(READ_CLK)读取系统时钟(图1)。
输出参数“CDT”用于接收CPU的当前系统时钟。用数据数据类型为DATE_AND_TIME的临时变量(此处为"readDateAndTime")连接参数“CDT”。

图.1
2.用指令"LAR1PreadDateAndTime"(指针)将临时变量"readDateAndTime"的地址装载到地址寄存器AR1中(图2)。接着,通过间接装载指令访问变量"readDateAndTime"的单个字节/字,并通过提供的操作数显示出来。
3.例如,访问字节3(小时)并通过操作数”Read”.Hour(此处为)输出:
LB[AR1,]
3.用于毫秒和星期的字节6和7存在重叠,因此在传送毫秒的设置值之前需要把操作数(此处为"Write".Millisecond,,)左移4位(SLW4)。
4.无需设置星期,因为它可以由设置的日期推导得出。

图.3
5.调用系统功能SFC0(SET_CLK)用于设置系统时钟并把临时变量"writeDateAndTime"赋给输入参数”PDT”(图4)。重要的是SFC0只调用一次,否则系统时钟在每个周期都被设定并将因此停留在设定的时间。
6.例子中(图4),检测操作数"Write".setCLK(此处为)的上升沿。当有上升沿时,调用SFC0并以临时变量"writeDateAndTime"中给定的值设定系统时钟。

图4
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系