Modbus — Protocolo de comunicación industrial

Definición e historia

Modbus es un protocolo de comunicación industrial publicado en 1979 por Modicon (hoy Schneider Electric) para permitir la comunicación entre su controlador lógico programable y los dispositivos de campo. Modbus, que se convirtió en un estándar abierto y libre de derechos en 2002, es hoy en día el protocolo más extendido en la industria, presente en cientos de millones de dispositivos en todo el mundo.

Su popularidad se basa en tres cualidades fundamentales: simplicidad (fácil de implementar, bien documentado), robustez (funciona con conexiones de mala calidad) e interoperabilidad (estándar abierto, compatible con prácticamente todos los equipos industriales: controladores lógicos programables, variadores de velocidad, contadores de energía, sensores y reguladores).

A pesar de su antigüedad, Modbus sigue siendo imprescindible, sobre todo en instalaciones ya existentes (brownfield) y para equipos de bajo coste. Su principal inconveniente es la falta de seguridad nativa (sin autenticación ni cifrado), lo que obliga a protegerlo tras una VPN cuando transita por una red no controlada.

Modbus RTU frente a Modbus TCP

Existen dos variantes principales del protocolo Modbus:

Modbus RTU (serie)

  • Capa física: RS-232 (punto a punto) o RS-485 (bus multipunto con hasta 32 dispositivos, 1 200 m de distancia máxima a 9 600 baudios).
  • Transmisión: binaria, compacta. Cada mensaje contiene la dirección del esclavo, el código de función, los datos y un CRC-16 de control de integridad.
  • Topología: maestro-esclavo (un único maestro, hasta 247 esclavos direccionables del 1 al 247).
  • Uso: contadores de energía, variadores de frecuencia, sensores industriales con salida RS-485, controladores lógicos programables antiguos.

Modbus TCP (Ethernet)

  • Capa física: Ethernet (10/100/1000 Mbps), protocolo IP, puerto TCP 502.
  • Encapsulación: la trama Modbus RTU se encapsula en una cabecera MBAP (Modbus Application Protocol) de 7 bytes que sustituye al CRC (Ethernet garantiza por sí misma la integridad).
  • Topología: cliente-servidor (el cliente, antes denominado «maestro», consulta al servidor, antes denominado «esclavo»). Varios clientes pueden consultar simultáneamente a un mismo servidor.
  • Uso: controladores lógicos programables con puerto Ethernet (Siemens S7, Schneider M340/M580, Allen-Bradley), HMI/SCADA, pasarelas a la nube.
CriterioModbus RTUModbus TCP
Capa físicaRS-232 / RS-485Ethernet / TCP-IP
Velocidad típicaDe 9 600 a 115 200 baudios10/100 Mbps
DistanciaHasta 1 200 m (RS-485)Red Ethernet estándar
Número de esclavosDe 1 a 247Ilimitado (direccionamiento IP)
Control de integridadCRC-16Suma de comprobación TCP
Seguridad nativaNingunaNinguna (utilizar VPN)

Estructura de un mensaje Modbus

Modbus RTU — Trama

| Dirección de esclavo (1 byte) | Código de función (1 byte) | Datos (N bytes) | CRC-16 (2 bytes) |

Ejemplo de consulta FC03 que lee 2 registros a partir de la dirección 0x0000 en el esclavo 1:

01 03 00 00 00 02 C4 0B

Modbus TCP — Trama (con encabezado MBAP)

| ID de transacción (2 bytes) | ID de protocolo (2 bytes, = 0x0000) | Longitud (2 bytes) | ID de unidad (1 byte) | Código de función | Datos |

Registros Modbus

Modbus organiza los datos en cuatro tipos de registros, identificados por su dirección de referencia:

TipoDirecciónAccesoDescripción
Coils (bobinas)0x0001–0xFFFF (base 1)Lectura/EscrituraSalidas digitales binarias (bit) — estado de una válvula o un relé
Entradas discretas0x1001–0xFFFFSolo lecturaEntradas digitales discretas (bit) — estado de un sensor de todo o nada
Registros de retención0x4001–0xFFFFLectura/escrituraRegistros de 16 bits de lectura/escritura — consignas, parámetros, valores medidos
Registros de entrada0x3001–0xFFFFSolo lecturaRegistros de 16 bits de solo lectura — mediciones de sensores, valores de proceso

Nota: la direccionamiento real en las tramas comienza en 0 (desplazamiento de -1 con respecto a las referencias documentadas). Por lo tanto, el registro de retención (Holding Register) con referencia 40001 tiene la dirección 0x0000 en la trama.

Códigos de función (Function Codes) habituales

CódigoHexNombreDescripción
FC010x01Leer bobinasLeer el estado de N bobinas (salidas digitales)
FC020x02Leer entradas discretasLeer el estado de N entradas digitales
FC030x03Leer registros de retenciónLeer N registros de 16 bits en lectura/escritura — el más utilizado
FC040x04Leer registros de entradaLeer N registros de 16 bits de solo lectura
FC050x05Escribir una sola salida digitalEscribir una sola salida digital (0x0000 = OFF, 0xFF00 = ON)
FC060x06Escribir un solo registro de retención de 16 bits
FC160x10Escribir varios registrosEscribir varios registros consecutivos en una sola transacción

El FC03 es, con diferencia, el código más utilizado para la supervisión: permite leer las mediciones, los estados y los contadores de un equipo.

Direccionamiento de esclavo (ID de unidad)

En Modbus RTU, cada dispositivo del bus RS-485 tiene una dirección única comprendida entre 1 y 247. La dirección 0 está reservada para la difusión (broadcast); solo se pueden difundir los comandos de escritura.

En Modbus TCP, el campo Unit ID (antes denominado Slave ID) se conserva en la cabecera MBAP. Por lo general, se fija en 1 o 255 para los controladores con una sola entidad, pero puede utilizarse para direccionar diferentes buses RS-485 detrás de una misma pasarela Modbus TCP/RTU.

Configuración de Modbus en la pasarela Eziwan

La pasarela Eziwan es compatible de forma nativa con Modbus RTU (a través de RS-485) y Modbus TCP (a través de Ethernet). La configuración se realiza a través de la interfaz web de la pasarela:

  1. Seleccionar el protocolo: elegir «Modbus RTU» o «Modbus TCP» en el menú «Fuente de datos».
  2. Parámetros serie (solo RTU): velocidad de transmisión (9 600, 19 200, 38 400, 57 600 o 115 200), paridad (Ninguna/Par/Impar), bits de parada (1 o 2).
  3. Dirección de esclavo: introduce la dirección del equipo (de 1 a 247).
  4. Definir los puntos de datos: para cada valor que se desee leer, especificar el código de función (FC01 a FC04), la dirección del registro y el tipo de datos (INT16, UINT16, INT32, FLOAT32, BOOL).
  5. Período de adquisición: frecuencia de sondeo (de 1 segundo a varios minutos, según sea necesario).
  6. Probar la conexión: utiliza la función «Prueba de lectura» para comprobar que los datos se leen correctamente antes de activar la transmisión a la nube.

Recursos relacionados

Preguntas frecuentes

¿En qué se diferencian Modbus RTU y Modbus TCP?

Modbus RTU se transmite a través de un enlace serie RS-485 (bus multiesclavo, hasta 1 200 m); Modbus TCP encapsula las mismas solicitudes en una trama Ethernet/IP en el puerto 502. Una pasarela sirve de puente entre ambos entornos.

¿Qué es un registro Modbus?

Una celda de memoria de 16 bits identificada por una dirección. Los registros de retención (holding registers, FC03/FC06/FC16) contienen los valores del proceso; las magnitudes de 32 bits (números en coma flotante, contadores) ocupan dos registros consecutivos.

¿Es seguro Modbus?

No: el protocolo no cuenta con autenticación ni cifrado. Nunca debe exponerse en Internet; la norma es limitarlo a la red local y transportar los datos a la nube a través de un túnel VPN cifrado.

¿Cuántos dispositivos pueden conectarse a un bus Modbus RTU?

Hasta 32 esclavos sin repetidor (247 direcciones lógicas posibles). Si se superan estas cifras, o para combinar diferentes frecuencias de sondeo, se segmenta en varios buses a través de puertos RS-485 distintos.

Recursos relacionados