Modbus RTU, ASCII, y TCP con SerialTool

¿Qué es Modbus?

Modbus es un protocolo de comunicación en serie creado en 1979 por Modicon® (ahora parte de Schneider Electric) para conectar sus controladores lógicos programables (PLC). Se ha convertido en un estándar de facto en la comunicación industrial y es uno de los protocolos de conexión más utilizados a nivel mundial entre dispositivos electrónicos industriales. Modbus es un protocolo sin regalías declarado como especificaciones en el sitio web de The Modbus Organization.

En términos simples, es un método utilizado para transmitir información a través de líneas serie entre dispositivos electrónicos. El dispositivo que solicita información se llama Cliente Modbus, y los dispositivos que proporcionan información son Servidores Modbus. En una red Modbus estándar, hay un cliente y hasta 247 servidores, cada uno con una dirección de servidor única de 1 a 247. El cliente también puede escribir información en los servidores.


Originalmente diseñado para uso industrial, con el tiempo, este protocolo se ha adoptado en varios sectores, convirtiéndose en uno de los protocolos más extendidos. Incluso hoy, después de más de 40 años, está disponible en muchos dispositivos, como paneles de operadores, PLC, domótica e incluso integrado en dispositivos simples como Arduino.

Transmisión Modbus RTU y ASCII a través de Serie

La comunicación, cuando se creó el protocolo, estaba destinada a utilizarse a través de un puerto serie, por eso se ha implementado en SerialTool. Modbus se utiliza a menudo para conectar una computadora de supervisión con una unidad terminal remota (RTU) en sistemas de supervisión y adquisición de datos (SCADA). Dependiendo del formato en el que se transmiten los datos, el protocolo se divide en:

  • MODBUS RTU - los datos se transmiten en formato hexadecimal.
  • MODBUS ASCII - los datos se transmiten en formato ASCII.

El control de errores difiere en los dos casos; en MODBUS RTU, se utiliza una Comprobación de Redundancia Cíclica (CRC) y se envía después de los comandos, mientras que en MODBUS ASCII se envía una Comprobación de Redundancia Longitudinal (LRC) después de los comandos.

Transmisión Modbus TCP

En 1999, se desarrolló "Modbus TCP", un estándar dedicado a redes que utilizan el conjunto de protocolos TCP/IP. Es esencialmente una versión de Modbus RTU serie basada en TCP/IP, que permite la comunicación a través de redes internet/intranet. En los últimos años, la versión TCP/IP se utiliza cada vez más porque es de código abierto, fácil de implementar, tiene bajos costos de desarrollo y tiene un soporte de hardware mínimo.

El control de errores difiere en los dos casos; en MODBUS RTU, se utiliza una Comprobación de Redundancia Cíclica (CRC) y se envía después de los comandos, mientras que en MODBUS ASCII se envía una Comprobación de Redundancia Longitudinal (LRC) después de los comandos.

El protocolo Modbus TCP/IP utiliza la codificación binaria de datos y el mecanismo de detección de errores TCP/IP. A diferencia del Modbus serie, la versión TCP/IP es orientada a la conexión y permite ejecuciones concurrentes en el mismo esclavo o en varios dispositivos. Modbus TCP/IP también utiliza el paradigma maestro-esclavo, y esta comunicación utiliza cuatro tipos de mensajes.

Modbus se posiciona en la capa 7 en el modelo OSI/ISO (Capa de Aplicación), definiendo el formato de mensaje llamado enmarcado y el modo de transmisión de datos y funciones de control. La comunicación ocurre a través del paradigma cliente-servidor. El protocolo define una Unidad de Datos del Protocolo (PDU) que no depende de la capa de comunicación subyacente. La Unidad de Datos de Aplicación (ADU) introduce campos adicionales para la dirección y el control de errores.

Cliente Modbus SerialTool

SerialTool admite modos de transmisión RTU, ASCII y Modbus TCP para proporcionar la máxima flexibilidad profesional de un Cliente Modbus.
SerialTool también ofrece la opción de enviar comandos Raw para facilitar las necesidades de cualquier desarrollador.

Pantalla con el registro de comandos enviados

Pantalla con comandos de bajo nivel enviados


Funciones Modbus

Aquí están las funciones que SerialTool implementa para el protocolo Modbus.

Código de Función Acción Nombre de la Tabla
0x01 Leer Bobinas de Salida Discreta
0x02 Leer Contactos de Entrada Discreta
0x03 Leer Registro de Retención de Salida Analógica
0x04 Leer Registros de Entrada Analógica
0x05 Escribir Único Bobina de Salida Discreta
0x06 Escribir Único Registro de Retención de Salida Analógica
0x0F (dec 15) Escribir Múltiple Bobinas de Salida Discreta
0x10 (dec 16) Escribir Múltiple Registros de Retención de Salida Analógica

Estructuras de Datos Modbus

La información se almacena en el dispositivo del servidor en cuatro tablas diferentes. Dos tablas almacenan valores discretos de encendido/apagado (bobinas) y dos almacenan valores numéricos (registros). Tanto las bobinas como los registros tienen una tabla de solo lectura y una tabla de lectura/escritura. Cada tabla tiene 9999 valores. Cada bobina o contacto es de 1 bit y tiene una dirección de datos entre 0000 y 270E. Cada registro es de 1 palabra = 16 bits = 2 bytes y también tiene una dirección de datos entre 0000 y 270E.

Números de Bobinas/Registros Direcciones de Datos Tipo Nombre de la Tabla
1-9999 0x0000 a 0x270E Leer/Escribir Bobinas de Salida Discreta
10001-19999 0x0000 a 0x270E Solo Lectura Contactos de Entrada Discreta
30001-39999 0x0000 a 0x270E Solo Lectura Registro de Entrada Analógica
40001-49999 0x0000 a 0x270E Leer/Escribir Registro de Retención de Salida Analógica