通过功能块实例来调用功能块。因此必须局部或全局声明功能块实例。有关如何声明的信息,请参阅功能块实例一章。
然后可使用以下语法访问所需的功能块变量。
<实例名称>.<变量名称>
o从功能块实例的外部只能访问功能块输入和输出变量,不包括其内部变量。
o对于功能块实例的访问限制为已在其中声明它的 POU,除非已将它全局声明。
o在调用实例时,可将所需的值分配至功能块参数。请参阅下面在调用时分配参数部分。
o功能块的输入/输出变量 (VAR_IN_OUT) 作为指针传送。
o在 SFC 中,功能块调用只能在步中进行。
o功能块实例的实例名称可用作功能或另一个功能块的输入参数。
o将保留功能块的所有值,直到下次处理功能块时。因此,功能块调用并非总是返回相同的输出值,即使用一样的参数完成也可能如此。
注意: 如果至少有 1 个功能块变量为残余变量,则整个实例会存储在保留数据区域中。
假设:功能块 fb 具有类型为 INT 的输入变量 in1。在此可看到在程序 prog 中调用该变量。在 ST 中查看声明和实现:
PROGRAM prog
VAR
inst1:fb;
END_VAR
inst1.in1:=22; (* fb is called and input variable in1 gets assigned value 22 *)
inst1(); (* fb is called, this is needed for the following access on the output variable *)
res:=inst1.outl; (* output variable of fb is read *)
在 FBD 中调用功能块的示例:
在文本语言 IL 和 ST 中,您可在调用功能块时立即设置输入和/或输出参数。可将值分配至功能块实例名称后括号中的参数。对于输入参数,该分配使用 := 进行,和声明位置的变量初始化一样。对于输出参数,将使用 =>。
在该示例中,将调用定时器功能块(实例CMD_TMR),其中有对于参数 IN 和 PT 的分配。然后将结果变量 Q 分配至变量 A。结果变量通过功能块实例的名称、后续点以及变量名称进行寻址:
CMD_TMR(IN := %IX5, PT := 300);
A:=CMD_TMR.Q
如果通过 ST 或 IL POU 的实现视图中的选项 With arguments 借助输入助手插入实例,则会采用下面示例中采用的语法和其参数一起自动显示,尽管并非必须分配这些参数。
对于之前所述的示例,将如下显示调用。
CMD_TMR(in:=, pt:=, q=>)
-> fill in, e.g.:
CMD_TMR(in:=bvar, pt:=t#200ms, q=>bres);