作者 | 主题 |
---|---|
liuliusheng 至圣 经验值: 26219 发帖数: 5838 精华帖: 5 |
楼主 2015-12-30 09:48:40
主题:分享别人做的如何用SFC0和SFC1来设置和读取时钟 如何用SFC0和SFC1来设置和读取时钟,今天就和大家说一说。
西门子官网有一篇《如何用 SFC1 (READ_CLK)读取时间和日期以及如何用 SFC0 (SET_CLK) 设定系统时间》详细说明了如何利用SFC1和SFC0读取和设置PLC的系统时间。
这个程序是利用系统功能块读出系统的日期和时间信息(Date and time格式,占用8个字节),然后通过将每个字节分解后得到年、月、日、时、分、秒、毫秒、周的具体值。因为毫秒实际使用了12位,周使用了4位,所以毫秒和周的数据一起使用了两个字节,在程序中用字与的办法将其分解出来。整个程序如下:
CALL "READ_CLK" //调用系统功能块SFC1 RET_VAL:=MW10 CDT :=#Date_time
LAR1 P##Date_time //利用SFC1读出的日期时间值 L B [AR1,P#0.0] T #Year //年 L B [AR1,P#1.0] T #Month //月 L B [AR1,P#2.0] T #Day //日 L B [AR1,P#3.0] T #Hour //时 L B [AR1,P#4.0] T #Minutes //分 L B [AR1,P#5.0] T #Second //秒
L W#16#FFF0 L W [AR1,P#6.0] AW //毫秒 T #Millisecond
L B#16#F L B [AR1,P#7.0] AW //周 T #Week
CLR
对于时间设置的程序,是将读取时间的步骤反过来,先将数据整合到一个Date_and_time格式的存储器,再用SFC0将这个数值设置为当前时间。
程序如下:
LAR1 P##Date_time L #Year T B [AR1,P#0.0] L #Month T B [AR1,P#1.0] L #Day T B [AR1,P#2.0] L #Hour T B [AR1,P#3.0] L #Minutes T B [AR1,P#4.0] L #Second T B [AR1,P#5.0]
L #Week T B [AR1,P#7.0]
CALL "SET_CLK" PDT :=#Date_time RET_VAL:=MW20 -------------------------------------------------
实际上,对于读取时间,我们可以直接用程序库中的FC6、FC7、FC8分别将日期、周、时间读出来,这样程序编写只需要指定一些存储区域即可,而且得到的是年月日的组合、时分秒毫秒的组合,程序如下:
CALL "DT_DATE" IN :=#Date_time RET_VAL:=#Date_FC
CALL "DT_DAY" IN :=#Date_time RET_VAL:=#Week_FC
CALL "DT_TOD" IN :=#Date_time RET_VAL:=#Time_FC
相应的,设置系统时间也可以直接利用FC3将指定的日期和时间组合起来,然后调用SFC0写入到系统中。程序如下:
CALL FC 3 IN1 :=#Set_date IN2 :=#Set_time RET_VAL:=#Date_time CALL SFC 0 PDT :=#Date_time RET_VAL:=MW30 ------------------------------------------------------
本附件中是利用这两个办法写的系统时间读取和设置的程序,实际应用中选择其中一种即可:Step7time
本附件中是西门子官网的 如何用 SFC1 (READ_CLK)读取时间和日期以及如何用 SFC0 (SET_CLK) 设定系统时间
本文来自: 高校自动化网(Www.zdh1909.com) 详细出处参考(转载请保留本链接):http://www.zdh1909.com/html/PLC/9690.html 109 97
天天学习,天天进步.
|