Convertitore di numeri IEEE 754

Converti un numero decimale nella rappresentazione esadecimale IEEE 754 a 32 o 64 bit, oppure ricava il valore dai bit, con i registri Modbus in quattro disposizioni mostrate.

Hai un numero da trasmettere? Convertilo qui. Per decodificare i registri restituiti da un dispositivo, usa il decodificatore di registri Modbus.

Modbus e collegamenti seriali Aggiornato Gratuito, senza registrazione

Numero in virgola mobile a 32 bit

50decimale
4248 0000come memorizzato, precisione singola a 32 bit
01000010

A 42

01001000

B 48

00000000

C 00

00000000

D 00

  • Segno, 1 bit
  • Esponente, 8 bit
  • Frazione, 23 bit

+1.f =1,5625×25=50

segno
0, positivo
esponente
132 − 127 = 5
frazione
0x480000

Memorizzato esattamente.

La distanza dal prossimo numero a 32 bit rappresentabile qui è 3,815 × 10⁻⁶.

Quale conversione vuoi eseguire?
Conversione
Precisione
Valore

Per esempio 230.5, -12 o 1.5e-3

Otto cifre a 32 bit, sedici a 64 bit; gli spazi sono ammessi

precisione singola a 32 bit in esadecimale

0x42480000

precisione singola a 32 bit.

Valore effettivamente memorizzato
50
Bit di segno
0 (positivo)
Esponente
132 − 127 = 5
Frazione, 23 bit
0x480000
Classe
Numero normale
Registri Modbus, ABCD (big-endian)
4248 0000
Registri Modbus, CDAB (parole invertite)
0000 4248
Registri Modbus, BADC (byte invertiti)
4842 0000
Registri Modbus, DCBA (little-endian)
0000 4842
Come viene calcolato
  1. x = (−1)^s × 1.f × 2^(e − 127)=(−1)⁰ × 1,5625 × 2⁵=50

50 come numero IEEE 754 in precisione singola a 32 bit è 0x42480000.

Suggerimento: Un valore plausibile con un certo ordine delle parole è un indizio, non una prova. Conferma l’ordine dei byte e delle parole dalla mappa dei registri del dispositivo o con una prova controllata su un valore noto. I registri 4120 0000 rappresentano 10 in ordine ABCD, ma circa 2,3e-41 in ordine CDAB.

Convertire un numero in virgola mobile in esadecimale e viceversa

Un numero IEEE 754 a precisione singola occupa 32 bit: 1 bit di segno, 8 bit di esponente e 23 bit di frazione. 230,5 si memorizza come 0x43668000. Contatori di energia, analizzatori di potenza e PLC usano questo formato per misure come tensione, potenza e frequenza, che trasmettono via Modbus in due registri a 16 bit.

I registri restituiti da un dispositivo contengono i bit grezzi. Leggerli come interi dà un valore privo di senso: occorre decodificarli come numero in virgola mobile, rispettando l'ordine delle parole.

Valore di un numero memorizzato

x = (−1)s × 1.f × 2e − 127

s è il bit di segno, e il campo esponente a 8 bit e f i 23 bit della frazione interpretati come frazione binaria. L'1 iniziale è implicito e non viene memorizzato. A precisione doppia, su 64 bit, l'esponente occupa 11 bit con bias 1023 e la frazione 52 bit.

Da decimale a esadecimale

Per i valori normali, trova s, e ed f affinché (−1)s × 1.f × 2e − 127 sia il valore più vicino a x

La maggior parte dei numeri decimali non ha una rappresentazione binaria esatta, quindi viene memorizzato il valore più vicino. 0,1 diventa 0,100000001490116, codificato come 0x3DCCCCCD. Il calcolatore mostra il valore effettivamente memorizzato e l'errore di arrotondamento.

Valori speciali

e = 0: zero o subnormale; e = 255: infinito o NaN

Un campo esponente tutto a zero rappresenta lo zero o i numeri subnormali inferiori a 1,18 × 10−38. Se è tutto a uno, rappresenta infinito quando la frazione è zero, altrimenti NaN («valore non numerico»). Molti contatori inviano NaN, spesso 0x7FC00000, quando una misura non è disponibile.

Modbus definisce soltanto registri a 16 bit, trasmessi con il byte più significativo per primo: un numero in virgola mobile a 32 bit ne occupa quindi due. La specifica non stabilisce quale registro venga prima. Molti dispositivi inviano prima la parola più significativa (ABCD), altri quella meno significativa (CDAB); alcuni invertono anche i byte in ciascun registro (BADC, DCBA). Conferma l’ordine dalla mappa dei registri del dispositivo o con una prova controllata su un valore noto. Una lettura soltanto plausibile non basta a stabilirlo.

Esempi di numeri in virgola mobile IEEE 754

Una frequenza di 50 Hz

50 = 1,5625 × 25: il bit di segno è 0, il campo esponente è 5 + 127 = 132 e la frazione rappresenta 0,5625. Il risultato è 0x42480000, trasmesso via Modbus nei registri 4248 0000 in ordine ABCD.

precisione singola a 32 bit in esadecimale 0x42480000 Apri nella calcolatrice

Gli stessi registri nell'ordine sbagliato

Se un contatore invia per prima la parola meno significativa e il software legge per prima quella più significativa, 50 Hz arriva come 0000 4248. Interpretato in ordine ABCD, questo valore è 2,3777e‑41: un numero subnormale vicino a zero. Un valore minuscolo, enorme o NaN quando ci si aspetta una misura normale può indicare un ordine delle parole errato.

Valore decimale 2,3777e-41 Apri nella calcolatrice

Perché 0,1 non è esattamente 0,1

In binario, 0,1 è periodico, come 1/3 in decimale. Il numero a 32 bit più vicino è 0,100000001490116, codificato come 0x3DCCCCCD. L'errore è circa 1,5 × 10−9, molto inferiore all'accuratezza di un contatore; spiega però perché un confronto per uguaglianza esatta tra un numero in virgola mobile e 0,1 può fallire.

precisione singola a 32 bit in esadecimale 0x3DCCCCCD Apri nella calcolatrice

Valori comuni: da numero in virgola mobile a esadecimale

Rappresentazioni binarie IEEE 754 che si incontrano nei registri dei contatori, in ordine ABCD.

Decimale32 bit64 bit
00x000000000x0000000000000000
10x3F8000000x3FF0000000000000
−10xBF8000000xBFF0000000000000
0.50x3F0000000x3FE0000000000000
0.10x3DCCCCCD0x3FB999999999999A
20x400000000x4000000000000000
100x412000000x4024000000000000
500x424800000x4049000000000000
600x427000000x404E000000000000
1000x42C800000x4059000000000000
2300x436600000x406CC00000000000
4000x43C800000x4079000000000000
10000x447A00000x408F400000000000
3.141590x40490FD00x400921F9F01B866E

Scarica questa tabella (CSV)

Domande su Numeri in virgola mobile IEEE 754

Quante cifre significative contiene un numero in virgola mobile a 32 bit?

Circa sette cifre decimali significative. Oltre 16.777.216 (224) non tutti gli interi sono più rappresentabili. Per un contatore di energia, un totale in kWh memorizzato come numero a 32 bit non può più avanzare di un'unità dopo circa 16,8 milioni. Per grandi totali si usano quindi numeri in virgola mobile a 64 bit oppure interi.

Che cosa significano ABCD, CDAB, BADC e DCBA?

Sono quattro disposizioni comuni dei byte per un valore a 32 bit distribuito su due registri. A è il byte più significativo. ABCD invia prima il registro più significativo, con il byte più significativo per primo come prevede Modbus all’interno di ciascun registro. CDAB inverte i due registri; BADC inverte i byte in ciascuno; DCBA fa entrambe le cose. Verifica la disposizione effettiva nella mappa dei registri del dispositivo.

L'esadecimale corrisponde a ciò che invia il contatore?

In ordine ABCD sì: i quattro byte esadecimali appaiono in quell'ordine sul collegamento. Per gli altri ordini usa le parole di registro indicate dal calcolatore. Il decodificatore dei registri Modbus parte dai registri e mostra tutti gli ordini.

Perché un contatore restituisce NaN?

NaN è un valore IEEE che non rappresenta un numero, non uno zero. Un contatore può usarlo per una lettura non disponibile, produrlo dopo un calcolo non valido o sembrare restituirlo se i registri sono decodificati nell’ordine errato. Consulta la mappa dei registri e lo stato del dispositivo per stabilirne la causa. Non registrarlo come zero.

Limiti di questo risultato

  • Modbus definisce solo registri a 16 bit. La disposizione di un numero in virgola mobile nei registri dipende dalla mappa del produttore, non dal protocollo. Le quattro disposizioni mostrate non coprono tutte le possibilità, soprattutto per i valori a 64 bit.
  • NaN può avere diverse rappresentazioni binarie; questo strumento mostra quella inserita o il valore predefinito della piattaforma.
  • Un valore decimale inserito viene prima letto come numero a 64 bit; le cifre oltre circa 17 cifre significative vanno quindi perse.

Misuralo continuamente

Edge legge i contatori Modbus su TCP e RTU e decodifica ogni registro secondo il tipo di dato e l'ordine delle parole impostati nel modello del dispositivo. Un modulo ZMB collega via radio un contatore RS-485 al Gateway.

Guide correlate

Fonti

  1. IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019) (si apre in una nuova scheda) IEEE, 2019-07-22
  2. MODBUS Application Protocol Specification (si apre in una nuova scheda) (PDF) Modbus Organization, V1.1b3, 2012-04-26