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.

Abrir a calculadora

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

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.

Aceita espacos, hifens, virgulas, maiusculo/minusculo, com ou sem “0x”. Ex: 01 03 00 00 00 01

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).

Falar com a Token sobre a rede Modbus

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 EngenhariaToken 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.

Falar com a Token sobre a rede Modbus