Vai al contenuto

Standard utilizzato per calcoli in virgola mobile (floating)

Home Forum Controllori SlimLine e Netsyst (LogicLab) Standard utilizzato per calcoli in virgola mobile (floating)

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #35003
    Anonimo
    Inattivo

    Devo utilizzare una CPU Slim Line per eseguire la lettura di variabili da analizzatori di rete elettrica, tramite una connessione seriale in RS485 con protocollo modbus RTU. I dati acquisiti saranno elaborati e resi disponibili per la lettura tramite rete ethernet con protocollo modbus over IP.

    Tra le variabili da acquisire vi sono anche alcune variabili in virgola mobile a singola precisione (32 bit), mi chiedevo quale è il formato di rappresentazione dei numeri in virgola mobile (floating) delle variabili di tipo REAL nello Slim Line.

    #36719
    Sergio Bertana
    Amministratore del forum

    Il formato di rappresentazione dei numeri in virgola mobile (floating) delle variabili di tipo REAL nei sistemi Slim Line segue lo standard IEEE 754-1985 in singola precisione a 32 bit (I numeri sono rappresentati su 32 bit, 4 bytes).
     
    Per maggiori informazioni sul formato IEEE 754 si rimanda alla descrizione riportata da Wikipedia.
    Su Internet è possibile trovare ottimi convertitori di numeri in floating.

    #37185
    Sergio Bertana
    Amministratore del forum

    Riporto la formula da iutilizzarsi per l calcolo del valore REAL di un numero decimale.

    Calcolo esponente
    Occorre trovare l’esponente di 2 per cui dividendo il numero si ottiene un risultato maggiore di 1 e minore di 2.

    Calcolo mantissa
    Si divide il numero per 2 elevato all’esponente trovato e si sottrae dal risultato 1.
    Si moltiplica il numero per 2 elevato alla 23.

    Calcolo valore REAL
    Si somma 127 al valore di esponente trovato.
    Si moltiplica per 2 elevato alla 23 il risultato e si somma al valore della mantissa.

    Esempi
    Numero decimale 123.87, l’esponente è 6.
    Mantissa (123.87/2^6)=1,93546875 sottraggo 1 diventa 0.93546875. (0.93546875*2^23) in hex 16#77BD71
    Valore REAL ((127+6)*2^23) in hex 16#42800000, sommando la mantissa 16#42800000+16#77BD71=16#42F7BD71

    Se il numero è negativo si somma 16#80000000

    Attenzione! Su SlimLine i numeri sono rappresentati in Little-Endian quindi il valore REAL di 123.87 rappresentato come  sequenza di bytes sarà 16#71, 16#BD, 16#F7, 16#42. Come si vede dallo screenshot eseguendo un programma che ha allocate allo stesso indirizzo dell’area DB100 tre diverse variabili una REAL, una DWORD ed un array di BYTES. Caricando il programma sullo SlimLine e definendo nella finestra di Watch diversi valori della variabile REAL si può vedere la rappresentazione del valore (Download programma).

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Devi essere connesso per rispondere a questo topic.