首页 理论教育 用户程序堆栈的使用方法

用户程序堆栈的使用方法

时间:2023-06-29 理论教育 版权反馈
【摘要】:堆栈的这种“先入后出”的存取规则刚好满足块的调用要求,因此在程序设计中得到了普遍的应用。下面介绍STEP7中3种不同的堆栈。CPU分配给当前正在处理的块的临时变量的存储器容量是有限的,这一存储区的大小与CPU的型号有关。在多重调用时,堆栈可以保存参与嵌套调用的几个块的信息。STEP7中可使用的B堆栈的大小是有限的,这与CPU的型号有关。CPU在STOP模式时,可以在STEP7中显示I堆栈中保存的数据,用户可以由此找出使CPU进入STOP模式的原因。

用户程序堆栈的使用方法

堆栈(见图6-2)是CPU中的一块特殊存储区,它采用“先入后出”的规则存入和取出数据。堆栈最上面的存储单元称为栈顶,要保存的数据从栈顶压入堆栈时,栈中原有的数据依次向下移动一个位置,最下面一个存储单元的数据丢失。同理,在取出栈顶的一个数据后,栈中所有的数据依次向上移动一个位置。堆栈的这种“先入后出”的存取规则刚好满足块的调用要求,因此在程序设计中得到了普遍的应用。

下面介绍STEP7中3种不同的堆栈。

1.局域数据堆栈(L)

局域数据堆栈用来存储块的局域数据区的临时变量、组织块的起动信息、块传递参数的信息和梯形图程序的中间结果,局域数据可以按位、字节、字和双字来存取,例如L0.0、LB9、LW4和LD52。

各逻辑块均有自己的局域变量表,局域变量仅在它被创建的逻辑块中有效。对组织块编程时,可以声明临时变量(TEMP)。临时变量仅在块被执行的时候使用,块执行完后将被别的数据覆盖。

978-7-111-46052-7-Chapter06-3.jpg

图6-2 堆栈操作

在首次访问局域数据堆栈时,应对局域数据初始化。每个组织块需要2OB的局域数据来存储它的起动信息。

CPU分配给当前正在处理的块的临时变量(即局域数据)的存储器容量是有限的,这一存储区(即局域堆栈)的大小与CPU的型号有关。CPU给每一优先级分配了相同数量的局域数据区,这样可以保证不同优先级的OB都有它们可以使用的局域数据空间。

图6-3中的FB1调用功能FC2,FC2的执行被组织块OB81中断。图6-3中给出了局域数据堆栈中局域数据的存放情况。

在局域数据堆栈中,并非所有的优先级都需要相同数量的存储区。通过在STEP7设置参数,可以给S7-400 CPU和CPU 318的每一优先级指定不同大小的局域数据区。其余的S7-300 CPU每一优先级的局域数据区的大小是固定的。

2.块堆栈(B堆栈)

如果一个块的处理因为调用另外一个块,或者被更高优先级的块中止,或者被错误的服务中止,CPU将在块堆栈中存储以下信息:(www.xing528.com)

1)被中断的块的类型(OB、FB、FC、SFB、SFC)、编号、优先级和返回地址

2)从DB和DI寄存器中获得的块被中断时,打开的共享数据块和背景数据块的编号(即块存储器DB、DI被中断前的内容)。

978-7-111-46052-7-Chapter06-4.jpg

图6-3 块堆栈与局域数据堆栈

3)局域数据堆栈的指针(被中断块的L堆栈地址)。

利用这些数据,可以在中断它的任务处理完后恢复被中断的块的处理。在多重调用时,堆栈可以保存参与嵌套调用的几个块的信息。

CPU处于STOP模式时,可以在STEP7中显示B堆栈中保存的在进入STOP模式时各种处理完的块,在B堆栈中,块按照它们被处理的顺序排列。

STEP7中可使用的B堆栈的大小是有限的,这与CPU的型号有关。

3.中断堆栈(I堆栈)

如果程序的执行被优先级更高的OB中断,操作系统将保存下述寄存器的内容:当前累加器和地址寄存器的内容、数据块寄存器DB和DI的内容、局域数据的指针、状态字、MCR(主控继电器)寄存器和B堆栈的指针。

新的OB执行完后,操作系统从中断堆栈中读取信息,从被中断块的被中断的地方开始继续执行程序。

CPU在STOP模式时,可以在STEP7中显示I堆栈中保存的数据,用户可以由此找出使CPU进入STOP模式的原因。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈