Eine Struktur ist ein benutzerdefinierter Datentyp, der mehrere Variablen mit beliebigen Datentypen zu einer logischen Einheit zusammenfasst. Die innerhalb einer Struktur deklarierten Variablen werden als Komponenten bezeichnet.
Die Typdeklaration einer Struktur nehmen Sie in einem „DUT“-Objekt vor, das Sie über das Menü „Projekt Objekt hinzufügen DUT“ oder über das Kontextmenü einer Applikation anlegen.
Syntax
TYPE <structure name> : STRUCT ( <variable declaration optional with initialization> )+ END_STRUCT END_TYPE
<structure name>
ist ein Bezeichner, der im gesamten Projekt gültig ist, so dass Sie ihn wie
einen Standarddatentyp verwenden können. Außerdem können Sie beliebig viele Variablen
(mindestens eine) deklarieren, die optional durch eine Initialisierung ergänzt werden.
Weiterhin können Sie Strukturen verschachteln. Das bedeutet, dass Sie eine Strukturkomponente mit einem bestehenden Strukturtypen deklarieren. Dabei ist die einzige Beschränkung, dass Sie der Variablen (Strukturkomponente) keine Adressen zuweisen dürfen (die AT-Deklaration ist hier nicht zulässig).
Beispiel
Typdeklaration
TYPE S_POLYGONLINE : STRUCT aiStart : ARRAY[1..2] OF INT := [-99, -99]; aiPoint1 : ARRAY[1..2] OF INT; aiPoint2 : ARRAY[1..2] OF INT; aiPoint3 : ARRAY[1..2] OF INT; aiPoint4 : ARRAY[1..2] OF INT; aiEnd : ARRAY[1..2] OF INT := [99, 99]; END_STRUCT END_TYPE
Erweitern einer Typdeklaration
Ausgehend von einer bestehenden Struktur wird eine weitere Struktur deklariert. Die erweiterte Struktur besitzt zusätzlich zu den eigenen Komponenten die gleichen Strukturkomponenten wie die Basisstruktur.
Syntax
TYPE <structure name> EXTENDS <basis structure> : STRUCT ( <variable declaration optional with initialization> )+ END_STRUCT END_TYPE
Beispiel
Typdeklaration
TYPE S_PENTAGON EXTENDS S_POLYGONLINE : STRUCT aiPoint5 : ARRAY[1..2] OF INT; END_STRUCT END_TYPE
Deklaration und Initialisierung von Strukturvariablen
Beispiel
PROGRAM progLine VAR sPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); sPentagon : S_PENTAGON := (aiStart:=[0,0], aiPoint1:=[1,1], aiPoint2:=[2,2], aiPoint3:=[3,3], aiPoint4:=[4,4], aiPoint5:=[5,5], aiEnd:=[0,0]); END_VAR
Sie dürfen keine Initialisierungen mit Variablen verwenden. Ein Beispiel für die Initialisierung
eines Arrays einer Struktur finden Sie auf der Hilfeseite zu Datentyp ARRAY
.
Zugriff auf eine Strukturkomponente
Sie greifen auf eine Strukturkomponente gemäß folgender Syntax zu:
<variable name> . <component name>
Beispiel
PROGRAM prog_Polygon VAR sPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); iPoint: INT; END_VAR // Assigs 5 to aiPoint iPoint := sPolygon.aiPoint1[1];
Ergebnis: iPoint = 5
Symbolischer Bitzugriff in Strukturvariablen
Sie können eine Struktur mit Variablen des Datentyps BIT
deklarieren, um einzelne Bits zu einer logischen Einheit zusammenzufassen. Dann
können Sie einzelne Bits symbolisch über einen Namen (statt über den Bitindex) adressieren.
Syntax Deklaration
TYPE <structure name> : STRUCT ( <bit name> : BIT; )+ END_STRUCT END_TYPE
Syntax Bitzugriff
<structure name> . <bit name>
Beispiel
Typdeklaration
TYPE S_CONTROL : STRUCT bitOperationEnabled : BIT; bitSwitchOnActive : BIT; bitEnableOperation : BIT; bitError : BIT; bitVoltageEnabled : BIT; bitQuickStop : BIT; bitSwitchOnLocked : BIT; bitWarning : BIT; END_STRUCT END_TYPE
Bitzugriff
FUNCTION_BLOCK FB_Controller VAR_INPUT xStart : BOOL; END_VAR VAR_OUTPUT END_VAR VAR ControlDriveA : S_CONTROL; END_VAR IF xStart = TRUE THEN // Symbolic bit access ControlDriveA.bitEnableOperation := TRUE; END_IF PROGRAM PLC_PRG VAR fbController : FB_Controller; END_VAR fbController(); fbController.xStart := TRUE;
Referenzen und Pointer auf BIT
-Variablen sind ungültige Deklarationen, ebenso wie Arraykomponenten mit Basistyp BIT
.
Siehe auch