马 宝 秋
(石家庄职业技术学院 机电工程系,河北 石家庄 050081)
在现代智能制造生产线中,PLC(可编程控制器)强大的控制功能使其成为生产管理系统(MES)的核心硬件.PLC程序编写的优劣不但影响MES的性能,而且对智能制造生产线的运行也有很大的影响,因此,在编写复杂的PLC程序时要求比较严格,要求有统一性、灵活性、健壮性和可靠性.复杂的设备运行过程一般是按照时间或逻辑的先后顺序进行的,因此,顺序控制程序设计方法就成为广泛使用的一种编程方法.
顺序控制程序设计方法是从有限状态机FSM(Finite State Machine)发展而来的.具有复杂逻辑关系的程序用FSM的思维进行程序设计,比用控制流程的思维更有效率.FSM结构示意图见图1.
图1 FSM结构示意图
复杂设备的运行过程可以看成是由多个独立的工作状态按时间或逻辑顺序排成的、具有一定结构的序列,而且这些独立的工作状态可以再细分为更小的独立工作状态.划分的最小工作状态称作状态步,简称“步”.一般情况下,在每一个步中,系统应该专心做一件事情或维持一个状态.每个步之间是有相互联系的,当前正在执行的步(激活步)在满足一定的转移条件后,可以进入下一个状态步;原来的下一个状态步就成为正在执行的步(激活步),原来的激活步则成为冻结步.
实现顺序控制程序设计的关键是要合理划分步及确定各步间转移的条件.步划分太大,不能体现顺序控制程序编写的优点;步划分太琐碎,则会影响程序执行的效率.
一般情况下,FSM中任意时刻都可以存在有限个激活状态,其他状态则是冻结状态.顺序控制程序中仅当前有限个执行步是激活的,即当前激活的有限个步中的程序代码在CPU(中央处理器)中顺序执行,其他冻结步中的代码则不在CPU中执行,所以实现顺序控制就是在编程中实现只有激活步的代码执行,而其他步的代码不执行;同时判断转移条件,以使各步在激活状态和冻结状态之间转换.这一点是顺序控制程序设计的精髓.
FSM是对具体事物的抽象.在PLC编程实践时,常将各步及各步间的转移条件画成顺序功能图(sequential function chart,简写为SFC),见图2.
图2 顺序功能图(SFC)
SFC已经成为PLC国际标准IEC61131-3首选的编程语言,一般中小型PLC并未配备SFC语言,但可以用SFC来描述系统的功能[1],画出SFC,这样再编程就比较容易.
在SFC中已经将每个状态步划分完毕,并确定了在各状态步间转移的条件.在实践中,用SFC实现顺序控制程序的关键在于,如何让PLC运行时只执行当前激活的状态步而不执行冻结的状态步.
达到这一目的的基本思路是,使用寄存器位作为标志位,每个标志位代表一个步的程序段.在PLC主程序运行过程中不断地判断每一个标志位是否置位.标志位置位则运行与该标志位对应的步,这一步的程序段就是激活的;标志位为清零状态的步不运行,所有未运行步的程序段都在冻结状态.在当前步的代码中判断转移条件,若满足转移条件,则将下一步的标志位置位,并将本步的标志位清零.这样一个PLC扫描周期后,置位的标志位所对应的步的程序段即被执行.
本文以石家庄职业技术学院“离散智能制造生产线”中PLC控制的倍速运输链末端转运机顺序控制为例来说明.倍速运输链为上下双层结构,在工作过程中具有运输、存储、状态判断等功能.在运输链的首端和末端各有一套转运机.承载物料的托盘由上层运输链运送到末端后,由末端转运机构将其转运至下层运输链,托盘在下层运输到首端后,由首端的转运机构将其运输至上层,如此循环往复.倍速运输链末端转运机的结构示意图见图3.
图3 倍速运输链末端转运机的结构示意图
该机构具有典型的时间逻辑顺序工作特点,其SFC如图2所示.
将每一步与一个继电器标志位关联起来,建立步与继电器位的对照表,见表1.
表1 步与继电器标志位对照表
建立的I/O分配表见表2.
表2 I/O分配表
在编程时,顺序控制程序在逻辑上分两部分.一部分是按逻辑顺序依次对步的标志位进行置位/复位的程序段;另一部分是在每个步中实现具体工作的程序段.在实践及教学中发现,第一部分的程序编写易出现逻辑混乱,从而造成程序失败.有4种实现方法可解决这个问题.
本步的转换条件可以看作是下一步的启动条件和本步的结束条件.SFC中已经标明了这些启停条件,根据启保停基本格式就可以写出程序.任何PLC都能实现启保停程序,所以这是一种比较通用的程序设计法[2].本例的启保停法程序段梯形图见图4.程序以西门子TIA Portal V16编写.
图4 启保停法实现顺序控制梯形图
若逻辑关系复杂,可以根据转换条件与上下步的关系列出逻辑函数式,再画出梯形图[3].
该方法是在标志位的操作上使用置位/复位指令.程序中将本步的启动电路作为本步标志位置位(S)指令和上一步标志位复位(R)指令的通电条件[2].根据置位/复位指令的特点,程序在逻辑判断方面使用的梯形图指令会减少,逻辑比较清晰,不易出错[2].使用置位复位法实现本例程序段的梯形图见图5.
图5 置位复位法实现顺序控制梯形图
本方法的实质是通过移位指令,将二进制1在标志位寄存器单元中不断移位,移至哪一位,哪一位对应的步便被激活.在实现时,将各步的启动条件并联作为移位指令的触发条件即可.使用移位指令法实现本例程序段的梯形图见图6.程序中采用ROL(循环左移指令)进行移位操作.使用移位指令必须采用沿触发的方式.当需要循环回顺序的开始步时,要将开始步对应位为1(其他位为0)的值重新赋值给移位寄存器,这是因为步的数量绝大部分情况下并不一定等于寄存器的位数.
图6 移位法实现顺序控制梯形图
西门子S-200系列和S7-200 Smart系列PLC专门为顺序控制方法设置了“顺序控制标志继电器(S)”.编写程序时,将每一个状态步与一个S继电器位关联起来,步的激活和冻结过程就由配套的SCR(顺序控制)指令组控制,PLC系统自动完成,可以比较方便地实现顺序控制编程.本例中S7-200的PLC程序梯形图见图7,程序由西门子Step7 MicroWin 4.0 SP9实现.
图7 顺序控制标志继电器法实现顺序控制梯形图
(1)PLC系统在启动时,应该用“上电初次扫描存储器位”指令在第一个扫描周期将步的标志位全部清零,完成初始化工作后,再将第一个需要运行的步的标志位置位,而后开始执行顺序控制程序.
(2)如果程序中有两个标志位置位,则意味着有两个步需要同时激活.由PLC运行原理可知,从微观上看,这两个步是先后依次运行;从宏观上看,这两个步像是在同时运行.这样既可以实现两个步的并行运行,也可以实现有限个步的并行运行.
(3)并行步序列终归要合并为一个单序列.一般来说,两个并行步的工作不一定会同时结束,所以可以在预计先结束的步后面增加一个等待步,跳出等待步的条件就是与其并行的步被冻结,即要判断其他并行步的标志位是否清零;如果不确定并行步哪个先结束,可以在每个并行步后面都增加一个等待步.这样做的好处是逻辑清晰,程序健壮、可靠.
(4)相比而言,S7-200 PLC中的SHRB(移位寄存器)指令比较灵活.对不复杂的程序来说,移位指令法的指令个数相对最少,但是由于受单个移位寄存器大小的限制,对于有几十步甚至上百步的复杂程序,编程时需要考虑各寄存器间的协调问题,尤其是有并行、选择序列的情况时,由于复杂度增加,程序也会更复杂.
(5)西门子主流的小型PLC S7-1200系列已经取消了顺序功能寄存器(S),但是顺序控制的编程思想并不会消失,取而代之的是本文介绍的前三种及更加灵活的实现方法.
(6)若步的大小划分的合理,顺序控制程序的第二部分程序会比较简单.本例第二部分程序段的梯形图见图8.
图8 本例实现具体工作的程序段梯形图
在该部分,只需要判断步的标志位.哪一个步的标志位置位,则执行哪一步的动作.可以看出,图8的程序段梯形图对前3种方法是通用的,这也体现了顺序控制编程的优点.一般来说,使用顺序控制标志继电器法编写的程序分散在每一步的SCR程序中,当然根据需要也可以不放在任何SCR程序中,而是放在公共程序段中.
顺序控制的程序设计方法可使程序结构清晰.由于每一步的工作被限制在了特定的时间/空间范围内,基本解决了经验设计法中的记忆、联锁等问题[1],所以程序中一些无关的信号可以被排除,从而使得程序健壮、可靠,硬件上也可以减少不必要的外部物理信号,降低系统的成本.该方法不仅在PLC编程上,在工控机、单片机、嵌入式系统等其他类型的控制器编程中也可以灵活应用.