Deklaration eines strukturierten Datentyps in ST

Ein strukturierter Datentyp wird auch als Strukturdatentyp bezeichnet.

Syntax
TYPE
{KeepElementOrder} (* optionale Anweisung pro strukturiertem Datentyp; beeinflusst die Sortierung der Strukturelemente im generierten C-Code *)
name_1: STRUCT
name_e1 : type := initial-value;
name_e2 : REF_TO type;
name_e3 : FB-type;
      name_e4 : interface;
...
name_en : type := initial-value;
END_STRUCT;
{KeepElementOrder}
name_2: STRUCT
name_e1 : type := initial-value;
...
END_STRUCT;
...
{KeepElementOrder}
name_n: STRUCT
... 
END_STRUCT;
END_TYPE

Bedeutung

Deklaration eines oder mehrerer →strukturierter Datentypen (name_1, name_2 usw.) mit einer Sammlung von →benannten Elementen (den Strukturelementen name_e1, name_e2 usw.) von bestimmten →Datentypen (type), →Funktionsbausteinen (FB-type) oder →Interfaces (interface)

STRUCT und END_STRUCT sind die →Schlüsselwörter für die Deklaration eines strukturieren Datentyps. Diese Deklaration ist innerhalb der Deklaration eines anwenderdefinierten Datentyps (TYPE ... END_TYPE) möglich.
name_1, name_2 usw. und name_e1, name_e2 usw. müssen →IEC-Bezeichner sein.

Ein Datentyp ist als Typ für ein Strukturelement möglich. Informieren Sie sich unter Unterstützte Datentypen, welche Datentypen Sie für die Deklaration angeben können. Zusätzlich ist eine →Referenz (REF_TO), ein vorhandener Funktionsbaustein (in →ST, →FBS oder →KOP erstellt) und ein Interface als Typ für die Strukturelemente möglich.

Mit dem optionalen →Initialisierungswert := initial-value weisen Sie dem Strukturelement einen Wert zu. Als Initialisierungswert (auf der rechten Seite des Zuweisungsoperators ":=") dürfen Sie einen →konstanter Ausdruck angeben, wie unter "Initialisierung von Variablen in ST" angeführt. Bedingung: Der Initialisierungswert muss vom gleichen Datentyp (type) sein oder einem Datentyp, der aufgrund der impliziten Konvertierung in diesen umgewandelt werden kann. Falls Sie keinen Initialisierungswert eingeben, gilt der Standard-Initialisierungswert des Datentyps.

Mit der optionalen Anweisung {KeepElementOrder} werden die Strukturelemente im generierten C-Code so sortiert, wie diese im ST-Code deklariert sind. Dazu müssen Sie nur die Anweisung vor dem betroffenen Strukturdatentyp im ST-Objekt einfügen (siehe folgende Beispiele).

Aktuelle Einschränkungen


Gut zu wissen

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg Informationen über den Zugriff auf die Strukturelemente finden Sie unter: "Zugriff auf strukturierten Datentyp und Strukturelemente"

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg Informationen über die Deklaration von noch nicht festgelegten Speicherorten finden Sie unter: "Deklaration eines strukturierten Datentyps mit partieller Adresse in ST"

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg logi.CAD 3 bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar oder JSON-String für Variablen und Datentypen angeben" für Details.

Beispiele ohne Anweisung für Sortierung der Strukturelemente
TYPE
Range : STRUCT
min : INT; (* keine Initialisierung *)
max : INT := 300; (* Initialisierung *)
END_STRUCT;
RangeS : STRUCT
signal : BOOL;
scaleMin : DINT;  
scaleMax : DINT;
END_STRUCT;
RangeD : STRUCT
signal : BOOL;
scaleMin : ARRAY [1..3] OF Data_MIN; (* 'Data_MIN' ist ein anwenderdefinierter Datentyp. *)
scaleMax : Data_MAX; (* 'Data_MAX' ist ein anwenderdefinierter Datentyp. *)
myRef: REF_TO INT; (* 'myRef' ist eine Referenz auf 'INT'. *)
END_STRUCT;
Cooler : STRUCT
Temp : INT;
Cooling : TOF; (* Funktionsbaustein 'TOF' als Strukturelement *)
END_STRUCT;
Data_MIN : INT;
Data_MAX : ARRAY [1..3] OF INT;
END_TYPE

Ohne Anweisung {KeepElementOrder} werden die Strukturelemente automatisch im generierten C-Code sortiert. Dafür wird zuerst der Datentyp verwendet (beginnend mit BOOL, weiter nach ansteigender Datentypgröße, Struktur- und Array-Datentypen zum Abschluss). Bei gleichem Datentyp wird laut Elementname sortiert (mit alphanumerischer Sortierung).

Beispiel mit Anweisung für Sortierung der Strukturelemente
TYPE
{KeepElementOrder}
Range1 : STRUCT
min: INT;
scaling : BOOL;
max: INT;
noScaling : Range2; (* 'Range2' ist ebenfalls ein Strukturdatentyp. *)
END_STRUCT;
END_TYPE

Ohne Anweisung {KeepElementOrder} würden die obigen Strukturelemente so automatisch sortiert:

  1. scaling : BOOL;

  2. max: INT;

  3. min: INT;

  4. noScaling : Range2;

Falls ein Element einen anderen Strukturdatentyp verwendet und Sie die Sortierung laut Deklaration auch dafür aktivieren wollen, müssen Sie die Anweisung {KeepElementOrder} auch für diesen anderen Strukturdatentyp einfügen. Auf das Beispiel bezogen müsste die Anweisung {KeepElementOrder} auch vor der Deklaration des Strukturdatentyps Range2 eingefügt werden.

Beispiel für die Initialisierung eines Strukturelements, das einen anderen strukturierten Datentyp verwendet
TYPE
myStruct : STRUCT
elem : int;
myStruct : myStruct2 := (elem := 2);
END_STRUCT;
 
myStruct2 : STRUCT
elem : int;
END_STRUCT;
END_TYPE