调用功能块

概述

通过功能块实例来调用功能块。因此必须局部或全局声明功能块实例。有关如何声明的信息,请参阅功能块实例一章。

然后可使用以下语法访问所需的功能块变量。

语法

<实例名称>.<变量名称>

注意事项

  • 从功能块实例的外部只能访问功能块输入和输出变量,不包括其内部变量。

  • 对于功能块实例的访问限制为已在其中声明它的 POU,除非已将它全局声明。

  • 在调用实例时,可将所需的值分配至功能块参数。请参阅下面在调用时分配参数部分。

  • 功能块的输入/输出变量 (VAR_IN_OUT) 作为指针传送。

  • 在 SFC 中,功能块调用只能在步中进行。

  • 功能块实例的实例名称可用作功能或另一个功能块的输入参数。

  • 将保留功能块的所有值,直到下次处理功能块时。因此,功能块调用并非总是返回相同的输出值,即使用一样的参数完成也可能如此。

注: 如果至少有 1 个功能块变量为剩余变量,则整个实例会存储在保留数据区域中。

访问功能块变量的示例

假设:功能块 fb 具有类型为 in1 的输入变量 INT。在此可看到在程序 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),其中有对于参数 INPT 的分配。然后将结果变量 Q 分配至变量 A。结果变量通过功能块实例的名称、后续点以及变量名称进行寻址:

CMD_TMR(IN := %IX5, PT := T#100MS);
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);