Detects operations on integer variables for which a truncated value could be assigned to a REAL
data type variable
Justification: Static analysis issues an error when the result of an integer calculation is assigned to a REAL
or LREAL
variable. The programmer should be alerted to a possible incorrect interpretation of this kind of assignment: lrealvar := dintvar1 * dintvar2
.
Because the value range of LREAL
is greater than that of DINT
, one could assume that the result of the calculation could always be represented in LREAL
. But that is not the case. The processor calculates the result of the multiplication as an integer and then casts the result to LREAL
. An overflow in the integer calculation would be lost. To work around the problem, the calculation has to be done as a REAL
operation: lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
.
Importance: High
Example
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