SA0057: Posible pérdida de decimales
Detecta sentencias con posible pérdida de decimales
Justificación: Una pieza de código del siguiente tipo (diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)
) puede causar una mala interpretación. El autor o lector de esta línea de código puede suponer que la división se realizaría como un REAL
operación, y en este caso el resultado sería REAL#0.5
. Sin embargo, eso no es verdad. Es una operación entera. El resultado se proyecta a REAL
y rTemp1
obtiene el valor REAL#0
.
Para evitar esto, utilice un yeso para asegurarse de que la operación se realice como un REAL
operación:
rTemp1 := TO_REAL(diTemp2) / REAL#2;
Importancia: Media
PROGRAM PLC_PRG VAR rTemp1 : REAL; diTemp2 : DINT; liTemp3 : LINT; END_VAR
diTemp2 := diTemp2 + DINT#11; // SA0057 rTemp1 := DINT_TO_REAL(diTemp2 / DINT#3); rTemp1 := DINT_TO_REAL(diTemp2) / REAL#3.0; liTemp3 := liTemp3 + LINT#13; // SA0057 rTemp1 := LINT_TO_REAL(liTemp3 / LINT#7); rTemp1 := LINT_TO_REAL(liTemp3) / REAL#7.0;
Salida en el Mensajes vista:
SA0057: Posible pérdida de decimales