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)

CPUFirmware% de MW accesiblesMódulo ETHID de unidad de la CPU
BMX P34 1000≥ 2,300..1023 (1 024 palabras)BMX NOE o módulo ETH255
BMX P34 2010≥ 2,300..9999 (10 000 palabras)ETH integrado255
BMX P34 2020≥ 2,300..9999ETH integrado255
BMX P34 2030≥ 2,300..9999ETH integrado255

Gama M221 (TM221)

CPUFirmware% de MW accesiblesID de unidad
TM221CE16R≥ 1,00..99991
TM221C16T≥ 1,00..99991
TM221ME16R (Ethernet)≥ 1,00..99991
TM221M16R (+ módulo ETH)≥ 1,00..99991

Gama M241 (TM241)

CPUFirmware% de MW accesiblesID de unidad
TM241CE40R≥ 1,00..99991
TM241CE40T≥ 1,00..99991
TM241C40R (+ módulo TMBM)≥ 1,00..99991

Gama M251 y M262

CPUFirmwareProtocolosID de unidad
TM251MESE≥ 1.0Modbus TCP, EtherNet/IP1
TM262M15MESS8T≥ 1.0Modbus TCP, EtherNet/IP, MQTT nativo1
tip

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):

  1. Vista estructural → hacer doble clic en la CPU BMX P34 xxxx
  2. Pestaña «Configuración» → hacer clic en la interfaz Ethernet (ETH 1 o módulo NOE)
  3. Pestaña «Servicios» → marcar «Servidor Modbus»
  4. Puerto: 502 (no modificar salvo que sea imprescindible)
  5. 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ámetroBMX NOE 0100BMX NOE 0110
Velocidad de transmisión10/100 Mbit10/100 Mbit
Escáner de E/SNo
Servidor Modbus
ConfiguraciónA través de las propiedades de la CPUA través de las propiedades del módulo
ID de unidadConfigurableConfigurable
aviso

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):

  1. Configuración → pestaña «Ethernet»
  2. Introducir la dirección IP estática y la máscara
  3. Configuración → pestaña «Modbus TCP Slave» (o «Modbus TCP Servant»)
  4. Marcar «Enabled»
  5. Puerto: 502
  6. ID de unidad: 1 (valor por defecto en M221/M241 —¡diferente al del M340!)

Diferencia fundamental entre el M340 y el M221/M241

ParámetroM340 (BMX P34)M221 / M241 (TM2xx)
ID de unidad por defecto2551
Software de configuraciónEcoStruxure Control ExpertEcoStruxure Machine Expert
%MW máx.10 000 (CPU >= 2010)9 999
Servidor ModbusActivado en las propiedades de la CPUActivado en la configuración de Ethernet
aviso

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íntomaCausa probableSolución
Conexión TCP rechazadaServidor Modbus desactivadoComprueba «Modbus Server» en EcoStruxure
Conexión TCP rechazadaRed mal configuradaHaz un ping al controlador desde un PC de la misma red
Excepción 02 (dirección no válida)BMX P34 1000 — dirección > 1023Desplazar el rango de supervisión entre 0 y 1023
Excepción 06 (servidor ocupado)Demasiados clientes conectadosCerrar las conexiones SCADA locales que no se utilicen
ID de unidad incorrectaM221/M241 con ID de unidad 255Cambiar a ID de unidad 1 en la configuración de Eziwan
Todos los valores a 0Variables sin asignar en el programaComprobar que %MW100+ reciban alimentación del programa
REAL incorrectoOrden de bytes CDAB en lugar de ABCDProbar con float32_cdab en Eziwan
Desconexión cada 30 sTiempo de espera de inactividad predeterminado en M340Aumentar el «tiempo de espera de inactividad» a 120 s en EcoStruxure
Módulo NOE no respondeLa IP del módulo es diferente a la de la CPUUtilizar la IP del módulo NOE, no la de la CPU
No se puede acceder a los registros %IW y %QWSe requiere FC=04 o FC=01, no FC=03Utilizar los FC adecuados o copiarlos en %MW

👉 Recursos adicionales

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