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