Skip to main content

对象:功能块

功能块是在执行时产生一个或多个值的 POU。

通过单击将对象添加到应用程序或项目中 项目→添加对象→POU.在设备树或 POU 查看,功能块 POU 具有 (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>

重要

请注意以下事项:

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

  • 对功能块实例的访问仅限于声明该实例的 POU,除非您已全局声明该实例。

  • 您可以在调用实例时将所需的值分配给功能块变量。

512. 例子

访问功能块变量:

功能块 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 中:

_cds_img_fb_call_fup.png


调用时分配变量值:

在文本语言 IL 和 ST 中,您可以在调用功能块时直接为输入和/或输出变量赋值。

将值分配给输入变量 :=.

将值分配给输出变量 =>.

513. 例子

实例 CMD_TMR 定时器功能块的调用与输入变量的分配 INPT.然后输出变量 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=> ).

提示

您可以使用 '已连接' 局部变量上的属性,以确定在功能块实例中调用时特定输入是否接收外部赋值。