PLC的两大系列中,欧系PLC可以以功能块模式编写,而日系则以梯形图模式编写。比较起来,我觉得以功能块模式编写程序似乎更合理也更完美。在十年前,我还在旺点电气担任技术探讨版块的版主时,我们就探讨过题主的问题。我就以当时的讨论来展开论述吧。
图1:利用PLC来执行电机星三角正反转起动的原理图从图1中我们能看到电动机的星三角正反转电路,以及PLC的输入输出关系。图1中绿色的部分存在编号的错误,如果按此图接线,电机无法正确运行。由此可见,题主所谓的完美的PLC程序如果脱离外部电路来讨论,其实没有太大的意义。
图2中,所有的开关量均配套20毫秒的延迟判误。如此一来,能够有效地消除触点抖动产生的影响。可见,完美的PLC程序一定会对输入参量采取某种处理措施,使得输入参量明确可靠,消除输入参量对PLC程序的影响。
图2中,我们看到程序开头有注释说明。这也是完美PLC程序必备的具体措施之一。
如果我们把各种开关量直接用于程序控制,往往程序编写得相对晦涩,有时很难判断。但如果我们把各种开关量通过与门和或门转换成电路状态,则PLC主程序的编写和分析就清晰很多。在图3中,我们也看到了程序注释,以及程序入口处的说明。
图4中,我们看到了多处转移指令。例如程序开头的就地控制LOCAL转移指令,它的入口条件是选择开关拨在LOCAL手动挡,且断路器QF已经闭合,而且断路器未执行过载和短路保护QF_F=0。这三个条件缺一不可。
转移指令很容易造成死循环,所以转移指令的运用最好与状态判断结合在一起,这样处理后PLC的程序才是稳定和可靠的。
图5中,我们看到了故障处理程序段,以及出口继电器驱动程序段。这些功能设置了专门的程序段后,程序阅读清晰,功能完整,功能执行也十分明确。我们再看下面这几张图,这些程序段是其它操控程序中摘录的,与电动机星三角正反转程序无关:
图8:RS485/MODBUS-RTU信息交换程序段图6到图8是地铁工程中PLC用于开关量变位的历史记录SOE程序段,以及电力仪表数据采集和信息交换程序段。这三段程序看似没有什么,但它们会占用PLC的内存。特别是RS485/MODBUS-RTU处理程序段,如果再配套通信协议解读和打包处理,则PLC逻辑控制程序部分可能会因为内存分配而重启,造成外部控制瞬间紊乱。
所以,如果PLC执行大量的数据交换和处理工作,一定不能和逻辑控制共用,而必须分开采用2只PLC去执行操作。我们在工程中,就用一只PLC执行逻辑操控工作,另一只PLC执行通信管理中心的工作,两只PLC互相交换信息实现数据共享,但操控程序却相互独立。如此一来,内存分配问题就彻底地解决了。
可见,单单只看PLC的程序编写得是否完整和清晰,不结合PLC本身的功能和性能去考量程序是不行的。
总之,所谓的完美PLC程序,在我看来是无解的。只能针对某款具体的PLC去考量,才会有定性的结果。