Decodificatore di registri Modbus

Decodifica i registri Modbus come numeri a virgola mobile o interi e confronta i valori ottenuti con diversi ordini di byte e registri.

Hai i valori dei registri? Decodificali qui. Per ottenere i registri da un numero, usa il convertitore IEEE 754 per numeri in virgola mobile.

Modbus e collegamenti seriali Aggiornato Gratuito, senza registrazione

Registri

Esempi

Quattro cifre esadecimali per registro, nell'ordine di lettura

Interpretazione
Ordine dei byte

Valore, ordine ABCD

2,5921e−41

CDAB, con registri invertiti
198656
BADC, con byte invertiti
2,3777e−41
DCBA, little-endian
50
Byte decodificati, nell'ordine
00 00 48 42

NaN o infinito di solito indicano un tipo o un ordine errato, oppure uno stato «nessun valore» documentato nella mappa dei registri.

Come viene calcolato

The registers are laid out as bytes in the chosen order (ABCD is the first register high byte first) and read as an IEEE 754 float or a two’s-complement integer

Nell'ordine ABCD, i byte sono 00 00 48 42; interpretati come un numero a virgola mobile IEEE 754 a 32 bit, danno 2,5921e−41.

Suggerimento: Confronta il risultato con un valore noto, per esempio una tensione vicina a 230 o 400 V, poi conferma tipo e ordine per ogni blocco di registri documentato prima di fidarti delle altre misure.

Decodificare un numero a virgola mobile Modbus (IEEE 754)

Un registro Modbus contiene 16 bit: un numero a virgola mobile o intero a 32 bit occupa quindi due registri e un valore a 64 bit ne occupa quattro. La specifica Modbus fissa l'ordine dei byte all'interno di ogni registro (byte più significativo per primo), ma non l'ordine dei registri; per questo i dispositivi differiscono. Inserisci i registri nell'ordine di lettura: il decodificatore mostra affiancati i valori ottenuti con tutti e quattro gli ordini. L'ordine che produce una misura sensata è spesso evidente, ma va confermato sulla mappa del dispositivo.

Mettere i byte nell'ordine corretto

ABCD: A B nel primo registro, C D nel secondo

L'ordine ABCD, con il byte più significativo per primo, è il più comune. CDAB inverte i due registri, BADC inverte i byte all'interno di ciascun registro e DCBA inverte tutti e quattro i byte.

Separare i 32 bit

1 bit di segno | 8 bit di esponente | 23 bit di frazione

È il formato IEEE 754 a precisione singola. Il primo bit rappresenta il segno, gli otto successivi l'esponente con bias 127 e gli ultimi 23 la frazione dopo l'1 iniziale implicito per i valori normali.

Calcolare il valore

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

Per 43 6A 00 00 il segno è 0 e l'esponente è 0x86 = 134. Il fattore è quindi 27 = 128; la frazione 0x6A0000 dà 1,828125. Il prodotto 1,828125 × 128 è 234.

Interi

valore = registro più significativo × 65536 + registro meno significativo

Un intero senza segno a 32 bit unisce i due registri. Un intero con segno usa il complemento a due: se il bit più significativo è 1, sottrai 232 (oppure 216 per un solo registro). FF38, interpretato come intero con segno a 16 bit, vale −200.

Esempi: decodifica dei numeri a virgola mobile Modbus

Una tensione di 234 V su due registri

Un contatore restituisce 436A e 0000 per una tensione di fase. Nell'ordine ABCD, i byte 43 6A 00 00 rappresentano 234. Con i registri invertiti, gli stessi dati danno 2,4184e‑41: è un chiaro indizio di ordine errato.

Valore, ordine ABCD 234 Apri nella calcolatrice

Numero a virgola mobile con registri invertiti

Un altro dispositivo restituisce prima 4000 e poi 43C8. Nell'ordine ABCD il risultato è 2,004137, un valore plausibile ma errato. Con i registri invertiti (CDAB), i byte diventano 43 C8 40 00 e danno 400,5. Verifica una misura nota, per esempio una tensione concatenata, prima di fidarti degli altri valori di quel blocco di registri documentato.

Valore, ordine CDAB 400,5 Apri nella calcolatrice

Contatore di energia come intero senza segno a 32 bit

I registri di energia contengono spesso interi senza segno a 32 bit. 0001 E240 vale 1 × 65.536 + 57.920 = 123456. La mappa dei registri indica il fattore di scala, per esempio 0,1 kWh per unità, che in questo caso darebbe 12.345,6 kWh.

Valore, ordine ABCD 123456 Apri nella calcolatrice

Valori comuni nei registri a virgola mobile a 32 bit

Registri di misure comuni nell'ordine ABCD e valori ottenuti se gli stessi registri vengono letti con l'ordine dei registri invertito. Un numero molto piccolo come 2,4e‑41 indica spesso un ordine errato.

Registri (esad.)Lettura ABCDLettura CDAB
0000 000000
3DCC CCCD0,1−107605600
3F73 33330,954,1734392e−8
3F80 000012,278e−41
BF80 0000−16,8697e−41
4248 0000502,3777e−41
4366 00002302,4178e−41
43C8 00004002,4315e−41
447A 000010002,4565e−41

Scarica questa tabella (CSV)

Domande su decodifica dei numeri a virgola mobile Modbus

Perché il mio valore Modbus è enorme o minuscolo?

Nella maggior parte dei casi sono errati l'ordine dei registri o il tipo di dato. Un numero a virgola mobile letto nell'ordine sbagliato può dare 2,4e‑41 o 5,9e+25. Prova i diversi ordini e confronta il risultato con un valore verificabile sul display del dispositivo.

Modbus trasmette prima il byte più significativo?

All'interno di un registro sì: la specifica trasmette prima il byte più significativo. Per i valori distribuiti su due o più registri non definisce un ordine, quindi la scelta dipende dal produttore. La mappa dei registri del dispositivo dovrebbe indicarlo.

Qual è la differenza tra ABCD e CDAB?

È l'ordine dei due registri. In ABCD il primo registro contiene la metà più significativa del valore; in CDAB contiene quella meno significativa. L'ordine dei byte all'interno di ciascun registro resta identico.

Come si legge un valore a 32 bit?

Leggi due registri consecutivi in un'unica richiesta, per esempio con la funzione 03 e quantità 2, a partire dall'indirizzo indicato nella mappa. Il convertitore di indirizzi Modbus trasforma una notazione del manuale come 40001 nell'indirizzo da inviare.

Che cosa significa NaN in un registro?

NaN significa «non un numero». Alcuni dispositivi lo usano, oppure usano 0xFFFFFFFF, per indicare che una misura non è disponibile. Può anche indicare tipo o ordine errati: controlla la mappa prima di dedurre che ci sia un guasto.

Limiti di questo risultato

  • Lo strumento non deduce l'ordine corretto da un valore che sembra plausibile.
  • NaN e infinito possono indicare stati non validi, non disponibili o fuori intervallo secondo la documentazione, oppure un tipo o un ordine errato. Consulta la mappa dei registri del dispositivo.

Misuralo continuamente

Una volta noti tipo e ordine, uno ZMB legge i registri di un dispositivo RS-485 e invia i dati al Gateway tramite la rete mesh wireless, senza riportare un cavo dati fino al quadro.

Guide correlate

Fonti

  1. MODBUS Application Protocol Specification V1.1b3 (si apre in una nuova scheda) (PDF) Modbus Organization, 2012-04-26
  2. TeSys Tera Modbus RTU communication guide: UINT32 frame example (si apre in una nuova scheda) Schneider Electric, DOCA0355EN-01