| 

.NET C# Java Javascript Exception

11
In dem Post IEC 61131-3: Weitere Spracherweiterungen bin ich kurz auf die UNION eingegangen. Ein Leserkommentar hat mich auf die Möglichkeit hingewiesen, dass auch eine UNION per EXTENDS erweitert werden kann. Da dieses die Handhabung einer UNION vereinfacht und die Norm auch nicht darauf hinweist, will ich diese Möglichkeit in einem (sehr) kurzen Post vorstellen. […]

In dem Post IEC 61131-3: Weitere Spracherweiterungen bin ich kurz auf die UNION eingegangen. Ein Leserkommentar hat mich auf die Möglichkeit hingewiesen, dass auch eine UNION per EXTENDS erweitert werden kann. Da dieses die Handhabung einer UNION vereinfacht und die Norm auch nicht darauf hinweist, will ich diese Möglichkeit in einem (sehr) kurzen Post vorstellen.

Wie schon zuvor in einem Post beschrieben, ist es mit einer UNION möglich, eigene Datentypen zu definieren, deren Elemente alle denselben Speicherplatz belegen.

TYPE U_Test :
UNION
 nVar1 : WORD;
 nVar2 : BYTE;
END_UNION
END_TYPE

Hier nochmal das Beispiel, bei dem auf eine 16-Bit Variable auch jeweils einzeln auf das Low-Byte und auf das High-Byte zugegriffen werden kann. Dazu wird zuerst eine Struktur angelegt, die aus zwei Bytes besteht.

TYPE ST_Bytes :
STRUCT
 nLSB : BYTE;
 nMSB : BYTE;
END_STRUCT
END_TYPE

Dieses Beispiel zeigt, wie ohne Bit-Operationen aus einer Variablen vom Typ WORD das niedrigere Byte (LSB) und das höherwertige Byte (MSB) ermittelt werden.

PROGRAM MAIN
VAR
 uVar : U_Test;
 nA, nB : BYTE;
END_VAR

uVar.nVar1 := 16#1234;
nA := uVar.stVar2.nLSB; // Wert: 16#34 (LSB)
nB := uVar.stVar2.nMSB; // Wert: 16#12 (MSB)

EXTENDS bei UNION

Etwas eleganter kann die gleiche Aufgabe auch mit Vererbung gelöst werden. Hierbei erbt der Verbund U_Test von ST_Bytes.

TYPE U_Test EXTENDS ST_Bytes :
UNION
	nVar1 : WORD;
	// stVar2 : ST_Bytes;	// kann entfallen, wird von ST_Bytes geerbt.
END_UNION
END_TYPE

Der Zugriff auf nLSB und nMSB muss jetzt nicht mehr über eine explizit deklarierte Variable in der UNION erfolgen.

uVar.nVar1 := 16#1234;
nA := uVar.nLSB; // Wert: 16#34 (LSB)
nB := uVar.nMSB; // Wert: 16#12 (MSB)

iec-61131-3 oop codesys-v3 twincat vererbung sps methoden schnittstellen
Weitere News:
Schreibe einen Kommentar:
Themen:
schnittstellen methoden sps vererbung twincat codesys-v3 oop iec-61131-3
Entweder einloggen... ...oder ohne Wartezeit registrieren
Benutzername
Passwort
Passwort wiederholen
E-Mail