SA0020: Möglicherweise Zuweisung eines abgeschnittenen Werts an REAL-Variable
Ermittelt Operationen auf Integervariablen, bei denen möglicherweise ein abgeschnittener Wert einer Variablen vom Datentyp REAL
zugewiesen wird.
Begründung: Die statische Codeanalyse gibt einen Fehler aus, wenn das Ergebnis einer Integerberechnung einer REAL
- oder LREAL
-Variablen zugewiesen wird. Der Programmierer soll dabei auf eine möglicherweise fehlerhafte Interpretation einer solchen Zuweisung aufmerksam gemacht werden:lrealvar := dintvar1 * dintvar2
.
Da der Wertebereich von LREAL
größer ist als der von DINT
, könnte man annehmen, das Ergebnis der Rechnung würde in jedem Fall in LREAL
dargestellt werden können. Das ist aber nicht der Fall. Der Prozessor berechnet das Ergebnis der Multiplikation als Integer und castet anschließend das Ergebnis nach LREAL
. Ein Überlauf in der Integer-Berechnung würde verloren gehen. Wenn man das Problem umgehen will, dann muss die Rechnung bereits als REAL
-Operation erfolgen:lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
Wichtigkeit: Hoch
PROGRAM PLC_PRG VAR rX : LREAL; dI : DINT; END_VAR
rX := dI * dI // SA0020 rX := TO_LREAL(dI) * TO_LREAL(dI) //no message
Ausgabe unter Ansicht Meldungen:
SA0020: Möglicherweise Zuweisung eines abgeschnittenen Werts an REAL-Variable