La version V1.1 d' EcoStruxure Machine Expert ne prend pas en charge les contrôleurs M258, LMC058 et LMC078.

Références

Présentation

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.

Syntaxe

<identificateur> : REFERENCE TO <type de données>

Exemple de déclaration

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 *)