Deklaration eines strukturierten Datentyps in ST
Ein strukturierter Datentyp wird auch als Strukturdatentyp bezeichnet.
TYPE {KeepElementOrder} (* optionale Anweisung pro strukturiertem Datentyp; beeinflusst die Sortierung der Strukturelemente im generierten C-Code *) name_1: STRUCT name_e1 : type := initial-value; (* Partielle Adressen sind ebenfalls für das Strukturelement möglich. *) name_e2 : REF_TO type; (* Partielle Adressen sind ebenfalls für das Strukturelement möglich. *) name_e3 : FB-type; (* Partielle Adressen sind ebenfalls für das Strukturelement möglich. *) name_e4 : interface; (* Partielle Adressen sind ebenfalls für das Strukturelement möglich. *) ... 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 (
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 ( Mit dem optionalen →Initialisierungswert Mit der optionalen Anweisung { Aktuelle Einschränkungen
|
Informationen über den Zugriff auf die Strukturelemente finden Sie unter: "Zugriff auf strukturierten Datentyp und Strukturelemente"
logi.CAD 3
bietet außerdem die Möglichkeit, noch nicht festgelegte Speicherorte bei der Deklaration anzugeben. Siehe "Deklaration eines Sprachelements mit partieller Adresse in ST" für Details.
logi.CAD 3
bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für Details.
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).
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:
scaling : BOOL;
max: INT;
min: INT;
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.
TYPE myStruct : STRUCT elem : int; myStruct : myStruct2 := (elem := 2); END_STRUCT; myStruct2 : STRUCT elem : int; END_STRUCT; END_TYPE