您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 西门子300PLC如何利用OB1的临时变量读取CPU系统时钟(精)
如何用SFC0和SFC1来设置和读取时钟,今天就和大家说一说。首先Date_And_Time是一复杂数据类型,包含8个字节,Byte0-Byte7对应年、月、日、时、分、秒、毫秒、星期,对应关系如下表所示:Byte6和Byte7的高4位组合成毫秒,格式是BCD码,Byte6是高位,Byte7是低位我们可以在DB块里定义time1和time2变量,数据类型是DATE_AND_TIME,如下图:在符号表中定义DB1的符号名为system-time,如下图:然后调用SFC0和SFC1就可以了,大家可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序),具体使用时间时可以直接寻址DB1.DBB0–年……DB1.DBB7(低4位)–星期,DB1.DBB8–年……DB1.DBB15(低4位)–星期。OB1:MainProgramSweep(Cycle)Network1:AM10.0JNB_001CALLSFC0PDT:=system-time.time1RET_VAL:=MW100_001:NOP0Network2:CALLREAD_CLKRET_VAL:=MW102CDT:=system-time.time2NOP0如果对时间误差的要求到分就可以,所以推荐一种简单的方法,不知大家之前用过没有,就是使用OB1的临时变量OB1_DATE_TIME(在OB1的Interface–TEMP中可以找到),此变量也是DATE_AND_TIME的数据类型,对应的临时变量地址是LB12–LB19,同样对应年–星期,符合上面表格中的结构,我们只需要使用Move指令就可以得到PLC的系统时间了。例如我们可以将LD12Move到MD0、LD16Move到MD4中,然后在程序中寻址MB0–MB7就可以了。您可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序)。需要注意,OB1临时变量读出的时间会受OB1扫描周期的影响,例如OB1扫描周期是15ms左右,那么从OB1中读出的时间精度应该就是15ms左右。OB1:MainProgramSweep(Cycle)Network1:A(LLD12TMD0SETSAVECLRABR)JNB_002LLD16TMD4_002:NOP0如果需要设置系统时钟,还需要使用SFC0来实现。
本文标题:西门子300PLC如何利用OB1的临时变量读取CPU系统时钟(精)
链接地址:https://www.777doc.com/doc-3752335 .html