一个函数是一种 ⇘ POU它包含一种数据结构(可以有几种类型,比如结构体或者一个关键字定义的变量),当它被文本语言调用时,可以作为一个表达式进行操作。
添加:
一个函数POU可以通过命令 ⇘ 添加对象实现。讲一个函数添加到应用中,首先选择应用中的设备视图然后右键菜单选择添加命令。否则将会添加到POUs视图中。在添加POU对话框选择“函数”,为新函数输入名称 (<函数名>),和一个返回数据类型 (<数据类型>)并选择编程语言。通过选择按键 打开 ⇘ 输入助手对话框选择数据类型。完成设置之后通过“打开”按键打开函数编辑窗口开始进行程序编写:
定义:
语法:
FUNCTION <function name> : <data type>
这是由内部变量的定义和函数的输入决定的。
记过必须赋值给函数。函数名是函数最终的输出值。
小心! 如果函数中一个本地变量被定义为RETAIN 或者 PERSISTENT 类型,这将是没有用的,在这种情况下会产生一个错误信息。 |
函数调用
在 ⇘ ST中的函数调用可以作为表达式中的操作数
在指令类表中函数调用只能在一个步中或者在转化过程中。
函数(与功能块或者程序相比)不包含内部信息,也就是说,对于相同的输入值(输入参数)会产生相同的结果(输出值)。因为这个原因,函数中不能包含全局变量或者变量地址。
与CoDeSys V2.3 比较在函数调用过程中不再允许参数的缺省,所以允许改变函数中输入参数的顺序。 示例: fun(formal1 := actual1, actual2); // -> error message fun(formal2 := actual2, formal1 := actual1); // same semantics as the following: fun(formal1 := actual1, formal2 := actual2); 然而要注意与CoDeSys V2.3工程不同的参数分配形式! |
根据 IEC 61131-3 标准,函数可以有附加输出。这些必须在函数调用的时候进行分配,例如在ST语法中:
out1 => <output variable 1> | out2 => <output variable 2> | ...更多的输出变量
示例:
函数 fun定义了两个输入in1 和 in2。返回值fun将会被赋给本地定义的变量 ⇘ 输出变量 (VAR_OUTPUT) loc1 和 loc2。
fun(in1 := 1, in2 := 2, out1 => loc1, out2 => loc2);