4. 定时器与计数器应用
在S7-1200的指令体系中,定时器与计数器是两类使用频率极高的基本功能块。它们不依赖复杂的数学运算,却直接决定了设备“什么时候动作”“动作多久”“已经做了多少次”。本节围绕IEC定时器TON、TOF、TP、TONR和IEC计数器CTU、CTD、CTUD展开,重点说明各自的行为差异、参数含义,以及如何用它们完成延时启动与产品计数两个典型任务。
一、IEC定时器的共同结构与时间基准
S7-1200的IEC定时器以背景数据块(DB)形式存放状态,调用时通过IN、PT、Q、ET等引脚工作。其中IN是启动条件,PT是预设时间,Q是输出位,ET是当前已计时时间。PT与ET的数据类型为Time,可写成T#3S、T#500MS、T#1M30S等形式。需要特别注意的是,PT决定的是定时器的“时间设定值”,而定时器能否计时、何时复位,取决于具体类型对IN信号边沿和电平的响应方式。
在博途(TIA Portal)中,将定时器指令拖入程序时,系统会提示生成一个背景DB,例如IEC_Timer_0_DB。同一个定时器实例不能被多处同时调用,否则状态会互相干扰。若需要多个独立延时,应分别建立不同的背景DB。
二、四种定时器的行为差异
TON(接通延时定时器):当IN由0变1后开始计时,ET从0递增;当ET达到PT时,Q置1并保持,直到IN变为0才复位。它适合“按下启动按钮后延时几秒再输出”的场合。
TOF(断开延时定时器):IN为1时Q立即为1;当IN由1变0后开始计时,ET递增,达到PT后Q复位。它适合“设备停止后风机继续运行一段时间”的场合。
TP(脉冲定时器):IN出现上升沿后Q立即置1,并保持PT时长,期间即使IN再次变化也不影响本次脉冲宽度。它适合产生固定宽度的脉冲输出。
TONR(保持型接通延时定时器):与TON类似,但IN变为0时ET保持当前值不清零,下次IN为1时继续累加,必须用RT复位指令才能清零。它适合累计运行时间的场合。
从时序图可以看出,TON与TOF的Q在时间轴上的“位置”不同:TON是“先等后通”,TOF是“先通后等”;TP则只认上升沿,输出宽度由PT决定;TONR的关键在于ET的保持与RT复位。理解这四种差异,是正确选型的前提。
三、延时启动任务:用TON实现电机分级启动
假设某输送线要求:按下启动按钮I0.0后,主电机Q0.0立即启动;2秒后,辅助电机Q0.1启动;再经过3秒,报警指示灯Q0.2以1Hz闪烁提示进入运行状态。这里可以用两个TON串联实现分级延时。
// 主电机直接启动
Q0.0 := I0.0;
// 第一级延时:2秒后启动辅助电机
"IEC_Timer_0_DB".TON(IN := I0.0,
PT := T#2S);
Q0.1 := "IEC_Timer_0_DB".Q;
// 第二级延时:辅助电机启动后再延时3秒
"IEC_Timer_1_DB".TON(IN := "IEC_Timer_0_DB".Q,
PT := T#3S);
Q0.2 := "IEC_Timer_1_DB".Q;
调试时可在监控表中观察ET的变化:按下I0.0后,第一个定时器的ET从0开始递增,到T#2S时Q置1,Q0.1得电;第二个定时器的IN随之变为1,ET开始递增,到T#3S时Q0.2置1。若松开I0.0,两个定时器都应复位,Q0.1、Q0.2随之失电。若发现辅助电机不启动,应优先检查第一个定时器的背景DB是否被重复调用,以及PT是否被误写为T#2MS。
四、IEC计数器的三种形式
CTU(加计数器):CU每出现一个上升沿,当前值CV加1;当CV ≥ PV时,Q置1。可用R复位,复位后CV=0、Q=0。
CTD(减计数器):CD每出现一个上升沿,CV减1;当CV ≤ 0时,Q置1。可用LD装载PV值。
CTUD(加减计数器):同时具有CU、CD、R、LD四个控制端,CV可加可减,适合需要双向计数的场合,例如入库/出库数量统计。
计数器同样需要背景DB。CTU的PV为整数,例如10;CV也是整数。需要注意的是,CU、CD、R、LD都是边沿触发,持续为1不会反复计数。
五、产品计数任务:用CTU统计产量并在满箱时输出
假设包装线每检测到一个产品,光电开关I0.1产生一个上升沿;每箱装12个产品,满箱后Q0.3输出一个信号提示换箱,同时计数器复位。程序如下:
"IEC_Counter_0_DB".CTU(CU := I0.1,
R := "IEC_Counter_0_DB".Q,
PV := 12);
Q0.3 := "IEC_Counter_0_DB".Q;
这里把计数器自身的Q接到R端,形成“满箱即复位”的自复位结构。运行时,每来一个产品,CV加1;当CV达到12时,Q置1,Q0.3输出,同时R端为1使计数器复位,CV回到0,Q随即变为0。由于复位发生在同一扫描周期内,Q0.3的输出宽度只有一个扫描周期,若需要驱动指示灯或电磁阀,应通过置位/复位指令或RS触发器保持信号。
六、常见问题与排查要点
- 定时器不计时:检查IN是否真正产生0→1变化;若IN一直为1,TON只在首次上升沿开始计时,不会重复启动。
- 计数器不计数:确认CU端信号是否有上升沿;若光电信号一直为1,计数器只计一次。
- 背景DB冲突:同一实例被多次调用会导致状态混乱,应检查交叉引用。
- 时间值写错:
T#2S与T#2MS相差1000倍,监控ET可快速判断。 - 计数器复位时机:自复位结构下Q只保持一个扫描周期,需要保持输出时应使用置位指令。
掌握以上内容后,可以进一步把定时器与计数器组合使用,例如“延时启动后开始计数”“计数达到设定值后延时停机”,从而覆盖更多小型自动化系统的控制需求。