Datenstruktur: STRUCT
Eine Struktur ist ein benutzerdefinierter Datentyp, der mehrere Variablen mit beliebigen Datentypen zu einer logischen Einheit zusammenfasst. Die innerhalb einer Struktur deklarierten Variablen werden 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.
Für weitere Informationen siehe: DUT
Syntax
TYPE <structure name>
STRUCT
<member name> : <data type> := <initialization> ;
END_STRUCT
END_TYPE
| Dieser Bezeichner ist im gesamten Projekt gültig, so dass Sie ihn wie einen Standarddatentyp verwenden können. |
| Deklaration einer Komponente Es können beliebig viele Deklarationen folgen, mindestens jedoch 2. 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 |
| Optional |
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 <base structure>
STRUCT
<member declaration>
END_STRUCT
END_TYPE
Typdeklaration S_PENTAGON
TYPE S_PENTAGON EXTENDS S_POLYGONLINE : STRUCT aiPoint5 : ARRAY[1..2] OF INT; END_STRUCT END_TYPE
Deklaration und Initialisierung von Strukturvariablen
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 OF.
Zugriff auf eine Strukturkomponente
Sie greifen auf eine Strukturkomponente gemäß folgender Syntax zu:
<variable name> . <member name>
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
<member name> : BIT;
END_STRUCT
END_TYPE
Syntax Bitzugriff
<structure name> . <member name>
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 fbController : FB_Controller; END_VAR fbController(); fbController.xStart := TRUE;
Für weitere Informationen siehe Bitzugriff in Variablen
Tipp
Referenzen und Pointer auf BIT
-Variablen sind ungültige Deklarationen, ebenso wie Arraykomponenten mit Basistyp BIT
.