Dieser Datentyp steht in der Erweiterung zur Norm IEC 61131-3 zur Verfügung.
In einer Referenz wird die Adresse eines Objekts (einer Variablen) gespeichert, die sich an einem anderen Speicherort befindet. In diesem Zusammenhang entspricht das Verhalten demjenigen eines Zeigers.
Im Gegensatz zu einem Zeiger verhält sich eine Variable in Bezug auf die Syntax wie ein Objekt. Darüber hinaus bieten als REFERENCE deklarierte Variablen folgende Vorteile im Vergleich zu Zeigern (POINTERS):
oEine Referenz braucht nicht expliziert aufgehoben zu werden (mit ^), damit auf den Inhalt des referenzierten Objekts zugegriffen werden kann.
oBei der Übergabe von Werten an die Eingangsparameter von Funktionen/Funktionsbausteinen/Methoden gilt Folgendes: Wenn ein Eingang als REFERENCE TO <Datentyp> deklariert wird, kann eine Variable des entsprechenden <Datentyps> übergeben werden (refInput :=-Variable an Stelle von ptrInput :=ADR (Variable)).
oDer Compiler stellt sicher, dass stets Referenzen desselben Datentyps einander zugewiesen werden
Weitere Informationen finden Sie in der Beschreibung des ZuweisungsoperatorsREF.
<Kennung> : REFERENCE TO <Datentyp>
A : REFERENCE TO DUT;
B : DUT;
C : DUT;
A REF= B; // corresponds to A := ADR(B);
A := C; // corresponds to A^ := C;
HINWEIS: Referenzen können nicht als REFERENCE TO REFERENCE, ARRAY OF REFERENCE oder POINTER TO REFERENCE deklariert werden.
Überprüfung gültiger Referenzen
Mit dem Operator __ISVALIDREF kann geprüft werden, ob eine Referenz auf einen gültigen Wert verweist und dieser Wert ungleich 0 ist.
Syntax
<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.
Beispiel
Deklaration
ivar : INT;
ref_int : REFERENCE TO INT;
ref_int0: REFERENCE TO INT;
testref: BOOL := FALSE;
Implementierung
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 *)