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
Beispiel
PROGRAM PLC_PRG VAR rx : LREAL; di : DINT; END_VAR rx := di * di // SA0020 rx := TO_LREAL(di) * TO_LREAL(di) // keine Meldung --> SA0020: Möglicherweise Zuweisung eines abgeschnittenen Werts an REAL-Variable