Modbus es un protocolo cliente-servidor sencillo que lee y escribe cuatro tipos de datos: bobinas, entradas discretas, registros de entrada y registros de retención. En RTU viaja por RS-485 o RS-232 con dirección de esclavo y CRC; en TCP viaja sobre TCP/IP con el encabezado MBAP por el puerto 502. Es muy usado con medidores, inversores y servicios auxiliares, pero no tiene eventos con estampa de tiempo ni seguridad propia en su versión básica.
Qué es Modbus y su especificación
Modbus es un protocolo de mensajería de capa de aplicación, cliente-servidor (en serie, maestro-esclavo), mantenido por la Modbus Organization. Sus documentos de referencia son la especificación del protocolo de aplicación (V1.1b3, 2012), la guía de implementación sobre línea serie (V1.02) y la guía de implementación de Modbus TCP/IP. Existe además la especificación Modbus/TCP Security, que lo transporta sobre TLS.
Dónde se usa y por qué
En subestaciones aparece con medidores de energía y multifunción, analizadores, reguladores, cargadores de batería, transformadores secos y equipos de servicios auxiliares. En industria y plantas solares es casi universal: PLC, inversores, variadores y sensores. Un gateway o un PLC lo lee y lo pasa al SCADA en otro protocolo; dentro de la arquitectura de comunicaciones de subestación queda en el nivel de bahía y de servicios auxiliares.
Se usa porque es abierto, simple y casi todos los equipos lo traen. Su sencillez es también su límite.
Cómo funciona
Modelo de datos. Cuatro tablas:
| Tabla | Tipo | Acceso |
|---|---|---|
| Entradas discretas | 1 bit | Solo lectura |
| Bobinas (coils) | 1 bit | Lectura y escritura |
| Registros de entrada | 16 bits | Solo lectura |
| Registros de retención | 16 bits | Lectura y escritura |
En la trama cada dato se direcciona de 0 a 65 535. El elemento numerado X en el modelo va en la dirección X-1. Cómo se asocian esas tablas a las variables internas del equipo lo define cada fabricante en su mapa de registros.
Códigos de función más usados. 01 leer bobinas, 02 leer entradas discretas, 03 leer registros de retención, 04 leer registros de entrada, 05 escribir una bobina, 06 escribir un registro, 15 escribir varias bobinas, 16 escribir varios registros y 23 leer y escribir varios registros. Una lectura admite hasta 2000 bits o hasta 125 registros.
| Código | Función |
|---|---|
| 01 | Leer bobinas |
| 02 | Leer entradas discretas |
| 03 | Leer registros de retención |
| 04 | Leer registros de entrada |
| 05 | Escribir una bobina |
| 06 | Escribir un registro |
| 15 | Escribir varias bobinas |
| 16 | Escribir varios registros |
| 23 | Leer y escribir varios registros |
Excepciones. Si el servidor no puede atender, responde con el código de función más 80H y un código de excepción: 01 función ilegal, 02 dirección de datos ilegal, 03 valor ilegal, 04 falla del dispositivo; 0A y 0B indican problemas en un gateway (ruta no disponible o equipo destino sin respuesta).
Tamaños. La PDU (código de función más datos) tiene como máximo 253 octetos. En serie la trama completa llega a 256 octetos con la dirección de esclavo y el CRC; en TCP, a 260 con el encabezado MBAP.
Modbus RTU. La trama tiene dirección de esclavo (1 a 247; la 0 es difusión, solo para escrituras y sin respuesta), código de función, datos y CRC de 16 bits. Las tramas se separan por un silencio de al menos 3,5 tiempos de carácter, y un silencio mayor a 1,5 caracteres dentro de una trama la invalida. Por encima de 19 200 baudios se recomiendan valores fijos de 750 µs y 1,75 ms. El bus RS-485 necesita terminación en los dos extremos y polarización en un solo punto, como indica la guía de línea serie.
Modbus TCP. La PDU viaja precedida del encabezado MBAP de 7 octetos: identificador de transacción (2), identificador de protocolo (2, siempre 0 para Modbus), longitud (2) e identificador de unidad (1). El identificador de unidad sirve para llegar, a través de un gateway, a un esclavo serie. El servidor escucha en el puerto TCP 502.
Límites para uso en subestación
- Sin eventos con estampa de tiempo en la especificación básica: lo que cambia entre dos sondeos se pierde.
- Sin tipos de datos de 32 bits ni flotantes definidos: cada fabricante elige formato y orden de palabras.
- Sin calidad del dato ni mandos con selección previa normalizados.
- Sin seguridad en Modbus RTU ni en Modbus TCP básico.
Por eso se usa para medida y supervisión de equipos auxiliares, y no para eventos de protección ni mandos críticos.
Configuración: conceptos
Se fija la velocidad, la paridad (la guía serie toma la paridad par por defecto) y la dirección de cada esclavo; en TCP, IP, puerto e identificador de unidad. Luego se construye el mapa: función, dirección, cantidad, tipo, escala, orden de palabras y período de sondeo de cada dato. Agrupar registros contiguos en una sola lectura reduce el tráfico.
Seguridad
Modbus/TCP Security encapsula el protocolo en TLS con certificados X.509v3, autorización por roles incluida en el certificado y el puerto 802, registrado ante IANA. Donde no se use, el equipo Modbus TCP debe quedar en una red aislada detrás de un cortafuegos industrial.
Problemas típicos y diagnóstico
- Excepción 02: dirección corrida en uno (base 0 frente a base 1) o registro inexistente.
- Valores absurdos: orden de palabras o formato de 32 bits cruzado.
- Tiempos de espera intermitentes: dos maestros en el mismo bus, terminación o polarización mal hechas, o un servidor serial que rompe los silencios.
- Errores de CRC: ruido, paridad distinta o lazos de tierra.
- Gateway que responde 0B: el esclavo serie detrás del gateway no contesta.
Se diagnostica con un simulador de maestro, un analizador de bus RS-485 o una captura de Modbus TCP.
Convivencia y migración
Modbus convive con IEC 60870-5-103 y DNP3 en los mismos gateways, que lo leen por sondeo y lo publican hacia el SCADA en IEC 60870-5-104 o DNP3. Cuando un equipo ofrece también IEC 61850 o DNP3, conviene preferirlos para eventos y mandos.
Pruebas
Lectura de cada registro y comparación con la pantalla del equipo, escritura de cada mando con verificación de su efecto, prueba de escala y orden de palabras con valores conocidos, corte del bus para comprobar la marca de comunicación perdida en el SCADA, y medición del tiempo de ciclo de sondeo con todos los esclavos conectados.
Configuración remota e integración con Tiza Group
¿Medidores o equipos Modbus que no cuadran en el SCADA? Nuestro equipo revisa mapas y capturas de forma remota con el servicio de configuración remota y hace la integración SCADA y de gateways en subestaciones e industria de media, alta y extra alta tensión.
Referencias
- Modbus Organization, MODBUS Application Protocol Specification V1.1b3 (2012).
- Modbus Organization, MODBUS over Serial Line Specification and Implementation Guide V1.02.
- Modbus Organization, MODBUS Messaging on TCP/IP Implementation Guide.
- Modbus Organization, MODBUS/TCP Security Protocol Specification.
- IANA, Service Name and Transport Protocol Port Number Registry (puertos 502 y 802).
Preguntas frecuentes
¿Por qué leo el registro 40001 y el equipo me responde con un error de dirección?
Porque el número del manual y la dirección en la trama no siempre coinciden. Modbus numera los elementos del modelo de datos desde 1 y en la trama los direcciona desde 0, así que el dato X va en la dirección X-1. Además, el 4 inicial de 40001 es una convención de muchos fabricantes para indicar registro de retención, que la especificación no usa: no es parte de la dirección.
¿Por qué una medida de 32 bits sale con valores absurdos?
Modbus solo define registros de 16 bits. Cómo reparte cada fabricante un entero de 32 bits o un flotante en dos registros, y en qué orden, lo decide él. Si el maestro arma los dos registros en el orden contrario, el número sale sin sentido; se corrige con el orden de palabras indicado en el mapa del equipo.
¿Sirve Modbus para llevar los eventos de un relé al SCADA?
Solo de forma limitada. Modbus lee valores actuales por sondeo y no tiene eventos con estampa de tiempo en su especificación básica, así que un cambio rápido entre dos lecturas se pierde. Para secuencia de eventos se prefieren IEC 61850, DNP3 o IEC 60870-5-103/104.