Skip to main content

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

Esempio 32. Esempio
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:

  • sa_icon_message.png SA0020: Eventuale assegnazione di valore troncato a variabile REAL