调用一个功能块

功能块通常是通过一个功能块实例进行调用。因此一个功能块实例必须被定义为一个局部或者全局变量。参阅 “功能块实例”章节以便了解更多。

然后选择所需的功能块可以通过以下语法进行调用:

语法:

<instance name>.<variable name>

注意以下几条:

  • 只有输入和输出变量可以从功能块的外部进行访问,内部变量不可以。
  • 一个功能块实例的作用范围只限于当前的 POU中,除非定义为全局变量。
  • 在调用功能块实例时可以为功能块进行赋值。请参阅:‘调用时参数分配’。
  • 请注意,功能块中的输入输出变量 (VAR_IN_OUT)被作为一个指针进行处理。
  • 在SFC功能块中调用只能在步中进行。
  • 一个功能块实例的名字可以被用作一个函数或者另一个功能快的输入参数。
  • 功能块所有的变量都会被保持直到下次功能块进行处理前。因此功能块不是每次都返回相同的值,即使有相同的参数输入!

如果功能块中至少有一个参数是保持型变量,整个实例都会作为一个保持型数据被存储。

访问功能块变量示例

假设:功能块fb有一个INT型的输入变量 in1 。在一个程序中对此功能块进行调用。请参阅在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中的示例:

插图 11: 功能块调用

调用中的参数分配:

在文本语言ILST中,可以在调用功能块实例的同时设置输入或者输出参数的值。参数值可以直接分配给功能块实例之后。对于输入参数使用 ":=" 与变量声明位置的 初始化相同,对于输出参数用"=>"进行表示。

示例,调用时进行参数分配:

在这个示例中一个定时器功能块 (实例名为 CMD_TMR) 带有 IN 和 PT参数被定义。输出变量 Q 被赋予变量 A。结果变量是以功能块实例名,紧跟着一个点然后是变量名的方式进行的调用:

CMD_TMR(IN := %IX5, PT := 300);

A:=CMD_TMR.Q

如果该实例通过输入助手带参数方式添加到 ST 或者 IL POU中,它将会按照以下示例中的语法规则自动的给出其所包含的全部参数值。但是不是必须输入所有的参数值。

对于上述示例中提到的将会被显示如下:

Example, insert via input assistant with arguments:

CMD_TMR(in:=, pt:=, q=>)

-> fill in, e.g.:

CMD_TMR(in:=bvar, pt:=t#200ms, q=>bres);