CODESYS V3 unterstützt alle Operatoren der Norm IEC-61131-3. Diese Operatoren sind implizit überall im Projekt bekannt. Neben den IEC-Operatoren unterstützt CODESYS auch einige Operatoren, die nicht in der Norm IEC 61131-3 beschrieben sind.
Operatoren werden in einem Baustein wie Funktionen benutzt.
Informationen zur Abarbeitungsreihenfolge (Bindungsstärke) der ST-Operatoren finden Sie im Kapitel "ST-Ausdrücke".




VORSICHT

Bei Operationen mit Gleitkommatypen ist das Rechenergebnis abhängig von der verwendeten Zielsystemhardware.




VORSICHT

Bei Operationen mit Überlauf oder Unterlauf im Datentyp ist das Rechenergebnis abhängig von der verwendeten Zielsystemhardware.
Überlauf/Unterlauf im Datentyp
Der CODESYS-Compiler generiert Code für das jeweilige Zielgerät und berechnet dabei Zwischenergebnisse immer mit der nativen Größe, die durch das Zielsystem vorgegeben ist. Beispielsweise wird auf den Systemen x86 und ARM mindestens mit 32 Bit Zwischenwerten gerechnet und auf x64-Systemen immer mit 64 Bit Zwischenwerten. Dies bietet deutliche Vorteile bei der Rechengeschwindigkeit und produziert häufig auch das erwartete Ergebnis. Dies bedeutet aber auch, dass ein Überlauf oder ein Unterlauf im Datentyp unter Umständen nicht abgeschnitten wird.
Beispiele
Beispiel 1
Das Ergebnis dieser Addition wird nicht abgeschnitten und das Ergebnis in dwVar
ist 65536
.
VAR wVar : WORD; dwVar: DWORD; END_VAR wVar := 65535; dwVar := wVar + 1;
Beispiel 2
Der Überlauf und Unterlauf im Datentyp wird nicht abgeschnitten und die Ergebnisse
(bVar1, bVar2
) beider Vergleiche sind auf einer 32 Bit und auf einer 64 Bit Hardware FALSE
.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := (wVar1 + 1) = wVar2; bVar2 := (wVar2 - 1) = wVar1;
Beispiel 3
Durch die Zuweisung auf wVar3
wird der Wert auf den Zieldatentyp WORD
abgeschnitten und das Ergebnis bvar1
ist TRUE
.
VAR wVar1 : WORD; wVar2 : WORD; wVar3 : WORD; bVar1 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; wVar3 := (wVar1 + 1); bVar1 := wVar3 = wVar2;
Beispiel 4
Um den Compiler zu einem Abschneiden des Zwischenergebnisses zu zwingen, kann eine Konvertierung eingefügt werden.
Durch die Typkonvertierung wird sichergestellt, dass beide Vergleiche nur 16 Bit vergleichen
und die Ergebnisse (bVar1, bVar2
) beider Vergleiche jeweils TRUE
sind.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := TO_WORD(wVar1 + 1) = wVar2; bVar2 := TO_WORD(wVar2 - 1) = wVar1;
Arithmetische Operatoren
Bitstring-Operatoren
Auswahloperatoren
Vergleichsoperatoren
Die Vergleichsoperatoren sind boolesche Operatoren, die jeweils zwei Eingänge (erster und zweiter Operand) miteinander vergleichen.
Aufrufoperatoren
Typkonvertierungsoperatoren
Sie können explizit Typkonvertierungsoperatoren aufrufen. Für getypte Konvertierungen
von einem elementaren Typ in einen anderen elementaren Typ und auch für Überladungen
stehen die unten beschriebenen Typkonvertierungsoperatoren zur Verfügung. Konvertierungen
von einem "größeren" Typ auf einen "kleineren" Typ, wie beispielsweise von INT
nach BYTE
oder von DINT
nach WORD
, sind aber auch implizit möglich.
Getypte Konvertierung: <elementary data type> _TO_ <another elementary data type>
Überladene Konvertierung: TO_ <elementary data type>
Elementare Datentypen:
<elementary data type> = __UXINT | __XINT | __XWORD | BIT | BOOL | BYTE | DATE | DATE_AND_TIME | DINT | DT | DWORD | INT | LDATE | LDATE_AND_TIME | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD
Die Schlüsselwörter T
, TIME_OF_DAY
und DATE_AND_TIME
sind alternative Schreibweisen für die Datentypen TIME
, TOD
und DT
. T
, TIME_OF_DAY
und DATE_AND_TIME
werden nicht als Typkonvertierungsbefehl abgebildet.




HINWEIS

Wenn bei einem Typkonvertierungsoperator der Operandenwert außerhalb des Wertebereichs
des Zieldatentyps liegt, ist die Ergebnisausgabe vom Prozessortyp abhängig und damit
undefiniert. Dies ist beispielsweise der Fall, wenn ein negativer Operandenwert
von LREAL
in den Zieldatentyp UINT
konvertiert wird.
Bei der Typkonvertierung von größeren auf kleinere Typen können Informationen verloren gehen.




HINWEIS

Stringmanipulation bei Konvertierung nach STRING
oder WSTRING
Bei einer Typkonvertierung nach STRING
oder WSTRING
wird der getypte Wert als Zeichenfolge linksbündig abgelegt und bei Überlänge abgeschnitten.
Deklarieren Sie deshalb die Rückgabevariablen für die Typkonvertierungsoperatoren
<>_TO_STRING
und <>_TO_WSTRING
ausreichend lang, so dass die Zeichenfolge ohne Manipulation Platz findet.
Numerische Operatoren
Namensraum-Operatoren
Die Namensraum-Operatoren sind eine Erweiterung der IEC 61131-3 Operatoren. Sie bieten Ihnen Möglichkeiten, den Zugriff auf Variablen oder Module eindeutig zu gestalten, auch wenn Sie den gleichen Variablen- oder Modulnamen im Projekt mehrmals verwenden.
⮫ „Operator - Globaler Namensraum“
⮫ „Operator - Namensraum für Globale Variablenlisten“
⮫ „Operator - Enumerations-Namensraum“
Multicore-Operatoren
Das Arbeiten mit verschiedenen Tasks erfordert die Synchronisation dieser Tasks. Dies gilt in verstärktem Maße, wenn auf Mehrkernplattformen gearbeitet wird. Zur Unterstützung dieser Synchronisation bietet CODESYS einige spezielle Operatoren an.
Diese Operatoren sind Erweiterungen zur IEC-61131-3. Die Operatoren TEST_AND_SET
und __COMPARE_AND_SWAP
werden für ähnliche Aufgaben verwendet.
⮫ „Operator '__COMPARE_AND_SWAP“
Siehe auch
Weitere Operatoren
⮫ „Operator '__QUERYINTERFACE'“
-
Operator 'ADD'
-
Operator 'MUL'
-
Operator 'SUB'
-
Operator 'DIV'
-
Operator 'MOD'
-
Operator 'MOVE'
-
Operator 'INDEXOF'
-
Operator 'SIZEOF'
-
Operator 'XSIZEOF'
-
Operator 'NOT'
-
Operator 'AND'
-
Operator 'OR'
-
Operator 'XOR'
-
Operator 'AND_THEN'
-
Operator 'OR_ELSE'
-
Operator 'SHL'
-
Operator 'SHR'
-
Operator 'ROL'
-
Operator 'ROR'
-
Operator 'SEL'
-
Operator 'MAX'
-
Operator 'MIN'
-
Operator 'LIMIT'
-
Operator 'MUX'
-
Operator 'GT'
-
Operator 'LT'
-
Operator 'LE'
-
Operator 'GE'
-
Operator 'EQ'
-
Operator 'NE'
-
Operator 'ADR'
-
Operator 'Inhaltsoperator'
-
Operator 'BITADR'
-
Operator 'CAL'
-
Überladung
-
Boolesche Konvertierung
-
Integerkonvertierung
-
Gleitpunktzahl-Konvertierung
-
Stringkonvertierung
-
Zeitkonvertierung
-
Datums- und Uhrzeitkonvertierung
-
Operator 'TRUNC'
-
Operator 'TRUNC_INT'
-
Operator 'ABS'
-
Operator 'SQRT'
-
Operator 'LN'
-
Operator 'LOG'
-
Operator 'EXP'
-
Operator 'EXPT'
-
Operator 'SIN'
-
Operator 'COS'
-
Operator 'TAN'
-
Operator 'ASIN'
-
Operator 'ACOS'
-
Operator 'ATAN'
-
Operator '__DELETE'
-
Operator '__ISVALIDREF'
-
Operator '__NEW'
-
Operator '__QUERYINTERFACE'
-
Operator '__QUERYPOINTER'
-
Operator '__TRY', '__CATCH', '__FINALLY', '__ENDTRY'
-
Operator '__VARINFO'
-
Operator '__CURRENTTASK'
-
Operator '__COMPARE_AND_SWAP
-
Operator '__XADD'
-
Operator '__POSITION'
-
Operator '__POUNAME'
-
Operator 'TEST_AND_SET'
-
Operator - Globaler Namensraum
-
Operator - Namensraum für Globale Variablenlisten
-
Operator - Bibliotheksnamensraum
-
Operator - Enumerations-Namensraum
-
Operator '__POOL'
-
Operator 'INI'