天天看点

CODESYS中FB和FC的详细区别

作者:一个发芽的土豆

PLC程序中的FB(Function Block,功能块)和FC(Function,功能)是两种常用的编程元素,它们在功能和使用上存在一些显著的区别。CODESYS中的FB、FC和西门子博途中的FB、FC功能和用法上都有所区别。

CODESYS中FB和FC的详细区别

一、FB(Function Block,功能块)

西门子博途中的FB在调用时会生成背景数据块(FB中调用FB时可以选择生成多重背景数据块),而在CODESYS中调用FB块时必须要将FB块实例化后才能调用的(不会生成像西门子博途软件中那样的DB数据块)。实例化其实跟西门子博途中的多重背景数据块是类似的。

下图是新建FB时的对话框:

CODESYS中FB和FC的详细区别

下图是CODESYS中FB块的变量声明区的内容

CODESYS中FB和FC的详细区别

从图中我们可以看出变量声明区软件默认自动产生三种属性的变量声明区:VAR_INPUT(输入)、VAR_OUTPUT(输出)、VAR。除了这三种属性的变量,还有其他几种属性的变量,我们可以通过切换成表格视图看出来,如下图

CODESYS中FB和FC的详细区别

VAR:局部变量----R/W

VAR_INPUT:输入变量,由外部提供----R

VAR_OUTPUT:输出变量,由内部变量提供给外部----R/W

VAR_IN_OUT:输入/输出变量----R/W

VAR_TEMP:临时变量,程序和功能块内部存储使用的变量----R/W

VAR_STAT:静态变量----R/W

CONSTANT:常量。

RETAIN:保持型变量,用于掉电保持。

PERSISTENT:保持型变量。

PERSISTENT RETAIN:两者功能一样,皆为保持性变量,用于掉电保持。

FUNCTION_BLOCK <功能块名>

VAR_INPUT

… (*功能块的输入接口变量声明*)

END_VAR

VAR_OUTPUT

… (*功能块的输出接口变量声明*)

END_VAR

VAR

… (*功能块的本地变量声明*)

END_VAR

//程序编写开始

(*

功能块内部逻辑执行一些操作,例如计算、逻辑判断等

*)

注:上面的(*和*)在程序编辑区内的语法是程序段的注释,所以程序逻辑判断执行编写时要删除。

二、FC(Function,功能)

与FB不同,FC不需要实例化。它就是一个函数,用于执行特定的任务或计算。由于没有自己的数据存储区域,FC在执行过程中使用的数据通常是通过输入参数传递的,并且这些数据在执行完毕后不会保存。因此,FC通常用于执行一些不需要保存状态信息的任务。

下图是新建FC时的对话框:

CODESYS中FB和FC的详细区别

下图是CODESYS中FC块的变量声明区的内容

CODESYS中FB和FC的详细区别

同样我们切换到表格视图看一下函数FC里面的变量属性都有哪些,如下图:

CODESYS中FB和FC的详细区别

可以看出FC里面没有VAR_TEMP这种属性的变量。FC里面的VAR和FB里面的VAR是不一样的,FB里面的VAR和VAR_STAT都是静态变量,VAR_TEMP是临时变量。而FC里面的VAR是临时变量, VAR_STAT是静态变量。

FC实例:假设我们有一个用于计算两个数字之和的FC。当我们调用这个FC时,需要传递两个输入参数(即要相加的两个数字)。FC会执行加法运算并将结果作为输出参数返回。由于FC没有自己的数据存储区域,因此它不会保存这两个输入参数或计算结果。每次调用FC时都需要重新传递输入参数并获取输出结果。

FUNCTION 函数名 : REAL

VAR_INPUT

Input1 : INT;

Input2 : BOOL;

END_VAR

VAR_TEMP

TempVar : INT; // 这个变量是临时的,函数调用结束后会被销毁

END_VAR

//程序编写开始

// 执行一些操作,例如计算、逻辑判断等

// 使用Input1, Input2, TempVar等变量

// 将结果作为FC的返回值

函数名 := TempVar * 2.0; // 假设这是计算结果

在上述示例中,TempVar是一个临时变量,它只在FC被调用时存在。当FC执行完毕后,TempVar会被销毁,其值不会被保留。

三、总结

FB功能块特性:

实例化:功能块是抽象的结构类型的定义,不是现实的数据实体,在使用前必须实例化。

扩展性:功能块也可以派生出“子”功能块,子”功能块包含“父”功能块的全部属性。

功能块保留有自己特殊的内部变量,控制器必须给功能块的内部变量分配内存。下次调用运行时保留的变更会参与运算,相同输入每次调用输出结果会变化。功能块FB可调用功能块FB或函数FUN,可以被程序PRO和功能块FB调用,功能块还可被用作变量使用。

函数的特性:

重载性、可扩展性、EN和ENO(仅FBD和LD有效)。

函数仅能调用函数型POU,函数必须有输入变量,且仅有一个输出变量。函数内部是一个算法的运算逻辑,相同输入每次调用输出结果完全相同。

函数是一种可以赋予参数但没有静态变量的POU,可以被函数、功能块、程序所使用。

功能块保留有自己特殊的内部变量,控制器必须给功能块的内部变量分配内存。下次调用运行时保留的变更会参与运算,相同输入每次调用输出结果会变化。功能块FB可调用功能块FB或函数FUN,可以被程序PRO和功能块FB调用,功能块还可被用作变量使用。

CODESYS中FB和FC的详细区别

程序调用关系