Operatoren

TwinCAT 3 PLC unterstützt alle Operatoren der Norm IEC-61131-3. Diese Operatoren sind implizit überall im Projekt bekannt. Neben den IEC-Operatoren unterstützt TwinCAT 3 PLC auch einige Operatoren, die nicht in der Norm IEC 61131-3 beschrieben sind.

Operatoren werden in einem Baustein wie Funktionen benutzt.

Operatoren 1:

Operationen mit Gleitkomma-Datentypen

Bei Operationen mit Gleitkomma-Datentypen ist das Rechenergebnis abhängig von der verwendeten Zielsystem-Hardware.

Operatoren 2:

Operationen mit Über- oder Unterlauf

Bei Operationen mit Überlauf oder Unterlauf im Datentyp ist das Rechenergebnis abhängig von der verwendeten Zielsystemhardware.

Operatoren 3:

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

Überlauf/Unterlauf im Datentyp

Der TwinCAT 3 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 1

Das Ergebnis dieser Addition wird nicht abgeschnitten und das Ergebnis in dwVar ist 65536.

VAR
    nVarWORD  : WORD;
    nVarDWORD : DWORD;
END_VAR
nVarWORD  := 65535;
nVarDWORD := nVarWORD + 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
    nVar1 : WORD;
    nVar2 : WORD;
    bVar1 : BOOL;
    bVar2 : BOOL;
END_VAR
nVar1 := 65535;
nVar2 := 0;
bVar1 := (nVar1 + 1) = nVar2;
bVar2 := (nVar2 - 1) = nVar1;

Beispiel 3

Durch die Zuweisung auf nVar3 wird der Wert auf den Zieldatentyp WORD abgeschnitten und das Ergebnis bVar1 ist TRUE.

VAR
    nVar1 : WORD;
    nVar2 : WORD;
    nVar3 : WORD;
    bVar1 : BOOL;
END_VAR
nVar1 := 65535;
nVar2 := 0;
nVar3 := (nVar1 + 1);
bVar1 := (nVar3 = nVar2);

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
    nVar1 : WORD;
    nVar2 : WORD;
    bVar1 : BOOL;
    bVar2 : BOOL;
END_VAR
nVar1 := 65535;
nVar2 := 0;
bVar1 := (TO_WORD(nVar1 + 1) = nVar2);
bVar2 := (TO_WORD(nVar2 - 1) = nVar1);

Adressoperatoren

Arithmetische Operatoren

Aufrufoperatoren

Auswahloperatoren

Bitshift-Operatoren

Bitstring-Operatoren

Namensraumoperatoren

Die Namensraumoperatoren 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.

Numerische Operatoren

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 „kleineren“ Typ auf einen „größeren“ Typ, wie beispielsweise von BYTE nach INT oder von WORD nach DINT, 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 | DINT | DT | DWORD | INT | LDATE | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD

Die Schlüsselwörter TIME_OF_DAY und DATE_AND_TIME sind alternative Schreibweisen für die Datentypen TOD und DT. TIME_OF_DAY und DATE_AND_TIME werden nicht als Typkonvertierungsbefehl abgebildet.

Operatoren 4:

Wenn bei einem Typkonvertierungsoperator der Operandenwert außerhalb des Wertebereichs des Zieldatentyps liegt, ist die Ergebnisausgabe 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.

Operatoren 5:

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 <type>_TO_STRING und <type>_TO_WSTRING ausreichend lang, so dass die Zeichenfolge ohne Manipulation Platz findet.

Vergleichsoperatoren

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

Weitere Operatoren