Guía completa de Modbus

Presentación

Modbus es el protocolo de comunicación industrial más extendido del mundo. Creado en 1979, está presente en millones de controladores lógicos programables, variadores, reguladores, contadores y sensores industriales. Eziwan es compatible de forma nativa con Modbus RTU (sobre RS-485) y Modbus TCP (sobre Ethernet).


Modbus RTU en RS-485

Cableado RS-485: guía completa

RS-485 es una interfaz diferencial de dos hilos (A y B). La diferencia de tensión entre A y B codifica la señal, lo que le confiere una excelente inmunidad frente a las interferencias electromagnéticas de los entornos industriales.

⚠️ Topología en línea (A↔A, B↔B, GND común). Resistencias de terminación de 120 Ω solo en ambos extremos del bus —ya integradas en el lado de Eziwan, deben colocarse en el último esclavo—. Nunca se debe colocar una resistencia en medio de la línea.

Tabla de conexiones de los terminales Eziwan RS-485:

Terminal EziwanSeñal RS-485Color de cable recomendado
A (o D+)Positivo diferencialBlanco o rojo
B (o D-)Negativo diferencialAzul o negro
GNDMasa de referenciaVerde o gris

Parámetros de comunicación RS-485

Los parámetros deben ser idénticos en la pasarela y en todos los esclavos:

ParámetroValores habitualesValor por defecto de Eziwan
Velocidad (baudrate)1200, 2400, 4800, 9600, 19200, 38 400, 57 600, 115 2009 600
ParidadN (ninguna), E (par), O (impar)N
Bits de datos7, 88
Bits de parada1, 21
Retardo entre mensajes3,5 tiempos de carácter (Modbus estándar)Auto

Configuración estándar más habitual: 9600 8N1 (9600 baudios, 8 bits de datos, sin paridad, 1 bit de parada)

Distancia máxima y número de esclavos

Velocidad de transmisiónDistancia máximaNúmero máximo de esclavos (eléctrico)
9 600 bps1 200 m32 (cargas unitarias)
19 200 bps800 m32
57 600 bps200 m32
115 200 bps50 m32

Para superar los 32 esclavos o los 1 200 m, utiliza un repetidor RS-485.


Modbus TCP

Conexión Ethernet

Modbus TCP encapsula el protocolo Modbus en tramas TCP/IP. La conexión es directa a través de Ethernet RJ45.

ParámetroValor
Puerto TCP502 (estándar), a veces 503 u otro según el fabricante
ID de unidadDirección del esclavo (de 1 a 247), o 255 para acceso directo
Tiempo de espera recomendadoDe 500 ms a 2000 ms, dependiendo de la red
Keep-alive TCPRecomendado para conexiones de larga duración

Configuración de red

La pasarela Eziwan debe poder conectarse al controlador Modbus TCP a través de la red Ethernet. Comprueba lo siguiente:

  1. La pasarela y el controlador se encuentran en la misma subred (o hay un router entre ambos)
  2. No hay ningún cortafuegos que bloquee el puerto TCP 502 entre la pasarela y el controlador
  3. El controlador Modbus TCP está configurado para aceptar conexiones (PUT/GET activado en Siemens)

Los cuatro tipos de registros Modbus

La especificación Modbus define cuatro espacios de datos distintos:

TipoCódigo ModbusDireccionesAcceso maestroTamañoDescripción
Bobinas0x (1x)00001–09999Lectura/Escritura1 bitSalidas digitales (relés, bobinas)
Entradas discretas1x (2x)10001–19999Solo lectura1 bitEntradas digitales (sensores discretos)
Registros de entrada3x30001–39999Solo lectura16 bitsValores medidos (sensores analógicos)
Registros de retención4x40001–49999Lectura/escritura16 bitsParámetros y puntos de consigna

Nota importante: las direcciones Modbus comienzan por 1 en la notación «funcional» (40001 a 49999), pero las funciones Modbus utilizan direcciones basadas en 0 (la solicitud FC03 para el registro 40001 utiliza la dirección 0x0000). Eziwan admite ambas notaciones.

Funciones Modbus estándar

Código de funciónNombreRegistros de destino
FC01Lectura de bobinasBobinas (0x)
FC02Lectura de entradas discretasEntradas discretas (1x)
FC03Lectura de registros de retenciónRegistros de retención (4x)
FC04Lectura de registros de entradaRegistros de entrada (3x)
FC05Escritura en una bobinaBobinas (0x)
FC06Escritura en un solo registroRegistros de retención (4x)
FC15Escritura en varias bobinasBobinas (0x)
FC16Escritura en varios registrosRegistros de retención (4x)

Configuración de la asignación en Eziwan

Interfaz de configuración JSON

La asignación Modbus define cómo se recogen y se publican los registros del controlador:

{
"device": {
"name": "Compresseur_Atlas_GA75",
"description": "Compresseur d'air atelier principal",
"protocol": "modbus_rtu",
"connection": {
"port": "/dev/ttyS0",
"baudrate": 9600,
"parity": "N",
"databits": 8,
"stopbits": 1,
"slave_id": 1
}
},
"polling": {
"interval_ms": 5000,
"timeout_ms": 500,
"retry_count": 3,
"retry_delay_ms": 200
},
"registers": [
{
"name": "Pression_Service",
"address": "3x0001",
"count": 1,
"type": "uint16",
"scale_factor": 0.1,
"unit": "bar",
"description": "Pression de service sortie compresseur",
"alarm_low": 6.0,
"alarm_high": 12.0,
"publish_on_change": true
},
{
"name": "Temperature_Huile",
"address": "3x0002",
"count": 1,
"type": "uint16",
"scale_factor": 0.1,
"unit": "°C",
"alarm_high": 95.0
},
{
"name": "Heures_Fonctionnement",
"address": "4x0010",
"count": 2,
"type": "uint32_ab",
"unit": "h",
"description": "Compteur d'heures moteur"
},
{
"name": "Debit_Air",
"address": "3x0005",
"count": 2,
"type": "float32_abcd",
"unit": "m³/h"
},
{
"name": "Alarme_Active",
"address": "1x0001",
"count": 1,
"type": "bool",
"description": "Au moins une alarme active"
},
{
"name": "Code_Alarme",
"address": "4x0020",
"count": 1,
"type": "uint16",
"description": "Code alarme (voir tableau constructeur)"
}
]
}

Ejemplo completo: 10 registros de temperatura, 5 registros de estado

A continuación se muestra un mapa típico para una línea de producción con 10 puntos de temperatura y 5 estados de la máquina:

{
"registers": [
{ "name": "Temp_Zone1", "address": "4x0001", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone2", "address": "4x0003", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone3", "address": "4x0005", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone4", "address": "4x0007", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone5", "address": "4x0009", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone6", "address": "4x0011", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone7", "address": "4x0013", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone8", "address": "4x0015", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone9", "address": "4x0017", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone10", "address": "4x0019", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Etat_EnMarche", "address": "1x0001", "count": 1, "type": "bool" },
{ "name": "Etat_EnChauffe", "address": "1x0002", "count": 1, "type": "bool" },
{ "name": "Etat_Production", "address": "1x0003", "count": 1, "type": "bool" },
{ "name": "Etat_Defaut", "address": "1x0004", "count": 1, "type": "bool" },
{ "name": "Etat_ArretUrgence", "address": "1x0005", "count": 1, "type": "bool" }
]
}

Tipos de datos compatibles con Eziwan

Tipo JSONDescripciónTamaño (registros)Ejemplo de valor
uint16Entero sin signo de 16 bits1De 0 a 65 535
int16Entero con signo de 16 bits1-32768 a 32767
uint32_abEntero de 32 bits, big-endian20 a 4 294 967 295
uint32_baEntero de 32 bits, little-endian2
float32_abcdNúmero real IEEE 754, ABCD223,456
float32_cdabNúmero de coma flotante IEEE 754, CDAB (Schneider)2
float32_badcNúmero de coma flotante IEEE 754, BADC2
float64_abcdefghDoble precisión4
boolBooleano (entrada de bobina o discreta)1verdadero/falso

Depuración de Modbus

Herramienta Modbus Poll (Windows)

Modbus Poll es la herramienta de referencia para probar y depurar las conexiones Modbus:

  1. Descargar en modbustools.com
  2. Versión de prueba gratuita (30 días)
  3. Configuración: Conexión → Conectar → Modbus TCP (IP + puerto 502) o serie (COM + velocidad de transmisión)
  4. Definir los registros que se van a leer: Configuración → Definición de lectura/escritura
Modbus Poll: configuración de lectura
─────────────────────────────────────
Slave ID: 1
Function: 03 Read Holding Registers
Address: 0 (= registre 40001)
Quantity: 10
Scan Rate: 1000 ms

Registros de Eziwan para la depuración de Modbus

En el portal Eziwan → Gateway → Registros → Modbus:

2026-06-04 14:32:00.123 [[INFO] Modbus RTU: solicitud FC03 esclavo=1, dirección=0, recuento=10
2026-06-04 14:32:00.145 [[INFO] Modbus RTU: respuesta recibida en 22 ms, 10 registros
2026-06-04 14:32:00.145 [DATA] Reg[0001]=0x4529 (23.4°C FLOAT32), Reg[0003]=0x42C6 (99.2 rpm)
2026-06-04 14:32:01.123 [[ADVERTENCIA] Modbus RTU: tiempo de espera agotado tras 500 ms, esclavo=2 (intento 1/3)
2026-06-04 14:32:01.623 [[WARN] Modbus RTU: tiempo de espera agotado tras 500 ms, esclavo=2 (intento 2/3)
2026-06-04 14:32:02.123 [[ERROR] Modbus RTU: esclavo 2 inaccesible tras 3 intentos

Activa el nivel de registro DEBUG para obtener las tramas hexadecimales sin procesar:

2026-06-04 14:32:00.100 [DEBUG] TX: 01 03 00 00 00 0A C5 CD
│ │ ├──────┤ ├──────┤ └── CRC16
│ │ addr=0 count=10
│ FC03
slave=1
2026-06-04 14:32:00.122 [DEBUG] RX: 01 03 14 45 29 ... (20 octets + 2 CRC)

Solución de problemas

Problema 1: Tiempo de espera de Modbus RTU

Síntomas: mensajes timeout, falta de respuesta del esclavo.

Causas y soluciones:

CausaDiagnósticoSolución
ID de esclavo incorrectoProbar manualmente los ID de esclavo del 1 al 10Consultar la documentación del equipo
Velocidad de transmisión incorrectaProbar sucesivamente 9600, 19200 y 57600
Cableado A/B invertidoMedir la tensión entre A y B: +1,5 V a 5 V = correctoInvertir los cables A y B
Falta la resistencia de terminaciónMedir R entre A y B con el sistema apagado: ~60 Ω si hay 2 resistenciasAñadir una resistencia de 120 Ω al final del bus
Cable demasiado largoCalcular la longitud totalReducir la velocidad de transmisión o añadir un repetidor
Falta la alimentación RS-485Medir la tensión de alimentación del esclavoComprobar los 24 V CC del esclavo

Problema 2: Errores CRC

Síntomas: CRC error en los registros de Eziwan, datos incorrectos.

Causas:

  • Interferencias electromagnéticas en el cable RS-485 (alejar el cable de los cables de alimentación)
  • Cable sin blindaje (utilizar un cable blindado, con el blindaje conectado a tierra únicamente en el lado de la pasarela)
  • Mala calidad del cable (utilizar un cable específico para RS-485, con una impedancia de 120 Ω)
  • Velocidad de transmisión demasiado alta para la longitud del cable (reducir la velocidad de transmisión)

Problema 3: Conflicto de ID de esclavo

Síntomas: un esclavo responde en lugar de otro; datos mezclados.

Causa: dos esclavos tienen el mismo ID de esclavo en el mismo bus RS-485.

Solución:

  1. Desconectar todos los esclavos del bus excepto uno
  2. Escanear el bus con Modbus Poll para encontrar el ID de ese esclavo
  3. Cambiar el ID si hay un conflicto (a través de la interfaz de configuración del equipo)
  4. Volver a conectar los esclavos uno por uno

Problema 4: Registro ilegible (código de excepción 02)

Síntoma: Illegal Data Address (Exception Code 02).

Causa: la dirección solicitada no existe en el controlador o no es accesible a través de Modbus.

Soluciones:

  • Consultar la documentación del fabricante para conocer las direcciones compatibles
  • Algunos equipos solo exponen un rango limitado de registros
  • En Siemens, comprobar que la zona de memoria se encuentre efectivamente en el bloque de datos expuesto a través de PUT/GET

Lista de comprobación para un diagnóstico rápido

□ Tensión de alimentación de 24 V CC presente en los bornes de alimentación de Eziwan
□ El LED RS-485 de Eziwan parpadea durante la transmisión (TX)
□ Cableado A/B: A = positivo, B = negativo (sin invertir)
□ Resistencias de 120 Ω únicamente en ambos extremos del bus
□ ID de esclavo correcto (compruébalo en la pantalla del equipo o en la documentación)
□ Velocidad de transmisión idéntica en la pasarela y el equipo
□ Paridad idéntica en la pasarela y el equipo (N, E u O)
□ Dirección IP y puerto 502 correctos para Modbus TCP
□ PUT/GET activado en S7-1500/1200 si es necesario
□ No hay ningún cortafuegos que bloquee el puerto 502 en la red local OT

Preguntas frecuentes

Modbus RTU o Modbus TCP: ¿cuál elegir?

RTU si tus equipos están conectados a un bus serie RS-485 (sensores, contadores, controladores antiguos); TCP si los equipos ya están conectados a Ethernet. La pasarela Eziwan gestiona ambos protocolos simultáneamente y actúa como puente entre RTU y TCP.

¿Qué funciones Modbus se utilizan para la supervisión?

Principalmente FC03 (lectura de registros de espera) y FC04 (registros de entrada) para la recopilación de datos; FC06/FC16 para la escritura de valores de consigna. Los códigos de excepción (02: dirección ilegal; 0B: destino inaccesible) sirven de guía para la resolución de problemas.

¿Cómo se lee un valor de 32 bits o un número de coma flotante?

En dos registros consecutivos, especificando el orden de las palabras (big/little endian, intercambio de palabras) en la configuración de la pasarela. Un mismo equipo puede combinar ambas convenciones: consulta la documentación del fabricante registro por registro.

¿Se puede transmitir Modbus a través de Internet?

Nunca en claro: el protocolo no cuenta con autenticación ni cifrado. La pasarela limita el Modbus a la red local y transporta los datos a la nube a través de un túnel VPN cifrado.

Recursos relacionados