Erweiterte Bezeichner in IEC 61131-3-Variablennamen
Gemäß der Norm IEC 61131-3 dürfen Variablennamen aus Buchstaben, Ziffern und Unterstrichen zusammengesetzt sein. Der Bezeichner muss mit einem Buchstaben oder einem Unterstrich-Zeichen beginnen. Die Verwendung jedes anderen Zeichens führt zum Kompilerfehler "Unzulässiger Bezeichner".
Diese Namensregelung wurde in PLCnext Engineer dahingehend erweitert, dass IEC-Variablennamen auch erweiterte Bezeichner enthalten dürfen.
Dieses Thema enthält die folgenden Abschnitte:
- Erweiterte Bezeichner in PLCnext Engineer aktivieren
- Regeln für die Verwendung von erweiterten Bezeichnern in IEC 61131-3-Variablennamen
- Einschränkung: Erweiterte Bezeichner vs. Literale
- Erweiterte Bezeichner vs. reguläre Operatoren in ST
- Beispiele für erweiterte Bezeichner
Erweiterte Bezeichner in PLCnext Engineer aktivieren
Um erweiterte Bezeichner verwenden zu können, muss das Feature in PLCnext Engineer wie nachfolgend beschrieben aktiviert werden.
- Wählen Sie 'Extras > Optionen'.
- Unter 'Compiler > IEC-Compiler-Einstellungen' aktivieren Sie das Kontrollkästchen 'Erweiterte Bezeichner erlauben' und klicken Sie auf 'OK', um den Dialog zu schließen.
- Starten Sie PLCnext Engineer neu, damit die Einstellungen wirksam werden.
Die Verwendung von erweiterten Bezeichnern ist für (nicht-sicherheitsbezogene) Standard-Variablen und sicherheitsbezogene Variablen möglich.
Regeln für die Verwendung von erweiterten Bezeichnern in IEC 61131-3-Variablennamen
Bei aktivierter Funktion im 'Optionen'-Dialog kann der Variablenname aus sogenannten "Divider"-Zeichen sowie Unicode-Buchstaben und Ziffern gebildet werden. Divider sind optional am Anfang, in der Mitte und am Ende eines Bezeichners möglich, wie im folgenden Syntaxschema gezeigt:
(Leerzeichen, die hier aus Gründen der Übersichtlichkeit verwendet werden, sind nicht erlaubt.)
[DividerBegin] {UnicodeLetterOrDigit [DividerMiddle]} (UnicodeLetterOrDigit [DividerEnd])
Bedeutung der Klammerarten in diesem Schema:
() | Genau ein Element wird benötigt |
[] | Null oder ein Element ist erlaubt |
{} | Null oder n Elemente sind erlaubt |
Das bedeutet, alle Divider sind optional, aber mindestens ein Unicode-Buchstabe/eine Unicode-Ziffer ist zwingend erforderlich.
Welches Zeichen Sie als Divider verwenden dürfen, hängt von der Position im Bezeichner ab (Anfang, Mitte, Ende):
DividerBegin | Sie können einen der Aufzählungspunkte in der folgenden Liste als DividerBegin verwenden, Kombinationen dieser Aufzählungspunkte sind nicht möglich.
|
DividerMiddle | Sie können einen der Aufzählungspunkte in der folgenden Liste als DividerMiddle verwenden, Kombinationen dieser Aufzählungspunkte sind nicht möglich.
|
DividerEnd | Sie können einen der Aufzählungspunkte in der folgenden Liste als DividerEnd verwenden, Kombinationen dieser Aufzählungspunkte sind nicht möglich.
|
Einschränkung: Erweiterte Bezeichner vs. Literale
Obwohl das "#"-Zeichen als Divider erlaubt ist, dürfen Variablen nicht wie eine Konstante mit <Literalpräfix># beginnen.
Ein Literalpräfix unterscheidet nicht zwischen Groß- und Kleinschreibung und beinhaltet die folgenden Schlüsselwörter: BOOL, SAFEBOOL, REAL, LREAL, SINT, SAFESINT, USINT, SAFEUSINT, INT, SAFEINT, UINT, SAFEUINT, DINT, SAFEDINT, UDINT, SAFEUDINT, LINT, ULINT, BYTE, SAFEBYTE, WORD, SAFEWORD, DWORD, SAFEDWORD, LWORD, TIME, SAFETIME, T, DATE, D, LTIME, LT, LDATE, LD, TIME_OF_DAY, TOD, DATE_AND_TIME, DT, STRING, TIMEDATE48, WEIGHT, ANALOG, UNIFRACT, BIFRACT200, FIXED, BOOLEAN2, BCD4, ENUM4.
Beispiel: buffer#value ist als Variablenname zulässig. INT#MyVar ist verboten, da so Integer-Literale beginnen (z.B. INT#100).
- Binär: 2# (z.B. 2#10101010)
- Oktal: 8# (z.B. 8#15)
- Dezimal: 10# (z.B. 10#125)
- Hexadezimal: 16# (z.B. 16#AB)
Für die Verwendung von Zeitliteralen gilt Folgendes: Wenn erweiterte Bezeichner aktiviert sind, müssen Zeitliterale immer mit einem Typpräfix (T# oder TIME# oder SAFETIME#) angegeben werden. Andernfalls wird das Literal als Variable interpretiert. 500ms würde als Variable betrachtet, während TIME#500ms ein korrektes Zeitliteral ist.
Erweiterte Bezeichner vs. reguläre Operatoren in ST
Wenn die Zeichen / * - + < > als reguläre Operatoren in textuellen Programmiersprachen verwendet werden sollen, müssen sie durch sogenannte Whitespaces von ihren zugehörigen Operanden getrennt werden. Zu den Whitespaces gehören Leerzeichen, Tabulatoren und Zeilenumbrüche. Beachten Sie in diesem Zusammenhang bitte den Hinweis 'Mögliche Auswirkungen...' am Ende des Themas.
Beispiele:- a+b wird als Variable betrachtet.
- a + b stellt die Addition zweier Variablen dar.
Hinweis
Mögliche Auswirkungen auf vorhandene Projekte Wenn Sie in einem vorhandenen Projekt die Verwendung von erweiterten Bezeichnern nachträglich aktivieren (beim Erstellen/Bearbeiten des Projekts war das Feature deaktiviert, d.h. die "Standard"-Bezeichner für IEC-Variablen wurden verwendet), stellen Sie sicher, dass dadurch keine unerwarteten Folgen auftreten. Prüfen Sie vor dem Kompilieren, ob Operatoren und Operanden durch Whitespaces getrennt sind. Andernfalls werden diese Codeteile als IEC-Variablen mit enthaltenen erweiterten Bezeichnern interpretiert. |
Beispiele für erweiterte Bezeichner
Beispiel | Beschreibung |
---|---|
:A12 | Gültig, da ":" als DividerBegin erlaubt ist |
#_A12 | Ungültig, da die Kombination aus "#" und "_" nicht als DividerBegin erlaubt ist |
=A:12 | Gültig, da "=" als DividerBegin und ":" als DividerMiddle erlaubt sind |
=A__12 | Gültig, da mehrere "_"-Zeichen als DividerMiddle erlaubt sind |
A--->A | Gültig, da ein ">"-Zeichen nach mehreren "-"-Zeichen als DividerMiddle erlaubt ist |
=A12<< | Gültig, da mehrere "<"-Zeichen als DividerEnd erlaubt sind |
=A12<> | Ungültig, da die Kombination aus "<" und ">" nicht als DividerEnd erlaubt ist |