1.发动机控制系统的程序结构
块调用即子程序调用,在OB1中可以调用不包括OB的逻辑块。
在块调用中,调用者可以是各种逻辑块,被调用的块是OB之外的逻辑块。调用功能块和系统功能块时需要为它们指定一个背景数据块,后者随这些块的调用而打开,在调用结束时自动关闭。
下面以发动机控制系统的用户程序为例,介绍生成和调用功能和功能块的方法。
用STEP 7的新项目向导创建一个名为“Motor Control”的项目。
图8-28中的组织块OB1是主程序,用功能块FB1来分别控制汽油机和柴油机,控制参数在背景数据块DB1和DB2中。此外还用不同的实参调用功能FC1来控制汽油机和柴油机的风扇。
2.功能块
(1)生成功能块
选中SIMATIC管理器左边窗口中的“Blocks”图标,用右键点击右边窗口,执行出现的快捷菜单中的“Insert New Object”→“Function Block”,生成一个新的功能块。
图8-28 程序结构
(2)局部变量
双击SIMATIC管理器中的FB1的图标,打开程序编辑器,在变量声明表中声明块专用的局部变量,局部变量只能在它所在的块中使用,如图8-29所示。
变量声明表的左边窗口给出了该表的总体结构,选中某一变量类型,在表的右边显示的是局部变量的详细情况。
图8-29 变量声明表
由图8-29可知,功能块有5种局部变量:
IN(输入变量):由调用它的块提供的输入参数。
OUT(输出变量):返回给调用它的块的输出参数。
IN_OUT(输入_输出变量):初值由调用它的块提供,块执行后返回给调用它的块。
TEMP(临时变量):暂时保存在局部数据区中的变量。只是在执行块时使用临时变量,执行完后,不再保存临时变量的数值,它可能被别的数据覆盖。
STAT(静态变量):从功能块执行完,到下一次重新调用它,静态变量的值保持不变。
双击变量声明表左边窗口中的“IN”,在右边窗口中生成两个Bool变量和一个Int变量。用类似的方法生成其他局部变量。变量声明表中的局部变量与FB1的背景数据块中的变量相同,如图8-30所示。
图8-30 背景数据块DB1
块中的局部变量名必须以字母开始,只能由英语字母、数字和下划线组成,不能使用汉字,但是在符号表中定义的共享数据的符号名可以使用其他字符。
图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所示。
图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)是两者的局部变量的本质区别。
图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变量,称为形式参数,简称为形参。方框外的符号地址起动发动机等是方框内的形参对应的实际参数,简称为实参。形参是局部变量在逻辑块中的名称,实参是调用块时指定的具体的输入、输出参数。调用功能或功能块时应将实参赋值给形参,并保证实参与形参的数据类型一致。将不同的实参赋值给形参,就可以实现对类似的但不完全相同的多个被控对象进行(例如汽油机和柴油机)控制。
图8-34 在主程序OB1中调用FB1(一)
图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的输入变量和输出变量的符号。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。