Skip to main content

Operatoren

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.

Tipp

Informationen zur Abarbeitungsreihenfolge (Bindungsstärke) der ST-Operatoren finden Sie im Kapitel „ST-Ausdrücke“.

Achtung

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

Achtung

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.

Beispiel 104. 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

ADD

SUB

MUL

DIV

MOD

MOVE

INDEXOF

SIZEOF

XSIZEOF

Bitstring-Operatoren

AND

OR

XOR

NOT

AND_THEN

OR_ELSE

Bitshift-Operatoren

SHL

SHR

ROL

ROR

Auswahloperatoren

SEL

MAX

MIN

LIMIT

MUX

Vergleichsoperatoren

Die Vergleichsoperatoren sind boolesche Operatoren, die jeweils zwei Eingänge (erster und zweiter Operand) miteinander vergleichen.

GT

LT

LE

GE

EQ

NE

Adressoperatoren

ADR

Inhaltsoperator

BITADR

Aufrufoperatoren

CAL

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.

Wichtig

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.

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.

REAL, LREAL

TIME, LTIME

DATE, DT, TOD, LDATE, LDT, LTOD

STRING, WSTRING

TRUNC

TRUNC_INT

Numerische Operatoren

ABS

SQRT

LN

LOG

EXP

EXPT

SIN

ASIN

COS

ACOS

TAN

ATAN

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.

Globaler Namensraum

Namensraum für Globale Variablenlisten

Enumerations-Namensraum

Bibliotheksnamensraum

__POOL

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.

TEST_AND_SET

__COMPARE_AND_SWAP

__XADD

Weitere Operatoren

__DELETE

__ISVALIDREF

__NEW

__QUERYINTERFACE

__QUERYPOINTER

INI

__TRY, __CATCH, __FINALLY, __ENDTRY

__POSITION

__POUNAME