功能块是在执行时产生一个或多个值的 POU。
通过单击“Project Add Object POU” 将对象添加到应用程序或项目中。在设备树或“POUs” 视图中,功能块 POU 的后缀是“(FB)” 。
它总是通过作为功能块副本的实例来调用功能块。
功能块的编辑器由声明部分和执行部分组成。
执行后,输出变量和内部变量的值保持不变,直到下一次执行。这意味着,在多次调用相同的输入变量时,功能块不一定会返回相同的输出值。
除了 IEC 61131-3 中描述的功能外,您还可以在以下情况下使用功能块 CODESYS
CODESYS 针对面向对象编程的以下功能:
-
功能块的扩展
-
接口的实施
-
方法
-
属性
声明部分的第一行包含以下声明:
FUNCTION_BLOCK <access specifier> <function block> | EXTENDS <function block> | IMPLEMENTS <comma-separated list of interfaces>
调用功能块
调用总是通过功能块的实例进行。当调用一个功能块时,只有相应实例的值会发生变化。
实例声明:
<instance> : <function block>;
在执行部分访问功能块变量的步骤如下:
<instance> . <variable>




注意

请注意以下几点:
-
您只能从功能块实例外部访问功能块的输入和输出变量,而不能访问内部变量。
-
对功能块实例的访问仅限于声明该实例的 POU,除非您在全局范围内声明了该实例。
-
您可以在调用实例时为功能块变量分配所需的值。
示例
访问功能块变量:
功能块FB1
的输入变量iVar1
类型为INT
,输出变量out1
。在下文中,变量iVar1
将从程序Prog
中调用。
PROGRAM Prog VAR inst1:FB1; END_VAR inst1.iVar1 := 33; (* FB1 is called and the value 33 is assigned to the variable iVar1 *) inst1(); (* FB1 is called, that's necessary for the following access to the output variable *) ires := inst1.out1 (* the output variable out1 of the FB1 is read *)
在 FBD 中:

调用时分配变量值:
在文本语言 IL 和 ST 中,调用功能块时可以直接为输入和/或输出变量赋值。
输入变量的值由 :=
分配。
通过 =>
将数值分配给输出变量。
示例
调用定时器功能块的实例CMD_TMR
时,需要对输入变量IN
和PT
进行赋值。然后将定时器的输出变量Q
分配给变量A
。
PROGRAM PLC_PRG VAR CMD_TMR : TOF; END_VAR CMD_TMR(IN := %IX5.1, PT := T#100MS); A := CMD_TMR.Q;
当您通过“输入助手” 插入功能块实例,并在“输入助手” 对话框中选择“插入参数” 选项时,CODESYS 会插入带有所有输入和输出变量的调用。然后,您只需插入所需的值赋值。在上面的示例中,CODESYS 插入了如下调用:CMD_TMR (IN:= ,PT:= , Q=> )
.
您可以使用属性'is_connected'
和局部变量,在调用功能块实例时确定特定输入是否接受外部赋值。