PLC扫描周期及双线圈输出问题深层解析
一、双线圈问题
两个触点"xInput1"、"xInput2"同时控制一个输出"xOutput".
当"xInput1"置TRUE时,理论上来说"xOutput"也会置TRUE,但实际上没有输出。
通过观察示波器波形也可以看到,"xOutput"是没有输出的。
这是由于PLC扫描顺序是从上到下,从左到右。PLC会将这个周期内所有元件的状态统一存储在输出状态寄存器中,然后统一进行输出刷新。
所以,虽然上面的程序"xInput1"置TRUE触发了"xOutput"置TRUE,但是下面的程序"xInput2"是FALSE的状态,也会将"xOutput"置FALSE。
最终,PLC本周期输出刷新的时候,"xOutput"就会输出FALSE的状态。
反过来看,如果将"xInput2"置TRUE,结果又会是怎样呢?
根据PLC扫描原理,输出刷新最后一条程序的元件状态,那么"xOutput"就会输出TRUE。
二、需要明白一个点
在PLC中,触点控制一般线圈时,触点的状态会直接影响线圈的状态。
当AA导通时,D1和D2就是导通的状态。
当AA不导通时,D1和D2就是不导通的状态。
所以"AA"置TRUE和置FALSE,是两种状态,对应的输出也是两种状态。
而不是大家之前理解的,AA不导通,后面程序就不执行。
三、双线圈问题在程序中的深层理解
这是一个简单的两段程序,上面就是利用AA控制D1和D2两盏灯。
下面是利用BLINK指令、ROR指令和BYTE_AS_BIT指令实现1s移位一次,灯从D8-D1依次闪烁。
灯1-灯8全部与指令的B0-B7关联起来。
我们登录下载程序,观察8个灯依次移位循环...但问题是:
上面的"AA"没有置TRUE,下面循环移位,D8-D3都可以点亮,但D2-D1就不能被点亮。
通过监控D1和D2的波形可以发现,两个灯其实有一个4ms的上升。
原因:这就是由于扫描刷新和双线圈问题导致的。
程序从上向下扫描,D1和D2先FALSE,然后根据移位指令又被置TRUE,所有波形能看到上升沿。但程序循环执行,这两个灯又被理解FALSE掉了,所以肉眼是观察不到灯亮的。
那要是两段程序反过来会出现什么结果呢?
D1和D2两盏灯还是灭的,但波形上已经没有4ms的上升沿了。
原因:程序最后刷新的就是D1和D2被置FALSE,所以不论是实际看到的效果还是抓到的波形,都没有变化。
四、如何解决双线圈的问题
大家发现,如果我将D1和D2改成置位线圈或者复位线圈后,没有将"AA"置TRUE,但实际D1和D2两盏灯就可以正常移位闪亮了。
波形也可以正常输出,说明这个问题就得到了解决。
为什么改成置位/复位线圈就可以了呢?
在PLC中,相当于"AA"置TRUE,才执行后面的置位/复位程序;"AA"置FALSE,不执行后面的置位/复位程序,这样就不会存在双线圈的问题了。
wack_2023: 写的很清晰明了
鍺: 请问一下,为什么etherCAT是循环,而不是惯性滑行呢?
“Future is promising”: 请问DB块优化快的访问,有些数据是断电保持的,有些数据Bool类型是非断电保持,我如果把优化快的数据访问给删掉,全部数据都改成断电保持,会有什么影响吗?
LX0403: 截的说明书啊这是
m0_52974837: 感谢,我说怎么安装不上,新买的笔记本预装的是家庭版