Struktur
Eine Struktur ist ein benutzerdefinierter Datentyp und fasst mehrere Variablen mit beliebigen Datentypen zu einer logischen Einheit zusammen. Die innerhalb einer Struktur deklarierten Variablen werden als Komponenten bezeichnet.
Die Deklaration einer Struktur nehmen Sie in einem DUT-Objekt vor, das Sie über den Befehl Hinzufügen > DUT im Kontextmenü des SPS-Projektbaums im Projekt anlegen.
Syntax:
TYPE <structure name> :
STRUCT
(<variable declaration optional with initialization>)+
END_STRUCT
END_TYPE
Der <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: Strukturdeklaration
TYPE ST_POLYGONLINE :
STRUCT
aStart : ARRAY[1..2] OF INT := [-99, -99];
aPoint1 : ARRAY[1..2] OF INT;
aPoint2 : ARRAY[1..2] OF INT;
aPoint3 : ARRAY[1..2] OF INT;
aPoint4 : ARRAY[1..2] OF INT;
aEnd : ARRAY[1..2] OF INT := [99, 99];
END_STRUCT
END_TYPE
8-Byte-Alignment Mit TwinCAT 3 wurde ein 8-Byte-Alignment eingeführt. Achten Sie auf ein passendes Alignment, wenn Daten als gesamter Speicherblock mit anderen Steuerungen oder Softwarekomponenten ausgetauscht werden (siehe Alignment). |
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: Strukturdeklaration
TYPE ST_PENTAGON EXTENDS ST_POLYGONLINE :
STRUCT
aPoint5 : ARRAY[1..2] OF INT;
END_STRUCT
END_TYPE
Siehe auch:
Deklaration und Initialisierung von Strukturen
Beispiel
PROGRAM Line
VAR
stPolygon : ST_POLYGONLINE := (aStart:=[1,1], aPoint1:=[5,2], aPoint2:=[7,3], aPoint3:=[8,5], aiPoint4:=[5,7], aEnd:=[1,1]);
stPentagon : ST_PENTAGON := (aStart:=[0,0], aPoint1:=[1,1], aPoint2:=[2,2], aPoint3:=[3,3], aPoint4:=[4,4], aPoint5:=[5,5], aEnd:=[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 zum Datentyp ARRAY.
Siehe auch:
Zugriff auf eine Strukturkomponente
Sie greifen auf eine Strukturkomponente gemäß folgender Syntax zu:
<variable name>.<component name>
Beispiel
PROGRAM Polygon
VAR
stPolygon : ST_POLYGONLINE := := (aStart:=[1,1], aPoint1:=[5,2], aPoint2:=[7,3], aPoint3:=[8,5], aiPoint4:=[5,7], aEnd:=[1,1]);
nPoint: INT;
END_VAR
// Assigns 5 to nPoint
nPoint := stPolygon.aPoint1[1];
Ergebnis: nPoint = 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 Bitzzugriff:
<Strukturname> . <Bitname>
Beispiel:
Strukturdeklaration
TYPE ST_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
bStart : BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
stControl : ST_CONTROL;
END_VAR
IF bStart = TRUE THEN
// Symbolic bit access
stControl.bitEnableOperation := TRUE;
END_IF
PROGRAM MAIN
VAR
fbController : FB_Controller;
END_VAR
fbController();
fbController.bStart := TRUE;
Referenzen und Pointer auf BIT-Variablen sind ungültige Deklarationen, ebenso wie Arraykomponenten mit Basistyp BIT. |