西门子PLC的定时器是有限的,并且使用起来并不是太方便,尤其是在FB程序模块中使用时必须通过引脚指定定时器编号,当使用较多时非常麻烦。由于我使用定时器的场合对时间精度要求不高,一般以秒为单位就足够,比如计算设备的运行台时,通过时间周期控制设备等,我习惯使用秒脉冲计数的方式代替计时器功能,这样封装在FB程序块中只需要通过引脚输入一个秒时钟信号就可以了。
脉冲计数代替定时器的一个关键就是时钟脉冲要准确,曾经在AB的1769PLC上使用秒脉冲计数的方式计算设备运行时间时,发现设备连续运行一天计算的运行台时竟然比24小时要少,Zui后发现就是秒脉冲时基不准确。当时是使用了2个500毫秒定时器产生秒时基信号,因为扫描周期的存在,每个秒时基的实际时间是1秒+扫描周期,Zui后误差累积造成计时不准确,后来为了避免这种情况只好把时基发生程序放在周期任务里。
西门子PLC相比较而言就方便多了,因为西门子S7-200系列有系统时间标志位可以直接产生时基信号,S7-300/400和S7-1200/1500等有时钟存储器功能可以设置,如下图。一般设置MB0为时钟存储器字节地址,这样就有8个占空比为50%的时基信号可以使用,时基Zui短0.1秒,Zui长2秒,可以满足大多数情况。
如果要想生成小于0.1秒的时基信号,zuihao用循环中断的方法实现,如果要生成分钟时基、小时时基甚至日、月时基怎么办呢?也很简单,结合系统时钟读取程序,把CPU的系统时间读取出来,根据时间数据就可以很容易产生,如下图。当秒数据=0时就可以驱动分钟脉冲信号;当分数据=0且秒数据=0时就可以驱动小时脉冲信号,以此类推。