Introduction
Le type de données Reference permet le mappage de différents types de données dans un type de données dérivées (DDT).
Une référence contient l'adresse mémoire d'une variable.
AVIS | |
---|---|
Les références sont
déclarées à l'aide du mot clé myRefInt:
REF_TO INT
).
Une référence peut être
affectée à une autre référence si elle désigne
le même type de données ou un type compatible (par exemple
: myRefINT1:= myRefINT2
).
Les références peuvent être affectées à des paramètres ou à des fonctions.
Récapitulatif des opérations sur les références dans Control Expert
Opération |
Description |
Exemple |
---|---|---|
Déclaration |
Déclaration d'une variable en tant que référence |
|
Affectation |
Affecte une référence à une autre référence (même type de données) |
|
Affecte une référence à un paramètre ou à une fonction |
|
|
Comparaison avec |
|
|
Référencer |
Affecte l'adresse d'une variable à une référence |
|
Déréférencement |
Fournit la valeur de la variable de référence |
|
Une référence peut être dissociée à
l'aide du suffixe « ^ » (caret), mais la dissociation d'une
référence NULL
génère
une erreur.
Limites applicables aux références
Une référence :
à une référence n'est pas prise en charge
ne peut pas recevoir de façon explicite l'affectation de la valeur
NULL
à un IODDT n'est pas prise en charge en raison de l'absence d'allocation mémoire ; il n'y a pas d'adresse à référencer
ne peut pointer que vers des variables du type de données qu'elle prend en charge (EDT, DDT ou DDT d'équipement) et ne peut être comparée qu'à une référence du même type ou d'un type compatible
ne peut être utilisée qu'avec les opérateurs ":=", "=" et "<>" et les fonctions élémentaires (EF) "EQ" et "NE".
ne peut pas être une variable temporaire, par exemple une liaison FBD ou la valeur résultant d'un appel de fonction élémentaire (EF) imbriqué
ne peut pas être utilisée avec les langages de programmation SFC et LL984
respecte les droits d'accès de la variable référencée par l'attribut de variable
doit être affecté à une broche de référence du FFB (paramètre obligatoire)
Il est possible de déclarer un DFB ou un FFB avec des références de paramètre d'entrée ou de sortie, mais pas avec un paramètre d'entrée/sortie, lequel est déjà une référence.
Une fois déréférencée (dissociée), une référence peut être utilisée comme une variable du type référencé.
Seul un niveau de déréférencement est autorisé.
La valeur initiale d'une référence ne peut pas être cyclique :

Utilisations possibles dans une section de l'application
Une variable d'application peut uniquement être référencée à une référence de variable d'application ou à une référence de variable publique du DFB :
Var_Ref := REF(Var);
DFB_Instance.public_Var_Ref := REF(Var);
Une variable d'application peut uniquement être affectée à une variable d'application ou à une variable publique du DFB :
Var1_Ref := Var2_Ref;
DFB_Instance.public_Var_Ref := Var_Ref;
Utilisations possibles dans une section du DFB
Une variable d'entrée/sortie ou une variable privée peut uniquement être référencée, respectivement, à une référence de sortie ou à une référence publique pour la première et à une référence privée pour la seconde :
Out_Var_Ref := REF(In_Out_Var);
Public_Var_Ref := REF(In_Out_Var);
Private_Var1 := REF(Private_Var2);
Il est possible d'affecter une référence d'entrée, une référence de sortie, une référence d'entrée/sortie et une référence publique à une référence de sortie ou à une référence publique. Par ailleurs, les références privées peuvent uniquement être affectées à une référence privée :
Out_Var_Ref := In_Var_Ref;
Out_Var_Ref := Out_Var_Ref;
Out_Var_Ref := In_Out_Var_Ref;
Out_Var_Ref := Public_Var_Ref;
Public_Var_Ref := In_Var_Ref;
Public_Var_Ref := Out_Var_Ref;
Public_Var_Ref := In_Out_Var_Ref;
Public_Var_Ref := Public_Var_Ref;
Private_Var_Ref := Private_Var_Ref;
Droits d'accès des références
Les attributs suivants peuvent être définis dans une référence à l'aide de l'
:: définir la référence en lecture seule.
: indiquer si la variable référencée est en lecture seule (c'est le cas lorsque n'est pas sélectionné).
: empêcher le programme d'apporter des modifications.
Ce tableau montre les seuls droits d'accès disponibles pour les variables et les variables référencées associées :
Référence |
Variable |
Exemple d'affectation |
||
---|---|---|---|---|
R/W Programme |
Droits lecture/écriture (R/W) de variable référencée |
Constante |
R/W Programme |
|
RO |
RW |
Oui |
RO |
MyREF^ := Var; |
RO |
RW |
Oui |
RW |
MyREF^ := Var; |
RW |
RO |
Non |
RO |
MyREF := REF(Var); |
RW |
RO |
Non |
RW |
MyREF := REF(Var); |
RW |
RW |
Non |
RO |
MyREF^ := Var; |
RW |
RW |
Non |
RW |
MyREF := REF(Var); |
RW |
RW |
Non |
RW |
MyREF^ := Var; |