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中可以使用符号名代替常量。

常见问题

S7-1200 做多个FC块互连时的执行顺序?

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