lamwenwei 发表于 2020-4-8 18:13:40

一招教你如何封装10ms定时器

1.建立变量:


(1)IN:使能位,用于启动10ms定时器;
(2)PT10MS:最小单位10ms,例如此处填10,就为100ms;
(3)OUT:输出位,定时器计时完成该位会输出;
(4)BGM_T:(读取内置 1 毫秒计数器的当前值,并将该值存储于 OUT。)
         简单来说就是开始计时的那一刻;






(5)CAL_T:(计算当前时间与 IN 所提供时间的时差,将该时差存储于 OUT。)
      简单来说就是开始计时那一刻 与 现在此刻 的时间间隔;



(6)SET_T_MS:总的计时时间,最小单位10ms,例如此处填10,计时器时间就为100ms;
2.编写程序
子程序



注意:1.此子程序只支持 CTS 200plc 和 CTH200 带X的PLC(H224X H226XL)2.不支持100系列PLC 和 CTH200 不带X的PLC (H224 H226)原因:cts100系列和cth200标准型:
每次调用子程序,或者触发中断程序时,PLC临时开辟出64字节的空间作为局部存储器,从子程序退出或者中断程序返回时,释放这64个字节
每次开辟出64字节的空间时,不会对这些寄存器进行复位,也即,里面存储的数据是之前不知道哪个子程序计算的结果,对当前子程序来讲毫无意义;
由上可知:当进子程序时,L区内的数据毫无意义,如果要用L区内的数据,则必须先赋值 (在同一个扫描周期内,L区用之前必须先赋值)
cts200系列和cth200高性能:
对于中断,每个中断程序有固定的一片存储区作为局部存储器(L区)。
不同的子程序(fc),L区各自分配固定存储区,退出子程序时不释放存储区,下个扫描周期访问的仍是上个扫描周期的结果
对于某一个子程序,每一次调用此子程序,就分配固定的一片存储区作为局部存储器(L区),下一个扫描周期同一次调用的L区内的数值是上一个扫描周期运算的结果
由上可知:对cts200系列和cth200高性能PLC来讲,L区可以理解为 FB块的背景数据块,可以用来存储数据用,一个子程序多次调用,其中L区都是相互独立的存储区,互不影响
当定时器计时大于等于预设时间,输出位就会输出。
主程序
注意:1. EN必须用sm0.0调用2.时间基准为10ms 设定10 定时时间为10*10ms=100ms





   


页: [1]
查看完整版本: 一招教你如何封装10ms定时器