Skip to main content

Déclaration de variables

Déclaration de variables : où et comment ?

Vous pouvez déclarer des variables aux emplacements suivants :

Pour plus d'informations, voir : Raccourcis pour la déclaration de variables

Syntaxe

<pragma>

<scope> <type qualifier>

    <identifier> AT <address> : <data type> := <initial value> ;

END_VAR

<pragma>

Répété facultatif (jamais, une fois ou plusieurs fois)

Pragme

Un pragma est une instruction de compilateur (par exemple pour réaliser des optimisations telles que les besoins en mémoire ou les améliorations d'exécution).

<scope>

Nécessaire

Portée

  • VAR

  • VAR_CONFIG

    Remarque : Si des variables contenant des informations d'adresse incomplètes sont déclarées dans des blocs fonctionnels (par exemple, AT %I*), puis les variables de la déclaration de variable VAR_CONFIG doivent être complètement déclarés. Vous pouvez accéder à ces variables dans une instance locale uniquement lorsque cela est fait.

  • VAR_EXTERNAL

  • VAR_GLOBAL

  • VAR_INPUT

  • VAR_INST

  • VAR_IN_OUT

  • VAR_OUTPUT

  • VAR_STAT

  • VAR_TEMP

<type qualifier>

Facultatif

Qualificateur de type

  • CONSTANT

  • RETAIN

  • PERSISTENT

<identifier>

Nécessaire

Identifiant, nom de variable

Remarque : Les règles répertoriées dans le chapitre « Désignation de l'identifiant » doivent être respectées sans exception lors de l'attribution d'un identifiant. En outre, vous trouverez des recommandations pour une dénomination uniforme.

AT <address>

Facultatif

L'adresse est composée comme suit :

<zone de mémoire> <préfixe de taille optionnel> <position de la mémoire>

La zone mémoire est subdivisée en zone mémoire d'entrée, zone mémoire de sortie ou zone mémoire drapeau (I, Q ou M).

Exemple

  • AT %I* // Incomplete address

  • AT %I7.5

  • AT %IW0

  • AT %QX7.5

  • AT %MD48

<data type>

Nécessaire

Type de données

  • <elementary data type>

  • <user defined data type>

  • <function block >

<initial value>

Facultatif

Valeur initiale ; initialisation en tant que littéral, variable ou expression

Exemple 12. Exemple

Liste globale de variables GVL

{attribute 'qualified_only'}
{attribute 'linkalways'}
VAR_GLOBAL CONSTANT
    g_ciMAX_A : INT := 100;
    g_ciSPECIAL : INT := g_ciMAX_A - 10;
END_VAR

GVL_CONFIG

{attribute 'qualified_only'}
VAR_CONFIG
    // Generated instance path of variable at incomplete address
    PLC_PRG.fbDoItNow.XLOCINPUT AT %I*: BOOL := TRUE;
END_VAR

Bloc fonctionnel FB_DoIt

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

METH_Last := iLast;
iLast := iVar;

FUNCTION_BLOCK FB_DoIt
VAR_INPUT
    wInput AT %IW0 : WORD; (* Input variable *)
END_VAR
VAR_OUTPUT
    wOutput AT %QW0 : WORD; (* Output variable *)
END_VAR
VAR_IN_OUT
    aData_A : ARRAY[0..1] OF DATA_A; // Formal variable
END_VAR
VAR_EXTERNAL
        GVL.g_ciMAX_A : INT; // Declared in object GVL
END_VAR
VAR_STAT
    iNumberFBCalls : INT;
END_VAR
VAR
    iCounter: INT;
    xLocInput AT %I* : BOOL := TRUE; // VAR_CONFIG
END_VAR

iNumberFBCalls := iNumberFBCalls + 1;

Programme IEC PLC_PRG

PROGRAM PLC_PRG
VAR
    iLoop: INT;
    iTest: INT;
    fbDoItNow : FB_DoIt;
    iTest_200: INT;
    aData_Now : ARRAY[0..1] OF DATA_A := [(iA_1 := 1, iA_2 := 10, dwA_3 := 16#00FF),(iA_1 := 2, iA_2 := 20, dwA_3 := 16#FF00)];
END_VAR

iTest := GVL.g_ciMAX_A;
iTest_200 :=  2 * GVL.g_ciMAX_A;
fbDoItNow(aData_A := aData_Now);
FOR iLoop := 0 TO GVL.g_ciSPECIAL DO
    ;
END_FOR