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_TYPEErweitern 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_TYPEDeklaration 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_VARSie 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_TYPEBitzugriff
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.