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 range of values 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) // No message --> SA0020: Possibly assignment of truncated value to REAL variable