首页 理论教育 S7程序的结构与调用层次分析

S7程序的结构与调用层次分析

时间:2023-06-23 理论教育 版权反馈
【摘要】:S7程序结构是用户程序内块的调用层级体系、所使用块及其嵌套等级的框架。在项目根目录下直接插入S7程序的程序块文件夹,并在其中创建程序。因此,每个程序块是用户程序的独立部分。一旦被调用的块执行结束其指令,参与调用的块返回,继续执行其程序指令。图6-2 S7程序结构2.用户程序结构STEP 7支持线性化程序结构和结构化程序结构。

S7程序的结构与调用层次分析

S7程序(用户程序)由各种可用于构造程序的块组成。块是程序的独立部分,用于执行特定的功能。S7程序结构是用户程序内块的调用层级体系、所使用块及其嵌套等级的框架。用户程序在已建立的项目中创建,并在逻辑块内以一个或多个程序块的形式生成程序的线性化、结构化组织结构,每个程序块的最小单元是程序段(Network),其中,包含指令、变量声明及数据。S7程序结构如图6-2所示。

1.S7程序的建立

在STEP 7中创建新的S7程序,必须首先在项目管理器中生成一个项目,然后,用下列方法建立S7程序文件夹。

(1)在项目根目录下直接插入S7程序的程序块(OB1、FB、FC、DB等)文件夹,并在其中创建程序。

(2)项目必须至少包含一个S7PLC工作站。在CPU下面会自动插入S7程序块文件夹。

(3)S7程序保存为用户程序块,用户程序中的块使用各自的编辑窗口进行编辑。在用户程序中使用全局符号,应当预先在变量表中分配相应的标识符和绝对地址

978-7-111-37326-1-Chapter06-3.jpg

图6-2 S7程序结构

2.用户程序结构

STEP 7支持线性化程序结构和结构化程序结构。因此,用户编制程序的方法也有线性化编程和结构化编程2种方法,可以根据生产过程工艺要求选择最适合的程序设计方法。线性化编程就是在OB1中线性设计处理小型自动化任务的程序。线性化程序按顺序逐条执行用户程序的所有指令。仅适应对简单程序的编程。结构化编程就是将复杂自动化任务分割成与过程工艺功能相对应或可重复使用的子任务,这些子任务在用户程序中以程序块(FB、FC、DB)来表示。因此,每个程序块是用户程序的独立部分。循环程序组织块OB1通过调用这些程序块、重复利用全局数据块来完成整个自动化控制任务。线性化程序结构和结构化程序结构如图6-3所示。

图6-3a中的程序循环组织块OB1包含整个用户程序。图6-3b中的程序循环组织块OB1依次调用和执行所定义的子任务。

3.块调用

用户程序中的程序块是用户程序的组成部分,要执行用户程序中的块,必须通过其他块对它们进行调用。当一个块调用另一个块时,将执行被调用块的操作。只有完成被调用块的执行后,才会继续执行调用块,并继续执行块调用后的操作。块调用的顺序和嵌套称为调用层级(体系)。可嵌套的块数目(嵌套深度)可用的嵌套深度取决于CPU型号。如果嵌套太深(嵌套层次过多),则本地数据堆栈可能上溢。调用结构描述了S7程序中块的调用层级。当程序调用另一个块时,执行被调用的块的指令。一旦被调用的块执行结束其指令,参与调用的块返回,继续执行其程序指令。用户程序中块调用的顺序如图6-4所示。在一个执行周期内的块调用顺序和嵌套深度示例如图6-5所示。

978-7-111-37326-1-Chapter06-4.jpg

图6-3 用户程序编制方法

a)线性化程序结构 b)结构化程序结构

978-7-111-37326-1-Chapter06-5.jpg

图6-4 用户程序中块调用的顺序

978-7-111-37326-1-Chapter06-6.jpg

图6-5 在一个执行周期内的块调用顺序和嵌套深度示例(www.xing528.com)

编制用户程序中的块时,从块的顶行开始,从上到下编制块。在一行块内,编制调用的块的次序为从右到左,即先编制FC1,再编制FB1+背景DB1和DB1;接着再编制FB2+背景数据块2,最后编制组织块OB1。功能块允许在用户程序中传递参数。调用块时,必须给块接口中的参数赋值。通过提供输入参数,可以指定用于执行块的数据。通过输出参数,可以指定执行结果的保存位置。块调用时,从项目树中通过拖放操作插入现有功能FC和功能块FB。如果从其他功能块调用功能块,则以单个背景或多重背景的方式调用这些功能块。块调用时,必须有一个可用的程序段,并且被调用的块可用。

(1)插入功能FC的调用,要使用拖放操作在程序段中插入功能FC的调用,将功能从项目树拖到程序段中。这样,功能FC及其参数一同被插入,然后可以分配这些参数。

(2)插入单个背景方式的功能块FB调用,以单个背景的方式调用功能块FB的情况下,被调用的功能块(FB)将其数据存储在其本身的功能块FB中。要使用拖放操作在程序段中插入单个背景方式的功能块FB调用,将功能块FB从项目树拖到程序段中,将打开“调用选项”对话框,单击“单个背景”按钮,输入要分配给该功能块的数据块的名称,单击“确定”确认输入。这样,功能块FB及其参数一同被插入,然后可以分配这些参数。

(3)插入多重背景方式的功能块FB调用,以多重背景的方式调用功能块FB的情况下,被调用的功能块FB将其数据存储在调用功能块FB的背景数据块中。要使用拖放操作在程序段中插入多重背景方式的功能块FB调用,将功能块从项目树拖到程序段中,将打开“调用选项”对话框,单击“多重背景”按钮,在“接口中的名称”文本块中,输入变量的名称,通过该名称将被调用功能块作为调用块接口中的静态变量输入,单击“确定”确认输入。这样,功能块FB及其参数一同被插入,然后可以分配这些参数。

如果调用功能块时指定了不存在的背景数据块,则将创建该背景数据块。如果以多重背景方式调用了功能块,则会将该功能块作为接口中的静态变量输入。

4.背景数据块

对功能块的调用进行编程时,需要将背景数据块分配给该功能块。块参数值和静态局部数据存储在所分配的背景数据块中。分配有自己的背景数据块的功能块调用称为单个背景数据块。通过分配背景数据块,可以指定要处理哪些数据。可以为每个调用分配不同的背景数据块,以此提高块的可复用性。如果被调用功能块将其数据存储在调用功能块的背景数据块中,就构成多重背景。这样便可将实例(设备,控制对象,如电机)数据集中放在一个背景数据块中,从而更有效地使用可用的背景数据块。如果以单个背景的方式调用,多个背景数据块分配给一个功能块的一个实例,如,可以使用一个功能块控制具有不同数据(如速度、加速时间、总运行时间)的多台电机,这就需要为执行电机控制的每个功能块调用分配一个不同的背景数据块。不同电机的数据保存在不同的背景数据块中,根据所分配的背景数据块控制不同的电机。使用一个功能块和3个不同的数据块控制3台电机的单个背景数据块的示例如图6-6所示。

图6-6中,组织块OB1三次调用同一个通用FB1,每次调用使用一个不同的数据块。FB1控制3台独立的电机,在每次调用时,为各电机分配不同的背景数据块。每个背景数据块存储1个电机的数据。其中DB101用于存储第1台电机的运行数据,DB102用于存储第2台电机的运行数据,DB103用于存储第3台电机的运行数据。由此可推论,更改背景DB可使通用FB控制一组设备的运行。

如果将3台电机的数据保存在一个背景数据块中,3台电机共用一个功能块,就构成一个背景数据块分配给一个功能块的多个实例的情况,如图6-7所示。

图6-7中,功能块FB1调用FB2的三个实例(“电机1”、“电机2”和“电机3”)。每个调用使用不同的实例数据。但所有实例数据都位于同一个背景数据块(DB101)中。

如果将3台电机的数据保存在一个背景数据块中,3台电机用3个功能块实现控制,就构成了一个背景数据块分配给不同功能块的实例,如图6-8所示。

978-7-111-37326-1-Chapter06-7.jpg

图6-6 单个背景数据块示例

978-7-111-37326-1-Chapter06-8.jpg

图6-7 一个背景数据块用于一个功能块的多个实例

978-7-111-37326-1-Chapter06-9.jpg

图6-8 一个背景数据块用于不同功能块的实例

图6-8中,FB1连续调用FB2、FB3和FB4。这些被调用块都将数据存储在调用块的数据块DB101中。

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

我要反馈