SA0020: Posible asignación de valor truncado a variable REAL
Detecta operaciones en variables enteras para las que se podría asignar un valor truncado a un REAL
variable de tipo de datos
Justificación: El análisis estático genera un error cuando el resultado de un cálculo entero se asigna a un REAL
o LREAL
variable. El programador debe ser alertado de una posible interpretación incorrecta de este tipo de asignación: lrealvar := dintvar1 * dintvar2
.
Debido a que el rango de valores de LREAL
es mayor que la de DINT
, se podría suponer que el resultado del cálculo siempre podría representarse en LREAL
. Pero ese no es el caso. El procesador calcula el resultado de la multiplicación como un número entero y luego convierte el resultado a LREAL
. Se perdería un desbordamiento en el cálculo de enteros. Para solucionar el problema, el cálculo debe hacerse como un REAL
operación: lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
.
Importancia: Alta
PROGRAM PLC_PRG VAR rX : LREAL; dI : DINT; END_VAR
rX := dI * dI // SA0020 rX := TO_LREAL(dI) * TO_LREAL(dI) //no message
Salida en el Mensajes vista:
SA0020: Posible asignación de valor truncado a variable REAL