首页 理论教育 功能块的生成与调用技巧

功能块的生成与调用技巧

时间:2023-07-02 理论教育 版权反馈
【摘要】:调用功能块和系统功能块时需要为它们指定一个背景数据块,后者随这些块的调用而打开,在调用结束时自动关闭。图8-32 FC1的变量声明表与功能块的变量声明表相比,功能没有静态变量,但是多了一个返回值RET_VAT。组织块与其他逻辑块的区别组织块是对应的事件发生时操作系统调用的,其他逻辑块是用户程序在逻辑块中调用的。

功能块的生成与调用技巧

1.发动机控制系统的程序结构

块调用即子程序调用,在OB1中可以调用不包括OB的逻辑块。

在块调用中,调用者可以是各种逻辑块,被调用的块是OB之外的逻辑块。调用功能块和系统功能块时需要为它们指定一个背景数据块,后者随这些块的调用而打开,在调用结束时自动关闭。

下面以发动机控制系统的用户程序为例,介绍生成和调用功能和功能块的方法。

用STEP 7的新项目向导创建一个名为“Motor Control”的项目。

图8-28中的组织块OB1是主程序,用功能块FB1来分别控制汽油机和柴油机,控制参数在背景数据块DB1和DB2中。此外还用不同的实参调用功能FC1来控制汽油机和柴油机的风扇。

2.功能块

(1)生成功能块

选中SIMATIC管理器左边窗口中的“Blocks”图标,用右键点击右边窗口,执行出现的快捷菜单中的“Insert New Object”→“Function Block”,生成一个新的功能块。

978-7-111-44354-4-Chapter08-64.jpg

图8-28 程序结构

(2)局部变量

双击SIMATIC管理器中的FB1的图标,打开程序编辑器,在变量声明表中声明块专用的局部变量,局部变量只能在它所在的块中使用,如图8-29所示。

变量声明表的左边窗口给出了该表的总体结构,选中某一变量类型,在表的右边显示的是局部变量的详细情况。

978-7-111-44354-4-Chapter08-65.jpg

图8-29 变量声明表

由图8-29可知,功能块有5种局部变量:

IN(输入变量):由调用它的块提供的输入参数。

OUT(输出变量):返回给调用它的块的输出参数。

IN_OUT(输入_输出变量):初值由调用它的块提供,块执行后返回给调用它的块。

TEMP(临时变量):暂时保存在局部数据区中的变量。只是在执行块时使用临时变量,执行完后,不再保存临时变量的数值,它可能被别的数据覆盖。

STAT(静态变量):从功能块执行完,到下一次重新调用它,静态变量的值保持不变。

双击变量声明表左边窗口中的“IN”,在右边窗口中生成两个Bool变量和一个Int变量。用类似的方法生成其他局部变量。变量声明表中的局部变量与FB1的背景数据块中的变量相同,如图8-30所示。

978-7-111-44354-4-Chapter08-66.jpg

图8-30 背景数据块DB1

块中的局部变量名必须以字母开始,只能由英语字母、数字和下划线组成,不能使用汉字,但是在符号表中定义的共享数据的符号名可以使用其他字符。

978-7-111-44354-4-Chapter08-67.jpg

图8-31 FB1的梯形图程序

在变量声明表中赋值时,不需要制定存储器地址;根据各变量的数据类型,程序编辑器自动地为所有局部变量指定存储器地址。

(3)生成梯形图程序

图8-31所示是功能块FB1的梯形图程序。

FB1用自锁电路控制发动机的运行,功能块的输入变量Start和Stop分别用来接收起动命令和停止命令。输出信号Engine_On用来控制发动机的运行。比较指令用来监视转速,检查实际速度Actual_Speed是否大于等于预置转速Preset_Speed。如果满足条件,Bool型输出变量#Overspeed为1。

操作系统自动地在局部变量前面加上“#”,共享变量名被自动加上双引号

(4)背景数据块

背景数据块是专门指定给某个功能块(FB)或系统功能块(SFB)使用的数据块,它是FB或SFB运行时的工作存储区。

背景数据块用来保存FB和SFB的实参和静态数据,背景数据块中的数据是自动生成的。功能块被执行完后,它的背景数据块中的存储数据不会丢失。

使用不同的背景数据块调用功能块,可以控制多个同类的对象。(www.xing528.com)

生成功能块后,可以首先生成它的背景数据块,然后再调用该功能块时使用它。选中SIMATIC管理器左边窗口中的“Blocks”图标,用右键点击右边窗口,执行出现的快捷菜单中的“Insert New Object”→“Data Block”,生成一个新的数据块。在出现的数据块属性对话框中,采用系统自动生成的名称DB1,选择数据块的类型为“Shared DB”,如果有多个功能块,还需要选择它是哪一个功能块的背景数据块。

图8-30所示是FB1的背景数据块中的数据,与图8-29中的变量声明表相比较,可以看出两者之间的对应关系。

功能块的变量声明表决定了它的背景数据块的结构和变量。不能直接修改背景数据块,只能通过对应的功能块的变量声明表来修改它。

3.功能

如果程序块不需要保存它自己的数据,可以用功能FC来替代。与功能块FB相比较,FC不需要配套的背景数据块。

(1)生成功能

选中SIMATIC管理器左边窗口中的“Blocks”图标,用右键点击右边窗口,执行出现的快捷菜单中的“Insert New Object”→“Function”,生成一个新的功能。

(2)局部变量和梯形图程序

双击SIMATIC管理器中FC1的图标,打开程序编辑器。FC1的变量声明表如图8-32所示。

978-7-111-44354-4-Chapter08-68.jpg

图8-32 FC1的变量声明表

与功能块的变量声明表(见图8-29)相比,功能没有静态变量(STAT),但是多了一个返回值RET_VAT。调用功能时,可以指定一个地址作为实参来存储返回值。使用返回值之前应设置它的数据类型。FC没有静态变量,退出FC后不能保存它的临时局部变量的值。

功能FC1用来控制发动机的风扇,其程序如图8-33所示,要求在发动机运行信号Engine_On变成1时起动风扇,发动机停车后,用变量Fan_On控制风扇继续运行30s后关断。

(3)功能与功能块的区别

FB和FC均为用户编写的子程序,局部数据变量均有IN、OUT、IN_OUT和TEMP,临时变量TEMP储存在局部数据堆栈中。有无静态变量(STAT)是两者的局部变量的本质区别。

978-7-111-44354-4-Chapter08-69.jpg

图8-33 FC1的梯形图程序

只有功能块有背景数据块,调用功能块时需要指定它的背景数据块。只能在功能内部访问功能的局部变量,可以在功能块外部的用户程序中,或通过HMI(人机界面)访问背景数据块中的变量。

不能给功能的局部变量设置初始值,可以给功能块的局部变量(不包括TEMP)设置初始值。在调用功能块时如果采用输入变量的初始值,可以省略这些输入变量的实参。

(4)组织块与其他逻辑块的区别

组织块是对应的事件发生时操作系统调用的,其他逻辑块是用户程序在逻辑块中调用的。

组织块中的程序是用户编写的,只有临时局部变量,没有背景数据块、输入、输出变量和静态变量。组织块的局部数据区的20B的启动信息是由操作系统提供的。

4.功能块和功能的调用

OB1通过两次调用FB1和FC1实现对汽油机和柴油机的控制,以下只给出了控制汽油机的程序,控制柴油机的程序与之相似。

(1)功能块的调用

块调用分为条件调用和无条件调用。用梯形图调用块时,块的使能(Enable,EN)输入端有能流输入时执行块中的程序,反之则不执行。条件调用时使能输入端EN受到触点电路的控制。块被正确执行时使能输出端(Enable Output,ENO)为1,反之为0。

将OB1左边窗口中的“FB blocks”文件夹中的“FB1”拖放到程序段1水平线上。FB1的符号名为“发动机控制”,方框的左边是功能块的输入,右边是输出。方框内的Start等是FB1的变量声明表中定义的IN和OUT变量,称为形式参数,简称为形参。方框外的符号地址起动发动机等是方框内的形参对应的实际参数,简称为实参。形参是局部变量在逻辑块中的名称,实参是调用块时指定的具体的输入、输出参数。调用功能或功能块时应将实参赋值给形参,并保证实参与形参的数据类型一致。将不同的实参赋值给形参,就可以实现对类似的但不完全相同的多个被控对象进行(例如汽油机和柴油机)控制。

978-7-111-44354-4-Chapter08-70.jpg

图8-34 在主程序OB1中调用FB1(一)

978-7-111-44354-4-Chapter08-71.jpg

图8-35 在主程序OB1中调用FC1(二)

在调用块时,CPU将实参分配给形参的值存储在背景数据块中。如果调用时没有给形参指定实参,功能块使用背景数据块中形参的数值。该数值可能是在功能块的变量声明表中设置的形参,也可能是上一次调用时储存在背景数据块中的数值。

可以在两次调用FB1时,使用不同的实参和不同的背景数据块,使FB1分别用于控制汽油机(DB1)和柴油机(DB2)。两个背景数据块中的变量相同,区别仅在于变量的实际参数不同。在主程序OB1中调用FB1如图8-34所示。

(2)功能的调用

将OB1左边窗口中的“FB blocks”文件夹中的“FB1”拖放到程序段1水平线上,如图8-35所示。方框的左边是输入,右边是输出。方框内的Engine_On等是FC1的变量声明表中定义的IN和OUT变量(形参),方块外的符号地址“汽油机运行”等是形参对应的实参。

在符号表中定义了FC1的符号、两次调用FC1时使用的定时器、用于起动风扇的FC1的输入变量和输出变量的符号。

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

我要反馈