西门子s7-200时间设定读取编程实例
作者:老电工时间:2015-10-18 05:54:48
西门子s7-200时间设定读取编程实例
读实时时钟(todr)指令从硬件时钟中读当前时间和日期,并把它装载到一个8字节,起始地址为t的时间缓冲区中。写实时时钟(todw)指令将当前时间和日期写入硬件时钟,当前时钟存储在以地址t开始的8字节时间缓冲区中。
必须按照bcd码的格式编码所有的日期和时间值(例如:用16#97表示1997年)。时间缓冲区(t)的格式:t:年00~99;t+1:月01~12;t+2:日01~31;t+3:小时00~23;t+4:分钟00~59;t+5:秒00~59;t+6:0;t+7:0~7。对于星期表示法,1表示星期日,7表示星期六,0禁止星期表示法。
时间日期(tod)时钟在电源掉电或内存丢失后,初始化为下列日期和时间:日期:01--jan--90;时间:00:00:00;星期:星期日。
s7-200 cpu不会检查和核实日期与星期是否合理。
无效日期february 30(2月30日)可能被接受。
故必须确保输入的数据是正确的。不要同时在主程序和中断程序中使用todr/todw指令。如果这样做,而在执行tod指令时出现了执行tod指令的中断,则中断程序中的tod指令不会被执行。sm4.3指示了试图对时钟进行两个同时的访问(非致命错误0007)。s7-200 plc只使用年信息的后两位,不会受到世纪跨越的影响。
但是,用到年份进行计算或比较的用户程序必须考虑两位的表示方法和世纪的变化。在2096年之前可以进行闰年的正确处理。
西门子s7-200设定与读取时间的程序实例。
复制代码 代码示例:
organization_block main:ob1
title=程序注释
begin
network 1 // 将当前时间设定到s7-200当中
//vb100:年 vb101:月 vb102:日 vb103:时 vb104:秒 vb107:星期
// 将当前时间移动到vb100--vb107
ld m0.0
movb 16#09, vb100
movb 16#03, vb101
movb 16#26, vb102
movb 16#09, vb103
movb 16#30, vb104
movb 16#0, vb105
movb 16#0, vb106
movb 16#04, vb107
network 2 // 通过m0.0的一个上升沿将上一步设定的时间写入到s7-200的时钟当中。
// 当m0.0出现一次上升沿,将上面所设定的时间写入到plc当中
ld m0.0
eu
todw vb100
network 3 // 设定时间后,可以通过这句话实时读取plc当中的时间
// 从plc中读出当前的时间
ld sm0.0
todr vb110
network 4 // 将读到的结果从bcd码格式转换到整数格式。
//vw200:年 vw202:月 vb102:日 vb103:时 vb104:秒 vb107:星期
// 将当前时间移动到vb100--vb107
ld sm0.0
lps
bti vb110, vw200
aeno
bcdi vw200
lrd
bti vb111, vw202
aeno
bcdi vw202
lrd
bti vb112, vw204
aeno
bcdi vw204
lrd
bti vb113, vw206
aeno
bcdi vw206
lrd
bti vb114, vw208
aeno
bcdi vw208
lrd
bti vb115, vw210
aeno
bcdi vw210
lrd
bti vb116, vw212
aeno
bcdi vw212
lpp
bti vb117, vw214
aeno
bcdi vw214
end_organization_block