如何读取和设置西门子S7系统时间 点击:778 | 回复:1



gmx_1234

    
  • 精华:61帖
  • 求助:0帖
  • 帖子:663帖 | 15回
  • 年度积分:0
  • 历史总积分:13653
  • 注册:2006年5月31日
发表于:2010-07-18 14:08:24
楼主
西门子官网有一篇《如何用 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) 设定系统时间



zhy01024

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 90回
  • 年度积分:981
  • 历史总积分:2665
  • 注册:2011年4月26日
发表于:2018-06-11 14:56:05
1楼

感谢楼主分享。谢谢楼主


热门招聘
相关主题

官方公众号

智造工程师