技术论坛

 顺序扫描惹的祸

返回主题列表
作者 主题
我是一颗小小草
奇侠

经验值: 5869
发帖数: 986
精华帖: 4
楼主    2016-11-08 15:27:18
主题:顺序扫描惹的祸 精华帖 

前两天使用其他PLC编写了一个程序,调试过程中发现了一个“奇怪”的问题,开始感觉很不理解,找到原因后恍然大悟。今天共享出来,大家一起探讨。

1.怪异事实——遇到问题

有一天有人告诉你,他遇到了一件“怪事”:PLC输出点Y0常开点闭合启动时间继电器T30,计时时间未到,Y0断开,T30 计时器不会停止,一直保持工作状态。相信大家听到以上事实后第一反应可能与我一样,冒出一句“不可能”后就会猜测是不是T30重复使用,是不是 PLC坏了……各种各样的猜测被一一否定后,看到以下实时监控到的信息(图一),相信大家都会感到吃惊,感觉问题比较怪异,一时找不到原因,最后只能无奈的宣布“PLC坏了”。 

我就是这么干的!

理由很充分,Y0常开点没有闭合(已经断开,有监控为证),T30还能继续计时?没有理由啊!

可是更换了一台新的PLC,问题依旧。

悲催!囧!

想起前辈说过,“当你怀疑PLC有问题时,大多是你自己出了问题”,于是开始老老实实找原因。 

图一:实时监控T30

PS:朋友们,当你实时监控看到Y0没有闭合,但后面时间继电器T30不断地计时到设定值,然后T30有输出,你当时会怎么想?

2.见怪不怪——分析问题

毋庸置疑,显然问题出在编制的PLC程序上,这台PLC程序只有简单的177步,很好分析,但由于判断失误,更换了PLC没有解决问题,在嘈杂与喧嚣的氛围中,我实在无法静下心来思考问题究竟出在哪里,只得放弃现场寻找原因“打道回府”。 

当天晚上躺在床上一直想着这个怪异的问题。突然间脑洞大开:会不会是顺序扫描造成的结果呢?如果图一之前有输出Y0,图一之后输出Y0断开不正是会出现以上遇到的问题吗?

3.原来如此——解决问题

第二天赶紧实际验证,整个程序与此问题有关的逻辑段有如下两处,见以下截图二,图三。

图二:实时监控SET Y0(SET Y0 位置在TMR T30 D586之前) 



图三:实时监控RST Y0(RST Y0 位置在TMR T30 D586之后)

仔细分析以上三个监控截图,问题真相不难发现。前面SET Y0 条件一直存在(图二),虽然后面X3接通执行了RST Y0(图三),导致最终扫描结果输出Y0关闭(PLC 实际Y0没有输出),但这并不能说明图一中 Y0的常开点没有闭合。事实上顺序扫描执行到程序段TMR T30 D586(图一)时,由于之前有 SET Y0 执行,所以Y0常开点闭合,计时器T30自然会不断地继续计时了。

表面看来,好像计时器一旦启动就失控,不能随启动条件消失而停止计时并且自行复位,监控看到的这一事实着实让人不可思议,但是仔细推究,还是有其道理。

找到了原因,解决问题很容易。在图一程序段Y0常开点后面加上X3常闭点问题马上解决,或者在图二程序段中将M500常开点改为上升沿触发SET Y0。

PLC由上到下由左到右顺序扫描执行指令,又一次领教了规则的严肃性。


每天进步一点点,无限接近零缺陷
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。