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.

Les références sont déclarées à l'aide du mot clé REF_TO suivi du type de la valeur référencée (par exemple : 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

myRefInt de type REF_TO INT

Affectation

Affecte une référence à une autre référence (même type de données)

myRefINT1:= myRefINT2;

Affecte une référence à un paramètre ou à une fonction

myFB (r := myRef);

Comparaison avec NULL

 

IF myRef = NULL THEN …

Référencer

Affecte l'adresse d'une variable à une référence

myRefA := REF(A);

Déréférencement

Fournit la valeur de la variable de référence

A := myRefA^;

B := myRefArrayType^[12];

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 Droits lecture/écriture (R/W) de variable référencée

  • 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'éditeur de données :

  • R/W Programme : définir la référence en lecture seule.

  • Droits lecture/écriture (R/W) de variable référencée : indiquer si la variable référencée est en lecture seule (c'est le cas lorsque Droits lecture/écriture (R/W) de variable référencée n'est pas sélectionné).

  • Constante : empêcher le programme d'apporter des modifications.

NOTE : Une variable de référence doit respecter les attributs L/E de la variable référencée.

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;

NOTE : Dans tous les autres cas, le logiciel Control Expert détecte une erreur et affiche un message qui explique comment corriger l'application.