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

Eine implizite Konvertierung von einem „größeren“ Datentyp auf einen „kleineren“ Datentyp ist nicht möglich, wie beispielsweise von INT nach BYTE oder von DINT nach WORD. Wenn Sie implizite Typkonvertierungen von einem „größeren“ Datentyp auf einen „kleineren“ vornehmen wollen, müssen Sie spezielle Typkonvertierungen anwenden. Grundsätzlich können Sie jeden elementaren Datentyp in jeden anderen elementaren Datentyp konvertieren.

Getypte Konvertierung: <elemementarerDatentyp1>_TO_<elementarerDatentyp2>

Überladene Konvertierung: TO_<elementarerDatentyp2>

Operatoren 4:

TwinCAT generiert bei <type>_TO_STRING-Konvertierungen die Zeichenfolge (String) linksbündig. Wenn die Stringlänge zu kurz definiert ist, wird von rechts her abgeschnitten.

Vergleichsoperatoren

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

Weitere Operatoren