Skip to main content

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

ejemplo 32. Ejemplo
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:

  • sa_icon_message.png SA0020: Posible asignación de valor truncado a variable REAL