概述
在博途环境下编程,可以使用的代码块有OB,FC和FB。通常,功能块(FB)是从另一个代码块(OB、FB或FC)进行调用时执行的子例程。在调用FB块时会生成与之相匹配的背景数据块,在背景数据块中可以存储定义的接口参数及静态变量。下面将具体介绍FB块的使用,主要包含以下5个方面:
FB块支持的编程语言
FB块的块接口
FB块的编程
FB块的调用
FB块的背景数据块属性修改
一、FB块支持的编程语言S7-1200使用FB块编程支持的编程语言有LAD、FBD、SCL以及CEM(博途V17开始支持);S7-1500除了上述编程语言的支持,还支持Graph。这个博主会另开一期,单独细聊。
图1.FB块支持的编程语言
二、FB块的接口FB块有一个块接口区,可以用来定义块接口。在FB的块接口区域中可以定义的接口类型:Input(输入)、Output(输出)、InOut(输入输出)、Static(静态变量)、Temp(临时变量)以及Constant(常量),如图2所示。
图2.FB块接口区
对于FB块接口访问如表1所示:
接口类型
读写访问
描述
Input
只读
调用FB块时,将数据传送到FB块,实参可以为常数
Output
读写
将FB块执行的结果输出,实参不可以为常数
Inout
读写
读取外部实参数值并且将结果返回到实参,实参不可为常数
Static
读写
静态变量存储在背景DB块中,不参与对外的参数传递
Temp
读写
-
Constant
只读
-
表1.FB块块接口访问
对于带参数的FB块,有形参和实参2个概念,如图3所示。
形参:块接口区域定义的Input,Output,InOut参数;在调用FB块时,会以引脚方式出现在FB块上。Input和InOut类型的变量出现在FB块的左侧;Output类型的变量出现在FB块的右侧。
实参:在调用带参数的FB块时,为形参填写的实际变量。
图3.形参和实参
二、FB块编程FB块在编程时可以选择是否在块接口区定义变量。可以主要分为有两种情况:
(1)情况1:FB块带参数——定义块接口,FB块中通常不出现任何全局变量(DB、I、Q、M);优点:模块化编程,对于相同的功能/逻辑只需要编写一个FB块,无需重复多次编写相同的代码,进行大量重复性工作;还可将FB块做成项目库或全局库,以便后续其他项目或其他工程师使用。FB块编写程序代码,如图4所示。
图4.带参数的FB块编程
FB块调用以及实参参数的填写,参考图3。右键打开图3中FB块的背景数据块“motor_DB”,显示内容如图5所示。在背景数据块中可显示Input、Output、InOut及Static变量,Temp和Constant变量不会出现在背景数据块中。
图5.FB块背景数据块显示内容
编写的带参数的FB块,可以多次调用,只需为每次调用的FB块填写不同的实参。同样的功能仅需编写一次即可,无需重复编写相同的代码。注意:一般情况下每次调用需要生成不同的背景数据块。对于部分系统FB指令,可能有不同要求,详见具体指令说明。
////////////////////////////////////////////////////////////////////////////////
(2)情况2:FB块不带参数——不定义任何块接口,FB块编程中,使用全局变量;此种方式不推荐。如果在FB块中编程时不定义任何块接口变量,那么,在FB块中编程时只能使用全局变量。FB块编程如图6所示。
图6.不带参数FB块编程
不带参数的FB块调用及其背景数据块,如图7所示。
图7.不带参数FB块调用及其背景数据块
三、FB块的调用编写好FB块程序后,需要进行调用才可以执行FB块中的程序。FB块可以由OB块、FC块或其他FB块调用。被不同的块调用,出现的调用方式也会不同,如图8-10所示。
在OB中调用FB块,仅支持单个实例调用(如图8所示)
在FC块中调用FB块,支持单个实例和参数实例调用(如图9所示)
在FB块中调用另外一个FB块,支持单个实例,多重背景和参数实例三种方式(如图10所示)。
图8.OB调用FB块
图9.FC调用FB块
图10.FB调用FB块
下面针对各个调用选项进行详细说明:
(1)单个实例:选择单个实例后,系统会自动生成该FB块的背景数据块,出现在程序块文件夹下方,并且自动在FB上方填写上该背景数据块,如图11所示。
图11.单个实例调用
////////////////////////////////////////////////////////////////////////////////
(2)参数实例:选择参数实例后,将实例作为调用块的一个InOut参数进行传递,需要生成一个背景数据块作为实参填写在形参上。如图12所示,FC1中调用FB2"motor",并且调用选项选择参数实例,此时FC1的块接口中会新增一个InOut类型的参数,参数类型为motor(FB2的背景数据块)。
图12.FC1中参数实例调用FB2
添加新块,选择DB块,类型选择motor(FB2的背景数据块),如图13所示。
图13.新建FB2背景数据块
如图14所示,在OB1中调用FC1时会出现一个InOut形参参数需要填写,此时将图13新建的背景数据块填写到FC1的InOut参数上即可。
图14.参数实例填写
////////////////////////////////////////////////////////////////////////////////
(3)多重实例:选择多重实例后,无需为被调用的FB块创建单独的背景DB块,被调用的FB块的背景数据块存储在外层FB块的静态变量区域。对于多重实例,还可以以数组形式存在,方便块的多次调用。如图15所示,FB1中调用2次FB2,选择多重实例方式。
图15.多重实例调用
四、FB块的背景数据块属性修改FB块的背景数据块伴随着FB块调用出现,在背景数据块中可以存储Input(输入)、Output(输出)、InOut(输入/输出)以及Static(静态变量),下面说明2点FB块背景数据块属性如何修改。
1.背景数据块的断电保持性的设置:背景数据块的断电保持性:取决于FB块接口中对变量保持性的设置,如图16所示(图中左侧为FB块接口,右侧为FB块的背景数据块)。
图16.FB块接口设置保持性
标注1:保持性有3种选项,非保持、保持以及在IDB中设置;
标注2:块接口中选择为非保持的变量,背景数据块中为不勾选保持性且不可修改;
标注3:块接口中选择为保持的变量,背景数据块中为勾选保持性且不可修改;
标注4:块接口中选择为在IDB中设置的变量,背景数据块中会有复选框预留,由用户自行决定是否勾选保持性,可在背景数据块中操作。此外该功能可以用于优化FB块的AT功能的使用,详见链接。
注意:对于非优化FB的保持性无法在FB接口处设置,只能在背景数据块中设置,并且所有变量参数的保持性是一致的,无法单独设置某一个变量参数的保持性。
////////////////////////////////////////////////////////////////////////////////
2.背景数据块的优化和非优化如何设置:背景数据块的优化或非优化:由FB块属性的“优化的块访问”设置决定。
FB块创建后,默认是优化的FB块,其背景数据块也默认是优化的。
如果需要修改该属性,可以在FB块属性中,将”优化的块访问“复选框取消勾选,即修改为非优化,如图17所示。
图17.FB块属性修改为非优化
对程序进行编译程序后,查看FB的背景数据块的属性也随之修改为非优化,如图18所示。
图18.FB背景数据块非优化





