SA0020: Possibile assegnazione di un valore troncato alla variabile REALPermalink

Rileva le operazioni su variabili intere per le quali un valore troncato potrebbe essere assegnato a una variabile di tipo ‎REAL‎.

Giustificazione: L'analisi statica genera un errore quando il risultato di un calcolo intero viene assegnato a una variabile ‎REAL‎ o ‎LREAL‎. Il programmatore deve essere avvisato di una possibile interpretazione errata di questo tipo di assegnazione: ‎lrealvar := dintvar1 * dintvar2‎. Poiché l'intervallo di valori di ‎LREAL‎ è maggiore di quello di ‎DINT‎, si potrebbe supporre che il risultato del calcolo possa sempre essere rappresentato in ‎LREAL‎. Ma non è questo il caso. Il processore calcola il risultato della moltiplicazione come un numero intero e poi lo lancia a ‎LREAL‎. Un overflow nel calcolo dei numeri interi andrebbe perso. Per aggirare il problema, il calcolo deve essere eseguito come operazione ‎REAL‎: ‎lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)‎.

Importanza: Alto

Esempio

PROGRAM PLC_PRG
VAR
 rx : LREAL;
 di : DINT;
END_VAR
rx := di * di  			                // SA0020
rx := TO_LREAL(di) * TO_LREAL(di) // No message

--> SA0020: Possibly assignment of truncated value to REAL variable