在某个项目中,发现PLC一直卡死在某个流程步,就连断电重启都不能解决问题.
实际在线监控程序发现是由于PLC 中开机延时定时器没有接通,而前面的控制条件已经导通。线圈没有动作,也没有计时。
奇怪的问题是已经断电重启了,却还是不能工作。
Delay.TON(IN:=1;
PT:=2S;)
查询西门子官方手册,其解释了西门子定时器不工作的几种情况:
答:可能原因如下:
(1)定时器的输入位需要有电平信号的跳变,定时器才会开始计时。如果保持不变的信号作为输入位是不会开始计时的。TP、TON、TONR需要IN从“0”变为“1”启动,TOF需要IN从“1”变为“0”启动。
(2)定时器的背景数据块重复使用。
(3)只有在定时器功能框的Q点或ET连接变量,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET,定时器才会开始计时,并且更新定时时间。
根据以上原因逐条排查,发现没有重复使用过背景数据块,而在程序中是使用是定时器的输出点.那么第一条定时器的输入需要有电平变化,那么这个是防止上电后的时间差异,防止设备误报警,如果基于此,只需要将定时器的输入改为 not “First_Scan".
即 SCL表达式为:
Delay.TON(IN:=not “First_Scan";
PT:=2S;)
其含义是:在开机第一个扫描周期,定时器的输入为0;一次扫描周期过后,就变成了1,完全避开了第一条原因。基于此可以在使用Alway True的条件全部都替换成First Scan的常闭触点。