1、 基本指令(三)S7-200可编程序控制器教学内容lLPS:进栈指令。lLRD:读栈指令。lLPP:出栈指令。教学目标l价值目标:培养学生探索问题 的本质特征的科学态度l知识目标:了解逻辑堆栈操作指令的基本功能l能力目标:熟练运用堆栈指令进行梯形图与 指令表的互换 教学难点堆栈的原理及正确的运用 堆栈操作指令 又称多分支回路指令多分支回路指令 S7-200CN系列PLC使用一个9层堆栈来处理所有逻辑操作。堆栈是一组能够存储和取出数据的暂存单元,其特点是“先进后出”。每一次进行入栈操作,新值放入栈顶,栈底值丢失;每一次进行出栈操作,栈顶值出栈,第2级堆栈内容上升到栈顶,栈底自动生成随机数。逻辑堆
2、栈指令主要用来完成对触点进行复杂的连接堆栈操作指令 LPS(入栈)指令:LPS指令把栈顶值复制后压入堆栈,栈中原来数据依次下移一层,栈底值压出丢失。LRD(读栈)指令:LRD指令把逻辑堆栈第二层的值复制到栈顶,2-9层数据不变,堆栈没有压入和弹出。但原栈顶的值丢失。LPP(出栈)指令:LPP指令把堆栈弹出一级,原第二级的值变为新的栈顶值,原栈顶数据从栈内丢失。说明:逻辑堆栈指令可以嵌套使用,最多为9层。为保证程序地址指针不发生错误,入栈指令LPS和出栈指令LPP必须成对使用,最后一次读栈操作应使用出栈指令LPP。下图为逻辑堆栈指令的简单应用。堆栈操作指令123456789堆栈使用示意图:堆栈使
3、用示意图:LPS进栈进栈第一次使第一次使用用LPSLPS指令指令1堆栈操作指令123456789堆栈使用示意图:堆栈使用示意图:LPS进栈进栈第二次使第二次使用用LPSLPS指令指令1堆栈操作指令123456789堆栈使用示意图:堆栈使用示意图:LPS进栈进栈第二次使第二次使用用LPSLPS指令指令12将第一次内容将第一次内容压入第压入第2层层堆栈操作指令123456789堆栈使用示意图:堆栈使用示意图:LPS进栈进栈第三次使第三次使用用LPSLPS指令指令123将第二次内容将第二次内容压入第压入第2层层又将第一次内又将第一次内容从第容从第2层再层再压入第压入第3层层堆栈操作指令堆栈操作指令说
4、明:2、使用LRD,是读出最上端所存的最新数 据的专用指令,栈内的数据不发生移 动。123456789堆栈使用示意图:堆栈使用示意图:LRD读栈读栈123读取最上层的内读取最上层的内容容,堆栈中的内堆栈中的内容不发生变化容不发生变化堆栈操作指令 堆栈操作指令说明:3、使用LPP指令,各数据按顺序向上 移动,后进的先出,将最上端的 数据读出,同该数据就从栈中消 失。123456789堆栈使用示意图:堆栈使用示意图:LPP出栈出栈123第一次使用LPP堆栈操作指令123456789堆栈操作指令堆栈使用示意图:堆栈使用示意图:LPP出栈出栈12第一次使用LPP第二层的内容上移到第一层第三层的内容上移
5、到第二层说明:4、由于堆栈操作有其独特的顺序性,因此要求堆栈的用法要求必须正确无误。堆栈只堆栈只要保证入栈次数和出栈次数相等要保证入栈次数和出栈次数相等就不会出现大的问题,读栈不影响堆栈的指针的变化。5、这些指令为独立指令,不带任何软元件编号。堆栈操作指令 例1:一层堆栈 指令表1LD I0.02A I0.1堆栈操作指令I0.0 I0.1 I0.2Q0.0Q0.1I0.3 I0.4Q0.2I0.5Q0.3I1.0 Q0.4Q0.5I0.6 I0.7Q0.6I1.2Q0.7I1.1分支点开分支点开始,使用始,使用LPSLPS指令指令3 LPS入栈 例1:一层堆栈 指令表1LD I0.02A I0
6、.13 LPS出栈4 A I0.25 Q0.06 LPP7 Q0.1I0.0 I0.1 I0.2Q0.0Q0.1I0.3 I0.4Q0.2I0.5Q0.3I1.0 Q0.4Q0.5I0.6 I0.7Q0.6I1.2Q0.7I1.1使用使用LPPLPP指令指令堆栈操作指令 例1:一层堆栈 指令表1LD I0.02A I0.13 LPS4 A I0.25 Q0.06 LPP7 Q0.18 LD I0.3堆栈操作指令I0.0 I0.1 I0.2Q0.0Q0.1I0.3 I0.4Q0.2I0.5Q0.3I1.0 Q0.4Q0.5I0.6 I0.7Q0.6I1.2Q0.7I1.1LPS9 LPS10 A
7、 I0.411 Q0.2LPP12 LPP13 A I0.514 Q0.3 例1:一层堆栈 指令表1LD I0.02A I0.13 LPS4 A I0.25 Q0.06 LPP7 Q0.18 LD I0.39 LPS10 A I0.411 Q0.213 A I0.514 Q0.312 LPPI0.0 I0.1 I0.2Q0.0Q0.1I0.3 I0.4Q0.2I0.5Q0.3I1.0 Q0.4Q0.5I0.6 I0.7Q0.6I1.2Q0.7I1.1LPS15 LD I0.616 LPS17 A I0.718 Q0.4堆栈操作指令 例1:一层堆栈 指令表1LD I0.02A I0.13 LPS
8、4 A I0.25 Q0.06 LPP7 Q0.18 LD I0.39 LPS10 A I0.411 Q0.213 A I0.514 Q0.312 LPP15 LD I0.616 LPS17 A I0.718 Q0.4I0.0 I0.1 I0.2Q0.0Q0.1I0.3 I0.4Q0.2I0.5Q0.3I1.0 Q0.4Q0.5I0.6 I0.7Q0.6I1.2Q0.7I1.1LRDLRDLPS19 LRD20 A I1.021 Q0.5读栈读栈22 LRD23 A Q1.124 Q0.6读栈读栈LPP25 LPP26 A I1.227 Q0.7堆栈操作指令 说明1:入栈的目的就是要将当前的逻
9、辑运算结果暂时保存起来,然后就像没有入栈指令一样完成本行指令。再在入栈点上将逻辑运算结果读出来,进行下一重输出行。如果是最后一次使用栈内结果,就必须是出栈指令LPP,若不是最后一次使用,则应该用读栈指令LRD,去除结果后参加运算。堆栈操作指令 说明2:栈操作指令LPS、LRD、LPP在使用中可以这样理解:除了对分支电路进行操作外,在程序中没有其它作用。在编写程序时,可以分两部分来分析:一方面,要保证栈操作的正确性,入栈、出栈要配对使用并且使用正确;另一方面,在阅读程序时可以不看栈操作指令,按梯形图掌握程序的正确性。堆栈操作指令 例2:二层堆栈 指令表1 LD I0.1堆栈操作指令M1.1 M1
10、.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4 例2:二层堆栈LPS 指令表1 LD I0.1堆栈操作指令M1.1 M1.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4 例2:二层堆栈 指令表1 LD I0.12 LPS第一层入栈3 A I0.2堆栈操作指令M1.1 M1.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4LPS LPS 例2:二层堆栈 指令表1 LD I0.12 LPS第一层入栈3 A I0.24 LPS第二层入栈5 A I0.36 Q0.07 LPP第二层出栈8 AN M1.09
11、Q0.1堆栈操作指令M1.1 M1.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4LPS LPPLPS 例2:二层堆栈 指令表1 LD I0.12 LPS3 A I0.24 LPS5 A I0.36 Q0.07 LPP8 AN M1.09 Q0.110 LPP第二层出栈11 A M1.112 LPS第一层入栈13 A M1.214 Q0.215 LPP第一层出栈16 A I0.417 Q0.318MEND堆栈操作指令M1.1 M1.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4LPSLPP LPSLPP 例2:二层堆栈 指令表1
12、LD I0.12 LPS3 A I0.24 LPS5 A I0.36 Q0.07 LPP8 AN M1.09 Q0.110 LPP11 A M1.112 LPS13 A M1.214 Q0.215 LPP16 A I0.417 Q0.318MEND堆栈操作指令M1.1 M1.2M1.0I0.1 I0.2 I0.3Q0.0Q0.1Q0.2Q0.3I0.4 例2:二层堆栈说明:确定堆栈的层数,只要看一个阶梯上有几条支路就是几层堆栈。例题中第二层出栈后就不是多层栈了。多重输出只要顺序不错,连续入栈、出栈的次数最多可达9层。堆栈操作指令 SB1SB2 KM1 SB3 KM2 SB4 KM3KM1 KM
13、2KM1 KM2 KM3 I/O分配表SB1 停止按钮 I0.0SB2 启动按钮1 I0.1SB3 启动按钮2 I0.2SB4 启动按钮3 I0.3KM1 接触器 Q0.0KM2 接触器 Q0.1KM3 接触器 Q0.2例3:练习堆栈操作指令 SB1SB2 KM1 SB3 KM2 SB4 KM3KM1 KM2KM1 KM2 KM3接线图接线图例3:练习堆栈操作指令SB1 SB2 SB3 SB4M I0.0 I0.1 I0.2 I0.3L1 Q0.0 Q0.1 Q0.2FUKM1 KM2 KM3220VPLC SB1SB2 KM1 SB3 KM2 SB4 KM3KM1 KM2KM1 KM2 KM3梯形图梯形图I0.0I0.1Q0.0I0.2Q0.0Q0.1I0.3Q0.1Q0.0Q0.1Q0.2Q0.2例3:练习LPSLPSLPPLPPLRDLRD堆栈操作指令 祝您成功!