Comunicación industrial: Modbus
Introducción
Este post es recuperando una sección que utilizo en mi TFM donde explicaba la comunicación industrial y Modbus. Espero que sea útil para alguien que quiera aprender sobre estos temas.
Comunicación Industrial
En los sistemas industriales modernos, la comunicación entre dispositivos es un elemento clave para garantizar la automatización, supervisión y control de procesos. Existen múltiples tecnologías y protocolos diseñados específicamente para este entorno, cada uno con ventajas en términos de velocidad, robustez, topología y compatibilidad.

Entre las comunicaciones industriales más comunes se encuentran:
-
Profibus y Profinet: desarrollados por Siemens, ampliamente utilizados en Europa. Profibus se basa en comunicación serie, mientras que Profinet utiliza Ethernet industrial.
-
EtherCAT: protocolo basado en Ethernet, diseñado para aplicaciones de tiempo real y muy baja latencia.
-
CANopen: basado en el bus CAN, muy extendido en automoción e industrias que requieren alta fiabilidad en redes distribuidas.
-
EtherNet/IP: estándar industrial basado en TCP/IP, promovido por Rockwell Automation, muy usado en Norteamérica.
-
Modbus: uno de los protocolos más antiguos y extendidos, valorado por su simplicidad, compatibilidad e implementación en equipos de bajo coste.
-
MQTT (Message Queuing Telemetry Transport): protocolo ligero basado en el modelo publicador/suscriptor, ampliamente adoptado en IoT industrial por su bajo consumo de ancho de banda y su facilidad para conectar dispositivos remotos con sistemas de supervisión en la nube.
La elección de un protocolo depende de factores como la criticidad del tiempo de respuesta, la compatibilidad con los equipos existentes, la complejidad de la red y los costes de implementación. En la siguiente tabla se presenta una comparativa de los protocolos anteriormente mencionados.
| Protocolo | Tipo/Modelo | Velocidad | Tiempo real | Complejidad | Usos |
|---|---|---|---|---|---|
| Modbus | Maestro / Esclavo | Baja (115 kbps RTU, Mbps en TCP) | No | Muy baja | Automatización básica, compatibilidad con PLCs y sensores |
| Profibus | Maestro / Esclavo | Media (hasta 12 Mbps) | Parcial | Media | Redes industriales en Europa, PLC Siemens |
| Profinet | Ethernet industrial | Alta (100 Mbps+) | Sí | Media / Alta | Automatización avanzada, tiempo real |
| EtherCAT | Ethernet industrial | Muy alta (100 Mbps determinístico) | Sí | Alta | Robótica, control de movimiento |
| CANopen | Bus CAN | Media (hasta 1 Mbps) | Sí (limitado) | Media | Automoción, maquinaria distribuida |
| EtherNet / IP | TCP / IP industrial | Alta (100 Mbps+) | Sí (con CIP Sync) | Alta | Industria en Norteamérica, integración con IT |
| MQTT | Publicador / Suscriptor | Depende de red (TCP/IP) | No (orientado a datos) | Muy baja | IoT industrial, supervisión remota, cloud |
:Comparativa de Protocolos de Comunicación Industrial. Fuente: Maisvch {#tbl:protocolos-comunicacion}
Según lo visto, los protocolos más usados para comunicaciones con PLC son Modbus y Profibus. Al contrario de Profibus que se centra en PLC Siemens, Modbus es un protocolo más genérico y ampliamente adoptado. Por ello, este trabajo se centrará en Modbus.
Protocolo Modbus
El protocolo Modbus, desarrollado en 1979 por Modicon (actual Schneider Electric), se basa en un modelo de comunicación maestro-esclavo. El cliente es el encargado de iniciar las transacciones solicitando la lectura o escritura de datos, mientras que el servidor responde proporcionando la información requerida o confirmando la acción realizada.
Existen varias implementaciones del protocolo: Modbus RTU (orientado a comunicación serie en entornos industriales), Modbus TCP (sobre redes Ethernet) y Modbus ASCII (menos utilizado en la actualidad). Cada una de estas variantes mantiene la misma estructura lógica, lo que facilita la migración entre tecnologías según el entorno físico de la red.
Las funciones principales de Modbus se centran en la lectura y escritura de registros, con operaciones que permiten obtener estados binarios, valores analógicos o modificar parámetros de configuración en dispositivos remotos.
Mapeo de Registros
Modbus organiza la información en distintos espacios de memoria denominados registros, los cuales representan variables binarias o analógicas accesibles mediante funciones de comunicación. Los principales se resumen en la siguiente tabla.
| Tipo de Registro | Dirección típica | Acceso | Uso común |
|---|---|---|---|
| Coils | 00001–09999 | R/W | Estados de salida digital |
| Discrete Inputs | 10001–19999 | R | Lectura de entradas digitales |
| Input Registers | 30001–39999 | R | Lectura de valores analógicos |
| Holding Registers | 40001–49999 | R/W | Variables de proceso y consignas |
:Mapeo de Registros Modbus {#tbl:mapeo-registros-modbus}
Este mapeo permite representar desde señales binarias (ejemplo: un relé activado) hasta valores analógicos como temperatura, presión o caudal. En la práctica, los sistemas SCADA o aplicaciones de supervisión utilizan estas direcciones para consultar y controlar el estado de los dispositivos conectados.
Tipo de Datos
Los registros Modbus pueden contener diferentes tipos de datos, los cuales ocupan diferentes espacios en memoria y tienen distintos rangos de valores. En la siguiente tabla se resumen los formatos más comunes.
| Formato | IEC 61131-3 | Descripción | Bits | Min Valor | Max Valor |
|---|---|---|---|---|---|
| BOOL | BOOL | Representa un único estado (0 o 1). | 1 | 0 | 1 |
| INT16 | INT | Número entero de 16 bits. | 16 | -32768 | 32767 |
| UINT16 | UINT | Número entero sin signo de 16 bits. | 16 | 0 | 65535 |
| INT32 | DINT | Número entero de 32 bits. | 32 | -2147483648 | 2147483647 |
| UINT32 | UDINT | Número entero sin signo de 32 bits. | 32 | 0 | 4294967295 |
| REAL | REAL | Número de punto flotante de 32 bits. | 32 | -3.4028235E38 | 3.4028235E38 |
:Formatos de Datos Modbus. Fuente: Ingeteam {#tbl:formatos-datos-modbus}
Formato Real
El formato REAL de 32 bits según IEEE 754 permite representar números decimales en sistemas industriales. La estructura incluye un bit de signo, un exponente y una mantisa. El orden de los bytes en Modbus es específico y no secuencial. Los valores del exponente determinan si el número es normalizado, cero, infinito o NaN (no es un número). Así, se pueden identificar y manejar correctamente valores especiales en la comunicación industrial. En la siguiente tabla se detalla la estructura del formato REAL.
| Signo | Exponente | Mantisa |
|---|---|---|
| 31 | 30-23 | 22-0 |
:Estructura del Formato REAL. Fuente: Ingeteam {#tbl:estructura-real}
Como ejemplo, si se quiere representar el número decimal -3.5 en formato REAL, se seguirían los pasos de conversión a binario y ajuste a la norma IEEE 754, obteniendo una representación específica en los registros Modbus.
- Conversión a Binario: El número -3.5 en binario se representa como -11.1. En formato de punto flotante, se normaliza a -1.11 x 2^1.
- Ajuste a IEEE 754: Se asignan los valores a la estructura: bit de signo = 1, exponente = 10000001 (en binario) y mantisa = 11000000000000000000000 (en binario).
- Representación en Registros Modbus: Finalmente, se organiza la información en los registros Modbus, teniendo en cuenta el orden de los bytes.
Gestión de Errores de Comunicación
En la comunicación industrial es de vital implementar mecanismos para detectar y gestionar errores que puedan surgir durante la transmisión de datos. Por lo tanto, Modbus incluye diversos mecanismos integrados para detectar, reportar y manejar errores de comunicación.
Tipos de Errores
En la documentación oficial de Modbus, se mencionan estos principales tipos de errores:
- Transmisión física: el error más común en las comunicaciones están relacionados a esta causa.
- CRC: cuando el receptor computa el CRC y este es diferente al enviado se detecta el error, y el mensaje es descartado.
- Timeout:: cuando el dispositivo maestro no recibe respuesta del esclavo dentro de un tiempo establecido.
- Bytes Insuficientes: cuando se recibe un número menor de bytes del esperado.
- Excepciones Propias: ver la siguiente tabla.
| Código | Nombre |
|---|---|
| 0x01 | Función ilegal |
| 0x02 | Dirección de datos ilegal |
| 0x03 | Valor de datos ilegal |
| 0x04 | Fallo del dispositivo servidor |
| 0x05 | Reconocimiento |
| 0x06 | Dispositivo servidor ocupado |
| 0x08 | Error de paridad de memoria |
:Excepciones Modbus. Fuente: Documentación Modbus {#tbl:excepciones-modbus}
Estrategias de Manejo de Errores
Existen dos enfoques principales para el manejo de errores: la recuperación automática y el monitoreo.
En cuanto a la recuperación automática, se pueden aplicar reintentos automáticos: cuando se detecta un error de timeout o CRC, el maestro puede reenviar la petición un número limitado de veces antes de reportar el fallo definitivo. Por otro lado, el diagnóstico y monitoreo se apoya en herramientas especializadas como Modbus Poll, Modbus Slave y Serial Port Monitor, que permiten:
- Monitorear el tráfico en tiempo real
- Detectar errores de configuración
- Verificar la integridad de las tramas
Para identificar problemas sistemáticos en la red, es posible implementar técnicas de análisis de patrones de errores, como el Análisis de Componentes Principales (PCA).