Aufzählungen (Enumerationen, ENUMs)
Dieses Thema enthält die folgenden Abschnitte:
- Übersicht
- Aufzählung-Datentypen contra Datentypen mit benannten Werten
- Typdefinition
- Initialisierung
- Aufzählungen mit explizitem Basisdatentyp
Übersicht
Eine Aufzählung oder Enumeration (Enum) ist ein anwenderdefinierter Datentyp, der aus einer kommagetrennten Liste vorgegebener Werte besteht, den sogenannten Aufzählungs- oder Enumerationswerten (Member). Die Variable eines Enum-Datentyps kann nur genau einen Wert aus der Liste der Aufzählungsmember annehmen. Andere Variablenwerte sind nicht möglich.
Die Aufzählungsmember können entweder im Projekt definierte Literale oder lokale sowie globale Konstanten sein. (Eine lokale Konstante definieren Sie im Datentyp-Arbeitsblatt, in einem Deklarationsblock mit den Schlüsselwörtern VAR CONSTANT … END_VAR. Eine globale Konstante wird definiert, indem man für die Variable in der entsprechenden Variablentabelle oder Datenliste das Attribut 'Konstante' selektiert.)
Aufzählung-Datentypen contra Datentypen mit benannten Werten
In Übereinstimmung mit der Norm IEC 61131-3 unterstützt PLCnext Engineer den Datentyp Aufzählung und Datentypen mit benannten Werten (in dieser Hilfe beide als Enumerationen bezeichnet). Der Aufzählung-Datentyp enthält eine Liste von Aufzählungswerten (Member), wobei diesen keine Werte zugewiesen sind (Werte der Member sind unbekannt). Im Gegensatz dazu sind den Membern eines Datentyps mit benannten Werten feste Werte zugewiesen (siehe auch untenstehenden Abschnitt "Initialisierung").
Datentyp Aufzählung | TYPE PossiblColors : (Red, Green, Blue); END_TYPE |
Datentyp mit benannten Werten | TYPE PossiblColors : (Red := 2, Green := 5, Blue := 10); END_TYPE |
Typdefinition
Den Datentyp Aufzählung oder Enumeration definieren Sie im Datentyp-Arbeitsblatt mit Hilfe der Deklarationsschlüsselwörter TYPE ... END_TYPE. Die Aufzählungsmember werden durch Kommas getrennt innerhalb der Klammern () deklariert. In den Variablentabellen oder Datenlisten können Sie eine Variable des Aufzählungstyps (Enumerationstyps) deklarieren. Diese Variable kann als Wert nur einen der für diesen Enum-Datentyp spezifizierten Aufzählungsmember annehmen.
Im folgenden Beispiel enthält die Aufzählung 'PossibleColors' die Member Red, Green und Blue. Die Variable 'Color' des Typs enum kann nur einen der Aufzählungswerte Red, Green und Blue annehmen. Im ST-Codebeispiel wird der Variablen 'Color' der Wert Green zugewiesen, wenn Start = TRUE ist.
Datentypdefinition | |
Variablen-Deklaration (Variablentabelle/Datenliste) | ![]() |
Verwendung im Code | ![]() |
Hinweis
Wenn zwei oder mehr Enumerationen gleichnamige Aufzählungsmember enthalten, dann können Sie vor dem Elementnamen optional den ENUM-Namen angeben, gefolgt vom Hash-Zeichen. Beispiel: Zwei Enumerationen enthalten das Aufzählungsmember Green. TYPE EnumColor : (Red := 0, Green := 10, Blue := 20) OF INT := Green; EnumBackgound : (Red := 255, Green := 128, Blue := 0) OF INT := Green; END_TYPE Die Anweisung eColor := EnumBackgound#Green; ist im Code eindeutig. |
Initialisierung
Jedes Aufzählungsmember hat einen Namen und einen zugrunde liegenden Basistyp (standardmäßig ist das Integer, siehe auch untenstehenden Abschnitt "Aufzählungen mit explizitem Basisdatentyp"). Standardmäßig hat das erste Aufzählungsmember in der Liste den Anfangswert 0; der Wert jedes folgenden Member wird jeweils um 1 erhöht. Im Beispiel oben hat Red den Wert 0, Green den Wert 1 und Blue den Wert 2.
Initialisieren einzelner Member
Mit Hilfe des Operators ":=" lassen sich Standard-Anfangswerte explizit durch benutzerdefinierte Anfangswerte ersetzen, wie im folgenden Beispiel gezeigt. In dieser Deklaration, hat das erste Aufzählungsmember Red den Anfangswert 2, Green den Wert 3 (die Werte nachfolgender Member ohne Anfangswert werden automatisch jeweils im 1 erhöht) und Blue den Wert 10.
Der Anfangswert kann entweder eine Literal (fester Wert) oder eine lokale bzw. globale Konstante sein.
Beispiel:
TYPE
PossiblColors : (Red := 2, Green, Blue := 10);
END_TYPE
Spezifizieren eines Vorgabewertes
Wird kein Vorgabewert explizit festgelegt, so wird das zuerst aufgelistete Aufzählungsmember als Vorgabewert für die Initialisierung der Aufzählung verwendet. Dieser Vorgabewert lässt sich mit Hilfe des Operators ":=" zugunsten eines benutzerdefinierten Werts aufheben, wie im folgenden Beispiel gezeigt. Dabei muss der Vorgabewert ein Member aus der Aufzählung sein. Im folgenden Beispiel wird die Variable PossibleColors vom Typ enum mit dem Wert Green initialisiert.
TYPE
PossiblColors : (Red, Green, Blue) := Green;
END_TYPE
Deklaration einer Variablen vom Typ enum mit konfiguriertem Anfangswert (Spalte 'Init').
Hinweis
Sie können den Vorgabewert der Aufzählung mit dem 'Init-Werteeditor' definieren. |
Aufzählungen mit explizitem Basisdatentyp
Jedes Aufzählungsmember hat ANY_INT als Basisdatentyp. Der Basisdatentyp bestimmt den Datentyp der Aufzählungsmember. Standardmäßig ist dies INT. Das folgende Beispiel zeigt, wie Sie explizit einen anderen Basisdatentyp für eine Aufzählung definieren können.
Beispiel mit explizit definiertem Basisdatentyp:
TYPE
PossiblColors : (Red := 16#FFFFFFF0 , Green := 16#FFF0000F, Blue ;= 16#55000000) OF DINT;
END_TYPE