Checksum CRC-16 Modbus
Um pedido Modbus RTU que lê dez registradores a partir do 0 no dispositivo 1 recebe o CRC CDC5, enviado como C5 CD. Cole um frame em hexadecimal ou como texto para obter o valor de 16 bits com os bytes na ordem de envio. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Texto
- 123456789
- CRC em hex
- 4B37
- CRC (inteiro)
- 19.255
- Crc lo
- 37
- Crc hi
- 4B
CRC-16 Modbus é a verificação de redundância cíclica que fecha quase todo frame Modbus RTU em série e em muitos barramentos industriais. Programadores, integradores de PLC e testadores de protocolo precisam de um único número determinístico ao montar um pedido, validar uma resposta ou depurar um pacote corrompido no fio. Esta capacidade aceita texto UTF-8 simples ou um dump hex de bytes, executa o algoritmo padrão CRC-16/MODBUS com polinómio 0xA001 e valor inicial 0xFFFF, e devolve o resultado de dezasseis bits em hexadecimal maiúsculo junto com os bytes baixo e alto na ordem de transmissão Modbus.
O que é CRC-16 Modbus e por que ferramentas industriais precisam dele
Uma verificação de redundância cíclica dobra cada byte de dados por um polinómio fixo de modo que um único bit invertido quase sempre altera o residual. O Modbus RTU adotou um CRC de dezasseis bits específico: o gerador é o polinómio refletido 0xA001 (equivalente a 0x8005 na forma não refletida), o registo começa em 0xFFFF, cada byte de dados é combinado com XOR nos oito bits baixos, e por byte seguem oito passos de deslocamento e XOR condicional sem XOR final.
A palavra de dezasseis bits resultante é anexada ao frame primeiro o byte baixo e depois o alto — a ordem que eletricistas e analisadores de protocolo esperam num osciloscópio ou sniffer série. Manuais e datasheets chamam este perfil CRC-16/MODBUS; calculadoras online por vezes usam outros iniciais ou polinómios e discordam em silêncio de um PLC. Use-o sempre que montar ou verificar Modbus RTU, muitos protocolos de medidores que tomaram o mesmo CRC, ou qualquer frame binário personalizado que especifique CRC-16 Modbus pelo nome.
Contrato de entrada, parsing hex e campos de resposta
No modo text a string é codificada como UTF-8 e cada byte resultante entra no CRC; texto vazio é permitido e produz residual FFFF para carga de comprimento zero. No modo hex a string é interpretada como sequência de bytes: primeiro removem-se prefixos 0x opcionais, espaços, dois-pontos, hífens, underscores e vírgulas; depois os caracteres restantes devem formar apenas dígitos hexadecimais em quantidade par. Validação falhada não é faturada.
Mantenha cargas modestas no navegador; o algoritmo é linear no comprimento em bytes e totalmente em memória.
Casos de uso
Análise de capturas e depuração
Cole dumps hex de um sniffer série no modo hex para recalcular o CRC e identificar rapidamente frames industriais truncados ou corrompidos.
Perguntas frequentes
Que polinómio e valor inicial usa?
CRC-16/MODBUS: polinómio refletido 0xA001, registo inicial 0xFFFF, sem XOR final. Coincide com implementações de PLC e medidores em Modbus RTU.
Em que ordem os bytes do CRC são enviados em um frame Modbus?
Primeiro o byte baixo, depois o alto. Um CRC 4B37 trafega como 37 seguido de 4B, a ordem que um osciloscópio ou um sniffer serial mostra. A ferramenta devolve os dois bytes separados e na ordem de envio.
Posso colar um dump hexadecimal de um sniffer serial?
Pode. Escolha o modo hexadecimal e cole os bytes: espaços, dois-pontos, hífens, sublinhados, vírgulas e prefixos 0x são removidos antes. O que sobra precisa ser um número par de dígitos hexadecimais; caso contrário, a ferramenta avisa que o hexadecimal está malformado.
Por que outra calculadora online dá um CRC diferente?
Algumas usam outro valor inicial ou outro polinômio e discordam do CLP sem avisar. Confira com o texto 123456789: o CRC-16 Modbus precisa dar 4B37. Qualquer outro resultado indica um perfil diferente.
Dá para calcular o CRC de uma mensagem vazia?
Dá. No modo texto, uma string vazia é aceita e o resultado é FFFF, o valor inicial do registrador, já que nenhum byte foi processado. Qualquer outro texto é codificado em UTF-8 antes do cálculo.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "123456789"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Hex malformado — contagem ímpar de dígitos ou caracteres não hex — falha com invalid_input em vez de inventar um checksum.
O que é CRC-16 Modbus e por que ferramentas industriais precisam dele
Este endpoint fixa o perfil industrial de forma que a cadeia um-dois-três-quatro-cinco-seis-sete-oito-nove produz o residual conhecido 0x4B37, e um pedido clássico de leitura de holding registers como endereço um, função três, registo inicial zero, quantidade dez produz 0xCDC5 com ordem no fio C5 CD.
Contrato de entrada, parsing hex e campos de resposta
Envie por POST um corpo JSON com o campo de string obrigatório text e o opcional input_format com valor text ou hex, predefinido text. Um número ímpar de dígitos após a limpeza, ou qualquer carácter fora de zero a nove e de A a F, lança invalid_input com uma mensagem que nomeia hex malformado para o cliente exibir o erro junto ao campo sem adivinhar. Em sucesso o corpo inclui crc_hex como quatro dígitos hex maiúsculos, crc_int como inteiro sem sinal de zero a sessenta e cinco mil quinhentos e trinta e cinco, crc_lo e crc_hi como bytes baixo e alto dessa palavra, wire_hex como a ordem de transmissão little-endian de dois bytes usada no Modbus RTU, byte_count da carga interpretada, o input_format ecoado, e strings fixas algorithm, poly e init que documentam CRC-16/MODBUS com 0xA001 e 0xFFFF. Aceitam-se aliases data, payload, value e input para a carga; format, mode e encoding aliasam input_format.
Onde uma API CRC-16 Modbus justifica o seu lugar
Engenheiros de protocolo e investigadores de segurança recalculam residuais sobre tráfego capturado para separar frames limpos do ruído sem montar uma pilha completa. Sites de conteúdo que competem por checksum CRC-16 Modbus ganham uma calculadora ao vivo cujo caminho gratuito coincide byte a byte com o de automação. Mantenha pedidos determinísticos, fixe o vetor conhecido um-dois-três-quatro-cinco-seis-sete-oito-nove igual a quatro B três sete em suites de regressão, e obtenha reprodutibilidade de grau industrial sem embutir tabelas CRC em cada microsserviço. Integradores de sistemas automatizam a API em ferramentas de comissionamento que geram centenas de frames Modbus de leitura e escrita para medidores, drives e unidades terminais remotas, fixando valores dourados de crc_hex em integração contínua para que um erro de polinómio nunca chegue a produção. Como a implementação é parse pura tier A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo e sem rede de saída. Combine o wire_hex da resposta com o caminho de escrita série quando precisar dos dois bytes de trailer exatos, ou use crc_hex quando só precisar do residual numérico para logs e testes unitários.
Casos de integração
Montagem de frames Modbus RTU
Construa os bytes de endereço, função e dados, e anexe o trailer wire_hex devolvido para que o byte baixo do CRC seja transmitido primeiro, como o Modbus RTU exige.
Checagens douradas de firmware e CI
Afirme que o código do dispositivo e as ferramentas do servidor produzem crc_hex 4B37 para ASCII 123456789 e o residual documentado das suas templates de pedido fixas.
Perguntas técnicas
Como calcular um checksum CRC-16 Modbus?
Envie text como UTF-8 com input_format text (predefinido), ou uma string de bytes hex com input_format hex. A API devolve crc_hex, crc_int, bytes baixo/alto e wire_hex na ordem Modbus RTU.
O que acontece se a string hex estiver malformada?
Contagem ímpar de dígitos após remover separadores, ou qualquer carácter não hex, falha com invalid_input e mensagem de hex malformado. Essas falhas não são faturadas.
Qual a diferença entre wire_hex e crc_hex?
crc_hex é o residual de dezasseis bits como quatro dígitos hex (nibble alto do byte alto primeiro na string). wire_hex é byte baixo e depois alto — a ordem anexada no fio Modbus RTU.
Quanto custa a ferramenta de checksum CRC-16 Modbus?
A ferramenta no navegador é gratuita. Pedidos API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é faturada.