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, ...).

Mit dem optionalen →Initialisierungswert weisen Sie dem Datentyp einen Wert zu. Dabei kann es sich um ein benanntes Element handeln (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.
  • Die IEC-Norm erlaubt →konstante Ausdrucke als Werte für die benannten Elemente und den Initialisierungswert. In logi.CAD 3 sind nur jene Ausdrucke zulässig, wie unter "Initialisierung von Variablen in ST" angeführt.

(info) Ein Datentyp mit benannten Werten darf dort verwenden, 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

Um einen benannten Wert verwenden zu können, geben Sie den Namen an (siehe Beispiel Yellow). Um den Namen eindeutig anzusprechen, ist diese Syntax zulässig: name_1#name_e1 (siehe Beispiel TrafficLight#Red)

(warning)  logi.cals  empfiehlt Ihnen, benannte Werte immer mit dem eindeutigen Namen anzusprechen. So vermeiden Sie spätere Konflikte beim Bearbeiten der Anwendung – da z.B. der benannten Wert Yellow auch in einer neu installierten Bibliothek verwendet wird.

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 'Yellow' eindeutig ist; empfohlen ist jedoch die Verwendung des eindeutigen Namens 'TrafficLight#Yellow'  *)
  Var2 := 'BEWARE';
END_IF;
 
IF Var1 = Green            THEN    (* Fehler, da 'Green' nicht eindeutig ist; verwenden Sie daher den eindeutigen Namen '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;
Gut zu wissen

(grey lightbulb) Falls der Datentyp mit den benannten Werte im gleichen ST-Objekt deklariert ist, in dem auch der benannte Wert (durch Angabe des Namens, z.B. Yellow) verwendet wird, verwendet logi.CAD 3 aus Performance-Gründen sofort den benannten Wert aus dem gleichen Objekt. Das bedeutet aber, falls gleichnamige Werte in anderen ST-Objekten vorhanden sind, werden diese von logi.CAD 3 nicht gefunden und auch nicht gemeldet.
Am besten sprechen Sie daher einen benannten Wert immer mit dem eindeutigen Namen an (z.B. TrafficLight#Yellow), um Diskrepanzen in der Suchreihenfolge zu vermeiden.