Glosario de Automatización • Encabezado MBAP de Modbus

¿Qué es el encabezado MBAP de Modbus?

Ingeniería Merobix • • 4 min de lectura

Cuando Modbus pasa de una línea serial a TCP, abandona la dirección serial y el CRC y en su lugar antepone a cada mensaje una pequeña estructura de siete bytes llamada encabezado MBAP, por Modbus Application Protocol header. Cualquiera que lea una captura de Modbus TCP en Wireshark o depure un gateway necesita saber qué significan esos bytes. Esta referencia recorre cada campo del MBAP, qué transporta y por qué el encabezado existe.

Volver al glosario

Encabezado MBAP de Modbus en una línea: El encabezado MBAP es el prefijo de siete bytes de todo mensaje Modbus TCP. Tiene cuatro campos: un identificador de transacción de dos bytes que empareja cada respuesta con su petición, un identificador de protocolo de dos bytes que vale cero para Modbus, una longitud de dos bytes que cuenta los bytes que siguen, y un identificador de unidad (unit ID) de un byte que enruta hacia un dispositivo serial detrás de un gateway. Sustituye a la dirección de esclavo y al CRC seriales.

Por qué Modbus TCP necesita el encabezado MBAP

El Modbus serial identifica al dispositivo con una dirección de esclavo de un byte y detecta la corrupción con un CRC, y ambas cosas tienen sentido en un cable compartido. En una red TCP el dispositivo ya está identificado por su dirección IP y TCP ya garantiza una entrega ordenada y verificada, así que la dirección serial y el CRC serían redundantes. El encabezado MBAP aporta lo que TCP no da: una forma de emparejar cada respuesta con su petición cuando hay varias en vuelo, y una forma de alcanzar a un dispositivo serial que está detrás de un gateway.

Como el encabezado va delante del código de función y de los datos, que no cambian, la petición Modbus en sí es idéntica a su forma serial una vez que se quita el encabezado. Eso es lo que permite a un gateway traducir limpiamente entre Modbus TCP y el RTU serial. La diferencia de empaquetado en su conjunto se explica en la comparación de Modbus TCP frente a Modbus RTU.

Los cuatro campos del MBAP

El identificador de transacción son dos bytes que elige el maestro. El dispositivo lo copia sin cambios en la respuesta, para que el maestro pueda emparejar cada respuesta con la petición concreta que la produjo, incluso con varias pendientes en una misma conexión. Este es el mecanismo detrás del pipelining de Modbus TCP y la razón por la que un maestro no debe asumir que las respuestas llegan en el orden en que se enviaron las peticiones.

El identificador de protocolo son dos bytes y siempre vale cero para Modbus; existe para que el mismo entramado pudiera, en principio, transportar otros protocolos. El campo de longitud son dos bytes y cuenta todos los bytes que le siguen en el mensaje, es decir, el identificador de unidad más el código de función y los datos, de modo que el receptor sabe exactamente dónde termina el mensaje en un flujo TCP que no tiene delimitación propia.

El identificador de unidad es el último byte del encabezado y es el sucesor de la dirección de esclavo serial. En un dispositivo Modbus TCP nativo suele ser un valor de relleno, porque la dirección IP ya identifica al equipo, pero cuando un gateway hace puente hacia un bus serial, el identificador de unidad selecciona a qué dispositivo serial reenviar la petición. Usarlo mal es una falla común de gateway, tratada junto a la referencia del unit ID y la dirección de esclavo Modbus.

Preguntas frecuentes

¿Cuánto mide el encabezado MBAP?

El encabezado MBAP mide siete bytes: dos del identificador de transacción, dos del identificador de protocolo, dos de la longitud y uno del identificador de unidad. El código de función y los datos vienen inmediatamente después de esos siete bytes, así que la unidad de datos de aplicación completa en TCP son siete bytes de encabezado más la unidad de datos de protocolo.

¿Por qué un mensaje Modbus TCP no lleva CRC?

TCP ya aporta sus propias sumas de verificación y garantiza una entrega confiable y ordenada, así que un CRC a nivel Modbus no añadiría nada. El encabezado MBAP sustituye por completo al CRC serial. Por eso nunca encontrará un CRC en una captura de Modbus TCP: solo el encabezado MBAP de siete bytes seguido del código de función y los datos.

¿Qué hace el identificador de unidad en un dispositivo TCP nativo?

En un equipo que habla Modbus TCP directamente, la dirección IP ya lo identifica, así que el identificador de unidad suele ser un valor de relleno como 1 o 255 y se ignora. Solo cobra significado cuando un gateway reenvía la petición a uno de varios dispositivos seriales, donde el identificador de unidad selecciona la dirección de esclavo serial de destino.

Fuentes y lecturas

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

Más en Protocolos industriales
ADU vs PDU en Modbus  •  Borrar una excepcion Modbus de direccion de datos ilegal  •  Corregir errores CRC de Modbus RTU  •  Corregir un error de timeout de Modbus  •  Corregir un valor de registro Modbus equivocado  •  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 →