Ermittelt Anweisungen mit möglichem Verlust von Nachkommastellen.
Begründung: Ein Codestück der folgenden Art:
diTemp2 := 1
rTemp1 := TO_REAL(diTemp2 / DINT#2)
kann zu einer Fehlinterpretation führen. Der Autor oder Leser dieser Codezeile kann
der Annahme sein, die Division würde als REAL
-Operation durchgeführt und das Ergebnis würde in diesem Fall REAL#0.5
sein.
Dies ist jedoch nicht der Fall, die Operation wird als Integer-Operation durchgeführt,
das Ergebnis wird auf REAL
gecastet und rTemp1
erhält den Wert REAL#0
.
Um dies zu vermeiden, sollten Sie durch einen Cast dafür sorgen, dass die Operation
als REAL
-Operation durchgeführt wird:
rTemp1 := TO_REAL(diTemp2) / REAL#2
.
Wichtigkeit: Mittel
Beispiel
PROGRAM PLC_PRG VAR rTemp1 : REAL; diTemp2 : DINT; liTemp3 : LINT; END_VAR diTemp2 := diTemp2 + DINT#11; rTemp1 := DINT_TO_REAL(diTemp2 / DINT#3); // SA0057 rTemp1 := DINT_TO_REAL(diTemp2) / REAL#3.0; liTemp3 := liTemp3 + LINT#13; rTemp1 := LINT_TO_REAL(liTemp3 / LINT#7); // SA0057 rTemp1 := LINT_TO_REAL(liTemp3) / REAL#7.0; --> SA0057: Möglicherweise Verlust von Nachkommastellen