RS485 / Modbus RTU
El Eziwan Gateway dispone de un puerto RS485/RS232 nativo en la regleta de terminales. Esta interfaz permite recopilar datos de tus sensores, controladores lógicos programables y contadores mediante el protocolo Modbus RTU, y enviarlos a la nube sin necesidad de una pasarela independiente.
Conexión física
Cableado de la regleta de bornes RS485
Pines del bloque de bornes
| Pin | Señal | Descripción |
|---|---|---|
| A | RS485+ | Línea diferencial positiva |
| B | RS485− | Línea diferencial negativa |
| GND | Masa | Referencia común |
Una inversión de A/B provoca errores de comunicación sin dañar el equipo. Si ningún dispositivo responde, compruébalo invirtiendo A y B.
Resistencias de terminación
En un bus RS485 con varios esclavos:
- 120 Ω en el primer y el último equipo del bus
- El Eziwan Gateway dispone de un puente interno para activar la terminación (documentación de hardware)
- En los dispositivos intermedios: terminación desactivada
Configuración del polling Modbus
A través del panel de control de Eziwan
Dispositivo → Configuración → RS485 / Modbus
Interfaz gráfica: añade cada esclavo y cada registro, y define el intervalo de sondeo y el tema MQTT de destino.
A través de la API / YAML
# Configuration RS485 + Modbus RTU
rs485:
enabled: true
baud_rate: 9600 # 1200, 2400, 4800, 9600, 19200, 38400, 115200
parity: none # none, even, odd
data_bits: 8 # 7 ou 8
stop_bits: 1 # 1 ou 2
polling_interval_sec: 10 # Intervalo global de sondeo (segundos)
modbus:
slaves:
- slave_id: 1
name: "Compteur énergie Schneider PM2200"
timeout_ms: 1000
retries: 3
registers:
- address: "0x0048"
type: holding # holding, input, coil, discrete_input
format: float32_abcd
tag: active_power
unit: kW
scale: 1.0
mqtt_topic: "site/usine-01/energie/puissance_active"
- address: "0x004A"
type: holding
format: float32_abcd
tag: reactive_power
unit: kVAr
scale: 1.0
mqtt_topic: "site/usine-01/energie/puissance_reactive"
- address: "0x0156"
type: holding
format: float32_abcd
tag: energy_total_kwh
unit: kWh
scale: 1.0
mqtt_topic: "site/usine-01/energie/index_kwh"
- slave_id: 2
name: "Capteur température / humidité"
timeout_ms: 500
registers:
- address: "0x0001"
type: input
format: int16
tag: temperature
unit: "°C"
scale: 0.1 # Valeur brute 245 → 24,5°C
mqtt_topic: "site/usine-01/environnement/temperature"
- address: "0x0002"
type: input
format: uint16
tag: humidity
unit: "%RH"
scale: 0.1
mqtt_topic: "site/usine-01/environnement/humidite"
- slave_id: 3
name: "Automate Schneider TM3 — Station de pompage"
polling_interval_sec: 30 # Anulación del intervalo global
registers:
- address: "0x0000"
type: holding
format: uint16
tag: pump_status
unit: ""
# 0 = apagado, 1 = encendido, 2 = fallo
mqtt_topic: "site/pompe-01/etat/pompe"
- address: "0x0001"
type: holding
format: int16
tag: pressure_bar
unit: bar
scale: 0.01
mqtt_topic: "site/pompe-01/mesures/pression"
- address: "0x0002"
type: holding
format: uint16
tag: flow_m3h
unit: "m³/h"
scale: 0.1
mqtt_topic: "site/pompe-01/mesures/debit"
Formatos de registros compatibles
| Formato | Descripción | Registros |
|---|---|---|
int16 | Entero con signo de 16 bits | 1 |
uint16 | Entero sin signo de 16 bits | 1 |
int32_abcd | Entero con signo de 32 bits, big-endian | 2 |
int32_cdab | Entero con signo de 32 bits, little-endian | 2 |
uint32_abcd | Entero sin signo de 32 bits, big-endian | 2 |
float32_abcd | Flotante IEEE 754, big-endian | 2 |
float32_cdab | Número flotante IEEE 754, little-endian (Schneider) | 2 |
float32_badc | Número flotante IEEE 754, mid-big-endian | 2 |
coil | Bobina Modbus (1 bit) | 1 bobina |
bit | Extracción de un bit de un registro uint16 | 1 |
Si los valores leídos parecen incoherentes (por ejemplo: 1234 leído como 12340000), prueba con float32_cdab en lugar de float32_abcd. La convención varía según los fabricantes.
Publicación MQTT
Los datos Modbus se publican automáticamente en el broker MQTT de Eziwan:
Estructura del tema
eziwan/{device_id}/modbus/{slave_id}/{tag_name}
Ejemplo:
eziwan/d_a1b2c3d4/modbus/1/active_power
Carga útil JSON
{
"value": 42.7,
"unit": "kW",
"timestamp": "2025-06-15T14:23:45.123Z",
"slave_id": 1,
"register": "0x0048",
"quality": "good"
}
El campo "quality" puede adoptar los siguientes valores:
"good"— lectura correcta"timeout": el esclavo no ha respondido"error": error de Modbus (código incluido en"error_code")
Suscríbete desde tu sistema
# Suscribirse a todas las etiquetas de una web
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert client.crt --key client.key --cafile ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/#"
# Suscripción a una etiqueta concreta
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert client.crt --key client.key --cafile ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/1/active_power"
Equipos probados
| Fabricante | Modelo | Protocolo | Notas |
|---|---|---|---|
| Schneider Electric | PM2100, PM2200 | Modbus RTU | Contador de energía — float32 |
| Schneider Electric | TM3, TM2 | Modbus RTU | Controlador lógico — bobinas + resistencias |
| Siemens | SENTRON PAC 3200 | Modbus RTU | Contador de energía |
| Carlo Gavazzi | EM24, EM340 | Modbus RTU | Contador trifásico/monofásico |
| ABB | B23, B24 | Modbus RTU | Contador de energía |
| Wago | 750-xxx | Modbus RTU | Acoplador de bus de E/S |
| Phoenix Contact | ILB ETH 2TX | Modbus TCP | A través de puente TCP |
| Hager | ECR380D | Modbus RTU | Contador de energía |
| Eastron | SDM630 | Modbus RTU | Contador trifásico |
| Genérico | Cualquier Modbus RTU | Modbus RTU | ID de esclavo 1–247 |
Solución de problemas
Prueba de comunicación desde Eziwan
Panel de control → Dispositivo → Herramientas → Prueba Modbus
Introduce el ID del esclavo, el tipo y la dirección del registro → Eziwan envía una solicitud de lectura y muestra la respuesta sin procesar en tiempo real. Ideal para realizar diagnósticos sin necesidad de acceso físico al lugar.
Códigos de error de Modbus
| Código | Significado | Solución |
|---|---|---|
TIMEOUT | El esclavo no responde | Comprobar el cableado, la velocidad de transmisión, el ID del esclavo y la terminación |
01 | Función no compatible | Utilizar holding en lugar de input (o viceversa) |
02 | Dirección de registro no válida | Comprobar el registro en la documentación del equipo |
03 | Valor de datos no válido | Valor fuera del rango permitido |
04 | Fallo interno del esclavo | Consultar el registro del equipo |
Lista de comprobación del cableado
Si ningún esclavo responde:
- Comprobar la polaridad A/B (intentar invertirla)
- Comprobar la velocidad de transmisión (9600 es la más habitual)
- Comprobar que los ID de los esclavos sean únicos en el bus
- Activar la terminación de 120 Ω en el primer y el último equipo
- Probar con un solo esclavo (aislar el problema)
- Medir la tensión diferencial A−B: debe ser > 200 mV en reposo
Tensión diferencial de referencia
Bus en reposo (sin transmisión):
V(A−B) > +200 mV → polarisation correcte
Pendant transmission :
V(A−B) > +1.5V → signal dominant (1 logique)
V(A−B) < −1.5V → signal récessif (0 logique)
¿Tienes equipos que utilizan Modbus TCP (en red Ethernet)? Eziwan también es compatible con el puente Modbus TCP → MQTT. Consulta la documentación sobre Modbus TCP →
- Correo electrónico: support@eziwan.com — respuesta en menos de 4 horas laborables
- Configuración guiada: Programar una sesión de formación técnica →
Preguntas frecuentes
¿Cuántos dispositivos pueden conectarse a un mismo bus RS-485?
32 esclavos por segmento sin repetidor, en una longitud máxima de unos 1 200 m a 9 600 baudios. Si se supera esta longitud, divida el sistema en varios buses o añada repetidores.
¿Es imprescindible la resistencia de terminación?
En los buses largos o rápidos, sí: 120 Ω en cada extremo evitan las reflexiones que alteran las tramas. En un bus corto (unos metros, 9 600 baudios), su ausencia suele pasar desapercibida… hasta el día en que deja de funcionar.
¿Qué velocidad de sondeo elegir?
Adapta la frecuencia a la dinámica del proceso: cada 10 a 60 s para mediciones de energía o de nivel, y cada 1 a 5 s para la supervisión de máquinas. Un sondeo demasiado agresivo en un bus lento provoca tiempos de espera en cadena.
¿Cómo se pueden combinar equipos con velocidades diferentes?
No se deben mezclar los parámetros de serie en un mismo bus: todos los esclavos deben compartir la velocidad, la paridad y los bits de parada. De lo contrario, distribúyalos entre los distintos puertos RS-485 de la pasarela.
Recursos relacionados
- Pasarela RS485 a la nube — la página de la solución
- RS485 / Modbus por 4G — recopilación de datos de un bus serie a través de la red móvil
- Modbus a la nube — visión general
- Guía completa de Modbus — registros, funciones y resolución de problemas
- MQTT y RS-485 en la práctica — el artículo de fondo