与FC相比,调用函数块FB时必须为之分配背景数据块,用于存储块的参数值。
1.函数块的接口区
每个函数块带有形参接口区,参数类型及其说明,见表4-19。
表4-19 FB接口区数据类型
①在这些区域不能声明STRING和WSTRING的长度。仅允许在优化访问的块中声明WSTRING。
②不允许使用数据类型为ARRAY或STRUCT的常量。
③固件版本为V4.2及更高版本中,ARRAY[∗]可用于优化访问的块中。
FB接口区参数的访问,见表4-20。
表4-20 FB接口区的访问
注意:
•在调用FB时,CPU为该FB分配临时存储区并将存储单元初始化为0;
•FB的背景DB中,不包含Temp和Constant参数。
2.函数块的调用
函数块的调用称为实例。FB的输入、输出、输入输出参数及静态变量存储在背景DB中,这些值在FB执行完后依然有效;FB的临时变量不存储在背景DB中,在FB执行完后失效;在没有初始化的情况下,Output会输出背景DB的初始值。
背景数据块在调用FB时会自动生成,其结构与对应FB的接口区相同。FB有三种实例,分别为单一背景、多重背景、参数实例,其详细描述见表4-21。
表4-21 FB的实例
(www.xing528.com)
下面以“TON”指令的调用为例,讲解多重背景和参数实例的区别:
(1)多重背景
当FB大量调用时,使用单一背景实例将占用更多的数据块资源。这时,可以将多个小的FB集中放到一个主FB中,在OB中调用主FB时,就会生成一个总的背景数据块。这些小的FB的数据存储在主FB的静态变量中,这就是多重背景。
例如,在FB1中调用两次TON,如图4-30所示,在窗口“调用选项”中选择“多重背景”,则FB1接口区的Static参数中自动生成TON的背景数据。
在OB1中调用FB1时,生成FB1的背景数据块,该DB同时作为FB1和两个TON的背景数据块,如图4-31所示。
图4-30 多重背景实例
图4-31 多重背景数据块
(2)参数实例
参数实例是通过程序块(FB或FC)的InOut参数给其内部被调用的FB块进行参数传递的一种方式。
例如,在FC1中调用两次TON,如图4-32所示,在窗口“调用选项”中选择“参数实例”,则FC1接口区的InOut参数中自动生成TON的背景数据。
在OB1中调用FC1时,没有生成背景数据块,FC1中的TON通过其InOut进行参数传递,如图4-33所示,在全局数据块中定义数组变量用于给FC1的参数赋值。
图4-32 参数实例
图4-33 参数实例的数据传递
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。