此数据类型在 IEC 61131-3 标准的扩展中可用。
引用存储位于内存中其他位置的对象(变量)的地址;在这方面,行为与指针相同。
与指针不同的是,在涉及语法时,变量的行为与对象相似。此外,声明为 REFERENCE 的变量相比 POINTERS 具有以下优点:
o引用不必被显式取消引用(使用 ^),亦可访问所引用的对象的内容。
o在将值传送到函数/功能块/方法的输入参数时,适用以下规则:如果输入被声明为 REFERENCE TO <数据类型>,则可以传送相应<数据类型>的变量(refInput := 变量,而不是 ptrInput :=ADR(variable))。
o编译器验证数据类型相同的引用是否被分配给彼此。
有关更多信息,请参阅分配操作符 REF 说明。
<标识符> : REFERENCE TO <数据类型>
A : REFERENCE TO DUT;
B : DUT;
C : DUT;
A REF= B; // corresponds to A := ADR(B);
A := C; // corresponds to A^ := C;
注意: 无法声明如 REFERENCE TO REFERENCE、ARRAY OF REFERENCE 或 POINTER TO REFERENCE 之类的引用。
您可以使用操作符 __ISVALIDREF 来检查某个引用是否指向有效值(即,不等于 0 的值)。
语法
<boolean variable> := __ISVALIDREF(identifier, declared with type <REFERENCE TO <datatype>);
<boolean variable> will be TRUE, if the reference points to a valid value, FALSE if not.
示例
声明
ivar : INT;
ref_int : REFERENCE TO INT;
ref_int0: REFERENCE TO INT;
testref: BOOL := FALSE;
实现
ivar := ivar +1;
ref_int REF= ivar;
ref_int0 REF= 0;
testref := __ISVALIDREF(ref_int); (* will be TRUE, because ref_int points to ivar, which is unequal 0 *)
testref := __ISVALIDREF(ref_int0); (* will be FALSE, because ref_int is set to 0 *)