plc cpu日期与时间的读取与设置方法
1、用编程软件(Micro/WIN)的菜单命令plc > Time of Day Clock...,通过与CPU的在线连接设置,完成后时钟开始走动。
2、编写用户程序使用SET_RTC(设置时钟)指令设置,使用READ_RTC(读取时钟)指令读取。
取实时时钟(TODR)指令从硬件时钟读取当前时间和日期,并将其载入以地址T起始的8个字节的时间缓冲区。设置实时时钟(TODW)指令将当前时间和日期写入用T指定的在8个字节的时间缓冲区开始的硬件时钟。
TODR:设置ENO = 0的错误条件: 0006 间接地址 000C 不存在时钟盒TODW:设置ENO = 0的错误条件: 0006 间接地址 0007 TOD数据错误 000C 不存在时钟。所有日期和时间值必须采用BCD格式编码(例如,16#97代表2002年)。
参阅下表。
8个字节时间缓冲区格式(T)
T字节说明字节数据
0年 (0-99)当前年份 (BCD值)
1月 (1-12)当前月份 (BCD值)
2日期 (1-31)当前日期 (BCD值)
3小时 (0-23)当前小时 (BCD值)
4分钟 (0-59)当前分钟 (BCD值)
5秒 (0-59)当前秒 (BCD值)
600保留 ?始终设置为00
7星期几 (1-7)当前是星期几,1=星期日 (BCD值)
长时间掉电或内存丢失后,实时时钟会被初始化为以下日期和时间:
日期:90年1月1日
时间:00:00:00
星期:星期日
二、西门子S7-1500 CPU运行时间的读取方法
读出S7-1500 CPU的运行时间有多种方式。
方式1,通过OB1的启动参数读出运行时间
在非优化的OB1启动信息中带有OB1的运行时间,如图1。
图1.读出非优化的OB1中运行时间
将启动信息参数传递到全局变量中就可以读出CPU的上次扫描、最小、最大扫描时间,编程非常方便。
方式2,调用RD_SINFO函数读出运行时间
如果使用优化的OB1,启动信息简化而没有这些运行信息,如图2所示,则必须调用函数读出。
图2 优化OB1的启动信息
例如,在OB1中调用RD_SINFO函数读出运行时间,程序如图3所示。参数TOP_SI为当前OB1的启动信息,数据类型为SI_classic,需要手动键入,ZI1为上次扫描时间,ZI2_3包含最小、最大扫描时间,低字为最小扫描时间,高字为最大扫描时间,示例中分别传送到MW10和MW12中。START_UP_SI为暖启动OB的启动信息,示例中没有进行引用。
图3调用RD_SINFO函数
方式3,调用RT_INFO函数读出运行时间
通过函数RT_INFO也可以读出CPU的运行时间,示例程序如图4。
图4 调用RT_INFO函数
通过模式1、2、3可以读出CPU的上次扫描、最小、最大扫描时间,在这三种模式下,参数INFO的数据类型为LTIME,可以直接读出。也可以通过其他模式读出运行时间的百分比。
方式4,调用RUNTIME指令读出运行时间
通过指令RUNTIME可以从参数RET_Val直接读出CPU的运行时间,单位为秒,MEM为中间保存程序运行的存储器,两个参数类型都是LREAL,除此之外还可以读出一段程序的运行时间。如图5所示。
图5:RUNTIME指令
三、西门子plc cpu扫描周期监视时间与程序扫描时间
程序循环执行500次,需要多长时间?CPU的扫描周期时间是150ms,有可能超出CPU的监控时间而报故障嘛?CPU扫描一个network1的时间是多少?用的是CPU 315-2DP。
解答:
1、程序循环执行500次,这样需要多长时间?
如果CPU扫描周期时间是150ms,程序循环执行500次,则是150ms X 500的关系。
2、有可能超出CPU的监控时间而报故障?
如果启用了看门狗功能,则报故障。
3、CPU扫描一个network1的时间是多少?用的是CPU 315-2DP。
一个network1的指令数量是可变的,其扫描时间是指令数量的函数。用户不需顾及一条指令、一个程序段的扫描时间。重要的要注意一个周期的扫描时间。可以通过OB1 的临时变量确定其循环周期。相应的临时变量已存储于 OB1 声明变量部分并各对应不同的局部地址字。
本站仅提供信息发布平台,文章仅代表作者个人观点。