3.2 定时器
定时器指令实际是计时单元,当其输入逻辑状态为真时,开始计数。与计数器类似,每个定时器需要至少一个数据字的内存来存放累计的时间值和一个状态位表示“计时完成”的状态。
与计数器不同的是,大部分定时器在当其控制逻辑停止又重新启动时,都会自动启动,因此,复位指令可能是不需要的。但也有一种保持计时器,当停止时,他们停止计时,但保持时间,当再启动时,将继续接下去计时。这种定时器就需要一个复位指令来控制。
与计数器类似,有的控制器采用递减计时,但大部分是采用递增计时,这样所计的时间会与预先设定的值进行比较,当到达零或者设定值时,定时器的状态位改变。有的定时器还有一些辅助状态位表示“定时器在工作”。
定时器可以选择时间单位的大小,因为定时器只有在他们运行的时候才能够检查状态,因此,程序越长,定时器的精度越低。比如,一个程序的执行时间是50毫秒,则定时器的时间精度为±50mS,即使定时器所用的时间单元小于50mS。
有的OpenPLC控制器提供实时时钟的功能,OpenPLC不需要从用户程序的指令就可跟踪时间。用户程序可以包含访问时间和改变时间的指令。
OpenPLC的定时器实际上是对时间单元进行计数的计数器。其预设值必须是正的,从0到+32767之间。这个值代表时间单元的数量。OpenPLC的时间基本单元为0.01秒,最大可以到1秒。定时器只能正向计时,到达预设值时将停止。定时器只有三个状态位,DN(DONE),TT(TIMER TIMING),和EN(ENABLED)。EN位反映定时器的控制逻辑。图3.10给出了OpenPLC的定时器是如何工作的。
OpenPLC有三个定时器指令和一个定时器复位指令,这三个定时器指令受其控制逻辑影响。
1. TON(TIMER ON DELAY),无论当时的控制逻辑是否为假,都自动清除累计值和所有的状态位;当控制逻辑为真时,重新启动定时过程。当定时器指令执行的时候,定时器的累计值才更新,但同一个指令在一个用户程序中,可以被多次编程产生多次的更新。TT状态为“ON”时,定时器正在向预设值计时,达到预设值后为“OFF”;DN位在累计值达到预设值时为“ON”。
2. TOF(TIMER OFF DELAY),是TON的反向指令,不过,当计时时,TT也为“ON”。
3. RTO(RETENTICE TIMER ON)保持计时,与TON一致,不过当控制逻辑为假时,不清除累计值,停止计数并保持现有计时值。RTO暂停时,TT为“OFF”。因此,RTO不会自动复位,其累计值只有用RES指令才能复位。
注意,当OpenPLC切换到运行模式时,而定时器的控制逻辑又为真时,定时器的行为仿佛他们的控制逻辑是从假到真一样。受结构化编程影响的器,即使其逻辑表达式没有真正变化,也会表现得好象其控制逻辑变成假或真一样。
图3.10 OpenPLC定时器指令,定时器元素结构和操作表