Calcolatore CRC e LRC Modbus

Calcola o verifica il CRC-16 di un frame Modbus RTU oppure l'LRC di un frame Modbus ASCII e osserva il significato dei singoli byte.

Modbus e collegamenti seriali Aggiornato Gratuito, senza registrazione

LRC, ASCII

Aggiungi 7E per inviare questo frame. Se incolli un frame che contiene già il suo LRC, il valore viene verificato.

Lettura registri holding, richiesta

ByteCampoValoreSignificato
11Indirizzo dell'unità17Il server a cui è destinato il frame, o da cui proviene
03Funzione0x03Lettura registri holding
00 6BIndirizzo iniziale107Registro holding 40108, indirizzo di protocollo 0x006B
00 03Quantità33 registri holding; la risposta contiene 6 byte di dati
7ELRC0x7ETrasmesso come due caratteri ASCII prima di CR LF

Frame completo

  • Con spazi11 03 00 6B 00 03 7E
  • Array C0x11, 0x03, 0x00, 0x6B, 0x00, 0x03, 0x7E
  • Senza spazi1103006B00037E
  • Modbus ASCII, poi CR LF:1103006B00037E
LRC, byte per byte

Ogni byte viene aggiunto alla somma, eliminando il riporto.

ByteValoreSomma successiva
1110x11
2030x14
3000x14
46B0x7F
5000x7F
6030x82

La somma termina a 0x82; il suo complemento a due è l'LRC, 7E.

Verifica
Verifica
Frame

Esempi

Inizia dall'indirizzo dell'unità. Includi il CRC per verificarlo

Byte LRC

7E

Richiesta Lettura registri holding a unità 17.

Frame ASCII, prima di CR LF
:1103006B00037E
Somma dei byte, senza riporto
0x82
Lunghezza del frame con due punti, LRC e CR LF
17 caratteri

Modbus ASCII rappresenta ogni byte con due caratteri esadecimali, inizia con due punti e termina con CR LF.

Come viene calcolato
  1. Somma = indirizzo + funzione + dati, senza riporto=11 + 03 + 00 + 6B + 00 + 03=0x82
  2. LRC = complemento a due della somma = (0x100 − somma) mod 0x100=0x100 − 0x82=0x7E

Choose the gateway connection for this Modbus line.

Configura un sistema

L'LRC Modbus ASCII di 11 03 00 6B 00 03 è 7E, quindi il frame è :1103006B00037E seguito da CR LF.

Suggerimento: Incolla un frame direttamente da una cattura seriale, CRC compreso. Se il codice funzione determina la lunghezza, gli ultimi byte vengono verificati e il risultato indica se il valore corrisponde.

Calcolare un CRC-16 Modbus

Ogni frame Modbus RTU termina con un CRC a 16 bit calcolato su tutti i byte precedenti e trasmesso con il byte meno significativo per primo. Un dispositivo che rileva un CRC diverso scarta il frame senza rispondere: un CRC errato si manifesta quindi come timeout, non come risposta di eccezione. Modbus ASCII usa un LRC di un byte. Il calcolatore determina entrambi i valori di verifica e mostra il frame byte per byte.

CRC-16 (Modbus RTU)

Partenza 0xFFFF; per ogni byte: XOR, poi 8 × (spostamento a destra; se esce un bit pari a 1, XOR 0xA001)

Inizializza il registro a 0xFFFF. Applica XOR tra il primo byte e il byte meno significativo del registro, poi sposta il registro a destra otto volte, applicando XOR con 0xA001 dopo ogni spostamento che fa uscire un bit pari a 1. Ripeti per ogni byte, dall'indirizzo dell'unità all'ultimo byte dei dati.

Ordine dei byte trasmessi

CRC 0x8776 → trasmesso come 76 87

Il CRC è l'unico campo di un frame Modbus trasmesso con il byte meno significativo per primo. Gli altri campi, inclusi indirizzi e valori dei registri, vengono trasmessi con il byte più significativo per primo.

LRC (Modbus ASCII)

LRC = (0x100 − (somma dei byte modulo 0x100)) modulo 0x100

Somma i byte di indirizzo, funzione e dati, ignora l'eventuale riporto oltre gli 8 bit e calcola il complemento a due. L'LRC viene trasmesso come due caratteri esadecimali dopo i dati e prima di CR LF.

Esempi: CRC Modbus

Leggere tre registri holding dall'unità 17

Unità 0x11 (17), funzione 03, indirizzo iniziale 0x006B, tre registri: è la richiesta della guida alla linea seriale Modbus. Il suo CRC è 0x8776, trasmesso come 76 87; il frame completo è quindi 11 03 00 6B 00 03 76 87.

Byte CRC, nell'ordine di trasmissione 76 87 Apri nella calcolatrice

La stessa richiesta in Modbus ASCII

0x11 + 0x03 + 0x00 + 0x6B + 0x00 + 0x03 = 0x82. Il suo complemento a due è 0x7E: l'LRC è quindi 7E e la riga è :1103006B00037E, seguita da CR LF.

Byte LRC 7E Apri nella calcolatrice

Verificare un frame acquisito

Una cattura seriale contiene 01 03 00 00 00 0A C5 CD. Inserendo i primi sei byte si ottiene C5 CD, identico agli ultimi due byte acquisiti: il valore di verifica di questo frame corrisponde. Se sono diversi, controlla cablaggio, terminazione e interferenze prima del dispositivo.

Byte CRC, nell'ordine di trasmissione C5 CD Apri nella calcolatrice

CRC e LRC di richieste Modbus comuni

Richieste delle unità 1 e 17, con il CRC nell'ordine di trasmissione e l'LRC Modbus ASCII.

Frame (esad.)CRC-16 trasmessoLRC
01 03 00 00 00 0184 0AFB
01 03 00 00 00 0AC5 CDF2
01 04 00 00 00 0271 CBF9
01 06 00 01 00 0398 0BF5
11 03 00 6B 00 0376 877E
11 10 00 01 00 02 04 00 0A 01 02C6 F0CB

Scarica questa tabella (CSV)

Domande su CRC Modbus

Perché il CRC Modbus viene trasmesso con il byte meno significativo per primo?

Quest'ordine deriva dal calcolo del CRC con spostamento a destra, a partire dal bit meno significativo. La specifica della linea seriale Modbus richiede il byte meno significativo prima di quello più significativo. Sono corretti sia uno strumento che mostra 0x8776 sia un frame che termina con 76 87.

Che cosa succede se il CRC è errato?

Il dispositivo scarta il frame senza rispondere; il client raggiunge il timeout. Un CRC errato non produce una risposta di eccezione. Errori CRC ripetuti possono indicare problemi di terminazione, polarizzazione, messa a terra o posa dei cavi.

Modbus TCP usa un CRC?

No. Modbus TCP si affida ai controlli di integrità di TCP e usa un'intestazione MBAP al posto del CRC. Un gateway tra TCP e RTU aggiunge o rimuove il CRC.

Quale variante del CRC usa Modbus?

CRC-16/MODBUS: polinomio 0x8005 nella forma riflessa (0xA001), valore iniziale 0xFFFF, senza XOR finale.

Limiti di questo risultato

  • Un CRC corrispondente dimostra soltanto che i byte inseriti riproducono il valore di verifica. Non convalida funzione, indirizzo, quantità o risposta del dispositivo.
  • I frame Modbus TCP non contengono questo valore di verifica; qui non viene costruita l'intestazione MBAP.

Misuralo continuamente

Un ZMB costruisce e verifica autonomamente i frame RTU. Interroga localmente il dispositivo Modbus su RS-485, poi invia i dati al Gateway attraverso la rete radio mesh.

Guide correlate

Fonti

  1. MODBUS over Serial Line Specification and Implementation Guide V1.02 (si apre in una nuova scheda) (PDF) Modbus Organization, 2006-12-20
  2. SCADAPack E Modbus frame diagnostics example (si apre in una nuova scheda) Schneider Electric, modified 2025-08-18