Ce chapitre fournit des informations supplémentaires concernant les types de variable suivants :
VAR_INPUT
variables d'entrée
VAR_OUTPUT
variables de sortie
VAR_IN_OUT
variables d'entrée et de sortie
Variable de transfert VAR_IN_OUT CONSTANT
VAR_GLOBAL
variables globales
VAR_TEMP
variables temporaires
VAR_STAT
variables statiques
VAR_EXTERNAL
variables externes
VAR_INST
variables d'instance
VAR
Toutes les variables locales d'un POU sont VAR
dé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
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
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);
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
.
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>
.
VAR_IN_OUT
de blocs fonction. Sinon, ces attributions seront signalées comme une erreur de dans l'affichage .
Exemple
VAR_IN_OUT
iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR
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
.
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.
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
(disponible par défaut dans le menu ).
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
(disponible par défaut dans le menu ).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
.
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).
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
.
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.
Exemple
FUNCTION_BLOCK FB_DoSomething
VAR_EXTERNAL
iVarExt1:INT; (* 1st external variable *)
END_VAR
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;