Deklaration eines Datentyps mit benannten Werten in ST

Syntax
TYPE
name_1 : data-type (name_e1 := value_1, name_e2 := value_2, ..., name_en := value_n) := initial-value;
name_2 : data-type (name_e1 := value_1, name_e2 := value_2, ..., name_en := value_n) := initial-value;
... 
END_TYPE

Bedeutung

Deklaration eines oder mehrerer →Datentypen mit benannten Werten, wobei name_1, name_e1 usw. →IEC-Bezeichner sein müssen
Die Datentypen mit benannten Werten ähneln den direkt abgeleiteten Datentypen bzw. den Aufzählungsdatentypen. Beachten Sie, dass die Datentypen mit benannten Werten die Initialisierung und Verwendung nicht auf die benannten Werte (name_e1 usw.) beschränken. Somit können andere Werte zugewiesen oder berechnet werden, wobei diese Werte zum angegebenen →Basistyp (data-type) passen müssen.

Diese Deklaration ist innerhalb der Deklaration eines anwenderdefinierten Datentyps (TYPE ... END_TYPE) möglich.
Der Basistyp (data-type) muss ein elementarer Datentyp sein (siehe "Unterstützte Datentypen"). Die →benannten Elemente werden in den runden Klammern () angegeben, jedem Wert wird ein Name zugeordnet (name_e1 := value_1, name_e2 := value_2, ...). Ein Wert für das benannte Element kann ein →konstanter Ausdruck sein.

Mit dem optionalen →Initialisierungswert weisen Sie dem Datentyp einen Wert zu. Bei diesem Wert kann es sich ebenfalls um einen konstanten Ausdruck handeln, also z.B. ein benanntes Element (siehe Beispiel Colors1) oder ein zum Datentyp passendes Literal (siehe Beispiel Colors2). Falls kein Initialisierungswert für den Datentyp definiert ist, wird das erste Element als Initialisierungswert verwendet (siehe Beispiel TrafficLight).

Abweichungen von IEC-Norm

Sie müssen den Basistyp in logi.CAD 3 immer angeben. Dies steht im Gegensatz zur IEC-Norm, wo der Basistyp optional ist.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Ein Datentyp mit benannten Werten darf dort verwenden werden, wo auch der Basistyp verwendet werden darf. Beispiel: Der Datentyp TrafficLight aus dem folgenden Beispiel ist als Eingangsdatentyp für den ADD-Baustein zulässig.

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.

Beispiel: Deklaration
TYPE
TrafficLight : INT
(Red := 1, Yellow:= 2, Green := 3);
(* 'Red' wird als Initialisierungswert für 'TrafficLight' verwendet. *)
Colors1 : DWORD
(Red := 16#00FF0000, Green := 16#0000FF00, Blue := 16#000000FF) := Colors1#Green;
(* 'Green' wird als Initialisierungswert für 'Colors1' verwendet. *)
Colors2 : DWORD
(Orange := 16#00FF7F00, Pink := 16#00FF33FF, Red := Colors1#Red) := 16#00990000;
(* '16#00990000' wird als Initialisierungswert für 'Colors2' verwendet. *)
END_TYPE

Verwendung der benannten Werte

Verwenden Sie die folgende Syntax, um einen benannten Wert eindeutig anzusprechen: name_1#name_e1 – Beispiel: TrafficLight#Red
images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg logi.cals empfiehlt Ihnen, benannte Werte immer mit dem eindeutigen Namen anzusprechen. So vermeiden Sie spätere Konflikte beim Bearbeiten der Anwendung – falls z.B. ein benannter Wert auch in einer neu installierten Bibliothek verwendet wird.

Falls logi.CAD 3 den benannten Wert eindeutig aus dem Kontext ableiten kann, ist es aber möglich, nur den benannten Wert anzugeben. Siehe Yellow und Green im folgenden Beispiel.

Beispiel: Verwendung
VAR
Var1 : TrafficLight;
Var2 : STRING[20];
END_VAR
 
IF Var1 = TrafficLight#Red THEN (* OK, da eindeutiger Zugriff *)
Var2 := 'STOP';
END_IF;
 
IF Var1 = Yellow THEN (* OK, da 'Var1' den Kontext für 'Yellow' vorgibt; empfohlen ist jedoch die Verwendung des eindeutigen Namens 'TrafficLight#Yellow' *)
Var2 := 'BEWARE';
END_IF;
 
IF Var1 = Green THEN (* OK, obwohl 'Green' nicht eindeutig ist, da 'Var1' den Kontext vorgibt; empfohlen ist jedoch die Verwendung des eindeutigen Namens 'TrafficLight#Green' *)
Var2 := 'WALK';
END_IF;
 
IF Var1 = 16#00000000 THEN (* OK, da auch andere Werte als die benannten Werte zulässig sind *)
Var2 := 'No traffic light';
END_IF;

Abhängig von Ihrer logi.CAD 3-Konfiguration (d.h., von der Start-Option lc3.expensive.enum.resolving.enable) können Sie einen benannten Wert möglicherweise ohne den eindeutigen Namen angeben, auch wenn der Kontext nicht bekannt ist. In diesem Fall muss der benannte Wert aber eindeutig sein. Beachten Sie, dass sich die Performance beim Speichern, Importieren und Öffnen der Objekte und/oder der Projekte jedoch verschlechtern kann. Falls Sie daran interessiert sind, die aktuelle Konfiguration zu ändern, kontaktieren Sie Ihren System-Integrator und klären Sie die möglichen Auswirkungen dieser Start-Option.