Conexión de Schneider M340 / M221 / M241 a la nube a través de Modbus TCP
Esta guía describe la configuración completa para conectar los controladores Schneider de la gama Modicon a la plataforma Eziwan: M340 (BMX P34), M221, M241, M251 y M262. Cada gama tiene sus propias particularidades de configuración.
Tabla de compatibilidad de Schneider
Gama M340 (BMX P34)
| CPU | Firmware | % de MW accesibles | Módulo ETH | ID de unidad de la CPU |
|---|---|---|---|---|
| BMX P34 1000 | ≥ 2,30 | 0..1023 (1 024 palabras) | BMX NOE o módulo ETH | 255 |
| BMX P34 2010 | ≥ 2,30 | 0..9999 (10 000 palabras) | ETH integrado | 255 |
| BMX P34 2020 | ≥ 2,30 | 0..9999 | ETH integrado | 255 |
| BMX P34 2030 | ≥ 2,30 | 0..9999 | ETH integrado | 255 |
Gama M221 (TM221)
| CPU | Firmware | % de MW accesibles | ID de unidad |
|---|---|---|---|
| TM221CE16R | ≥ 1,0 | 0..9999 | 1 |
| TM221C16T | ≥ 1,0 | 0..9999 | 1 |
| TM221ME16R (Ethernet) | ≥ 1,0 | 0..9999 | 1 |
| TM221M16R (+ módulo ETH) | ≥ 1,0 | 0..9999 | 1 |
Gama M241 (TM241)
| CPU | Firmware | % de MW accesibles | ID de unidad |
|---|---|---|---|
| TM241CE40R | ≥ 1,0 | 0..9999 | 1 |
| TM241CE40T | ≥ 1,0 | 0..9999 | 1 |
| TM241C40R (+ módulo TMBM) | ≥ 1,0 | 0..9999 | 1 |
Gama M251 y M262
| CPU | Firmware | Protocolos | ID de unidad |
|---|---|---|---|
| TM251MESE | ≥ 1.0 | Modbus TCP, EtherNet/IP | 1 |
| TM262M15MESS8T | ≥ 1.0 | Modbus TCP, EtherNet/IP, MQTT nativo | 1 |
El M262 cuenta con un cliente MQTT nativo: Eziwan puede recibir directamente los datos publicados por el M262 sin necesidad de recurrir al polling Modbus. Ponte en contacto con el servicio de asistencia de Eziwan para la configuración de MQTT.
Configuración de EcoStruxure — Gama M340
Activar el servidor Modbus TCP en el BMX P34
En EcoStruxure Control Expert (Unity Pro):
- Vista estructural → hacer doble clic en la CPU
BMX P34 xxxx - Pestaña «Configuración» → hacer clic en la interfaz Ethernet (ETH 1 o módulo NOE)
- Pestaña «Servicios» → marcar «Servidor Modbus» ✓
- Puerto: 502 (no modificar salvo que sea imprescindible)
- Pestaña «Direcciones Ethernet» → introducir la IP estática
Parámetros avanzados (firmwares recientes):
- Tiempo de espera de conexión inactiva: aumentarlo a 120 s (por defecto, 30 s) para conexiones prolongadas
- Filtrado de IP (firmware ≥ 2.60): restringir el acceso a la dirección IP de la pasarela Eziwan
Módulo BMX NOE 0100 / BMX NOE 0110
Para los modelos M340 con módulo Ethernet externo:
| Parámetro | BMX NOE 0100 | BMX NOE 0110 |
|---|---|---|
| Velocidad de transmisión | 10/100 Mbit | 10/100 Mbit |
| Escáner de E/S | No | Sí |
| Servidor Modbus | Sí | Sí |
| Configuración | A través de las propiedades de la CPU | A través de las propiedades del módulo |
| ID de unidad | Configurable | Configurable |
En el BMX NOE 0110, el servidor Modbus TCP puede tener un ID de unidad distinto de 255. Comprueba la configuración del módulo en EcoStruxure y utiliza el ID de unidad configurado en Eziwan.
Configuración de EcoStruxure — Gamas M221 / M241
SoMachine / EcoStruxure Machine Expert
La configuración de Modbus TCP en los modelos M221 y M241 se realiza en EcoStruxure Machine Expert (antes conocido como SoMachine):
- Configuración → pestaña «Ethernet»
- Introducir la dirección IP estática y la máscara
- Configuración → pestaña «Modbus TCP Slave» (o «Modbus TCP Servant»)
- Marcar «Enabled» ✓
- Puerto: 502
- ID de unidad: 1 (valor por defecto en M221/M241 —¡diferente al del M340!)
Diferencia fundamental entre el M340 y el M221/M241
| Parámetro | M340 (BMX P34) | M221 / M241 (TM2xx) |
|---|---|---|
| ID de unidad por defecto | 255 | 1 |
| Software de configuración | EcoStruxure Control Expert | EcoStruxure Machine Expert |
| %MW máx. | 10 000 (CPU >= 2010) | 9 999 |
| Servidor Modbus | Activado en las propiedades de la CPU | Activado en la configuración de Ethernet |
Esta es la trampa más habitual: si configuras Eziwan con el ID de unidad 255 en un M221 o M241, la conexión fallará con una excepción Modbus o un tiempo de espera agotado. Utiliza el Unit ID 1 en el M221/M241.
Direccionamiento de los registros Modbus por rango
M340 — Correspondencia %MW ↔ Registro Modbus
Variable EcoStruxure │ Adresse Modbus │ Type Modbus
─────────────────────────────────────────────────────
%MW0 │ 0 │ Holding Register (FC=03)
%MW100 │ 100 │ Holding Register
%MWn │ n │ (direct, 0-based)
%QW0.0 │ 0 │ Input Register (FC=04) *
%IW0.0 │ 0 │ Discrete Input (FC=02) *
%Q0.0 a %Q0.7 │ bits 0 a 7 │ Bobina (FC=01)
*La correspondencia exacta entre las entradas y salidas analógicas depende de la configuración del hardware.
M221 / M241 — Correspondencia %MW ↔ Registro Modbus
La correspondencia es idéntica a la del M340: %MWn se corresponde con la dirección Modbus n.
Gestión de tipos de datos avanzados
Variables REAL (numerales de coma flotante de 32 bits) en 2 registros
Una variable REAL en Unity Pro / EcoStruxure ocupa dos %MW consecutivos en IEEE 754:
Variable REAL «Temperature» almacenada en %MW100:
%MW100: palabra de peso fuerte (MSW, bytes A y B)
%MW101: palabra de peso menor (LSW, bytes C y D)
Orden: ABCD (big-endian por defecto en M340/M221/M241)
Tipo Eziwan a configurar: float32_abcd
Si los valores son incorrectos (factor de error constante):
Prueba con float32_cdab (little-endian por registro). Algunos proyectos de Unity Pro utilizan la función DWORD_TO_REAL con un orden diferente.
Variables DINT / UDINT (entero de 32 bits) en 2 registros
Variable DINT «Contador» en %MW200:
%MW200 : partie haute (MSW)
%MW201 : partie basse (LSW)
Type Eziwan : int32_abcd
Compactación de valores booleanos en un %MW
Para reducir al mínimo el número de consultas Modbus, agrupa los estados booleanos en una palabra de memoria:
(* EcoStruxure Control Expert — Programme *)
(* Agrupación de 16 estados en %MW300 *)
%MW300 := 0; (* Restablecimiento a cero *)
IF %Q0.0 THEN %MW300 := %MW300 OR 16#0001; END_IF; (* Bomba 1 *)
IF %Q0.1 THEN %MW300 := %MW300 OR 16#0002; END_IF; (* Bomba 2 *)
IF %I0.5 THEN %MW300 := %MW300 OR 16#0004; END_IF; (* Error P1 *)
IF %I0.6 THEN %MW300 := %MW300 OR 16#0008; END_IF; (* Fallo P2 *)
IF %M10 THEN %MW300 := %MW300 OR 16#0010; END_IF; (* Alarme *)
Con esta técnica, se leen 16 valores booleanos con una sola consulta Modbus (FC=03, 1 registro).
Organización recomendada de los %MW para la supervisión
Para maximizar la eficacia de las consultas (agrupación automática por Eziwan):
Rango %MW0 a %MW9 : Valores de consigna del operador (valores modificables)
Rango %MW10 a %MW49 : Mediciones analógicas simples (int16 ×10)
Rango del %MW50 al %MW99: Mediciones analógicas dobles (REAL en 2 registros)
Rango del %MW100 al %MW149: Contadores de 16 bits
Rango del %MW150 al %MW199: Contadores de 32 bits (DINT, 2 registros cada uno)
Rango del %MW200 al %MW249: Estados de la máquina (campos de bits)
Rango %MW250 a %MW299 : Códigos de fallo
Rango %MW300 a %MW349: Parámetros del fabricante (solo lectura para el cliente)
Prueba de conexión
Prueba desde Python
from pymodbus.client import ModbusTcpClient
import struct
def tester_connexion_schneider(ip: str, unit_id: int = 255):
"""
Test de connexion Modbus TCP.
unit_id : 255 pour M340, 1 pour M221/M241
"""
client = ModbusTcpClient(ip, port=502, timeout=3)
if not client.connect():
print(f"✗ Connexion TCP impossible à {ip}:502")
return
print(f"✓ Connexion TCP établie → {ip}:502 (Unit ID {unit_id})")
# Prueba de lectura del %MW100 al %MW109
result = client.read_holding_registers(
address=100, count=10, slave=unit_id
)
if not result.isError():
print(f"✓ Modbus FC=03 OK — %MW100 à %MW109 : {result.registers}")
# Decodificación de float32 si %MW100+101 contiene un REAL (prueba)
if len(result.registers) >= 2:
raw = struct.pack(">HH", result.registers[0], result.registers[1])
float_val = struct.unpack(">f", raw)[0]
if abs(float_val) < 1e6: # Valeur plausible ?
print(f" → Si %MW100-%MW101 est un REAL : {float_val:.2f}")
else:
exc = getattr(result, 'exception_code', '?')
print(f"✗ Erreur Modbus FC=03 — exception code: {exc}")
# Diagnostics selon le code
messages = {
1: "FC no soportado → servidor Modbus no activado",
2: "Adresse invalide → plage %MW dépassée (M340 1000: max 1024)",
3: "Valeur invalide → count trop grand",
4: "Erreur serveur → serveur non initialisé, CPU en STOP",
6: "Serveur occupé → trop de connexions simultanées",
}
if exc in messages:
print(f" Diagnostic : {messages[exc]}")
client.close()
# Tests
tester_connexion_schneider("192.168.1.20", unit_id=255) # M340
tester_connexion_schneider("192.168.1.30", unit_id=1) # M221/M241
Asistencia técnica ampliada
| Síntoma | Causa probable | Solución |
|---|---|---|
| Conexión TCP rechazada | Servidor Modbus desactivado | Comprueba «Modbus Server» en EcoStruxure |
| Conexión TCP rechazada | Red mal configurada | Haz un ping al controlador desde un PC de la misma red |
| Excepción 02 (dirección no válida) | BMX P34 1000 — dirección > 1023 | Desplazar el rango de supervisión entre 0 y 1023 |
| Excepción 06 (servidor ocupado) | Demasiados clientes conectados | Cerrar las conexiones SCADA locales que no se utilicen |
| ID de unidad incorrecta | M221/M241 con ID de unidad 255 | Cambiar a ID de unidad 1 en la configuración de Eziwan |
| Todos los valores a 0 | Variables sin asignar en el programa | Comprobar que %MW100+ reciban alimentación del programa |
| REAL incorrecto | Orden de bytes CDAB en lugar de ABCD | Probar con float32_cdab en Eziwan |
| Desconexión cada 30 s | Tiempo de espera de inactividad predeterminado en M340 | Aumentar el «tiempo de espera de inactividad» a 120 s en EcoStruxure |
| Módulo NOE no responde | La IP del módulo es diferente a la de la CPU | Utilizar la IP del módulo NOE, no la de la CPU |
| No se puede acceder a los registros %IW y %QW | Se requiere FC=04 o FC=01, no FC=03 | Utilizar los FC adecuados o copiarlos en %MW |
- Modbus TCP con un Schneider M340 — Guía completa — configuración detallada y estructura de tramas
- Guía de Modbus TCP/IP — código en Python y comparativa de protocolos
- Descargar la ficha de compatibilidad de Schneider → — PDF con todos los modelos probados
- Soporte técnico →
Preguntas frecuentes
¿Qué controladores Schneider son compatibles?
Toda la gama Modicon con comunicación Modbus TCP: M221, M241, M251, M340, M580, así como los modelos Premium y Quantum equipados con acopladores Ethernet. Las gamas de serie (Twido, TSX) se conectan a través del puerto RS-485 de la pasarela.
¿Hay que modificar el programa del controlador lógico programable?
No para la lectura de datos: la pasarela consulta las palabras %MW existentes en Modbus TCP. Solo la posible escritura de valores de consigna puede requerir reservar un rango de palabras específico en el programa.
¿A qué puerto de red debe poder accederse?
El puerto Modbus TCP 502, únicamente en la red local entre la pasarela y el controlador. No hay nada expuesto a Internet: la pasarela establece un túnel VPN saliente hacia la nube.
¿Cómo diagnosticar un problema en una conexión que no funciona?
Comprueba, en este orden: hacer un ping al controlador desde la pasarela, que el puerto 502 esté abierto (sin cortafuegos local), que el ID de unidad sea correcto y que el direccionamiento %MW esté alineado (offset 0 frente a 1, según las herramientas). La consola Eziwan muestra las tramas y los códigos de excepción de Modbus en tiempo real.
Recursos relacionados
- Acceso remoto al controlador Schneider — EcoStruxure remoto de forma segura
- Conectar un M340/M221 a la nube — el artículo paso a paso
- Guía completa de Modbus — registros, funciones y resolución de problemas
- Modbus a la nube — la solución de recopilación de datos Modbus
- Conectar un controlador lógico a la nube — todas las marcas compatibles