SA0020: Possibile assegnazione del valore troncato alla variabile REAL
Rileva le operazioni su variabili intere che possono implicare un valore troncato di una variabile di tipo di dati REAL è assegnato.
Motivo: l'analisi del codice statico fornisce un errore se il risultato di un calcolo di numeri interi è a REAL- o LREAL-Le variabili sono assegnate. Il programmatore dovrebbe essere informato di una possibile interpretazione errata di tale assegnazione:lrealvar := dintvar1 * dintvar2.
Perché l'intervallo di valori di LREAL è maggiore di quella di DINT, si potrebbe presumere che il risultato del calcolo possa essere sempre rappresentato in LREAL. Ma non è così. Il processore calcola il risultato della moltiplicazione come numero intero e quindi esegue il cast del risultato LREAL. Un overflow nel calcolo dell'intero andrebbe perso. Per aggirare il problema, il calcolo deve essere eseguito come a REAL operazione: lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2).
Importanza: Alta
PROGRAM PLC_PRG
VAR
rX : LREAL;
dI : DINT;
END_VAR
rX := dI * dI // SA0020 rX := TO_LREAL(dI) * TO_LREAL(dI) //no message
Uscita in Messaggi vista:
SA0020: Eventuale assegnazione di valore troncato a variabile REAL