Frage:
Warum ist das Ergebnis einer arithmetischen Operation falsch, obwohl dieses innerhalb des zulässigen Wertebereiches der Variablen am Ausgang liegt?
Antwort:
Bei der Durchführung arithmetischer Berechnungen ist der Wertebereich, in dem die Berechnung durchgeführt wird, entscheidend für die Ausgabe des korrekten Ergebnisses. Die Servo PLC / Drive PLC ermittelt diesen Wertebereich anhand der Datentypen der Variablen, die sich an den Eingängen der Operation befinden. Liegt das Ergebnis der Berechnung außerhalb dieses Wertebereiches, dann tritt ein Datentyp-Überlauf auf. D.h., die Operation gibt als Berechnungsergebnis ein von dem tatsächlichen Ergebnis verschiedenen Wert aus.
Beispiel:
dnOut : DINT;
nIn : INT;
dnOut := nIn + 1;
mit nIn = 32767 (maximaler positiver Wert des Datentypes INT) liefert die Addition das Ergebnis dnOut = -32768, da wegen des Datentyps der Variablen nIn die Berechnung im Wertebereich von INT durchgeführt wird.
Variablen unterschiedlicher Datentypen
Zur Durchführung einer arithmetischen Berechnung mit Variablen unterschiedlicher Datentypen wird von Lenze empfohlen, grundsätzlich entsprechende Funktionen zur Typkonvertierung so einzusetzen, dass an der Operation nur gleichartige Datentypen anliegen. Damit kann von der SPS der zu verwendende Wertebereich eindeutig ermittelt werden.
Beispiel:
sIn1 : SINT;
unIn2 : UINT;
dnOut : DINT;
dnOut := SINT_TO_DINT( sIn1 ) + UINT_TO_DINT( unIn2 );
Diese Berechnung erfolgt im Wertebereich von DINT.