Suma CRC-16 Modbus
Una petición Modbus RTU que lee diez registros desde el 0 del equipo 1 lleva el CRC CDC5, enviado como C5 CD. Pegue una trama en hexadecimal o como texto para obtener el valor de 16 bits con sus bytes en orden de envío. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- 123456789
- CRC en hex
- 4B37
- CRC (entero)
- 19 255
- Crc lo
- 37
- Crc hi
- 4B
CRC-16 Modbus es la comprobación de redundancia cíclica que cierra casi toda trama Modbus RTU en serie y en muchos buses industriales. Programadores, integradores de PLC y probadores de protocolo necesitan un único número determinista al montar una petición, validar una respuesta o depurar un paquete corrupto en el cable. Esta capacidad acepta texto UTF-8 plano o un volcado hex de bytes, ejecuta el algoritmo estándar CRC-16/MODBUS con polinomio 0xA001 y valor inicial 0xFFFF, y devuelve el resultado de dieciséis bits en hexadecimal en mayúsculas junto con los bytes bajo y alto en el orden de transmisión Modbus.
Qué es CRC-16 Modbus y por qué lo necesitan las herramientas industriales
Una comprobación de redundancia cíclica pliega cada byte de datos con un polinomio fijo de modo que un solo bit invertido casi siempre cambia el residual. Modbus RTU adoptó un CRC de dieciséis bits concreto: el generador es el polinomio reflejado 0xA001 (equivalente a 0x8005 en forma no reflejada), el registro arranca en 0xFFFF, cada byte de datos se combina con XOR en los ocho bits bajos, y por cada byte siguen ocho pasos de desplazamiento y XOR condicional sin XOR final.
La palabra de dieciséis bits resultante se añade a la trama primero el byte bajo y luego el alto —el orden que electricistas y analizadores de protocolo esperan en un osciloscopio o un sniffer serie. Libros y hojas de datos llaman a este perfil CRC-16/MODBUS; calculadoras en línea a veces usan otros iniciales o polinomios y discrepan en silencio con un PLC. Úselo siempre que ensamble o verifique Modbus RTU, muchos protocolos de contadores que tomaron el mismo CRC, o cualquier trama binaria personalizada que indique CRC-16 Modbus por nombre.
Contrato de entrada, análisis hex y campos de respuesta
En modo text la cadena se codifica como UTF-8 y cada byte resultante entra en el CRC; se admite texto vacío y produce residual FFFF para una carga de longitud cero. En modo hex la cadena se interpreta como secuencia de bytes: primero se eliminan prefijos 0x opcionales, espacios, dos puntos, guiones, guiones bajos y comas; luego los caracteres restantes deben formar solo dígitos hexadecimales en cantidad par. La validación fallida no se factura.
Mantenga cargas modestas en el navegador; el algoritmo es lineal en la longitud en bytes y totalmente en memoria.
Qué puede hacer con ella
Análisis de capturas y depuración
Pegue volcados hex de un sniffer serie en modo hex para recalcular el CRC y detectar con rapidez tramas industriales truncadas o corruptas.
Preguntas frecuentes
¿Qué polinomio y valor inicial usa?
CRC-16/MODBUS: polinomio reflejado 0xA001, registro inicial 0xFFFF, sin XOR final. Coincide con implementaciones de PLC y contadores en Modbus RTU.
¿En qué orden se envían los bytes del CRC en una trama Modbus?
Primero el byte bajo y después el alto. Un CRC de 4B37 viaja como 37 seguido de 4B, el orden que muestran un osciloscopio o un analizador serie. La herramienta devuelve ambos bytes por separado y en orden de envío.
¿Puedo pegar un volcado hexadecimal de un analizador serie?
Sí. Elija el modo hexadecimal y pegue los bytes: se eliminan primero espacios, dos puntos, guiones, guiones bajos, comas y prefijos 0x. Lo que queda debe ser un número par de dígitos hexadecimales; si no, la herramienta avisa de que el hexadecimal está mal formado.
¿Por qué otra calculadora en línea da un CRC distinto?
Algunas usan otro valor inicial u otro polinomio y discrepan en silencio con un PLC. Compruébelo con el texto 123456789: CRC-16 Modbus debe dar 4B37. Cualquier otro resultado indica un perfil diferente.
¿Se puede calcular el CRC de un mensaje vacío?
Sí. En modo texto se acepta una cadena vacía y el resultado es FFFF, el valor con el que arranca el registro, porque no se ha procesado ningún byte. Cualquier otro texto se codifica en UTF-8 antes del cálculo.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"text": "123456789"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
El hex mal formado —número impar de dígitos o caracteres no hex— falla con invalid_input en lugar de inventar una suma.
Qué es CRC-16 Modbus y por qué lo necesitan las herramientas industriales
Este endpoint fija el perfil industrial de forma que la cadena uno-dos-tres-cuatro-cinco-seis-siete-ocho-nueve produce el residual conocido 0x4B37, y una petición clásica de lectura de registros holding como dirección uno, función tres, registro inicial cero, cantidad diez produce 0xCDC5 con orden en cable C5 CD.
Contrato de entrada, análisis hex y campos de respuesta
Envíe por POST un cuerpo JSON con el campo de cadena obligatorio text y el opcional input_format con valor text o hex, por defecto text. Un número impar de dígitos tras la limpieza, o cualquier carácter fuera de cero a nueve y de A a F, lanza invalid_input con un mensaje que nombra hex mal formado para que el cliente muestre el error junto al campo sin adivinar. Si tiene éxito, el cuerpo incluye crc_hex como cuatro dígitos hex en mayúsculas, crc_int como entero sin signo de cero a sesenta y cinco mil quinientos treinta y cinco, crc_lo y crc_hi como bytes bajo y alto de esa palabra, wire_hex como el orden de transmisión little-endian de dos bytes usado en Modbus RTU, byte_count de la carga interpretada, el input_format ecoado, y cadenas fijas algorithm, poly e init que documentan CRC-16/MODBUS con 0xA001 y 0xFFFF. Se aceptan alias data, payload, value e input para la carga; format, mode y encoding aliasan input_format.
Dónde una API CRC-16 Modbus aporta valor real
Ingenieros de protocolos e investigadores de seguridad recalculan residuales sobre tráfico capturado para separar tramas limpias del ruido sin montar una pila completa. Sitios de contenido que compiten por suma de control CRC-16 Modbus ganan una calculadora en vivo cuya ruta gratuita coincide byte a byte con la de automatización. Mantenga peticiones deterministas, fije el vector conocido uno-dos-tres-cuatro-cinco-seis-siete-ocho-nueve igual a cuatro B tres siete en suites de regresión, y obtendrá reproducibilidad de grado industrial sin embeber tablas CRC en cada microservicio. Integradores de sistemas automatizan la API en herramientas de puesta en marcha que generan cientos de tramas Modbus de lectura y escritura para contadores, variadores y unidades terminales remotas, fijando valores dorados de crc_hex en integración continua para que un error de polinomio nunca se publique. Como la implementación es parse pura de nivel A, cada llamada correcta cuesta el precio base publicado $0.002 sin tokens de modelo ni red saliente.
Casos de integración
Ensamblado de tramas Modbus RTU
Construya los bytes de dirección, función y datos, y añada el trailer wire_hex devuelto para que el byte bajo del CRC se transmita primero, como exige Modbus RTU.
Comprobaciones doradas de firmware y CI
Afirme que el código del dispositivo y las herramientas del servidor producen crc_hex 4B37 para ASCII 123456789 y el residual documentado de sus plantillas de petición fijas.
Preguntas técnicas
¿Cómo se calcula una suma de control CRC-16 Modbus?
Envíe text como UTF-8 con input_format text (predeterminado), o una cadena de bytes hex con input_format hex. La API devuelve crc_hex, crc_int, bytes bajo/alto y wire_hex en orden Modbus RTU.
¿Qué ocurre si la cadena hex está mal formada?
Un número impar de dígitos tras quitar separadores, o cualquier carácter no hex, falla con invalid_input y un mensaje de hex mal formado. Esas fallas no se facturan.
¿Qué diferencia hay entre wire_hex y crc_hex?
crc_hex es el residual de dieciséis bits como cuatro dígitos hex (nibble alto del byte alto primero en la cadena). wire_hex es byte bajo y luego alto —el orden añadido en el cable Modbus RTU.
¿Cuánto cuesta la herramienta de suma CRC-16 Modbus?
La herramienta del navegador es gratuita. Las peticiones API usan saldo prepago KIT a $0.002 por llamada correcta; la entrada inválida no se factura.