- (24) 9 8827-3579
- comercial@tokenengenharia.com.br
- Seg - Sex: 8:00 - 18:00
REDES INDUSTRIAIS · TOKEN ENGENHARIA
Calculadora de CRC Modbus RTU (CRC-16/MODBUS) — o frame pronto na ordem certa
Vai comissionar um inversor por RS-485, depurar um barramento mudo ou testar uma rotina Modbus? Cole o quadro em hexadecimal: a ferramenta devolve o CRC de 16 bits, o lo byte primeiro, o hi byte depois e o frame completo pronto para o terminal serial — com modo de verificação, decomposição colorida e algoritmo à mostra. Sem cadastro.
CRC-16/MODBUS · Init 0xFFFFLo byte primeiroVerificar frame recebidoAlgoritmo à mostraCálculo na hora · offlineAtendimento nacional
Resposta rapida
O CRC-16/MODBUS e o codigo de detecção de erro do protocolo Modbus RTU. Ele e calculado sobre endereço + function code + dados (nunca sobre os proprios bytes de CRC), com registrador inicial 0xFFFF e polinomio refletido 0xA001. O resultado de 16 bits vai no quadro little-endian: lo byte primeiro, hi byte depois. Exemplo: o quadro 01 03 00 00 00 01 tem CRC 0x0A84, entao o frame completo e 01 03 00 00 00 01 84 0A (84 antes de 0A). O vetor canônico de aceitação do algoritmo e a string ASCII 123456789, que sempre devolve 0x4B37. O resultado e de apoio: a rede e o equipamento mandam.
TOKEN ENGENHARIA
Confiabilidade e Seguranca
Calculadora grátis · CRC-16/MODBUS
Calcule o CRC de um quadro Modbus RTU
Cole o quadro em hexadecimal e receba o CRC de 16 bits, a ordem correta de transmissão (lo byte primeiro) e o frame completo pronto para o terminal serial. O modo Verificar confere um quadro recebido inteiro.
Entrada inválida: ha caractere não-hex, token longo demais ou, no modo verificar, menos de 4 bytes. Confira o quadro.
Endereco 0x00 = broadcast. Em Modbus RTU o escravo não retorna resposta a quadros broadcast; use apenas para escrita sem confirmação.
Modo Verificar: cole o quadro completo, incluindo os 2 bytes de CRC ao final. A ferramenta recalcula e compara.
CRC calculado
0x0A84
16 bits
Lo byte (1o)
0x84
transmite primeiro
Hi byte (2o)
0x0A
transmite segundo
Frame completo (pronto para copiar)
010300000001840A
EnderecoFunction codeDadosCRC (lo · hi)
Decomposicao do quadro campo a campo
01 Endereco escravo #1 03 Function code: Read Holding Registers 00 00 Registrador inicial: 0 00 01 Quantidade: 1 registrador 84 0A CRC-16/MODBUS (lo primeiro)
Ver o algoritmo com os valores
CRC-16/MODBUS (Init=0xFFFF, poli refletido=0xA001) Input: 01 03 00 00 00 01 (6 bytes) CRC calculado: 0x0A84 Lo byte (1o a transmitir): 0x84 Hi byte (2o a transmitir): 0x0A Frame completo: 01 03 00 00 00 01 84 0A
Ferramenta de apoio técnico, de uso orientativo. O resultado depende dos bytes informados e não substitui o projeto nem a validação com equipamento real. Algoritmo conforme a especificação Modbus over Serial Line (Modbus Organization).
Como o CRC-16/MODBUS e calculado, byte a byte
O CRC (Cyclic Redundancy Check) e o porteiro de cada quadro Modbus RTU. A cada telegrama que sai pela serial RS-485, o mestre calcula um número de 16 bits a partir do conteudo do quadro e o anexa ao final. Do outro lado, o escravo recalcula o mesmo número sobre o que recebeu e compara: se bater, o quadro chegou íntegro; se um unico bit foi corrompido por ruido elétrico no caminho, o CRC não bate e o quadro e descartado em silêncio. E essa conferência que impede um telegrama corrompido de virar um comando errado num motor, numa valvula ou num medidor.
O algoritmo trabalha com um registrador de 16 bits e dois parametros que definem o sabor especifico do Modbus: o registrador começa em 0xFFFF e o polinomio usado na implementação bit a bit e o 0xA001 (que e o polinomio normal 0x8005 refletido). O processo e:
- Inicialize crc = 0xFFFF.
- Para cada byte do quadro (endereço, function code e dados, sem os bytes de CRC): faca crc = crc XOR byte.
- Repita 8 vezes (um por bit): se o bit menos significativo de crc for 1, faca crc = (crc >> 1) XOR 0xA001; senao, apenas crc = crc >> 1.
- Ao terminar todos os bytes, o registrador contem o CRC de 16 bits.
- Transmita o low byte primeiro (crc & 0xFF) e o high byte depois (crc >> 8).
Veja com o exemplo que a ferramenta ja traz, o quadro 01 03 00 00 00 01 (ler 1 registrador holding do escravo 01):
crc = 0xFFFF
processa 01, 03, 00, 00, 00, 01 (6 bytes, 8 deslocamentos cada)
CRC final = 0x0A84
lo byte = 0x84 (transmite PRIMEIRO)
hi byte = 0x0A (transmite segundo)
frame completo = 01 03 00 00 00 01 84 0A
Esse e exatamente o número que aparece no card de resultado. O caminho inverso tambem e direto: no modo Verificar frame, cole o quadro completo (ja com os 2 bytes de CRC) e a ferramenta separa os dois ultimos bytes, recalcula o CRC sobre o resto e diz se o quadro esta íntegro ou qual seria o CRC esperado.
Anatomia do quadro
Quais bytes entram no cálculo e onde o CRC e anexado
O quadro Modbus RTU tem quatro partes: o endereço do escravo, o function code, os dados e os 2 bytes de CRC. O CRC e calculado apenas sobre os tres primeiros campos — os bytes de CRC nunca entram no cálculo deles mesmos. O resultado de 16 bits sai do laco bit a bit e e anexado ao final, com o lo byte na frente. Quando a rede inteira precisa ser projetada, comissionada ou auditada, essa conferência vira servico: a Token Engenharia comissiona e documenta redes industriais com ART em todo o Brasil.
O quadro 01 03 00 00 00 01 com o CRC 84 0A anexado; em ambar, os bytes que a ferramenta calcula.
A ordem dos bytes do CRC: lo primeiro, hi depois
Este e o detalhe que mais derruba rede em campo. O CRC e um valor de 16 bits — por exemplo, 0x0A84 —, mas ele não e transmitido na ordem em que se le. O Modbus RTU envia o CRC em little-endian: primeiro o byte baixo (lo = 0x84), depois o byte alto (hi = 0x0A). Por isso, no fio, o quadro completo de 01 03 00 00 00 01 e 01 03 00 00 00 01 84 0A, e não 01 03 00 00 00 01 0A 84. Quem inverte essa ordem manda um quadro com CRC que não bate; o escravo descarta em silêncio e o equipamento parece mudo, embora o cabo e o endereço estejam certos. A ferramenta sempre exibe o CRC na ordem correta de transmissão e monta o frame completo ja pronto para copiar.
| Campo do quadro Modbus RTU | Tamanho | Descricao |
|---|---|---|
| Endereco do escravo | 1 byte | 1 a 247 (0x00 = broadcast, sem resposta) |
| Function code (FC) | 1 byte | FC03 = ler holding; FC06 = escrever 1 reg; FC10 = escrever varios |
| Dados | N bytes | Depende do FC (ate cerca de 252 bytes de PDU) |
| CRC lo | 1 byte | Low byte do CRC — transmite PRIMEIRO |
| CRC hi | 1 byte | High byte do CRC — transmite segundo |
Os parametros que definem o CRC-16/MODBUS
Existem dezenas de variantes de CRC-16, e cada uma usa um conjunto diferente de parametros. Trocar um unico deles muda o resultado por completo. O sabor do Modbus RTU e fixo e e o que esta implementado nesta ferramenta. A maneira mais segura de confirmar que uma implementação em C, Python, Arduino ou Ladder esta correta e rodar o vetor canônico de aceitação: a string ASCII 123456789 deve sempre devolver CRC 0x4B37.
| Parametro do CRC-16/MODBUS | Valor |
|---|---|
| Largura | 16 bits |
| Polinomio normal | 0x8005 |
| Polinomio refletido (usado no laco) | 0xA001 |
| Valor inicial (Init) | 0xFFFF |
| RefIn / RefOut | Verdadeiro / Verdadeiro |
| XorOut (XOR final) | 0x0000 (nenhum) |
| Ordem de transmissão | Little-endian (lo byte primeiro) |
| Vetor de aceitação | ASCII 123456789 devolve 0x4B37 |
Parametros conforme a especificação Modbus over Serial Line (Modbus Organization). Os valores de CRC mostrados nos exemplos desta pagina foram recalculados pelo mesmo algoritmo da ferramenta e conferidos contra o vetor canônico 0x4B37, não copiados de tabela.
O modo Verificar: conferir um quadro que chegou
Calcular o CRC e só metade do trabalho de campo. A outra metade e a depuração: você capturou um quadro no analisador de barramento ou no osciloscopio e quer saber se ele esta íntegro. Para isso serve o modo Verificar frame. Cole o quadro completo, incluindo os 2 bytes de CRC ao final; a ferramenta separa os dois ultimos bytes (que sao o CRC recebido), recalcula o CRC sobre todos os bytes anteriores e compara os dois. Se baterem, o quadro e íntegro. Se não baterem, ela mostra o CRC esperado ao lado do recebido — o que ajuda a distinguir um erro de ruido (CRC totalmente diferente) de uma ordem de bytes invertida (lo e hi trocados).
Esse diagnostico e direto: se o esperado e 84 0A e o recebido e 0A 84, o problema não e o conteudo do quadro — e a ordem de transmissão do CRC, o erro de campo número 1.
Armadilhas comuns ao trabalhar com CRC Modbus
- Inverter a ordem dos bytes do CRC. O CRC vai no quadro como lo → hi, nunca hi → lo. E o erro mais comum: o escravo não responde e o técnico procura defeito no cabo a toa.
- Incluir os bytes de CRC no proprio cálculo. O CRC e calculado só sobre endereço + FC + dados. Colar o quadro completo no modo Calcular inválida o resultado — use o modo Verificar.
- Confundir CRC-16/MODBUS com outro CRC-16. CRC-16/CCITT, CRC-16/IBM e CRC-16/ANSI tem parametros diferentes e geram valores distintos para o mesmo quadro.
- Usar este cálculo em Modbus ASCII ou Modbus TCP. Modbus ASCII usa LRC, não CRC; Modbus TCP não tem CRC (a integridade vem do TCP/IP e do cabeçalho MBAP). Esta ferramenta e só para Modbus RTU.
- Esquecer que endereço 0x00 e broadcast. Nenhum escravo responde a um quadro broadcast; use apenas para escrita sem confirmação.
- Misturar offset de registrador entre fabricantes. O mapeamento parametro → registrador Modbus depende do modelo e do firmware; confirme sempre no manual de comunicacao do equipamento.
Function codes mais usados no dia a dia
O function code e o segundo byte do quadro e diz ao escravo o que fazer. A ferramenta reconhece os codigos mais comuns na decomposição do quadro, mostrando o nome de cada um. Os principais sao:
| FC (hex) | Funcao | Uso tipico |
|---|---|---|
| 0x01 | Read Coils | Ler saidas digitais |
| 0x02 | Read Discrete Inputs | Ler entradas digitais |
| 0x03 | Read Holding Registers | Ler parametros e variaveis de processo (o mais comum) |
| 0x04 | Read Input Registers | Ler grandezas de medição |
| 0x06 | Write Single Register | Escrever 1 parametro (ex.: referencia de velocidade) |
| 0x10 | Write Multiple Registers | Escrever varios registradores de uma vez |
Onde isso aparece em campo: RS-485, inversores e medidores
Quem busca calcular um CRC Modbus quase sempre esta no meio de um trabalho real. Pode ser o comissionamento de um inversor WEG da linha CFW por RS-485, em que se monta o quadro de leitura ou escrita e se envia pelo terminal (Docklight, ModScan) antes de fechar a logica. Pode ser a depuração de um barramento que da erro de frame intermitente, em que se captura o telegrama e se confere o CRC para isolar se o problema e ruido, terminacao ou aterramento. Pode ser o desenvolvimento de uma rotina em Arduino, ESP32 ou Ladder, em que se testa o CRC do codigo contra um valor de referencia. Em todos esses casos, a conta e a mesma — e e a que esta aqui.
A diferenca entre conferir um CRC e ter uma rede industrial confiavel e a engenharia em volta: topologia do barramento, terminacao e polarizacao, aterramento, segregacao de cabos, enderecamento, tempos de resposta e a documentacao de tudo isso. E ai que a conta de apoio vira projeto.
Quando a rede Modbus vira servico de engenharia
Calcular um CRC e uma conta de apoio — e para isso esta ferramenta existe e e gratuita. Mas quando a rede RS-485 não estabiliza, o barramento da erro intermitente, ha conflito de endereços ou o painel precisa ser montado, comissionado e auditado, entra a engenharia. A Token Engenharia atua em montagem industrial e eletromecânica, comissionamento e manutenção de redes de automação e laudo das instalações elétricas em todo o Brasil — com responsável técnico e ART. Da parametrização de inversores a documentacao da rede, a conta de CRC e só o comeco.
Perguntas frequentes
O que e o CRC-16/MODBUS e para que serve?
E o codigo de detecção de erro do Modbus RTU. O mestre calcula um valor de 16 bits sobre o endereço, o function code e os dados e o anexa ao quadro; o escravo recalcula e compara. Se não bater, o quadro e descartado, evitando que ruido elétrico vire comando errado.
Qual o polinomio e o valor inicial?
Polinomio normal 0x8005 (refletido 0xA001 no laco bit a bit), Init 0xFFFF, RefIn e RefOut verdadeiros, sem XOR final. O vetor de aceitação e ASCII 123456789, que devolve 0x4B37.
Em que ordem o CRC vai no quadro?
Little-endian: lo byte primeiro, hi byte depois. Para 01 03 00 00 00 01 o CRC e 0x0A84, e o frame completo e 01 03 00 00 00 01 84 0A. Inverter essa ordem e o erro de campo número 1.
Os 2 bytes de CRC entram no cálculo deles mesmos?
Não. O CRC e calculado só sobre endereço + FC + dados. Para conferir um quadro recebido inteiro, use o modo Verificar, que separa os 2 bytes finais e recalcula sobre o resto.
CRC-16/MODBUS e igual aos outros CRC-16?
Não. CRC-16/CCITT, IBM e ANSI tem parametros diferentes. Alem disso, Modbus ASCII usa LRC e Modbus TCP não tem CRC. Esta ferramenta e exclusiva para Modbus RTU.
O que e o endereço 0x00?
E o broadcast: o quadro vai para todos os escravos e nenhum responde. Use só para escrita sem confirmação. A faixa de endereços individuais válidos e 1 a 247.
Quando isso vira servico de engenharia?
Quando a rede precisa ser projetada, comissionada ou auditada: topologia, terminacao, aterramento, enderecamento, montagem de painel e laudo das instalações com responsável técnico e ART. A Token Engenharia faz isso em todo o Brasil.
Token Engenharia · Atuacao nacional
Do CRC conferido a rede industrial comissionada, com ART
A ferramenta da o CRC; a Token Engenharia projeta, monta, comissiona e documenta a rede. Redes RS-485 e Modbus, painéis (QGBT, CCM), parametrização de inversores e laudo das instalações — com responsável técnico e ART em todo o Brasil.