描述:
以下解决方案不是一个完整的时间同步方案,而是设置时间的方案。因此,这个解决方案不能真正解决时间同步的问题,因为还需要考虑比如报文或者C脚本执行的延迟时间。n
- 新建一个数据块(此例中为DB1)。其中每个元素和DB块本身都分配属性"S7_m_c"为"True"。
图 1: 数据块DB1的内容n
为了实现这点,在SIMATIC Manager中选中DB1,选择“Edit > Special Object Properties > Operator Control and Monitoring”。设置"Operator Control and Monitoring",点击"OK"确认。这个数据块将通过OS编译传到上位机上,并且具有不同的日期时间接口。
图 2: 设置"Operator Control and Monitoring"n
- 需要一个FC(此例中为FC1),可以将DB中的日期/时间转换为BCD码,将其调整为DATE_AND_TIME的数据类型。程序执行结束,调 用SFC0。由于变量的“Flag”属性,只有当WinCC中调用了C脚本,时间变量才会被设置。FC1中考虑了2000年的问题。同样可以在符号表中给 FC1分配一个符号名。
图 3: 在FC1中声明变量n
以下文件中是一个压缩的STL编写的FC1代码。保存文件TimeSync.exe在本地路径中,并双击解压。n
TimeSync.exe ( 16 KB ) n
在STEP 7项目中导入文件TimeSync.AWL。具体做法为,在SIMATIC Manager中选中source,选择"Insert > External source"。为了在STL源中编译不出错,需要将SFC 0 "SET_CLK"添加在数据块文件夹中,和符号表中的以下条目中:
图 4: 符号编辑器中的条目n
- 将FC1集成到CFC中,对应连接DB1(比如连接"DB1.Year")。再编译CFC,下载进CPU,再将变量编译到WinCC中。
打开STL语句,使用"File > Compile"编译。这样就会创建FC1,并且也能在块文件夹中找到。n
图 5: 在CFC中的FC1连接
- 最终,在WinCC中创建脚本,可以读取系统时间,并分开写至DB1中的各个元素。示例中,通过一个按钮调用C脚本。然而,也可以通过一个全局脚本来调用(time trigger x)。
图 6: WinCC中的C脚本
注意:
函数SetTagMultiWait可以将若干写任务合并成一个任务(与函数SetTagWordWait类似的函数范围内)。更多关于SetTagMultiWait函数的使用信息可以参考WinCC的在线帮助。
关键词:
时间级别,时间主站,时间从站
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc332367.html