Checksum CRC-16 Modbus
Una richiesta Modbus RTU che legge dieci registri dal registro 0 del dispositivo 1 riceve il CRC CDC5, inviato come C5 CD. Incolli un frame in esadecimale o come testo per ottenere il valore a 16 bit con i byte nell'ordine di invio. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- 123456789
- CRC in hex
- 4B37
- CRC (intero)
- 19.255
- Crc lo
- 37
- Crc hi
- 4B
Il CRC-16 Modbus è il controllo di ridondanza ciclica che chiude quasi ogni frame Modbus RTU su seriale e su molti bus industriali. Programmatori, integratori PLC e tester di protocollo necessitano di un unico numero deterministico quando costruiscono una richiesta, convalidano una risposta o depurano un pacchetto corrotto sul cavo. Questa capacità accetta testo UTF-8 semplice oppure un dump hex di byte, esegue l'algoritmo standard CRC-16/MODBUS con polinomio 0xA001 e valore iniziale 0xFFFF, e restituisce il risultato a sedici bit in esadecimale maiuscolo insieme ai byte basso e alto nell'ordine di trasmissione Modbus.
Cos'è il CRC-16 Modbus e perché serve agli strumenti industriali
Un controllo di ridondanza ciclica piega ogni byte di dati attraverso un polinomio fisso in modo che un singolo bit invertito cambi quasi sempre il residuo. Modbus RTU ha adottato un CRC a sedici bit specifico: il generatore è il polinomio riflesso 0xA001 (equivalente a 0x8005 in forma non riflessa), il registro parte da 0xFFFF, ogni byte di dati viene combinato con XOR negli otto bit bassi, e per ogni byte seguono otto passi di scorrimento e XOR condizionale senza XOR finale.
La parola a sedici bit risultante viene aggiunta al frame prima il byte basso e poi quello alto — l'ordine che elettricisti e analizzatori di protocollo si aspettano su un oscilloscopio o uno sniffer seriale. Manuali e datasheet chiamano questo profilo CRC-16/MODBUS; calcolatori online a volte usano iniziali o polinomi diversi e divergono in silenzio da un PLC. Lo usi ogni volta che assembla o verifica Modbus RTU, molti protocolli di contatori che hanno ripreso lo stesso CRC, o qualsiasi frame binario personalizzato che specifichi CRC-16 Modbus per nome.
Casi d'uso
Analisi di catture e debug
Incolli dump hex da uno sniffer seriale in modalità hex per ricalcolare il CRC e individuare rapidamente frame industriali troncati o corrotti.
Domande frequenti
Quale polinomio e valore iniziale usa?
CRC-16/MODBUS: polinomio riflesso 0xA001, registro iniziale 0xFFFF, senza XOR finale. Coincide con implementazioni PLC e contatori su Modbus RTU.
In che ordine vengono inviati i byte del CRC in un frame Modbus?
Prima il byte basso, poi quello alto. Un CRC 4B37 viaggia quindi come 37 seguito da 4B, l'ordine che mostrano un oscilloscopio o uno sniffer seriale. Lo strumento restituisce i due byte separati e nell'ordine di invio.
Posso incollare un dump esadecimale da uno sniffer seriale?
Sì. Scelga la modalità esadecimale e incolli i byte: spazi, due punti, trattini, trattini bassi, virgole e prefissi 0x vengono tolti prima. Ciò che resta deve essere un numero pari di cifre esadecimali, altrimenti lo strumento segnala un esadecimale malformato.
Perché un altro calcolatore online dà un CRC diverso?
Alcuni usano un altro valore iniziale o un altro polinomio e non concordano con un PLC senza avvisare. Verifichi con il testo 123456789: CRC-16 Modbus deve dare 4B37. Qualsiasi altro risultato indica un profilo diverso.
Si può calcolare il CRC di un messaggio vuoto?
Sì. In modalità testo una stringa vuota è accettata e dà FFFF, il valore di partenza del registro, perché non è stato elaborato alcun byte. Qualsiasi altro testo viene codificato in UTF-8 prima del calcolo.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/enc/crc16-modbus \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"123456789"}'const res = await fetch("https://api.kit.forhosting.com/enc/crc16-modbus", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "123456789"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/crc16-modbus",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "123456789"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/crc16-modbus", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"123456789"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"123456789"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/crc16-modbus", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "123456789"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Un hex malformato — conteggio dispari di cifre o caratteri non hex — fallisce con invalid_input invece di inventare un checksum.
Cos'è il CRC-16 Modbus e perché serve agli strumenti industriali
Questo endpoint fissa il profilo industriale in modo che la stringa uno-due-tre-quattro-cinque-sei-sette-otto-nove produca il residuo noto 0x4B37, e una classica richiesta di lettura holding register come indirizzo uno, funzione tre, registro iniziale zero, quantità dieci produca 0xCDC5 con ordine sul cavo C5 CD.
Contratto di ingresso, parsing hex e campi di risposta
In modalità hex la stringa è interpretata come sequenza di byte: prima si rimuovono prefissi 0x opzionali, spazi, due punti, trattini, underscore e virgole; poi i caratteri rimanenti devono formare solo cifre esadecimali in numero pari. La validazione fallita non viene fatturata. Invii con POST un corpo JSON con il campo stringa obbligatorio text e l'opzionale input_format con valore text o hex, predefinito text. In modalità text la stringa è codificata come UTF-8 e ogni byte risultante entra nel CRC; il testo vuoto è consentito e produce residuo FFFF per un payload di lunghezza zero. Un numero dispari di cifre dopo la pulizia, o qualsiasi carattere fuori da zero a nove e da A a F, solleva invalid_input con un messaggio che nomina hex malformato così il client può mostrare l'errore accanto al campo senza indovinare. In caso di successo il corpo include crc_hex come quattro cifre hex maiuscole, crc_int come intero senza segno da zero a sessantacinquemila cinquecentotrentacinque, crc_lo e crc_hi come byte basso e alto di quella parola, wire_hex come ordine di trasmissione little-endian a due byte usato su Modbus RTU, byte_count del payload interpretato, l'input_format in eco, e stringhe fisse algorithm, poly e init che documentano CRC-16/MODBUS con 0xA001 e 0xFFFF. Si accettano alias data, payload, value e input per il payload; format, mode e encoding aliasano input_format. Mantenga payload modesti nel browser; l'algoritmo è lineare nella lunghezza in byte e interamente in memoria.
Dove un'API CRC-16 Modbus dimostra il proprio valore
Ingegneri di protocollo e ricercatori di sicurezza ricalcolano i residui sul traffico catturato per separare frame puliti dal rumore senza montare uno stack completo. I siti di contenuti che puntano al checksum CRC-16 Modbus ottengono una calcolatrice live il cui percorso gratuito coincide byte per byte con quello di automazione. Mantenga richieste deterministiche, fissi il vettore noto uno-due-tre-quattro-cinque-sei-sette-otto-nove uguale a quattro B tre sette nelle suite di regressione, e otterrà riproducibilità di grado industriale senza incorporare tabelle CRC in ogni microservizio. Poiché l'implementazione è parse pura di tier A, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza token di modello né rete in uscita. Abbini il wire_hex della risposta al percorso di scrittura seriale quando le servono i due byte di trailer esatti, oppure usi crc_hex quando le serve solo il residuo numerico per log e test unitari.
Casi di integrazione
Assemblaggio di frame Modbus RTU
Costruisca i byte di indirizzo, funzione e dati, poi aggiunga il trailer wire_hex restituito così il byte basso del CRC viene trasmesso per primo, come richiede Modbus RTU.
Controlli golden di firmware e CI
Verifichi che il codice del dispositivo e gli strumenti lato server producano entrambi crc_hex 4B37 per ASCII 123456789 e il residuo documentato dei suoi template di richiesta fissi.
Domande tecniche
Come si calcola un checksum CRC-16 Modbus?
Invii text come UTF-8 con input_format text (predefinito), oppure una stringa di byte hex con input_format hex. L'API restituisce crc_hex, crc_int, byte basso/alto e wire_hex nell'ordine Modbus RTU.
Cosa succede se la stringa hex è malformata?
Un numero dispari di cifre dopo la rimozione dei separatori, o qualsiasi carattere non hex, fallisce con invalid_input e un messaggio di hex malformato. Tali fallimenti non vengono fatturati.
Qual è la differenza tra wire_hex e crc_hex?
crc_hex è il residuo a sedici bit come quattro cifre hex (nibble alto del byte alto per primo nella stringa). wire_hex è byte basso e poi alto — l'ordine aggiunto sul cavo Modbus RTU.
Quanto costa lo strumento di checksum CRC-16 Modbus?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; l'input non valido non viene fatturato.