Überladung

Überladung 1:

Undefiniertes Ergebnis bei Überschreitung des Wertebereichs

Wenn der Eingangswert eines Typkonvertierungsoperators außerhalb des Wertebereichs des Ausgangsdatentyps liegt, ist das Ergebnis der Operation nicht definiert und abhängig von der Plattform. Dies ist beispielsweise der Fall, wenn ein negativer Operandenwert von LREAL in den Zieldatentyp UINT konvertiert wird. Auch ein Ausnahmefehler ist dann möglich!

Überladung 2:

Informationsverlust möglich

Wenn ein größerer Datentyp in einen kleineren Datentyp konvertiert wird, können Informationen verloren gehen.

Überladung 3:

Rundungslogik

Die Rundungslogik für Grenzfälle ist vom Zielsystem beziehungsweise von der FPU (Floating Point Unit) des Zielsystems abhängig. Ein Wert wie beispielsweise -1.5 kann auf verschiedenen Steuerungen unterschiedlich konvertiert werden.

Fangen Sie Überschreitungen von Wertebereichen über die Applikation ab, um zielsystemunabhängigen Code zu programmieren.

Die Operatoren konvertieren Werte in andere Datentypen, wobei explizit nur ein Zieldatentyp und kein Anfangsdatentyp (Datentyp des Operanden) angegeben wird („überladene Konvertierung“).

Die Regeln für die getypten Konvertierungen gelten auch bei der Überladung.

Überladungen sind nicht Teil der IEC 61131-3. Wenn Sie strikt nach IEC61131-3 programmieren möchten, verwenden Sie die in den folgenden Abschnitten beschriebenen Operatoren des Schemas <type> _TO_ <another type>.

Syntax:

<Variablenname> := <TO Operator> ( <Operand> );
<Operand> = <Variablenname> | <Literal>

Operatoren:

TO___UXINT
TO___XINT
TO___XWORD
TO_BIT
TO_BYTE
TO_BOOL
TO_DATE
TO_DINT
TO_DT
TO_DWORD
TO_INT
TO_LDATE
TO_LDT
TO_LINT
TO_LREAL
TO_LTIME
TO_LTOD
TO_LWORD
TO_REAL
TO_SINT
TO_STRING
TO_TIME
TO_TOD
TO_UDINT
TO_UINT
TO_ULINT
TO_USINT
TO_WORD
TO_WSTRING

Beispiele:

Implementierungssprache ST:

VAR
    nNumber1 : INT;
    nNumber2 : INT;
    fNumber3 : REAL     := 123.456;
    bTruth   : BOOL;
    sText1   : STRING;
    sText2   : STRING   := 'Hello World!';
    wsText   : WSTRING;
    dEvent   : DATE     := D#2019-9-3;
    nEvent   : UINT;
    nData    : __UXINT;
END_VAR
nNumber1 := TO_INT(4.22);          // Result: 4
nNumber2 := TO_INT(fNumber1);      // Result: 123
bTruth   := TO_BOOL(1);            // Result: TRUE
sText1   := TO_STRING(342);        // Result: '342'
wsText   := TO_WSTRING(sText2);    // Result: "Hello World!"
nEvent   := TO_UINT(dEvent);       // Result: 44288
dEvent   := TO___UXINT(nNumber2);  // Result: 123

Siehe auch: