Enumerationen

Überblick

Eine Enumeration ist ein benutzerdefinierter Datentyp, der sich aus einer Reihe von Komma getrennten String-Konstanten zusammensetzt. Auf diese Konstanten wird in Form von Enumerati­onswerten 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_..>.

Initialisierung

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'}