Types de variable

Présentation

Ce chapitre fournit des informations supplémentaires concernant les types de variable suivants :

Variables locales - VAR

Toutes les variables locales d'un POU sont VARdéclaréesEND_VAR entre les mots clés et . Aucune connexion externe n'existe, c'est-à-dire qu'elles ne peuvent pas être écrites depuis l'extérieur.

Il est possible d'ajouter un attribut à une variable VAR.

Exemple

VAR
 iLoc1:INT; (* 1. Local Variable*)
END_VAR

Variables d'entrée - VAR_INPUT

Toutes les variables d'entrée d'un POU sont déclarées entre les mots clés VAR_INPUT et END_VAR. La valeur des variables peut donc être fournie avec un appel, à la position d'appel.

Il est possible d'ajouter un attribut.

Exemple

VAR_INPUT
 iIn1:INT (* 1. Inputvariable*)
END_VAR

Variables de sortie - VAR_OUTPUT

Toutes les variables de sortie d'un POU sont déclarées entre les mots clés VAR_OUTPUT et END_VAR. Ces valeurs sont donc transmises au POU à l'origine de l'appel.

Il est possible d'ajouter un attribut à une variable VAR_OUTPUT.

Exemple

VAR_OUTPUT
 iOut1:INT; (* 1. Outputvariable*)
END_VAR

Variables de sortie dans les fonctions et méthodes :

Conformément à la norme IEC 61131-3 version 2, les fonctions (et les méthodes) peuvent disposer de sorties supplémentaires. Vous pouvez attribuer ces dernières dans l'appel de la fonction, comme illustré ci-dessous.

Exemple

fun(iIn1 := 1, iIn2 := 2, iOut1 => iLoc1, iOut2 => iLoc2);

Variables d'entrée et de sortie - VAR_IN_OUT

Toutes les variables d'entrée et de sortie d'un POU sont déclarées entre les mots clés VAR_IN_OUT et END_VAR.

NOTE : la valeur des variables IN_OUT transmises varie (variable transmise comme pointeur, appel par référence). Cela signifie que la valeur d'entrée de ces variables n'est pas constante. C'est pourquoi il est impossible de lire ou d'écrire directement des variables VAR_IN_OUT d'un bloc fonction depuis l'extérieur via <FBinstance>.<InOutVariable>.
NOTE : n'attribuez pas de symboles de type bit (tels que %MXaa.b ou des variables BOOL associées à une adresse de type bit) à des paramètres BOOL VAR_IN_OUT de blocs fonction. Sinon, ces attributions seront signalées comme une erreur de compilation dans l'affichage Messages.

Exemple

VAR_IN_OUT
 iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR

Variable de transfert - VAR_IN_OUT CONSTANT

Une variable VAR_IN_OUT CONSTANT se comporte comme un paramètre constant transmis par référence. Une variable ou une constante (valeur littérale) de type STRING ou WSTRING peut être transmise à ce paramètre. Ce paramètre est en lecture seule. La transmission de propriétés n'est pas autorisée.

Syntaxe

VAR_IN_OUT CONSTANT
    <variable name> : <data type>; // formal parameter
END_VAR

Les variables VAR_IN_OUT CONSTANT sont déclarées sans qu'il soit nécessaire de leur affecter une valeur d'initialisation.

Utilisation

  • Lors de l'appel du POU, une variable constante ou une valeur littérale de type STRING ou WSTRING peut être transmise. L'accès en écriture n'est pas autorisé.

  • Lors de la transmission des paramètres d'une constante STRING, la longueur de la chaîne n'est pas limitée. La longueur de la chaîne ne dépend pas de celle des variables VAR_IN_OUT CONSTANT.

NOTE : Si l'option Remplacer les constantes est sélectionnée dans la boîte de dialogue Paramètres de projet > Options compilateur, le compilateur génère un message d'erreur en cas de transmission des paramètres d'une constante ou d'une variable constante avec le type de données de base.

La variable est prise en charge par EcoStruxure Machine Expert 2.0 et les versions ultérieures.

Exemple : transmission des paramètres de constantes STRING et de variables STRING

FUNCTION funManipulate : BOOL
VAR_IN_OUT
    sReadWrite : STRING(16); (* Can be read or written here in POU *)
    dwVarReadWrite : DWORD; (* Can be read or written here in POU *)
END_VAR
VAR_IN_OUT CONSTANT
    c_sReadOnly : STRING(16); (* Constant string variable can only be read here in POU *)
END_VAR
sReadWrite := 'String_from_POU';
dwVarReadWrite := STRING_TO_DWORD(c_sReadOnly);
PROGRAM PRG_A
VAR
    sVarFits : STRING(16);
    sValFits : STRING(16) :='1234567890123456';
    dwVar: DWORD;
END_VAR
// The following line of code causes the compiler error C0417:
// C0417: VAR_IN_OUT parameter 'sReadWrite' needs a variable with write access as input.
funManipulate(sReadWrite:='1234567890123456', c_sReadOnly:='1234567890123456', dwVarReadWrite := dwVar);
// Correct code
funManipulate(sReadWrite := sValFits, c_sReadOnly := '23', dwVarReadWrite := dwVar);
funManipulate(sReadWrite := sVarFits, c_sReadOnly := sValFits, dwVarReadWrite :=dwVar);

Dans l'exemple de code, les chaînes sont transmises à la fonction funManipulate par différentes variables VAR_IN_OUT :

  • En cas de transmission d'une valeur littérale de type chaîne à une variable VAR_IN_OUT, le compilateur génère une erreur.

  • En cas de transmission d'une variable constante à une variable, VAR_IN_OUT CONSTANT, le code généré est correct. Ceci vaut également en cas de transmission de variables de type chaîne.

Variables globales - VAR_GLOBAL

Vous pouvez déclarer des variables normales, des constantes et des variables externes ou rémanentes qui sont considérées comme des variables globales dans tout le projet. Les variables globales sont à déclarer dans les listes de variables globales (GVL). Pour ajouter une GVL, exécutez la commande Ajouter un objet (disponible par défaut dans le menu Projet).

Déclarez les variables localement entre les mots clés VAR_GLOBAL et END_VAR.

Il est possible d'ajouter un attribut à une variable VAR_GLOBAL.

Les variables globales sont précédées d'un point (par exemple, .iGlobVar1).

Pour obtenir des informations détaillées sur l'usage multiple des noms de variables, l'opérateur de domaine de validité global dot (.) et les espaces de noms, reportez-vous au chapitre Opérateur de domaine de validité global.

Les variables globales ne peuvent être déclarées qu'au sein de GVL, qui servent à gérer les variables globales d'un projet. Pour ajouter une GVL, exécutez la commande Ajouter un objet (disponible par défaut dans le menu Projet).

NOTE : Lorsqu'une variable définie localement dans un POU porte le même nom qu'une variable globale, la priorité revient à la variable locale.
NOTE : Les variables globales sont initialisées avant les variables locales des POU.

Variables temporaires - VAR_TEMP

Cette fonction correspond à une extension de la norme IEC 61131-3.

Les variables temporaires sont (ré)initialisées à chaque appel du POU. Une variable VAR_TEMP ne peut être déclarée que dans un programme ou un bloc fonction. En outre, ce type de variable n'est accessible que depuis le corps du POU du programme ou du bloc fonction.

Déclarez les variables localement entre les mots clés VAR_TEMP et END_VAR.

NOTE : vous pouvez utiliser une variable VAR_TEMP à la place d'une variable VAR afin de limiter l'espace mémoire occupé par un POU (au sein d'un bloc fonction si la variable ne sert que temporairement, par exemple).

Variables statiques - VAR_STAT

Cette fonction correspond à une extension de la norme IEC 61131-3.

Les variables statiques peuvent être utilisées dans des blocs fonction, des méthodes et des fonctions. Déclarez-les localement entre les mots clés VAR_STAT et END_VAR. Ces variables sont initialisées au premier appel du POU correspondant.

À l'instar des variables globales, les variables statiques conservent leur valeur en cas de fermeture de la fenêtre du POU dans lequel elles sont déclarées. Elles sont partagées entre les POU dans lesquels elles sont déclarées (par exemple, plusieurs instances de blocs fonction, fonctions ou méthodes partagent la même variable statique). Vous pouvez les utiliser par exemple comme compteur dans une fonction afin de comptabiliser le nombre d'appels de fonction.

Il est possible d'ajouter un attribut à une variable VAR_STAT.

Variables externes - VAR_EXTERNAL

Il s'agit des variables globales importées dans le POU.

Déclarez-les localement entre les mots clés VAR_EXTERNAL et END_VAR, ainsi que dans la liste de variables globales (GVL). Les déclarations au niveau local et global doivent être identiques. Si la variable globale n'existe pas, un message s'affichera.

NOTE : Définir des variables externes n'est pas une obligation. Ces mots clés permettent d'assurer la compatibilité avec la norme IEC 61131-3.

Exemple

FUNCTION_BLOCK FB_DoSomething 
VAR_EXTERNAL
 iVarExt1:INT; (* 1st external variable *)
END_VAR

Variables d'instance - VAR_INST

Lorsqu'une variable de méthode est déclarée comme variable d'instance à l'aide de l'attribut VAR_INST, elle est enregistrée sur la pile de l'instance de bloc fonction, et non sur celle de la méthode. Elle se comporte alors comme les autres variables de l'instance de bloc fonction et n'est pas réinitialisée lors de l'appel de la méthode.

Les variables VAR_INST sont admises uniquement dans les méthodes. Vous ne pouvez y accéder que depuis la méthode. Les attributs tels que CONST et RETAIN sont interdits dans la déclaration. Il est possible de surveiller les valeurs des variables dans la partie déclaration de la méthode.

Exemple

METHOD meth_last : INT
VAR_INPUT
  iVar : INT;
END_VAR
VAR_INST
  iLast : INT := 0;
END_VAR
meth_last := iLast;
iLast := iVar;