Skip to main content

Operatoren

Als Operatoren werden die eingebauten Standardfunktionen, die eine Teilmenge der Standardfunktionen der IEC darstellen, bezeichnet. Benutzerdefinierte Funktionen können in der Safety-Programmierung nicht erstellt werden.

Die Operatoren haben die gleiche Semantik und Logik wie in Standard-CODESYS.

Sie können sowohl mit SAFExxx als auch mit Standard- Datentypen beschaltet werden.

Einfügen von Operatoren

Das Einfügen der Operatoren erfolgt über die Befehle Bausteinaufruf einfügen, bzw. Leeren Baustein einfügen.

Die Operatoren können auch aus der Werkzeugbox (Toolbox) der Ansicht Werkzeuge hinzugefügt werden. In der Werkzeugbox des Safety FUP-Editor gibt es die Kategorien

  • Boolesche Operatoren

  • Mathematische Operatoren

  • Sonstige Operatoren

Eingabehilfe

In der Eingabehilfe werden für Operatoren folgende Kategorien angezeigt:

  • Operatoren

  • Konvertierungen (nicht im Basic Level)

Erweiterbare Operatoren

. Um zusätzliche Eingänge erweiterbare Operatoren
  • AND

  • OR

  • ADD (nur im Extended Level)

  • MUL (nur im Extended Level)

  • MUX (nur im Extended Level)

Die nach IEC ebenfalls erweiterungsfähigen Operatoren EQ, LT, LE, GT, GE lassen sich (wie in Standard) nur mit zwei Bausteineingängen verwenden.

Der Befehl Bausteineingang einfügen fügt einer erweiterbaren Operatorbox einen weiteren Eingang hinzu.

Operatoren im Basic Level

. Boolesche Operatoren
  • AND (2 Eingänge)

  • AND (3 Eingänge)

  • OR (2 Eingänge)

  • OR (3 Eingänge)

Alle Operanden des OR müssen SAFEBOOL sein.

Operatoren im Extended Level

. Boolesche Operatoren
  • AND (2 Eingänge)

  • AND (3 Eingänge)

  • OR (2 Eingänge)

  • OR (3 Eingänge)

  • XOR

  • NOT

Wichtig

Der unachtsame Gebrauch der Operatoren XOR und NOT kann zum Verlust der Failsafe-Eigenschaft von SAFExxx-Variablen führen, es wird dabei keine Checker-Warnung erzeugt.

Die Operatoren XOR und NOT können die Failsafe-Eigenschaft einer SAFExxx-Variablen negieren, sodass die SAFE-Variable ihre Failsafe-Eigenschaft verliert, also „ausfallunsicher“ wird. Dies kann zu unbeabsichtigtem Anlaufen der Anlage führen.

Programmierregel: Die SAFExxx-Ausgänge von NOT und XOR müssen ermittelt werden. Anschließend muss sichergestellt werden, dass diese NOT/XOR-Ausgänge nicht auf Ausgänge (E/As) durchgeschaltet werden.

. Mathematische Operatoren
  • ADD (2 Eingänge): arithmetischer ADD-Operator

  • ADD (3 Eingänge): Addition mit drei Eingängen

  • SUB: Subtraktion

  • MUL: Multiplikation

  • DIV: Division

  • EQ: Vergleich auf Gleichheit

  • NE: Vergleich auf Ungleichheit

  • LT: Vergleich auf 'Kleiner als'

  • LE: Vergleich auf 'Kleiner als' oder 'Gleich'

  • GT: Vergleich auf 'Größer als'

  • GE: Vergleich auf 'Größer las' oder 'Gleich'

. Andere Operatoren
  • SEL

  • MUX

. Konvertierungen
  • BOOL_TO_INT

  • BOOL_TO_DINT

  • BOOL_TO_TIME

  • BOOL_TO_WORD

  • BYTE_TO_INT

  • BYTE_TO_DINT

  • BYTE_TO_TIME

  • BYTE_TO_WORD

  • DINT_TO_BOOL

  • DINT_TO_BYTE

  • DINT_TO_INT

  • DINT_TO_TIME

  • DINT_TO_WORD

  • DINT_TO_DWORD

  • DWORD_TO_DINT

  • DWORD_TO_TIME

  • INT_TO_BOOL

  • INT_TO_BYTE

  • INT_TO_DINT

  • INT_TO_DWORD

  • INT_TO_TIME

  • INT_TO_WORD

  • TIME_TO_BOOL

  • TIME_TO_BYTE

  • TIME_TO_INT

  • TIME_TO_DINT

  • TIME_TO_WORD

  • TIME_TO_DWORD

  • WORD_TO_BOOL

  • WORD_TO_BYTE

  • WORD_TO_DINT

  • WORD_TO_INT

  • WORD_TO_TIME

  • WORD_TO_DWORD

Operatoren mit Safety-Besonderheiten

Die für spezifischen Besonderheiten einiger Operatoren, werden in folgenden Kapiteln beschrieben

Laufzeitfehler bei Bereichsüberschreitungen der Operatoren im Extended Level

Wichtig

Es liegt in der Verantwortung des Entwicklers, die Programmlogik so zu gestalten, dass keine Laufzeitfehler auftreten.

reagiert bei den im Folgenden aufgeführten Bereichsüberschreitungen mit einem Laufzeitfehler, wodurch die Applikation gestoppt und ein Logbucheintrag erzeugt wird.

Level

Sprachelement

Lauftzeifehler bei

Extended

DIV

Division durch 0

Extended

MUX

Aufruf mit erstem Input mit negativem Wert oder mit Wert N größer als die Anzahl der Eingänge minus 1. Z. B. MUX(2, 16#8000, 16#8001)

Extended

DINT_TO_INT,

TIME_TO_DINT,

TIME_TO_INT,

DINT_TO_TIME,

INT_TO_TIME,

DINT_TO_WORD,

TIME_TO_WORD,

DINT_TO_BYTE,

INT_TO_BYTE,

TIME_TO_BYTE, WORD_TO_BYTE

Ausgangswert ist nicht im Wertebereich des Zieltyps: Bei Konvertierung zwischen zwei ANY_MAGNITUDE Typen (INT, DINT, TIME) muss der numerische Ausgangswert im Wertebereich des Zieltyps liegen (wobei TIME-Werte als Anzahl von Millisekunden gerechnet werden). Bei Konvertierung von/zu Bitstring-Typen (BYTE, WORD, DWORD) muss das Bitmuster des Ausgangswerts ein Bitmuster der Zieltyps sein. Beispiele:

DINT_TO_INT(16#0000FFFF), weil 216-1 kein INT-Wert ist,

ebenso DINT_TO_TIME(-1), weil es keine negative TIME-Werte gibt

TIME_TO_DINT(t#365d), weil 365 Tage = 3,153,600,000ms = 16#BBF81E00 ist, und damit größer als die größte DINT-Zahl 231-1 = 16#7FFFFFFF

INT_TO_BYTE(-1), da BYTE nur 0 bis 255 umfasst,

WORD_TO_BYTE(0xFFFF), da BYTE nur bis 0xFF geht.

Tipp

Das Standardverhalten von SEL/MUX dass bei zu großem Eingangswert der maximale Wert und bei negativem Eingangswert der Wert 0 ausgewählt wird, muss in der Sicherheitsapplikation programmiert werden.

Abbildung 40. Programmierung des Standardverhalten von SEL: für k<0
Programmierung des Standardverhalten von SEL: für k<0


Abbildung 41. Programmierung des Standardverhaltens von SEL für k>Max, n…Maximalwert
Programmierung des Standardverhaltens von SEL für k>Max, n…Maximalwert


Abbildung 42. Programmierung des Standardverhaltens von MUX für k<0
Programmierung des Standardverhaltens von MUX für k<0


Abbildung 43. Programmierung des Standardverhaltens von MUX für k>
Programmierung des Standardverhaltens von MUX für k>