功能块是在执行过程中提供一个或多个值的POU。
通过单击将对象添加到应用程序或工程中。在设备树或POU视图中,功能块POUs带有(FB)后缀。
您始终通过功能块副本的实例来调用功能块。
功能块的编辑器由声明部分和实现部分组成。
输出变量和内部变量的值在执行之后保持不变,直到下一次执行。这意味着对于具有相同输入变量的多次调用,功能块不一定返回相同的输出值。
除了IEC 61131-3中描述的功能外,您还可以将CODESYS中的功能块用于以下面向对象编程的功能:
声明部分的第一行包含以下声明:
FUNCTION_BLOCK <access specifier> <function block> | EXTENDS <function block> | IMPLEMENTS <comma-separated list of interfaces>
调用功能块
调用始终通过功能块的实例进行。当一个功能块被调用时,只有相应实例的值发生变化。
实例声明:
<instance> : <function block>;
您可以按以下步骤在实现部分中访问功能块的变量:
<instance> : <variable>
.例:
访问功能块变量:
功能块FB1具有INT类型的输入变量iVar1和输出变量out1。接下来,从程序Prog调用iVar1变量。
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中,您可以在调用功能块时直接为输入和/或输出变量赋值。
使用 := 将值分配给输入变量。
使用 => 将值分配给输出变量。
.例:
使用输入变量IN和PT的赋值调用定时器功能块的实例CMD_TMR。然后将定时器的输出变量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'和局部变量来确定在功能块实例中调用时特定输入是否收到外部赋值。 |