堆栈为什么要采用先进后出的数据存取方式?
因为堆栈中的数据是从栈顶“压人”和从栈顶“弹出”的,进栈时栈内原有的数据依次向下移动一层,出栈时栈内的数据依次向上移动一层,所以先压入的数据从堆栈中后弹出。
这种数据存取方式有些类似于枪支的弹夹中子弹的进出方式。弹夹底部的弹簧将子弹往上顶。从弹夹的入口(顶部)压人一颗子弹,原来的子弹依次向下移动。取出(或射出)弹夹中最上面的子弹后,下面的子弹依次上移。显然,子弹进出弹夹的方式也是先进后出的。
在图3-16的两级分支电路中,第一条进栈指令MPS将分支点A点处的运算结果保存在堆栈的栈顶,第二条MPS指令将原来在栈顶的A点处的运算结果推移到堆栈的第2层,然后将B点处的运算结果保存在栈顶。执行第一条出栈指令MPP时,将栈顶保存的B点处的运算结果传送到运算结果寄存器,供Y1的线圈对应的输出电路的逻辑运算使用,该输出电路被连接到第二个分支点B点处。同时堆栈中各层的数据依次向上移动一层,原来在第二层的A点的运算结果被移到栈顶。在执行第二条出栈指令MPP时,将栈顶中A点的运算结果传送到运算结果寄存器,供Y2的线圈对应的输出电路的逻辑运算使用,该输出电路被连接到第一个分支点A点处。同时堆栈中的数据依次上移动一层后恢复原状。
在图3-17所示的电路中,有3块电路需要串并联。执行完前6条指令后,这3块电路内部的运算结果A、B和C分别被存储在堆栈的第2层、第1层和运算结果寄存器中。执行电路块并联指令ORB后,“或”运算B+C的运算结果D存入运算结果寄存器,堆栈中的数据依次上移一层,原来在第2层的数据A移到第一层。执行电路块串联指令ANB后,“与”运算D-A的运算结果存入运算结果寄存器,堆栈中的数据依次向上移动一层后恢复原状。
从上面两个例子可以看出,堆栈的“先进后出”的数据存取方式刚好可以满足多重分支电路和电路块串、并联运算中数据的保存和使用的顺序,因此堆栈在PLC的逻辑运算中得到了广泛的应用。
![](http://www.591dg.com/uploads/allimg/170312/36-1F3121P542O8.jpg)
![](http://www.591dg.com/uploads/allimg/170312/36-1F3121P6423V.jpg)
相关推荐
最新更新
推荐阅读
猜你喜欢
电工推荐
![电工技术基础_电工基础知识_电工之家-电工学习网](/skin/images/guanzhu.jpg)