Glosario de Automatización • ADU vs PDU en Modbus

ADU vs PDU en Modbus: estructura del mensaje

Ingeniería Merobix • • 4 min de lectura

Todo mensaje Modbus tiene dos partes anidadas: la unidad de datos de protocolo, que es igual en todo transporte, y la unidad de datos de aplicación, que la envuelve de manera distinta en serial y en TCP. Entender esta división es lo que hace que un gateway, una captura o un documento de protocolo cobren sentido de repente. Esta referencia define el PDU y el ADU, muestra qué cambia entre ellos y explica por qué existe la división.

Volver al glosario

ADU vs PDU en Modbus en una línea: El PDU de Modbus es la unidad de datos de protocolo: el código de función más sus datos, idéntico en RTU, ASCII y TCP. El ADU, o unidad de datos de aplicación, es el PDU envuelto para un transporte, agregando una dirección y un CRC en RTU serial o un encabezado MBAP en TCP. El PDU es el mensaje; el ADU es el mensaje más lo que el transporte necesita para entregarlo.

El PDU: la parte que nunca cambia

La unidad de datos de protocolo es el corazón de un mensaje Modbus: un solo byte de código de función seguido de los datos que esa función necesita, como una dirección inicial y una cantidad para una lectura. Esto es lo mismo si el mensaje viaja por RTU serial, ASCII serial o TCP. Cuando dos ingenieros hablan de lo que dice una solicitud Modbus, están hablando del PDU, y los códigos de función que lo definen se cubren en la referencia del código de función Modbus.

La especificación Modbus limita el tamaño del PDU, y por eso una sola lectura llega como máximo a 125 registros y una sola escritura a menos, ya que la dirección, la cantidad y los datos deben caber todos. El límite de lectura y su aritmética se explican en la referencia del límite de 125 registros por lectura Modbus. Como el PDU es independiente del transporte, la misma lógica de solicitud funciona en todas partes, lo cual es gran parte de por qué Modbus es tan portátil.

El ADU: lo que el transporte envuelve alrededor

La unidad de datos de aplicación es el PDU más todo lo que el transporte agrega para entregarlo. En RTU serial el ADU antepone una dirección de esclavo de un byte y agrega al final un CRC de dos bytes, así que la trama es dirección, PDU, CRC. En ASCII serial la envoltura es dos puntos, el PDU codificado como caracteres hexadecimales, un LRC y un retorno de carro con salto de línea. En TCP el ADU reemplaza la dirección serial y la verificación por el encabezado MBAP de siete bytes delante del PDU, como se detalla en la referencia del encabezado MBAP de Modbus.

Por eso un gateway puede puentear serial y TCP tan limpiamente: le quita al PDU una envoltura de ADU y le aplica la otra, dejando intactos el código de función y los datos. También es la razón por la que el CRC de RTU desaparece en TCP, ya que el transporte aporta su propia integridad, un punto desarrollado en la comparación de Modbus TCP vs RTU. Saber qué bytes son envoltura del ADU y cuáles son PDU convierte cualquier captura en algo legible.

Preguntas frecuentes

¿Cuál es la diferencia entre el ADU y el PDU de Modbus?

El PDU, unidad de datos de protocolo, es el código de función y sus datos, y es idéntico en todo transporte. El ADU, unidad de datos de aplicación, es el PDU más la envoltura del transporte: una dirección de esclavo y un CRC en RTU serial, o un encabezado MBAP en TCP. En corto, el PDU es la solicitud en sí y el ADU es la solicitud empaquetada para su entrega.

¿Por qué desaparece el CRC en Modbus TCP?

Porque el CRC es parte del ADU serial, no del PDU. En TCP el ADU usa un encabezado MBAP en lugar de dirección y CRC, y las verificaciones propias de TCP aportan la integridad que daba el CRC serial. El PDU de abajo no cambia, así que solo difiere la envoltura, que es exactamente la distinción ADU frente a PDU.

¿Cómo usa un gateway la división entre ADU y PDU?

Un gateway extrae el PDU independiente del transporte de un ADU entrante y lo vuelve a envolver en el ADU del otro transporte. Puentear RTU serial a TCP significa quitar la dirección y el CRC y agregar un encabezado MBAP, con el código de función y los datos intactos. Esta separación limpia es lo que hace directa la traducción entre transportes Modbus.

Fuentes y lecturas

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

Más en Protocolos industriales
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  •  Excepcion Modbus de valor de datos ilegal (codigo 03)  •  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 →