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
| Deklaration einer Komponente eines elementaren Datentyps Es können beliebig viele Deklarationen folgen, mindestens jedoch 2. |
| Optional |
Typdeklaration U_VAR_12
TYPE U_VAR_12:
UNION
wVar1: WORD;
byVar2 : BYTE;
END_UNION
END_TYPETypdeklaration U_INT_ID
TYPE U_INT_ID:
UNION
iVar: INT;
dVar : DINT;
END_UNION
END_TYPETypdeklaration U_EFFICIENT
TYPE U_EFFICIENT
UNION
wMember : WORD;
dwMember : DWORD;
strMember : STRING := 'A';
END_UNION
END_TYPEVariablendeklaration
Instanzierung/Deklaration einer Variable eines UNION-Datentyps:
<variable name> : <name UNION type> := <initialization> ;
| Optional |
| Initialisierung im Detail: Nach dem Zuweisungsoperator folgt in runden Klammern die Zuweisung des Initialwerts an die Komponente. |
TYPE U_AB:
UNION
lrA : LREAL;
liB : LINT;
END_UNION
END_TYPEVariablendeklaration mit Initialisierung
PLC_PRG PROGRAM
VAR
uabVAR_1 : U_AB := (lrA := LREAL#1.5);
uabVAR_2 : U_AB := (liB := LINT#1);
END_VARVariablendeklaration 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.