# FC 功能

## 定义

FC（功能）是不含存储区的代码块,常用于对一组输入值执行特定运算，例如：可使用FC执行标准运算和可重复使用的运算（例如数学计算）或者执行工艺功能（如使用位逻辑运算执行独立的控制）。FC（功能）也可以在程序中的不同位置多次调用，简化了对经常重复发生的任务的编程。通常，函数会计算函数值，可以通过输出参数 RET_VAL 将此函数值返回给调用块。为此，必须在函数的接口中声明输出参数 RET_VAL，RET_VAL 始终是函数的首个输出参数。

FC（功能）没有相关的背景数据块(DB)，没有可以存储块参数值的数据存储器，因此，调用函数时，必须给所有形参分配实参。对于用于FC（功能）的临时数据，FC（功能）采用了局部数据堆栈，不保存临时数据，要永久性存储数据，可将输出值赋给全局存储器位置，如 M存储器或全局DB。

## FC的参数

## 输入参数 (Input)

只读，调用时将用户程序数据传递到FC中。实参可以为常数。

## 输出参数 (Output)

读写，函数调用时将FC执行结果传递到用户程序中。实参不能为常数。

## 输入/输出参数 (InOut)

在块调用之前读取输入/输出参数并在块调用之后写入。实参不能为常数。

## 临时局部数据 (Temp)

仅在FC调用时生效。CPU 限定只有创建或声明了临时存储单元的 OB、FC 或 FB
才可以访问临时存储器中的数据。临时存储单元是局部有效的，并且其它代码块不会共享临时存储器，即使在代码块调用其它代码块时也是如此。例如：当
OB 调用 FC 时，FC 无法访问对其进行调用的 OB 的临时存储器。 CPU
根据需要分配临时存储器。启动代码块（对于 OB）或调用代码块（对于 FC 或
FB）时，CPU 将为代码块分配临时存储器并将存储单元初始化为 0。

## 常量（Constat）

只读，声明常量符号名后，FC中可以使用符号名代替常量。

## 常见问题

:::{hint} ![](../../../img/home/FAQ.png) S7-1200 做多个FC块互连时的执行顺序?
:::

块的互连会影响到执行顺序，也会影响到接口参数的状态。S7-1200相互连接的FC块的执行顺序按照显示顺序执行，下图为一个例子，参数"data.tag8"首先在\"块_1\"输出，然后再在\"块_2\"中被读取。

![](images/1-01.jpg){width="979" height="143"}
