欢迎来到天天文库
浏览记录
ID:33592284
大小:300.56 KB
页数:3页
时间:2019-02-27
《堆栈在plc程序设计中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、万方数据知识问答(6)堆栈在PLC程序设计中的应用摩常初本文介绍了PLc程序设计中堆栈的基本概念,堆栈的工作原理,与堆栈有关的指令及其使用方法以及不同的PLc的堆栈操作的差异。问:什幺是堆栈?答:堆栈由眦中顺序相连的若干个位存储单元组成,采用先进后出的数据存取方式。三菱公司的FX系列眦的堆栈有ll层(见图1),堆栈中的每一层用于存放一个二进制数,相当于一个辅助继电器的映象寄存器。问:堆栈有什幺作用?堆栈主要用于存放用户程序执行过程中的中间数据:(1)处理电路块的串联和电路块的并联时,用来储存一个或多个电路块内部的运算结果。EMl电气时代20013年第9
2、期偿日【哩由触点与线圈傅确知‰与其他输出类指令)组成的多分支电路时,用堆栈来保存分支点的运算结果。问:处理电路块的串联或电路块的并联时,为什幺要使用堆栈?以图2中两个串联电路块的并联为例,为了将它们并联起来,首先需要完成两个串联电路块内部的“与”逻辑运算。执行第一条指令时,取出输入映象寄存器x0中的二进制数,存放在图l的运算结果寄存器中。执行第二条指令时,取出x1的值并与运算结果寄存器中的数相“与”,运算结果存人运算结果寄存器。执行第3条指令时应取出x2的值并放入运算结果寄存器,但是这一操作将会破坏前两条指令的运算结果。为了解决这一问题,系统程序自动地
3、将前两条指令的运算结果存入堆栈,即将堆栈中的数据依次向下移动一格(最低位的数据丢失),然后将运算结果寄存器中的数据写人堆栈的第一层(称为栈顶),这样前两条指令的运算结果便被保存在堆栈的栈顶。完成上述操作后,再将X2的值传送到运算结果寄存器。执行完第4条指令后,两块串联电路的。与。运算结果分别存放在堆栈的栈顶和运算结果寄存器中。执行电路块并联指令ORB时,将栈顶和运算结果寄存器中的二进制数相。或”,运算结果存入运算结果寄存器,堆栈中的数据依次上移一格。经过一上一下的移位,堆栈中原有的数据复原。问将电路块的串联或并联电路旋写寿指令表时应注意什幺问题,糯塞:
4、万方数据^∞ANDX30UTYlM”唧bI℃裟嚣ANDX4OUTY2图4二层栈电路的起始触点应使用LD(常开触点)或LDI(常闭触点)指令。设一块独立电路中需串联或并联的电路块的个数(或LD和LDI指令的条数)为n,应使用n.1条电路块串联指令(ANB)和电路块并联指令(0RB)将它们串联或并联。在一块独立电路中同时保存在堆栈中的数据的个数不能大于堆栈的层数。在指令表中.ORB或ANB连接它上面靠近它的两块已经连接好的电路。单个常开触点并联时应使用OR指令,有的初学者对单个触点的并联使用LD和0RB这两条指令,虽然不算错误,但是要多用一条指令。单个触点
5、的串联也应按同样的原则处理。问:怎样用堆栈操作指令来处理合有输出粪指令的分支电路?MPS(Push),MRD(Read),MPP(Pop)指令分别是进栈、读栈和出栈指令,它们用于多重输出电路(见图3)。MPs指令用于储存多重输出电路中分支处的逻辑运算结果,以便以后处理有线圈或输出指令的支路时调用该分支处的运算结果。以图3为例,三个线圈对应的输出指令都要使用x0和x5的并联电路的“或”运算结果,如果不用堆栈来保存该数据,在执行与第一个线圈串联的x1的触点对应的ANDxl后,前两条指令的运算结果将会丢失。所以在第二条指令之后,应使用进栈指令(MPs)将“或
6、”运算的结果保存在堆栈的栈顶,堆栈中原来的数据依次向下一层推移。因为存放在栈顶的数据要多次使用,在执行完第一个线圈对应的0uT指令之后,应使用读栈指令MRD,读取存储在栈顶的电路中分支点处的运算结果,将x2的触点强制性地连接在该点,执行读栈指令后堆栈内的数据不会上移或下移。在处理最后一条输出分支电路时,应使用出栈指令MPP。该指令弹出(调用并去掉)存储在栈顶的电路中分支点处的运算结果。首先将x3的触点连接在该点,然后从堆栈中去掉该点的运算结果。使用MPP指令时,堆栈中各层的数据依次向上移动一层,栈顶的教据在送人运算结层分电路后,应使用进栈指令,保存分支
7、点的运算结果。在处理中间的分支电路时,应使用读栈指令,读取存放在栈顶中的数据。在处理最后一条分支电路时,一定要使用出栈指令,使执行进栈指令之前堆栈中原有的数据复原。问:什幺是堆栈的先进后出的数据存取方式?答:因为堆栈中的教据是从栈顶“压人”和从栈顶“弹出”的,进栈时栈内原有的数据依次向下移动一层,出栈时栈内的数据依次向上移动一层,所以先压入的数据后弹出堆栈。这种数据存取方式有些类似干枪支的弹夹中子弹的进出方式。弹夹底部的弹簧将子弹往上顶。从弹夹的人口(顶部)压入一颗子弹,原来的子弹依次向下移动。取出(或射出)弹夹中最上面的子弹后,F面的子弹依次上移。显
8、然,子弹的进出方式也是先进后出的。问:堆栈为什幺要采用先进后出的数据存取方式?在图4的两级分支
此文档下载收益归作者所有