此数据类型在 IEC 61131-3 标准的扩展中可用。
引用存储位于内存中其他位置的对象(变量)的地址;在这方面,行为与指针相同。
与指针不同的是,在涉及语法时,变量的行为与对象相似。此外,声明为 REFERENCE 的变量相比 POINTERS 具有以下优点:
引用不必被显式取消引用(使用 ^
),亦可访问所引用的对象的内容。
在将值传递给函数/功能块/方法的输入参数时,适用以下规则:如果输入被声明为 REFERENCE TO
<data type>
,则可以传递相应 <data type>
的变量(refInput :=
变量,而不是 ptrInput :=ADR
(variable))。
编译器验证数据类型相同的引用是否被分配给彼此。
有关更多信息,请参阅分配操作符 REF 说明。
也可以按照 CheckPointer 函数中所述那样,使用隐式监控功能。
A : REFERENCE TO DUT;
B : DUT;
C : DUT;
A REF= B; // corresponds to A := ADR(B);
A := C; // corresponds to A^ := C;
您可以使用操作符 __ISVALIDREF
来检查某个引用是否指向有效值(即,不等于 0 的值)。
语法
<Boolean variable name> := __ISVALIDREF( <reference name> );
<reference name>
:使用类型 REFERENCE TO
<data type>
声明的标识符。
如果引用指向有效值,则布尔变量 TRUE。否则为 FALSE。
示例
声明
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 *)