Skip to main content

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

Beispiel 32. Beispiel
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:

  • sa_icon_message.png SA0020: Möglicherweise Zuweisung eines abgeschnittenen Werts an REAL-Variable