Ce type de données correspond à une extension de la norme IEC 61131-3.
L'adresse d'un objet (une variable) situé ailleurs dans la mémoire est enregistrée dans une référence, qui fonctionne comme un pointeur.
En revanche, contrairement à un pointeur, la variable se comporte comme un objet lorsque la syntaxe est appliquée. En outre, les variables déclarées comme REFERENCE offrent les avantages suivants par rapport aux objets de type POINTERS :
oLe contenu de l'objet référencé est accessible sans avoir à annuler explicitement le référencement (via ^).
oVoici ce qui se produit lorsque des valeurs sont transmises aux paramètres d'entrée de fonctions, blocs fonction ou méthodes : lorsqu'une entrée est déclarée via la syntaxe REFERENCE TO <type de données>, une variable du <type de données> correspondant peut être transmise (variable refInput := au lieu de ptrInput :=ADR(variable)).
oLe compilateur vérifie que seules les références correspondant au même type de données peuvent être affectées.
Pour plus d'informations, consultez la section Opérateur d'affectation REF.
<identificateur> : REFERENCE TO <type de données>
A : REFERENCE TO DUT;
B : DUT;
C : DUT;
A REF= B; // corresponds to A := ADR(B);
A := C; // corresponds to A^ := C;
NOTE : il est impossible de déclarer des références de type REFERENCE TO REFERENCE, ARRAY OF REFERENCE et POINTER TO REFERENCE.
Vérification de la validité des références
L'opérateur __ISVALIDREF permet de vérifier que la référence indique une valeur valide (différente de 0).
Syntaxe
<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.
Exemple
Déclaration
ivar : INT;
ref_int : REFERENCE TO INT;
ref_int0: REFERENCE TO INT;
testref: BOOL := FALSE;
Implémentation
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 *)