Skip to main content

Structure des données : UNION

UNION est une structure de données définie par l'utilisateur dont les membres ont généralement des types et des tailles de données différents.

Les membres de l'instance d'un UNION les types de données réservent tous le même espace mémoire. Tous les membres ont le même décalage d'adresse et partagent la mémoire. La mémoire requise est déterminée par le membre le plus volumineux.

A. UNION variable stocke la valeur d'exactement un membre. La mémoire contient la dernière valeur attribuée. Cela signifie que la mémoire est utilisée efficacement.

Pour plus d'informations, voir : Objet : DUT

Déclaration de type

Syntaxe :

TYPE <identifier>

UNION

   <member name> : <data type> := <initialization> ;

END_UNION

END_TYPE

<member name> : <data type> ;

Déclaration d'un membre d'un type de données élémentaire

Un certain nombre de déclarations peuvent suivre, mais au moins 2.

:= <initialization>

Facultatif

Exemple 238. Exemple

Déclaration de type : U_VAR_12

TYPE U_VAR_12:
UNION
    wVar1: WORD;
    byVar2 : BYTE;
END_UNION
END_TYPE

Déclaration de type : U_INT_ID

TYPE U_INT_ID:
UNION
    iVar: INT;
    dVar : DINT;
END_UNION
END_TYPE

Déclaration de type : U_EFFICIENT

TYPE U_EFFICIENT
UNION
    wMember : WORD;
    dwMember : DWORD;
    strMember : STRING := 'A'; 
END_UNION
END_TYPE


Déclaration de variables

Instanciation ou déclaration d'une variable d'un UNION type de données :

<variable name> : <name UNION type> := <initialization> ;

:= <initialization>

Facultatif

:= ( <member name> := <literal> )

Initialisation en détail :

L'opérateur d'affectation est suivi de l'attribution de la valeur initiale au membre entre parenthèses.

Exemple 239. Exemple
TYPE U_AB:
UNION
    lrA : LREAL;
    liB : LINT;
END_UNION
END_TYPE

Déclaration de variables avec initialisation

PLC_PRG PROGRAM
VAR
    uabVAR_1 : U_AB := (lrA := LREAL#1.5);
    uabVAR_2 : U_AB := (liB := LINT#1);
END_VAR


Exemple 240. Exemple

Déclaration de variables dans PLC_PRG avec type de données U_EFFICIENT

PLC_PRG PROGRAM
VAR
 uefficient_1 : U_EFFICIENT := (strMember := 'A');
END_VAR

Mise en œuvre : PLC_PRG

uefficient_1.wMember := 16#000A;

Quand uefficient_1 est écrit dans un membre de la variable, cela affecte tous les membres de la variable.