Skip to main content

Datenstruktur: UNION

UNION ist eine benutzerdefinierte Datenstruktur, deren Komponenten in der Regel unterschiedliche Datentypen und -größen haben.

Die Komponenten der Instanz eines UNION-Datentyps belegen alle denselben Speicherplatz. Alle Komponenten haben den gleichen Adress-Offset und teilen sich den Speicher. Der Speicherbedarf wird von der größten Komponente bestimmt.

Eine UNION-Variable speichert den Wert genau einer Komponente. Der Speicher enthält den zuletzt zugewiesenen Wert. Dadurch wird der Speicher effizient genutzt.

Für weitere Informationen siehe: Objekt DUT

Typdeklaration

Syntax:

TYPE <identifier>

UNION

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

END_UNION

END_TYPE

<member name> : <data type> ;

Deklaration einer Komponente eines elementaren Datentyps

Es können beliebig viele Deklarationen folgen, mindestens jedoch 2.

:= <initialization>

Optional

Beispiel 238. Beispiel

Typdeklaration U_VAR_12

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

Typdeklaration U_INT_ID

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

Typdeklaration U_EFFICIENT

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


Variablendeklaration

Instanzierung/Deklaration einer Variable eines UNION-Datentyps:

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

:= <initialization>

Optional

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

Initialisierung im Detail:

Nach dem Zuweisungsoperator folgt in runden Klammern die Zuweisung des Initialwerts an die Komponente.

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

Variablendeklaration mit Initialisierung

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


Beispiel 240. Beispiel

Variablendeklaration in PLC_PRG mit Datentyp U_EFFICIENT

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

Implementierung PLC_PRG

uefficient_1.wMember := 16#000A;

Wenn auf eine Komponente der Variable uefficient_1 geschrieben wird, wirkt sich dies auf alle Komponenten der Variablen aus.