¿Qué es el identificador de transacción Modbus?
El identificador de transacción es el campo de dos bytes al frente de todo mensaje Modbus TCP que permite al maestro emparejar cada respuesta con la petición que la produjo. Es lo que hace seguro tener varias peticiones pendientes en una misma conexión. Esta referencia explica qué hace el identificador de transacción, por qué importa en cualquier cosa más allá del sondeo de una petición a la vez, y los bugs que aparecen cuando se ignora.
Identificador de transacción Modbus en una línea: El identificador de transacción Modbus es un valor de dos bytes que el maestro pone en el encabezado MBAP de cada petición; el dispositivo lo copia sin cambios en la respuesta. Permite al maestro emparejar cada respuesta con la petición concreta que la causó, de modo que varias peticiones pueden estar en vuelo en una misma conexión TCP. Ignorarlo y asumir que las respuestas llegan en orden es una fuente común de datos cruzados.
Qué hace el identificador de transacción
En Modbus TCP un maestro puede enviar más de una petición antes de que llegue la primera respuesta, lo cual es eficiente en una red con cualquier latencia. Pero eso plantea un problema: cuando regresan varias respuestas, ¿cuál responde a cuál petición? El identificador de transacción lo resuelve. El maestro elige un valor para cada petición y el dispositivo devuelve ese valor exacto en la respuesta correspondiente, así que el maestro puede emparejarlas sin ambigüedad sin importar el orden de llegada. Es uno de los cuatro campos del encabezado MBAP detallados en la referencia del encabezado MBAP de Modbus.
Esto solo importa en TCP. El Modbus serial es estrictamente petición y respuesta sobre un cable compartido, así que nunca hay más de un intercambio en curso y no hace falta etiquetarlo. El identificador de transacción es, por tanto, específico del transporte TCP, una de las diferencias que destaca la comparación de Modbus TCP frente a RTU.
Los bugs que aparecen cuando se ignora
Un maestro que ignora el identificador de transacción y simplemente asume que la siguiente respuesta contesta la última petición enviada funcionará bien mientras solo tenga una petición pendiente. En el momento en que encadena peticiones, o en que las respuestas llegan fuera de orden, atribuirá una respuesta a la petición equivocada y guardará en silencio el valor equivocado en el tag equivocado. Esta clase de bug es insidiosa porque nada da error; los datos simplemente quedan mal en silencio, mucho más difícil de atrapar que un timeout, una familia de síntomas tratada en la referencia del retardo de respuesta serial de Modbus.
El comportamiento correcto es verificar que el identificador de transacción de cada respuesta coincida con la petición que se está contestando, y descartar o reencolar lo que no cuadre. Un tropiezo relacionado es un dispositivo o gateway que no devuelve el identificador de transacción correctamente, lo que rompe el emparejamiento para un maestro conforme; cuando un maestro TCP lee valores plausibles pero equivocados bajo carga, vale la pena revisar los identificadores de transacción cruzados junto con la confusión de identificador de unidad descrita en la referencia del unit ID y la dirección de esclavo Modbus.
Preguntas frecuentes
¿Para qué sirve el identificador de transacción Modbus?
Permite a un maestro Modbus TCP emparejar cada respuesta con la petición que la produjo. El maestro pone un valor de dos bytes en el encabezado MBAP de cada petición y el dispositivo lo devuelve en la respuesta, así que varias peticiones pueden estar pendientes en una misma conexión y sus respuestas se emparejan correctamente sin importar el orden de llegada.
¿El Modbus serial tiene identificador de transacción?
No. El RTU y el ASCII seriales son estrictamente petición y respuesta sobre un cable compartido, con un solo intercambio en curso a la vez, así que no hay nada que etiquetar. El identificador de transacción es una característica de Modbus TCP, parte del encabezado MBAP, y existe precisamente porque TCP permite varias peticiones en vuelo.
¿Qué sale mal si un maestro ignora el identificador de transacción?
Mientras solo haya una petición pendiente, nada. Pero en cuanto el maestro encadena peticiones o las respuestas llegan fuera de orden, puede atribuir una respuesta a la petición equivocada y guardar el valor equivocado en un tag sin que se levante ningún error. Verificar el identificador de transacción en cada respuesta evita esa corrupción silenciosa de datos.
Fuentes y lecturas
Referencias primarias de los organismos de normas y reguladores que definen este tema:
- Modbus Specifications - Modbus Organization
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.