4.3 逻辑堆栈指令
4.3.1 堆栈的基本概念
S7-200PLC有一个9位的堆栈,用于处理所有逻辑操作,称为逻辑堆栈。栈顶用来存放逻辑运算的结果,下面8位用来存储中间运算结果。它与计算机中的堆栈结构相同,其特点是“先进后出”。每一次进行入栈操作,将新值放入栈顶,栈底值丢失;每一次出栈操作,将栈顶值弹出,栈底补进随机数。S7-200PLC的逻辑堆栈指令主要用来完成触点复杂逻辑连接的编程。
4.3.2 栈装载“或”指令和栈装载“与”指令
1.栈装载“或”指令(OLD)
两个及两个以上触点串联形成的支路称为串联电路块,串联电路块的并联连接指令为OLD。因为触点的串并联指令只能将单个触点与别的触点串并联,而两个及两个以上触点串联形成的支路与别的触点并联要使用OLD。
OLD(or load):栈装载“或”指令,用于将串联电路块与它上面电路的并联连接。图4-14所示的为OLD指令的用法。
图4-14 OLD指令的使用
在图4-14所示梯形图中,由I0.1和M0.1的触点组成的串联电路块与它上面电路的并联时,首先需要完成两个串联电路块的“与”运算,运算结果S0=I0.0·M0.0存放在栈顶即堆栈第1层;然后再将运算结果压入栈顶,则S0被推到堆栈的第2层。执行OLD指令,将堆栈第1层和第2层的值进行逻辑“或”操作,即将两个串联电路块并联连接,并将运算结果S2=S0+S1置于栈顶,第3~9层的数据依次向上移动1位。
使用说明如下。
(1)除了在网络块逻辑运算开始使用LD和LDN指令外,在串联电路块的也要使用LD和LDN指令。
(2)每完成一次串联电路块的并联连接都要使用OLD指令。
(3)OLD指令无操作数,相当于电路中的连接导线。
2.栈装载“与”指令(ALD)
两个及两个以上支路并联形成的电路称为并联电路块,并联电路块的串联连接指令为ALD。
ALD(and load):栈装载“与”指令,用于将并联电路块与它前面电路的串联连接。
图4-15所示的为ALD指令的用法。
图4-15 ALD指令的使用
每个块电路在进行逻辑运算后,把结果存放在堆栈栈顶。执行ALD指令,实质上是将逻辑堆栈第1层和第2层的值进行逻辑“与”操作,结果置于栈顶,并将堆栈第3~9层的数据依次向上移动1位。
使用说明如下。
(1)在并联电路块的开始要使用LD和LDN指令。
(2)每完成一次并联电路块的串联连接都要使用ALD指令。
(3)ALD指令无操作数,相当于电路中的连接导线。
4.3.3 逻辑入栈、读栈和出栈指令
逻辑入栈LPS、读栈LRD和出栈LPP这三条指令也称为多重输出指令,主要用于一些复杂逻辑的输出处理。
1.逻辑入栈指令(logic push,LPS)
LPS指令(分支电路开始指令)用于将栈顶值复制后压入堆栈,栈底值被压出丢失。堆栈操作的过程如图4-16所示。
在梯形图的分支结构中,该指令用于生成一条新的母线,左侧为主控逻辑块,右侧为新的从逻辑块,第一个完整从逻辑行由此开始。
2.逻辑读栈指令(logic read,LRD)
LRD指令用于把逻辑堆栈第2层的值复制到栈顶,第2~9层的数据不变,但原栈顶值消失。
3.逻辑出栈指令(logic pop,LPP)
LPP指令(分支电路结束指令)用于把堆栈中各层的数据向上移动一层,原第2层的值变为新的栈顶值。
在梯形图分支结构中,LPP用于LPS产生的新母线右侧的最后一个从逻辑块编程,在读取完离它最近的压入堆栈内容的同时,将生成的一条新母线进行恢复。应注意,LPS和LPP必须配对使用。
图4-16 多重输出指令的堆栈操作
使用说明如下。
(1)由于S7-200PLC只有一个9位的堆栈空间,因此,LPS和LPP指令对连续使用时应少于9次。
(2)LPS和LPP指令必须成对使用,它们之间可以使用LRD指令。
(3)LPS、LRD和LPP指令无操作数。
上述三条指令的用法如图4-17和图4-18所示。
图4-17 单层堆栈使用举例
图4-18 多层堆栈使用举例
图4-17所示的是一层堆栈使用的例子,每一条LPS指令必须有一条对应的LPP指令,中间的支路都用LRD指令,处理最后一条支路时必须使用LPP指令。
图4-18所示的是多层堆栈使用的例子,第1条LPS指令将A点的运算结果保存到堆栈的第2层,第2条LPS指令将B点的运算结果保存到堆栈的第2层,A点的运算结果则被压到堆栈的第3层。同理,当第3条LPS指令将C点的运算结果保存到堆栈的第2层时,A点的运算结果则被压到堆栈的第4层。第1条LPP指令将堆栈第2层C点的运算结果上移到栈顶,第4层中A点的运算结果上移到第3层,以此类推,最后一条LPS指令将A点的运算结果上移到栈顶。因此,堆栈“先进后出”的数据存取方式满足了多层输出电路保存和取用数据的顺序要求。
图4-19 LDS指令的使用
4.3.4 装入堆栈指令
装入堆栈指令(load stack,LDS)用于复制堆栈中的第n层的值到栈顶。原栈中各级栈的值依次向下压一层,栈底的值被压出丢失。
指令格式:
LDS n;n为1~8的整数
例如,执行指令“LDS 3”后,堆栈发生变化的情况如图4-19所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。