1
PLC编程实用指南
1.5.4.1 1.4.1  基本逻辑类指令
1.4.1 基本逻辑类指令

指主要针对二进制数(bit)逻辑操作的指令,是PLC最基本的指令。所有的PLC都有这类指令。这类指令可分为:读(输入类,运用触点)与写(输出类,运用线圈)两种。PLC的继电器功能主要就是靠它实现。

读指令指的是读操作数的逻辑值,并与在这之前已有的结果值进行相应的逻辑运算,进而修改结果值。目的是确定要写的逻辑值,或为其他指令的执行建立相应的逻辑条件。

写指令指的是把上述结果值按输出指令要求写给操作数。

这个结果值就是下面将要讨论的R寄存器的值,有的称为RLO(Result of Logic Operation),即逻辑运算结果。西门子的S7-200称之为逻辑栈顶(The Top of the Logic Stack,TOS)。

表1-9列出4个PLC厂商用指令表语言表达的有关这类的指令。以下将对这类指令进行讨论。

表1-9 PLC主要的基本逻辑指令

978-7-111-39745-8-Chapter02-60.jpg

(续)

978-7-111-39745-8-Chapter02-61.jpg

1.装载指令

装载指令的作用是,把操作数的内容(0或1,分别代表断或通,工作或不工作……)送入结果寄存器R,并把结果寄存器的原有内容送入堆栈P(有的为第二个RLO,不是堆栈)。

指令的语句表符号格式:指令地址 装载 操作位地址

978-7-111-39745-8-Chapter02-62.jpg

它调用常开触点,一般总是把这触点与梯形图的母线相连。它的功能如图1-23所示。

这里,a为操作数的地址,括号代表a的状态;R为结果寄存器;P为堆栈。堆栈为先进后出的存储单元,一般长度为8个位,与PLC型别有关,如欧姆龙CJ1机为16位。8位时,可存储8个二进制数,再续存时,最先存储的掉失。堆栈主要在逻辑块操作,或需多个输入条件时用到它。

取反装载指令,是操作位的内容先取反(代表常闭触点),再送结果寄存器。在梯形图上,一般是表示此常闭触点和左母线相连。其符号是在两短平行线的基础上,再加一小斜线。有的PLC,装载及取反装载指令还可加感叹号(!)及上或下箭头(↑↓),其含义与使用的触点类型有关。

978-7-111-39745-8-Chapter02-63.jpg

图1-23 装载指令的功能

这里感叹号代表执行此指令时先进行输入刷新,以读入此点的最新状态,然后才把这最新状态写入结果寄存器。这么做当然有利于提高对这个输入信号的响应速度。

上下箭头,代表跳变(微分)。若为向上箭头,则操作位的状态从0变为1时,ON一个扫描周期。若为向下箭头,则从1变为0时ON一个扫描周期。其他周期均为0。

加了这个感叹号、向上及向下箭头,使指令的功能大为增强,一个指令可起到多个指令的作用。

S7-200逻辑栈,除了栈顶,还有八位栈体,也可暂存八个位。它的栈体相当于这里的栈,而栈顶则相当于这里的结果寄存器。

2.与指令

为与操作指令。与指令的作用是把操作位的内容与R中的内容相与,然后再送入R中。这时,堆栈的内容无变化。

其语句表的符号:指令地址 与 操作位地址

梯形图符号为

978-7-111-39745-8-Chapter02-64.jpg

它也为常开触点,在梯形图上,它表示与其左边的触点相串联。其功能如图1-24所示。

这里,a为操作数的地址,括号代表a的内容;R为结果寄存器;P为堆栈,执行AND指令时,它的内容不变。

取反与指令,是先取反(代表常闭触点),然后再和结果寄存器的内容作与运算。在梯形图上,表示串联上此常闭触点。

有的PLC这两个指令也可加感叹号、上下箭头。含义同装载指令。

978-7-111-39745-8-Chapter02-65.jpg

图1-24 与指令的功能

3.或指令

为或操作指令。或指令的作用是把操作位的内容与R中的内容相或,然后再存入R中。这时,堆栈的内容无变化。

或指令的语句表符号:指令地址 或 操作位地址

就单个讲,其梯形图符号也为

978-7-111-39745-8-Chapter02-66.jpg

它也为常开触点,在梯形图上,它表示与其上一行的触点相并联。其功能如图1-25所示。

取反或指令,是先取反(代表常闭触点),然后再和结果寄存器的内容作或运算。在梯形图上,表示并联上此常闭触点。

有的PLC这两个指令也可加感叹号,上下箭头,含义同装载指令。

978-7-111-39745-8-Chapter02-67.jpg

图1-25 或指令的功能

4.块与、块或指令

无操作数。其作用是把结果寄存器的内容与堆栈的内容作逻辑与,或逻辑或,然后再送结果寄存器。

其语句表符号:指令地址 块与或指令地址块或,而和利时PLC则用AND或OR加括号。

它在梯形图上代表两组触点的串联或并联。块与功能如图1-26所示。

块或功能如图1-27所示。

978-7-111-39745-8-Chapter02-68.jpg

图1-26 块与的功能

978-7-111-39745-8-Chapter02-69.jpg

图1-27 块或功能

这两个指令用于触点组间的串联或并联,是很有用的指令。如图1-28所示,其对应的助记符指令也已列出。

5.输出指令

为写指令,输出指令要用到线圈。一般多用正常线圈。

语句表的符号:指令地址 输出 操作位地址

梯形图符号为输出正常线圈,可用圆圈或括号表示。欧姆龙、三菱PLC的助记符用OUT,西门子PLC用等号,和利时用ST,如图1-29所示。

978-7-111-39745-8-Chapter02-70.jpg

图1-28 触点组间的串联或并联

978-7-111-39745-8-Chapter02-71.jpg

图1-29 输出指令

其功能为978-7-111-39745-8-Chapter02-72.jpg

这里,a为操作数。执行输出指令后堆栈内容不变,R的内容也不变,只是把R的内容传给a。有的也可使用反向线圈。如欧姆龙PLC取反输出指令,978-7-111-39745-8-Chapter02-73.jpg

其含义是把R先取反,然后再传给a。表示符号为在OUT的符号基础上,加一斜线。

有的PLC这个指令也可加感叹号(!)。感叹号代表执行此指令后,立即进行输出刷新,把这时输出的状态送输出锁存器,直接产生输出。

图1-30所示为西门子PLC加感叹号使用例子。它立即刷新后,把I0.0读入。写Q0.0后,立即刷新。用语句表列写指令时,在LD之后,加I,即LDI 0.0及=(此符号相当于欧姆龙的OUT)后,再加I,即=I Q0.0。显然,这样处理,可加快Q0.0对I0.0的响应速度。

978-7-111-39745-8-Chapter02-74.jpg

图1-30 西门子PLC加感叹号的程序例

有了以上介绍的输入、输出指令,普通的串、并联电路的逻辑就完全可用这些指令处理了。

提示:西门子、三菱PLC无取反输出,但有取反指令。它的先取反,后输出,与这里的OUT NOT效果相同。反之,如果欧姆龙PLC用OUT NOT后,输出给一个暂存器TR,然后再装载此TR,也就相当于执行取反指令(NOT、INV)。取反指令(NOT、INV)的格式为978-7-111-39745-8-Chapter02-75.jpg

但如果一组逻辑条件,有分支输出,该怎么处理?不同的PLC有不同的办法:

欧姆龙PLC用输出暂存器(TR),然后,再装载暂存器解决。三菱、西门子PLC都用进栈、读栈及出栈指令解决。只是这里的栈与前面介绍的栈不是一回事。前面的栈用于装载、与、或及输出等多种处理。即使用助记符编程,也不必编写任何指令。而这里的栈是用于上述分支处理。用助记符编程时,则需编写相应指令。

图1-31所示为这3种PLC解决此问题的梯形图及助记符程序。

978-7-111-39745-8-Chapter02-76.jpg

图1-31 分支输出解决方案

从图1-31a可知,欧姆龙用暂存器TR(有8个,性能高的机型有16个)存(用OUT指令)分支处的数据。而当使用时,再用LD指令调出。

从图1-31b可知,西门子用IPS(进栈)指令,把分支处的数据压进栈。而当使用时,再用IPD(读栈)指令调出。这里最后用的IPP指令,是既读栈,而又清栈。因为在其后的程序已不需这样处理了。

从图1-31c可知,三菱基本与西门子相同。只是它进栈指令叫MPS,而不是叫IPS。读栈指令叫MRD,而不叫IPD。读栈、清栈指令叫MPP,而不叫IPP。

和利时PLC没有这类指令,可采用多节处理,类似图1-31分支处理,它共用了3个节,如图1-32所示。

以下顺便介绍一下西门子及三菱PLC的堆栈,它们与欧姆龙PLC的堆栈略有不同。堆栈指令在将梯形图程序手工转换为助记符程序时,是必须要用的。只是在当今,这个转换完全可由编程软件实现。这个转换具体如下。

西门子PLC堆栈:它的栈顶为上述介绍的结果寄存器R,而第2位即为上述栈P的栈顶。另外,就是它用的操作指令不同。如:

栈装载与(ALD):对堆栈中的第一层和第二层的值进行逻辑与操作结果放入栈顶,并在执行完ALD指令后,堆栈深度减1。

栈装载或(OLD):对堆栈中的第一层和第二层的值进行逻辑或操作结果放入栈顶,并在执行完OLD指令后,堆栈深度减1。

逻辑推入栈(LPS):复制栈顶的值,并将这个值推入栈,而栈底推出,数据丢失。

逻辑读栈(LRD):复制堆栈中的第二个值到栈顶。堆栈没有推入栈或弹出栈操作。但旧的栈顶值被新的复制值取代。

978-7-111-39745-8-Chapter02-77.jpg

图1-32 和利时PLC分支处理

逻辑弹出栈(LPP):弹出栈顶的值,堆栈的第二个值变为新的栈顶值。

三菱逻辑堆栈:它有11层,也是用作中间存储。主要是用于处理如图1-14所示得分支输出。

进栈指令(MPS):把逻辑运算结果入栈,而栈底推出,数据丢失。

读栈指令(MRD):读取栈顶数据用于逻辑运算,栈中数据不变。

出栈指令(MPP):读取栈顶数据用于逻辑运算,并栈中各数据依次上推。

提示:如使用图形图编程,画出梯形图程序就可以了。把梯形图程序转换成助记符程序时,这里暂存器使用或进栈、出栈处理的有关指令使用,都是自动实现的。

6.置位、复位指令

其操作数为位地址,也是一种输出指令。

它与使用设置(锁存)线圈、复位(取消锁存)线圈对应。当结果寄存器R的内容(逻辑条件)为1,则执行本指令。否则不执行,其操作数(即为位)内容不变。执行置位指令,其操作数变为1。执行复位指令,其操作数变为0。这两个指令的梯形图及助记符符号如图1-33所示。

从图1-33可知,欧姆龙、三菱及和利时PLC仅对一个点置位、复位,而西门子PLC置位、复位的点数可设定,图中S、R下设为1,故仅对Q0.0置位、复位。如设为2,则除了Q0.0还有Q0.1,如设为其他,则类推。

978-7-111-39745-8-Chapter02-78.jpg

图1-33 置位、复位指令

欧姆龙PLC还把这两者复合在一起,成为KEEP指令,类似于数字电路的RS触发器。有两个输入端,一为R端,另一为S,分别对操作数置0(复位)与置1(置位)。

虽同样可实现置位、复位,但置位、复位指令可分开置于程序的不同位置,用起来较灵活。而KEEP指令则要依此执行这两个指令,先S后R。

西门子PLC也有类似KEEP那样的指令,RS或SR,其符号如图1-34所示。

978-7-111-39745-8-Chapter02-79.jpg

图1-34 西门子RS、SR指令

RS完全同KEEP,复位优先,R、S端均为1,复位。而SR,为置位优先,R、S端均为1,置位。

置位,复位指令前各分别赋一次值;KEEP、RS(R优先)、SR(S优先)指令之前则要连续赋两次值(要两次使用装载指令)。在梯形图上的表示为方块。置位,复位指令各仅有一个入端,而KEEP、RS、SR要有两个入端。如图1-35所示。

978-7-111-39745-8-Chapter02-80.jpg

图1-35 KEEP、SR指令使用

提示:图1-35a与b两个程序,表面上功能是相同的。但实际是有区别的。若用10.00代替0.01,当00.00 ON时,图1-35b程序可使10.00 ON、OFF按扫描周期交替出现,而图1-35a程序10.00永远不可能ON。

提示:图1-35c和d两个程序道理上是一样的,但对S7-200只允许用图1-35d的画法,图1-35c是错误的,编译通不过。而欧姆龙PLC则允许图1-35c这种画法。说明在图形图表达上各家PLC还是稍有差别的。

和利时PLC没有此指令,但有相关功能块。使用起来也很方便。

7.微分指令

有为上沿微分及下沿微分。

它与使用正转换感应线圈、负转换感应线圈对应,操作数也是位地址。当执行上沿微分指令时,R的内容从OFF(0)变为ON(1),则操作数的内容为1(ON)一个扫描周期;当执行下沿微分指令时,情况相反。R从ON变到OFF,操作数ON一个扫描周期。

有的PLC的微分指令不作为输出指令,而作为中间指令。它可加在一组输入指令之后,加上它,然后再送给输出指令,用起来也很方便。

8.其他位处理指令

如西门子PLC有(#)指令,执行它可把此时的RLO内容写入它的操作数中,并还可在它之后进行相应操作。如图1-36给出了使用这指令后的操作数的逻辑值。

其他PLC厂商的这类指令,与这里介绍的大同小异,就不多介绍了。

978-7-111-39745-8-Chapter02-81.jpg

图1-36 西门子PLC(#)等指令使用