引用

这个数据类型是在扩展的IEC61131-3标准中有效的。

一个REFERENCE是一个对象的别名 。别名可通过标识符被写或读。 指针的差别在于指向的值是直接影响并且引用的分配以及值是固定的。引用的地址必须是通过单独的分配操作设置的。不论一个引用指向一个有效的值(不平等的0)能被通过一个特殊的标识符检查,见以下:“检查引用有效性”

一个引用根据下述语法被声明:

句法:

<identifier> : REFERENCE TO <data ty>

声明例子:

ref_int : REFERENCE TO INT;

a : INT;

b : INT;

ref_int现已被用作INT类型的变量的别名。

 

使用例子:

ref_int REF= a;   (* ref_int now points to a *)

ref_int := 12;    (* a now has value 12 *)

b := ref_int * 2; (* b now has value 24 *)

ref_int REF= b;   (* ref_int now points to b *)

ref_int := a / 2; (* b now has value 6 *)

ref_int REF= 0;    (* explicit initialization of the reference *)

 

引用声明如引用类型的引用或数列的引用或指向引用的指针是不可能的。

此外他不可能声明引用到BIT变量。

提示!

编译版本 >= V3.3.0.0 版本的编译器,引用将被初始化(为0)

检查引用有效性

运算符 "__ISVALIDREF" 能被用于检查一个引用是否指向有效值,这个值是不等于0的。

句法:

<boolsche Variable> := __ISVALIDREF(identifier, declared with type <mit REFERENCE TO <datatype>);

<boolean variable>如果引用指向一个有效值,其为真否则为假。

例子:

声明:

ivar : INT;

ref_int : REFERENCE TO INT;

ref_int0: REFERENCE TO INT;

testref: BOOL := FALSE;

执行:

ivar := ivar +1;

ref_int REF= hugo;

ref_int0 REF= 0;

testref := __ISVALIDREF(ref_int);  (* will be TRUE, because ref_int points to ivar, which is unequal 0 *)

testref0 := __ISVALIDREF(ref_int0);   (* will be FALSE, because ref_int is set to 0 *)