西门子6RA70直流运行励磁板无输出维修
西门子S7-300/400用户程序的中断堆栈(Ⅰ堆栈)
如果程序的执行被优先级更高的OB中断,操作系统将保存下述寄存器的内容:当前的累加器和地址寄存器的内容、数据块寄存器DB和DI的内容、局部数据的指针、状态字、MCR(主控继电器)寄存器和块堆栈的指针。
新的OB执行完后,操作系统读取中断堆栈中的信息,从被中断的块被中断的地方开始继续执行程序。
CPU在STOP模式时,可以用STEP 7在模块信息中查看中断堆栈保存的数据,由此找出使CPU进入STOP模式的原因。
如果一个块的处理因为调用另外一个块,或者被更高优先级的OB块中止,CPU将在块堆栈中存储以下信息:
1)被中断的块的类型( OB、FB、FC、SFB、SFC)、编号和返回地址。
2)从DB和DI寄存器中获得的块被中断时打开的共享数据块和背景数据块的编号。
3)局部数据堆栈的指针。
利用这些数据,可以在中断它的任务处理完后恢复被中断的块的处理。在多重调用时,堆栈可以保存参与嵌套调用的几个块的信息。
CPU处于STOP模式时,可以用STEP 7查看块堆栈中保存的进入STOP模式时没有处理完的块,在块堆栈中,块按照它们被处理的顺序排列(见图6-2)。
每个中断优先级对应的块堆栈可以储存的数据的字节数与CPU的型号有关。
图6-2 块堆栈与局部数据堆栈
各逻辑块都有它的局部变量(L)存储区,局部变量只在它被创建的块中有效,全局变量与局部变量如表6-2所示。
如果在逻辑块中只使用局部变量,不使用地址或全局符号,不作任何改动,就可以将子程序移植到别的项目中去。局部数据堆栈用来储存块的局部数据区的临时变量、组织块的启动信息、块传递参数的信息和梯形图程序的中间结果。局部数据可以按位、字节、字和双字来存取,例如L0.0、LB9、LW4和LD52。
各逻辑块均有自己的变量声明表,局部变量仅在它被创建的逻辑块中有效。临时变量仅在块被执行时使用,块执行完后将被别的数据覆盖。每个组织块用20B的临时局部数据来存储它的起动信息。
CPU分配给当前正在处理的块的临时局部变量的存储器容量是有限的,这一存储区(即局部堆栈)的大小与CPU的型号有关。CPU给每一优先级分配了局部数据区,这样可以保证不同优先级的OB都有它们可以使用的局部数据空间。
表6-2 全局变量与局部变量
全局变量(在整个程序中使用) | 局部变量(只能在一个块中使用) |
PI/PQ、I/Q、M/T/C、共享数据块 | 临时变量:对应的块执行完后被删 除,临时存储在L堆栈中,可以在逻辑 块中使用 | 静态变量:对应的块执行完后保 留在背景数据块中,只能用于FB 和 SFB |
图6-2中的OB1调用功能FC 2,FC 2的执行被组织块OB81中断,图中给出了局部数据堆栈中局部数据的存放情况。
在局部数据堆栈中,并非所有的优先级都需要相同数量的存储区。通过在STEP 7中设置参数,可以给S7-400 CPU的每一优先级指定不同大小的局部数据区。S7-300 CPU每一优先级的局部数据区的大小是固定的。
图6-2 块堆栈与局部数据堆栈
堆栈(见图6-1)是CPU中的一块特殊的存储区,它采用“先入后出”的规则存入和取出数据。堆栈Z上面的存储单元称为栈顶,要保存的数据从栈顶“压入”堆栈时,堆栈中原有的数据依次向下移动一个位置,Z下面的存储单元的数据丢失。在取出栈顶的数据后,堆栈中所有的数据依次向上移动一个位置。堆栈的这种“先入后出”的存取顺序,刚好满足块调用时(包括中断处理的块调用)存储和取出数据的要求,因此堆栈在计算机的程序设计中得到了广泛的应用。下面介绍STEP 7中3种不同的堆栈。
PLC中的程序分为操作系统和用户程序,操作系统用来实现与特定的控制任务无关的功能,处理PLC的启动、刷新过程映像输入/输出表、调用用户程序、处理中断和错误、管理存储区和处理通信等。用户程序包含处理用户特定的自动化任务所需要的所有功能。
STEP 7将用户编写的程序和程序所需的数据放置在块中,使单个的程序部件标准化。通过块与块之间类似子程序的调用,使用户程序结构化,可以简化程序组织,使程序易于修改、查错和调试。块结构显著地增加了PLC程序的组织透明性、可理解性和易维护性。各种块的简要说明如表6-1所示,OB、FB、FC、SFB和SFC都包含部分程序,统称为逻辑块。
1.组织块
组织块(OB)是操作系统与用户程序的接口,由操作系统调用,用于控制扫描循环和中断程序的执行、PLC的启动和错误处理等,有的CPU只能使用部分组织块。
(1) OB1
OB1用于循环处理,是用户程序中的主程序。操作系统在每一次循环中调用一次OB1。
(2)事件中断处理
如果出现一个中断事件,例如时间日期中断、硬件中断和错误处理中断等,当前正在执行的块在当前语句执行完后被停止执行(被中断),操作系统将会调用一个分配给该事件的组织块。该组织块执行完后,被中断的块将从断点处继续执行。
这意味着部分用户程序可以不必在每次循环中处理,而是在需要时才被及时地处理。处理中断事件的程序放在该事件驱动的OB中。
(3)中断的优先级
OB按触发事件分成几个级别,这些级别有不同的优先级,高优先级的OB可以中断低优先级的OB。当OB启动时,用它的临时局部变量提供触发它的初始化启动事件的详细信息,这些信息可以在用户程序中使用。
2.临时局部数据
生成功能和功能块时可以声明临时局部数据。这些数据是临时的,退出逻辑块时不保留临时局部数据。它们又是局部( Local)数据,只能在生成它们的逻辑块内使用。CPU按优先级划分局部数据区,同一优先级的块共用一片局部数据区。可以用STEP 7改变S7-400每个优先级的局部数据区的大小。
除了临时局部数据外,所有的逻辑块都可以使用共享数据块中的共享数据。
3.功能
功能(FC)是用户编写的没有固定的存储区的块,其临时变量存储在局部数据堆栈中,功能执行结束后,这些数据就丢失了。可以用共享数据区来存储那些在功能执行结束后需要保存的数据,不能为功能的局部数据分配初始值。
4.功能块
功能块(FB)是用户编写的有自己的存储区(背景数据块)的块,功能块的输入、输出变量和静态变量f STAT)存放在指定的背景数据块(DI)中,临时变量存储在局部数据堆栈中。功能块执行完后,背景数据块中的数据不会丢失,但是不会保存局部数据堆栈中的数据。
5.数据块
数据块(DB)是用于存放执行用户程序时所需的变量数据的数据区。与逻辑块不同,数据块没有STEP 7的指令,STEP 7按数据生成的顺序自动地为数据块中的变量分配地址。数据块分为共享数据块(Share Block)和背景数据块(Instance Data Block)。
CPU可以同时打开一个共享数据块和一个背景数据块。访问被打开的数据块中的数据时不用指定数据块的编号。
6.系统功能块与系统功能
系统功能块( SFB)和系统功能(SFC)是集成在S7 CPU的操作系统中,预先编好程序的逻辑块,可以在用户程序中调用这些块,但是用户不能修改它们。它们作为操作系统的一部分,不占用程序空间。SFB有存储功能,其变量保存在指定给它的背景数据块中,SFC没有存储功能。
7.程序库
程序编辑器左边窗口的“库”文件夹中的程序库(见图6-5)用来存放可以多次使用的程序部件,其中的子文件夹“Standard Library”(标准库)是STEP 7标准软件包提供的标准程序库,它由以下子文件夹组成:
1) System Function Blocks:包括系统功能块(SFB)和系统功能(SFC)。
2) S5-S7 Converting Blocks:用于转换STEP 5程序的块。
3) IEC Function Blocks:处理时间和日期信息、比较操作、字符串处理与选择值和Z小值等。
4) Organization Blocks:组织块。
5) PID Control Blocks:PID控制块。
6) Communication Blocks:用于通信的块。
7) TI-S7 Converting Blocks(TI-S7转换块):一般用途的标准功能。
8) Miscellaneous Blocks(其他块),例如用于时间标记和实时钟同步的块。
“库”文件夹中还有其他程序库,例如“SIMATIC_NET_CP”文件夹中的块用于通信处理器(CP)的编程,文件夹“Redundant IO( V1)”中的块用于冗余控制系统,文件夹“stdlibs”与“Standard Library”的某些子文件夹的内容重复。
用户安装可选软件包后,将会增加其他程序库。例如安装S7 Graph后将增加Graph 7库。
西门子6RA70直流运行励磁板无输出维修