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

CRC-16, RTU

Aggiungi C5 CD per inviare questo frame. Se incolli un frame che contiene già il suo CRC, il valore viene verificato.

Lettura registri holding, richiesta

ByteCampoValoreSignificato
01Indirizzo dell'unità1Il server a cui è destinato il frame, o da cui proviene
03Funzione0x03Lettura registri holding
00 00Indirizzo iniziale0Registro holding 40001, indirizzo di protocollo 0x0000
00 0AQuantità1010 registri holding; la risposta contiene 20 byte di dati
C5 CDCRC-160xCDC5Byte meno significativo per primo

Frame completo

  • Con spazi01 03 00 00 00 0A C5 CD
  • Array C0x01, 0x03, 0x00, 0x00, 0x00, 0x0A, 0xC5, 0xCD
  • Senza spazi01030000000AC5CD
  • Modbus ASCII, poi CR LF:01030000000AF2
CRC, byte per byte

Il registro parte da 0xFFFF. Ogni byte viene combinato con XOR al suo byte meno significativo; il registro viene poi spostato a destra otto volte, applicando XOR con 0xA001 ogni volta che esce un bit pari a 1.

ByteValoreRegistro successivo
1010x807E
2030x2140
3000xF020
4000xD8F1
5000x8419
60A0xCDC5

Il registro termina a 0xCDC5 e viene trasmesso con il byte meno significativo per primo: C5 CD.

Verifica
Verifica
Frame

Esempi

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

Byte CRC, nell'ordine di trasmissione

C5 CD

Richiesta Lettura registri holding a unità 1.

Valore CRC
0xCDC5
Frame completo
01 03 00 00 00 0A C5 CD
Lunghezza del frame con CRC
8 byte

Modbus invia per primo il byte meno significativo del CRC.

Come viene calcolato
  1. CRC = CRC-16/MODBUS(frame), valore iniziale 0xFFFF, polinomio 0xA001=01 03 00 00 00 0A=0xCDC5
  2. Byte meno significativo trasmesso per primo=0xCDC5 → C5 CD

Choose the gateway connection for this Modbus line.

Configura un sistema

Il CRC-16 Modbus di 01 03 00 00 00 0A è 0xCDC5, trasmesso con il byte meno significativo per primo come C5 CD.

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