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
Struktur 1:

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;
Struktur 2:

Referenzen und Pointer auf BIT-Variablen sind ungültige Deklarationen, ebenso wie Arraykomponenten mit Basistyp BIT.

Siehe auch: