Skip to main content

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ü ProjektObjekt hinzufügenDUT 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

<structure name>

Dieser Bezeichner ist im gesamten Projekt gültig, so dass Sie ihn wie einen Standarddatentyp verwenden können.

<member name> : <data type> ;

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 AT-Deklaration ist hier nicht zulässig.

:= <initialization>

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

Beispiel 223. Beispiel

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

Beispiel 224. 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 OF.

Zugriff auf eine Strukturkomponente

Sie greifen auf eine Strukturkomponente gemäß folgender Syntax zu:

<variable name> . <member name>

Beispiel 225. 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

    <member name> : BIT;

END_STRUCT

END_TYPE

Syntax Bitzugriff

<structure name> . <member name>

Beispiel 226. 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
    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.