Glosario de Automatización • CRC-16 de Modbus

¿Qué es el checksum CRC-16 de Modbus?

Ingeniería Merobix • • 4 min de lectura

El CRC-16 es la verificación de redundancia cíclica de dos bytes que cierra toda trama Modbus RTU y permite al receptor detectar corrupción en una línea serial. Cualquiera que lea una captura RTU o depure por qué un dispositivo ignora una petición necesita saber qué cubre el CRC, cómo lo usa el receptor y por qué desaparece en TCP. Esta referencia explica el CRC de Modbus RTU sin pedirle que implemente el polinomio a mano.

Volver al glosario

CRC-16 de Modbus en una línea: El CRC-16 de Modbus es una verificación de redundancia cíclica de dos bytes que se añade a toda trama RTU. El transmisor lo calcula sobre la dirección de esclavo, el código de función y los datos; el receptor lo recalcula y compara. Si difieren, la trama se corrompió en el cable y el receptor la descarta en silencio, sin respuesta de error. Aparece solo en RTU, no en ASCII ni en TCP.

Qué cubre el CRC y cómo se verifica

En Modbus RTU el CRC-16 son los dos últimos bytes de la trama. El transmisor corre un cálculo de redundancia cíclica sobre todos los bytes anteriores - la dirección de esclavo, el código de función y todos los datos - y añade el valor resultante de dieciséis bits, con el byte bajo primero, una peculiaridad que conviene recordar porque la mayoría de los campos multibyte de Modbus van con el byte alto primero. El receptor corre el cálculo idéntico sobre los bytes que recibió y compara su resultado con el CRC que le enviaron.

Si los dos coinciden, la trama se acepta como íntegra; si difieren, el receptor concluye que la trama se corrompió en tránsito y la descarta en silencio. No hay acuse negativo, y eso importa: una falla de CRC se ve, desde el maestro, exactamente igual que la ausencia total de respuesta. Por eso los problemas de ruido en la línea se presentan como timeouts y no como errores explícitos, un patrón de síntomas que se traslapa con los temas de tiempos de la referencia del retardo de respuesta serial de Modbus.

Por qué existe el CRC y dónde no está

El CRC existe porque una línea serial es un canal desprotegido donde el ruido eléctrico, las reflexiones por mala terminación o un transceptor marginal pueden voltear bits. Un CRC de dos bytes atrapa los errores en ráfaga típicos de esas fallas con mucha más confiabilidad que una suma simple, y por eso RTU usa un CRC mientras el viejo modo ASCII usa una verificación de redundancia longitudinal más débil, un contraste que se traza en la referencia del modo de transmisión Modbus RTU frente a ASCII.

Modbus TCP no tiene CRC en absoluto. La trama TCP con encabezado MBAP se apoya en las sumas de verificación y la entrega confiable del propio TCP, así que un CRC a nivel Modbus sería redundante, como explica la comparación de Modbus TCP frente a RTU. El CRC es, por tanto, una característica exclusiva del RTU serial, y su ausencia es una de las pistas rápidas que distinguen una captura RTU de una TCP.

Preguntas frecuentes

¿Qué pasa cuando falla la verificación de CRC en Modbus?

El receptor descarta la trama en silencio, sin responder. En Modbus RTU no hay acuse negativo, así que una falla de CRC es idéntica, desde el lado del maestro, a que no llegue respuesta alguna. Por eso los problemas de ruido de línea y de terminación suelen manifestarse como timeouts y no como mensajes de error explícitos.

¿Qué bytes cubre el CRC de Modbus?

Todos los bytes de la trama anteriores al propio CRC: la dirección de esclavo, el código de función y todos los datos. Los dos bytes del CRC se añaden después, con el byte bajo primero, a diferencia de la mayoría de los campos multibyte de Modbus, que van con el byte alto primero. El receptor recalcula el CRC sobre los mismos bytes y compara.

¿Por qué Modbus TCP no lleva CRC?

Porque TCP ya aporta sus propias sumas de verificación y garantiza entrega confiable y ordenada, así que un CRC a nivel Modbus no añadiría nada. Las tramas TCP llevan un encabezado MBAP en lugar de la dirección serial y el CRC. El CRC-16 es exclusivo del RTU serial; ASCII usa un LRC y TCP no usa ningún checksum a nivel Modbus.

Fuentes y lecturas

Referencias primarias de los organismos de normas y reguladores que definen este tema:

Más en Protocolos industriales
LRC de Modbus  •  Corregir errores CRC de Modbus RTU  •  ADU vs PDU en Modbus  •  Borrar una excepcion Modbus de direccion de datos ilegal  •  Corregir un error de timeout de Modbus  •  Todo en Protocolos industriales →
Capacitación SCADA gratuita para operadores
Merobix University - 70 lecciones en video y 261 preguntas de examen, del primer inicio de sesión a los reportes de cumplimiento (contenido en inglés). Sin llamada de ventas.
Comenzar gratis →