1.概述
队列是来自数据结构的一个概念,即数据的处理是按照先进先出(FIFO)原则执行,在plc的控制程序中有时也会用这种方法。
在一条生产线上的颗粒状物料输送设备中,有四路物料输送管线,但抽取物料的罗茨泵只有一台,因此在任意时刻只能有一条物料输送管线工作,如果在这条管线工作时,其它物料管线有工作请求,只能排队等待,在有等待状况发生时的PLC程序的控制,是一个典型的队列应用。
2 在施耐德Twido系列PLC中的实现方法
在Twido PLC中有现成的寄存器功能块可以配置成队列(FIFO)工作方式,最初也正是用这种方式编写的PLC的控制程序,程序的几处关键请看下面几个程序段图。
在程序调试阶段,设备工作一切正常。但设备在实际运行中,总是会在1~3天内发生1到2个物料输送管线的请求不被执行而始终处于等待状态,只有断电后重新启动设备才能恢复正常工作。随后又仔细分析了Twido PLC的寄存器(队列模式)功能块,发现使用它时必须保证四路物料输送管线的请求在任意时刻不能同时有两个请求发生,否则就会出现上面的问题,而实际工作中,两个或两个以上的请求同时(PLC的一个扫描周期,大约在10ms之内)发生的机率确实存在,正是这种不定期发生的同时出现的请求,使设备不定期地出现物料输送管线的不正常工作。
找到原因后,在改写PLC程序时发现,如果加上处理同时发生的几个请求的程序,使得使用Twido所提供的寄存器(队列模式)功能块的程序可能会更加复杂,于是决定不使用这个功能,用常规编程来完成控制要求。
在程序需要重点考虑的就是这种多路物料输送管线同时发生请求的情况。在程序中将每一个请求用自锁回路保持住,然后将锁定的信号驱动一个定时器,对请求的执行是通过比较几个定时器的当前值大小来决定那一路物料输送管线动作。
在程序中编写下面四个类似的程序段:
实现请求的判断:
请求处理:
在请求处理程序段中已经包含如果有同时发生的请求时,按照1->2->3->4的默认动作顺序来决定优先顺序。
在使用改进后队列处理程序后,该设备运行约两年,一直工作正常,再没出现过某路物料输送管线的请求不被执行的情况。
在这个案例中,说明有些情况下,使用PLC所提供的功能并不一定是最佳的解决方式,此时,不妨考虑一下换一个实现思路的可能性。
(责任编辑:admin) |