函数

一个函数是一种 POU它包含一种数据结构(可以有几种类型,比如结构体或者一个关键字定义的变量),当它被文本语言调用时,可以作为一个表达式进行操作。

添加

一个函数POU可以通过命令 添加对象实现。讲一个函数添加到应用中,首先选择应用中的设备视图然后右键菜单选择添加命令。否则将会添加到POUs视图中。在添加POU对话框选择“函数”,为新函数输入名称 (<函数名>),和一个返回数据类型 (<数据类型>)并选择编程语言。通过选择按键 打开 输入助手对话框选择数据类型。完成设置之后通过“打开”按键打开函数编辑窗口开始进行程序编写:

定义:

语法:

FUNCTION <function name> : <data type>

这是由内部变量的定义和函数的输入决定的。

记过必须赋值给函数。函数名是函数最终的输出值。

小心!

如果函数中一个本地变量被定义为RETAIN 或者 PERSISTENT 类型,这将是没有用的,在这种情况下会产生一个错误信息。

插图 7: ST编程中的一个示例(这个函数有三个输入变量最终返回第二个加第一个的值)

函数调用

ST中的函数调用可以作为表达式中的操作数

在指令类表中函数调用只能在一个步中或者在转化过程中。

函数(与功能块或者程序相比)不包含内部信息,也就是说,对于相同的输入值(输入参数)会产生相同的结果(输出值)。因为这个原因,函数中不能包含全局变量或者变量地址。

在指令类表中的函数调用

插图 8: 在指令类表中的函数调用

在结构化文本中的函数调用

result := fct1(5,3,22);

 

FBD中的函数调用

插图 9: FBD中的函数调用

与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定义了两个输入in1in2。返回值fun将会被赋给本地定义的变量 输出变量 (VAR_OUTPUT) loc1loc2

fun(in1 := 1, in2 := 2, out1 => loc1, out2 => loc2);

扩展功能 (还没有实现)

作为扩展 IEC 61131-3标准可以定义一个具有相同类型的可变数量的输入变量。更多的参考信息请参阅 函数扩展 - PARAMS .