一直以来对plc扫描过程中I与Q的表现有这样的错误理解:输入I输出Q状态(触点)在扫描周期过程中不会随时改变(这是为了PLC系统有稳定效果,当然对于立即刷新指令另当别论)。
对于要求逻辑:按钮(I0.0)按下或者解除时,Q0.0输出翻转,多年前写过下图程序。
编写以上逻辑,基于以下思考: 不论那个扫描周期检测到输入信号I0.0有变化(沿信号),如果Q0.0为0,那么就会执行SET指令,Q0.0变为1。由于输出刷新要到扫描结束时才执行,此时Q0.0的常开、常闭点不会有变化,所以RST指令不会被执行。 接下来的扫描周期,由于已经刷新了Q0.0的状态,Q0.0的常开、常闭点翻转,就为下次检测到输入信号I0.0变化时Q0.0继续翻转做好准备。 所以以上逻辑应该能完成随着输入变化输出随动翻转变化。 但是上图程序实际测试,Q0.0压根不动作。当年开始学习时没有深究,想当然认为这样写类似于OUT输出指令的双线圈,执行了最后那个RST指令。多年来遇到此类问题一直采用中间变量M过度解决,还想当然认为这是PLC的一个特殊点。 这几天与同事说到Q刷新问题,为自己的错误理解大吃一惊,如此低级错误竟然伴随自己这么多年!汗颜…… 马上使用如下图示程序验证: 有沿信号输入,Q0.0只从0变为1执行一次,Q0.1压根不动作。这就充分说明由于先执行了SET Q0.0,导致Q0.0的常闭点立即断开,紧接着的SET Q0.1也就不会被执行了。 赶紧翻看PLC理论方面的书籍,原来白字黑字写得清清楚楚,有图为证: 哎!看来学习还需要有刨根问底的精神,不敢想当然了事。