案例分享:通过西门子PLC准确读取系统时间和本地时间
西门子PLC可以通过两个指令来读取时间,分别为RD_SYS_T和RD_LOC_T,这两个指令可在右侧拓展指令,时钟功能中中找到。
那么这两个指令有什么区别呢?我们通过实际编程来测试一下。
现在我所在区域的本地时间为:2021-07-23 10:49
首先,我们用RD_SYS_T来读取系统时间,得到的时间如下图:
从上图可以看出,读出的系统时间和本地时间相差8小时。
那么,接下来我们用RD_LOC_T来读取本地时间,得到的时间如下图:
从上图可以看出,读出的时间和本地时间是一致的。
从上面的案例,可以看出,通过RD_SYS_T来读取的系统时间要比本地时间晚了8个小时,这是为什么呢?这就是这两个指令的区别:
系统时间(System Time):指的是格林威治标准时间,也就是0时区的时间。本地时间(Local Time):根据PLC所处时区设置的本地标准时间,我们是位于东8区也就是北京时间,比格林威治标准时间早了8个小时。
但有的同学使用了RD_LOC_T来读取本地时间得到的时间也不正确,那是为什么呢?这个问题就在于,在博途中是否设置了时区以及是否激活了夏令时。
在硬件组态中,通过右键PLC属性,找到时间,我们把本地时间设置成北京时间,取消勾选“激活夏令时",重新下载项目即可,那么我们得到的时间就是准确的了。
****************万花筒****************
我们读到的时间包含了日期和小时,那么怎么把这个两个分开呢,用下面的指令就行啦~
西门子PLC与西门子HMI间如何同步日期时间
在做西门子PLC程序的报警监控的时候,可能会遇到几乎同时发生的报警,HMI报警视图里面显示的日期时间不准确。一排查原来是PLC与触摸屏上的时间不一致。如图一示例,第一条报警是通过HMI的离散量报警触发,第二条报警是由西门子Prodiag监控报警触发,第三条是通过指令Program_Alarm生成的报警,实际上这三个报警是最终源头是同一个变量触发。如何解决时间不一致的问题(本文阐述的均是基于西门子PLC与西门子的HMI设备)。
图一
需要明确的是默认情况下Prodiag监控或者Program_Alarm生成的报警采用的PLC的系统时间(大多数情况下)或者有专门配置时间戳,而HMI报警使用的时间是HMI系统的时间,往往这两个时间是不一致的,需要准确的监控好系统中的报警,此时需要将进行HMI与PLC的时间同步。
针对同步有两种第一个是将PLC的时间同步到HMI上 ,第二种是将HMI的时间同步到PLC 上。
PLC时间同步到HMI上。1)首先启用区域指针中的作业信箱,需要在PLC程序中配置相关的变量,如图。
2)利用作业信箱的作业号14、15功能编写PLC程序,选择合适的触发激活这两个功能即可。作业号14用来设置时间、作业号15用来设置日期。需要注意的是程序中传递的参数为BCD格式的时间日期。(参考程序如下)
3)此时HMI与PLC间的时间已经能够正常进行同步了,需要注意的是为了显示一致,还需要根据你所在的地区将PLC和HMI的时区设置好。(PLC设置时区在硬件组态里面,HMI设置时区根据设备不同略有不同,一般情况都是需要退出运行系统在操作系统的设置中设置,此处不做阐述)。
2、HMI时间同步到PLC上,进行该操作有两种方式。
1)利用系统函数(设置PLC日期时间),比如给一个按钮添加该事件即可。
2)作业信箱作业号40、41进行传送。同样需要用到区域指针操作方式与将PLC时间同步到HMI上基本一致,且相对上面方法较为麻烦,如果要将HMI时间同步到PLC上建议采用系统函数的方式
以上就是PLC与HMI之间进行之间日期时间同步方式,需要注意的时候,无论采取哪一种方式为了使最终显示效果一致,均需要将PLC与HMI的时区,是否冬夏令时进行正确的设置。相对而言HMI同步PLC的方式相对简单,但是由于现场工况环境,可能会存在多个HMI或者HMI会存在关机重启之类,但是PLC往往会持续运行。结合来看建议使用PLC同步HMI的方式 。后续将介绍多个CPU之间进行日期时间同步的以实现更大系统的监控追溯。不足之处,大家评论交流指正。
相关问答
中国时间10点30分美国是晚上多少时间?-ZOL问答
美国有4个时区,分别为西五区,西六区,西七区,西八区。加州属于西八区。与北京...只要设置相应的特殊寄存器(D8xxx)即可,请参阅PLC手册。有用(0)回复纽约时间...