Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Standard utilizzato per calcoli in virgola mobile (floating)
- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 1 mese fa da Sergio Bertana.
-
AutorePost
-
Aprile 29, 2011 alle 6:32 am #35003AnonimoInattivo
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.
Aprile 29, 2011 alle 6:39 am #36719Sergio BertanaAmministratore del forumIl 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.Marzo 21, 2012 alle 5:12 pm #37185Sergio BertanaAmministratore del forumRiporto 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#42F7BD71Se 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).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.