Eine Enumeration ist ein benutzerdefinierter Datentyp, der sich aus einer Reihe von Komma getrennten String-Konstanten zusammensetzt. Auf diese Konstanten wird in Form von Enumerationswerten verwiesen. Enumerationswerte sind Kennungen für globale Konstanten in einem Projekt.
Enumerationswerte sind global im Projekt bekannt, auch wenn sie innerhalb eines POU deklariert sind.
Eine Aufzählung wird als DUT-Objekt (Data Unit Type) über das Dialogfeld Objekt hinzufügen im Projekt angelegt.
HINWEIS: Eine lokale Enumerationsdeklaration ist nur im Datentyp TYPE möglich.
Syntax für die Deklaration von Enumerationen
TYPE <enum identifier>: (<enum_0>|:=<value>,<enum_1>|:=<value>, ...,<enum _n>|:=<value>)|<base data type>|:=<default value>;
END_TYPE
Ferner können folgende Elemente verwendet werden:
oDie Initialisierung einzelner Enumerationswerte
oDie Definition eines <base data type> (Weitere Informationen finden Sie im Abschnitt Zweite Erweiterung zur Norm IEC 61131-3 Standard)
oDie Definitionen eines Standardwerts für das Initialisieren aller Komponenten
Syntax für die Deklaration von Variablen mit dem Enumerationstyp
<variable identifier> : <enum identifier>| := <initialization value>
Eine Variable des Typs <enum identifier> kann folgende Enumerationswerte annehmen: <enum_..>.
Wenn... |
Dann... |
---|---|
oWurde in der Deklaration der Enumeration kein <default value> definiert (siehe folgendes Beispiel), und oWurde für die Deklaration von Variablen des Typs <enum identifier> kein expliziter Initialisierungswert definiert |
Die Variable wird mit dem Wert der ersten Enumerationskomponente initialisiert. Dies gilt, sofern eine Komponente in der Enumerationsdeklaration nicht mit dem Wert 0 initialisiert wurde. In diesem Fall wird auch die Variable mit dem Wert 0 initialisiert. |
Beispiel für eine Enumeration mit einem expliziten Initialisierungswert für eine Komponente
Deklaration der Enumeration
TYPE TRAFFIC_SIGNAL: (red, yellow, green:=10);
(* The initial value for each of the colors is red 0, yellow 1, green 10 *)
END_TYPE
In dieser Deklaration erhalten die ersten beiden Komponenten Standardinitialisierungswerte:
red = 0, yellow = 1
Der Initialisierungswert der dritten Komponente wird explizit definiert:
green = 10
Verwendung in der Implementierung
TRAFFIC_SIGNAL1 : TRAFFIC_SIGNAL;
TRAFFIC_SIGNAL1:=10; (* The value of the TRAFFIC_SIGNAL1 is "green" *)
FOR i:= red TO green DO
i := i + 1;
END_FOR;
Beispiel für eine Enumeration mit einem definierten Standardwert
Deklaration der Enumeration
TYPE COLOR :
(
red,
yellow,
green
) := green;
END_TYPE
Verwendung in der Implementierung
c1 : COLOR;
c2 : COLOR := yellow;
In diesem Fall wird die Variable c1 mit dem Wert green initialisiert. Der Initialisierungswert yellow wird für c2 definiert.
Erste Erweiterung der Norm IEC 61131-3 Standard
Der Typname von Enumerationen kann (als Bereichsoperator) verwendet werden, um den Zugriff auf eine Aufzählungskonstante eindeutig zu machen.
Somit ist es möglich, die gleiche Konstante in verschiedenen Enumerationen zu verwenden.
Beispiel
Definition zweier Enumerationen mit gleichnamigen Komponenten
TYPE COLORS_1: (red, blue);
END_TYPE
TYPE COLORS_2: (green, blue, yellow);
END_TYPE
Verwenden Sie Komponenten gleichen Namens aus verschiedenen Enumerationen in einem Baustein
colorvar1 : COLORS_1;
colorvar2 : COLORS_2;
(* valid: *)
colorvar1 := COLORS_1.blue;
colorvar2 := COLORS_2.blue;
(* invalid: *)
colorvar1 := blue;
colorvar2 := blue;
Zweite Erweiterung der Norm IEC 61131-3 Standard
Der Basisdatentyp der Enumeration, die standardmäßig INT ist, kann explizit definiert werden.
Beispiel eines anderen expliziten Basisdatentyps für eine Enumeration
TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE
HINWEIS: Das Attribut strict wird automatisch jeder Enumeration zugewiesen, die Sie einem Projekt in der Zeile über der TYPE-Deklaration hinzufügen. In folgenden Fällen führt das zu Fehlern beim Kompilierungsprozess:
oArithmetische Operationen mit Variablen des Typs Enumeration
oZuordnung eines konstanten Werts zu einer Variablen des Typs Enumeration, in der die Konstante keinem Enumerationswert entspricht
oZuordnung eines nicht konstanten Werts zu einer Variablen des Typs Enumeration, in der der nicht konstante Wert einen anderen Datentyp aufweist als der Enumerationstyp.
Das Attribut kann explizit hinzugefügt oder entfernt werden.
Syntax: {attribute 'strict'}