SensorCatalog

Decodificatore di registri Modbus

Converte registri holding o di input grezzi nel numero che contengono, in ogni ordine di byte e di parole, oppure un valore in registri.

Registri

Direzione

Valori dei registri

Inseriti come

Tutti gli ordini dei byte

ABCD · big-endian
1041 20 00 00
CDAB · parole scambiate
2,3362448 × 10⁻⁴¹lettura improbabile · 00 00 41 20
BADC · byte scambiati
1,6347736 × 10⁻¹⁹lettura improbabile · 20 41 00 00
DCBA · little-endian
1,1570521 × 10⁻⁴¹lettura improbabile · 00 00 20 41

Indirizzo del registro

Indirizzo di protocollo
00x0000 · contato da 0, come inviato nella richiesta
Tabella dati
Registri holding (4x)lettura FC 03 · scrittura FC 06, 16
Numeri di riferimento
40001 · 400001notazione a 5 e 6 cifre, contata da 1
Registri letti
0 … 12 registri consecutivi per questo tipo di dato
Formule e norme
ABCD: A B C D   CDAB: C D A B   BADC: B A D C   DCBA: D C B A
Valore = raw × Fattore di scala + Offset

Modbus invia ogni registro a 16 bit con il byte alto per primo. Per un valore a 32 o 64 bit distribuito su più registri il protocollo non fissa l’ordine: molti dispositivi inviano prima il registro alto (ABCD), altri quello basso (CDAB) e alcuni scambiano anche i byte di ogni registro (BADC, DCBA). Ogni riga decodifica gli stessi registri in uno di questi ordini; le lettere indicano dove arriva ciascun byte del valore, con A il più significativo.

I valori in virgola mobile sono IEEE 754 binary32 (FLOAT32) o binary64 (FLOAT64). Un ordine sbagliato dà di solito un valore assurdamente grande o piccolo, o non un numero; quelle righe sono attenuate. Il valore ingegneristico è grezzo × fattore di scala + offset. I riferimenti come 40001 seguono la convenzione Modicon: la prima cifra indica la tabella e il resto conta da 1, mentre la richiesta porta l’indirizzo contato da 0.

Servono sensori e trasmettitori con uscita Modbus RTU o TCP?

Chiedi un prezzo a SensorSpan

Come funziona il decodificatore di registri Modbus

Modbus trasporta i dati in registri a 16 bit, e ogni registro viaggia con il byte alto per primo. È tutto ciò che il protocollo stabilisce. Una temperatura inviata come float a 32 bit, o un contatore di energia come intero a 64 bit, si distribuisce su due o quattro registri, e l’ordine di quei registri lo sceglie il costruttore. La maggior parte dei dispositivi invia prima il registro alto, alcuni quello basso e pochi scambiano anche i due byte di ogni registro.

Il decodificatore prende i registri esattamente come li mostra il master, il gateway o lo strumento di prova e li decodifica in tutti e quattro gli ordini insieme. L’ordine si scrive con le lettere dei byte del valore, con A il più significativo: ABCD è big-endian, CDAB il comune scambio di parole, BADC scambia i byte di ogni registro, DCBA è interamente little-endian.

Trovare l’ordine dei byte giusto

Leggi una coppia di registri sapendo più o meno cosa dovrebbe indicare il dispositivo e cerca la riga che ha senso. I registri 0x4120 0x0000 valgono 10,0 come ABCD. Letti come CDAB danno 2,3 × 10⁻⁴¹, un valore che nessun sensore indica, e il decodificatore attenua quelle righe. Se il dispositivo invia prima il registro basso vedrai invece 0x0000 0x4120, e la riga CDAB mostra il 10.

Una volta noto l’ordine di un valore, è lo stesso per tutti i valori di quel dispositivo e tipo di dato. Impostalo nella configurazione del master invece di scambiare byte nel programma del PLC.

Scalatura e tipi di dato

Molti dispositivi inviano interi con una scala implicita: una pressione di 1234 che significa 12,34 bar, o una temperatura in decimi di grado. Inserisci fattore di scala e offset dalla mappa dei registri e il decodificatore mostra il valore ingegneristico accanto a quello grezzo; il valore è grezzo × fattore di scala + offset. Lo stesso fattore vale all’inverso quando codifichi un valore da scrivere.

INT16 e UINT16 differiscono solo per come si legge il bit più alto: 0xFFFF è 65535 senza segno e −1 con segno. La maggior parte delle mappe dei registri indica il tipo di ogni indirizzo; altrimenti un valore che non dovrebbe mai essere negativo di solito è senza segno.

Numeri di registro e indirizzi

I manuali dei dispositivi elencano spesso i registri come 40001, 30001 o 400001. È la convenzione Modicon: la prima cifra indica la tabella (4 per i registri holding, 3 per i registri di input, 0 per i coil, 1 per gli ingressi discreti) e il resto conta da 1. La richiesta sulla linea porta l’indirizzo contato da 0, quindi 40001 è l’indirizzo 0 dei registri holding, letto con il codice funzione 03. Inserisci il riferimento per vedere l’indirizzo di protocollo, i codici funzione e i registri occupati da un valore su più registri.

Un errore di uno qui è la causa più frequente di un valore plausibile ma sbagliato: il master legge la seconda metà di un valore e la prima del successivo.

Domande frequenti

Perché il decodificatore mostra NaN in alcune righe?

Un float con tutti i bit dell’esponente a uno non è un numero, oppure è infinito. Un ordine dei byte sbagliato produce spesso questo schema; lo fa anche un dispositivo che segnala apposta un guasto del sensore con NaN. Per il secondo caso consulta il manuale del dispositivo.

Posso inserire i registri come un’unica stringa esadecimale?

Sì. Otto o sedici cifre esadecimali senza spazi vengono divise in registri da quattro cifre, quindi 41200000 si legge come 0x4120 0x0000.

E Modbus TCP?

La disposizione dei registri è la stessa in TCP e in RTU; cambia solo la trama. L’ordine dei byte dei valori su più registri dipende dal dispositivo, non dal mezzo di trasporto.

↑ ↓ scegli · Invio apri · Esc chiudi