2.4 梯形图转换与优化
2.4.1 电路转换为梯形图
利用不同编程语言编制的PLC程序,可以通过操作系统或编程软件自动转换,无需进行其他考虑,但是,对于梯形图程序与传统继电器控制电路之间的转换,应注意两者在工作原理、方式上的区别,部分梯形图程序不能完全套用继电器电路,反之亦然。
继电器电路可使用,但梯形图程序不能实现的情况主要有下文的几种,这样的电路需要经过适当处理,才能成为梯形图程序。为了便于比较与说明,在下述的内容中,对于继电器电路,触点、线圈仍以通常的Kn表示;但是,在梯形图上,继电器Kn的触点将以输入I0.n代替,线圈以输出Q0.n代替。
(1)桥接支路
为了节省触点,继电器电路可采用图2.4.1(a)所示的“桥接”支路,利用K5触点的桥接,使触点K3、K1能够对线圈K6、K7进行交叉控制,这样的支路在梯形图程序中不能实现。这是因为:
①梯形图的编程格式不允许,采用梯形图编程时,程序中的触点一般不能进行垂直方向布置;
②违背PLC程序的执行规则,因为梯形图程序的指令执行严格按从上至下的顺序进行,因此,除非使用重复线圈,否则,在同一PLC循环内,不能利用线圈输出指令以后的程序来对已经执行完成的输出线圈附加其他条件。
因此,梯形图程序设计时,每一输出线圈原则上都应有独立的逻辑控制条件。梯形图程序的触点使用次数不受任何限制,因此,对于图2.4.1(a)所示的“桥接”支路,在梯形图程序中可转化为图2.4.1(b)所示的形式编程。
图2.4.1 桥接支路的转换
(2)后置触点
同样出于节省触点的目的,继电器电路经常使用图2.4.2(a)所示的后置触点K5,来同时控制线圈K6、K7,但是,在梯形图程序中,PLC的输出线圈必须是程序段的最终输出(中间线圈只能是内部继电器)。因此,使用后置触点的继电器电路转换为梯形图程序时,需要以图2.4.2(b)所示的形式编程。
图2.4.2 后置触点的转换
(3)中间输出
继电器电路可利用图2.4.3(a)的中间输出节省触点,这样的电路可以转换为梯形图,但执行指令时需要使用堆栈,它将无谓地增加程序容量和执行时间。因此,在梯形图程序中宜转换为图2.4.3(b)的形式,通过改变触点次序取消堆栈操作;或者,将其分解为图2.4.3(c)所示的2个独立程序段,以简化程序。
图2.4.3 中间输出的转换
(4)并联输出
图2.4.4(a)是继电器接点控制电路常用的并联输出支路,鉴于中间输出同样的原因,转换梯形图时宜改为图2.4.4(b)所示的形式。
图2.4.4 并联输出的转换
2.4.2 梯形图转换为电路
简单的梯形图程序也可以转换为继电器电路,但某些特殊的梯形图程序不能通过继电器电路实现,常见的情况有以下几种。
(1)边沿检测程序
梯形图程序可充分利用PLC的循环扫描功能,实现图2.4.5(a)所示的边沿检测功能。但是,这样的程序如果直接转换为图2.4.5(b)所示的继电器电路,由于实际继电器的常闭触点断开通常先于常开触点的闭合,因此,继电器K3不能被短时接通,转换后的电路将变得无任何实际意义。
图2.4.5 边沿检测程序转换
(2)时序控制程序
PLC的梯形图程序严格按从上至下、从左向右的顺序执行,同样的程序段编制在程序不同的位置,可能得到完全不同的结果。
例如,对于图2.4.6(a)的程序,如果M0.1的输出指令位于M0.0的输出指令之后,可在M0.0上得到I0.1的上升沿脉冲;但是,对于图2.4.6(b)所示的程序,如果M0.1的输出位于M0.0的输出之前,M0.0的输出将始终为“0”。
图2.4.6 产生不同结果的梯形图
但是,继电器电路的工作是同步的,如果线圈通电,无论触点位于电路的哪一位置,它们都将被同时接通或断开,因此,即便改变电路的前后次序,也无法得到不同的结果。
例如,对于图2.4.7(a)和图2.4.7(b)所示的电路,当触点K1接通时,所得到的结果总是为线圈K2接通、K3断开。
图2.4.7 效果相同的电路
(3)竞争电路
PLC的循环扫描的工作方式决定了梯形图程序在同一循环内不会产生“竞争”现象,例如图2.4.8(a)所示的梯形图程序,如果M0.0为边沿信号,程序便可用于交替通断控制(参见图2.3.18)。
图2.4.8 竞争电路的梯形图
但是,继电器电路为同步工作,如将图2.4.8(a)所示的梯形图程序转换为图2.4.8(b)所示的继电器电路,当触点K10接通时,将出现“K2接通→K1接通→K2断开→K3接通→K1断开→K3断开→K2接通……”的循环,使继电器K1、K2、K3处于连续不断的通断状态,引起“竞争”,导致电路不能工作。
(4)重复线圈
重复线圈可用来保存逻辑运算的中间状态,起到内部继电器同样的作用;使用重复线圈编程时,PLC一般会发生语法错误提示,但并不影响程序的运行。
例如,对于图2.4.9(a)所示的程序,在不同的输入状态下可得到图2.4.9(b)所示的不同的结果。
图2.4.9 重复线圈编程
①I0.1、I0.2同时为“1”,I0.3和I0.4中任意一个为“0”。在这种情况下,执行Network7指令,Q0.6的输出将为“1”,因而Q0.0将输出“1”;但在执行Network9指令后,Q0.6将成为“0”;因此,程序最终的输出结果为Q0.0=1、Q0.6=0。
②I0.1和I0.2中任意一个为“0”,I0.3、I0.4同时为“1”。在这种情况下,执行Network7指令,Q0.6的输出将为“0”,因而Q0.0将输出“0”;但在执行Network9指令后,Q0.6将成为“1”;因此,程序最终的输出结果为Q0.0=0、Q0.6=1。
③I0.1、I0.2、I0.3、I0.4同时为“1”。在这种情况下,执行Network7指令,Q0.6的输出将为“1”,因而Q0.0将输出“1”;执行Network9指令后,Q0.6也为“1”;因此,程序最终的输出结果为Q0.0=1、Q0.6=1。
继电器的线圈不允许重复接线,因此,使用重复线圈的梯形图程序不能转换为继电器控制电路。
2.4.3 梯形图程序优化
不同梯形图程序的存储容量及指令执行时间各不相同,因此,在不影响程序执行结果的前提下,有时需要对程序进行适当调整与优化,以减少存储容量、缩短执行时间。常用的PLC梯形图程序优化方法如下。
(1)并联支路优化
并联支路应根据先“与”后“或”的逻辑运算规则,将具有串联触点的支路放在只有独立触点的支路上方,这样,就可避免堆栈操作,减少存储容量、缩短执行时间。
例如,对于图2.4.10(a)所示的程序,PLC处理程序时,首先需要读入I0.1的状态,并将其压入堆栈;接着读入Q0.1的状态、进行的运算;然后再取出堆栈,进行I0.1和的逻辑“或”运算,再将结果输出到Q0.1上。
图2.4.10 并联支路优化
当程序按图2.4.10(b)优化后,PLC处理程序时,首先读入Q0.1的状态、接着进行的运算;然后,以现行运算结果和I0.1进行“或”运算,再将结果输出到Q0.1上。因此,程序优化后可减少存储容量、缩短执行时间。
(2)串联支路优化
串联支路应根据“从左向右”处理次序,将有带有并联触点的环节放在最前面,以避免堆栈操作,减少存储容量,缩短执行时间。
例如,对于图2.4.11(a)所示的程序,PLC处理程序时,首先需要读入I0.1的状态,并将其压入堆栈中;接着读入I0.2的状态、进行I0.2和的逻辑“或”运算;然后,再取出堆栈状态,进行的逻辑“与”运算,再将结果输出到Q0.1上。
当程序按图2.4.11(b)优化后,PLC处理程序时,可直接读入I0.2的状态、进行I0.2和的“或”运算;然后,以现行运算结果和I0.1进行逻辑“与”运算,再将结果输出到Q0.1上。同样,程序优化后可减少存储容量、缩短执行时间。
图2.4.11 串联支路优化
(3)使用内部继电器优化
对于需要多次使用某些逻辑运算结果,可通过内部继电器简化程序,方便程序修改。例如,图2.4.12(a)所示的程序可以按照图2.4.12(b)进行优化。
在图2.4.12(a)所示的程序上,Q0.1、Q0.2、Q0.3具有共同的控制条件I0.1&I0.2&I0.3,程序长度15步。如将控制条件I0.1&I0.2&I0.3用图2.4.12(b)所示的内部继电器M0.1缓存,便可将程序长度减少至13步。
图2.4.12(b)所示程序的另一优点是修改方便。例如,当输入I0.1需要更改为M1.0时,图2.4.12(a)所示的程序必须同时修改Network8、9、10;但在图2.4.12(b)所示的程序中,则只需将Network8的I0.1改为M1.0,这样不仅修改简单,且可避免遗漏。
图2.4.12 利用内部继电器的优化
(4)中间输出的优化
对于多输出线圈控制的程序,应按逻辑运算规则,保证逻辑处理的依次进行。例如,图2.4.13(a)所示的程序需要堆栈操作,优化为图2.4.13(b)所示的程序后,便可直接处理。
图2.4.13 输出位置调整