Connessione dei modelli Schneider M340 / M221 / M241 al cloud tramite Modbus TCP

Questa guida illustra la configurazione completa necessaria per collegare i controllori Schneider della gamma Modicon alla piattaforma Eziwan: M340 (BMX P34), M221, M241, M251 e M262. Ogni gamma presenta le proprie specificità di configurazione.


Tabella di compatibilità Schneider

Serie M340 (BMX P34)

CPUFirmware% MW accessibiliModulo ETHID unità CPU
BMX P34 1000≥ 2,300..1023 (1.024 parole)BMX NOE o modulo ETH255
BMX P34 2010≥ 2,300..9999 (10.000 parole)ETH integrato255
BMX P34 2020≥ 2,300..9999ETH integrato255
BMX P34 2030≥ 2,300..9999ETH integrato255

Serie M221 (TM221)

CPUFirmware% MW accessibiliID unità
TM221CE16R≥ 1,00..99991
TM221C16T≥ 1,00..99991
TM221ME16R (Ethernet)≥ 1,00..99991
TM221M16R (+ modulo ETH)≥ 1,00..99991

Serie M241 (TM241)

CPUFirmware% MW accessibiliID unità
TM241CE40R≥ 1,00..99991
TM241CE40T≥ 1,00..99991
TM241C40R (+ modulo TMBM)≥ 1,00..99991

Serie M251 e M262

CPUFirmwareProtocolliID unità
TM251MESE≥ 1.0Modbus TCP, EtherNet/IP1
TM262M15MESS8T≥ 1.0Modbus TCP, EtherNet/IP, MQTT nativo1
suggerimento

L'M262 dispone di un client MQTT nativo: Eziwan può ricevere direttamente i dati pubblicati dall'M262 senza passare dal polling Modbus. Contatta l'assistenza Eziwan per la configurazione MQTT.


Configurazione EcoStruxure — Serie M340

Attivare il server Modbus TCP sul BMX P34

In EcoStruxure Control Expert (Unity Pro):

  1. Vista strutturale → doppio clic sulla CPU BMX P34 xxxx
  2. Scheda "Configurazione" → cliccare sull'interfaccia Ethernet (ETH 1 o modulo NOE)
  3. Scheda "Servizi" → selezionare "Modbus Server"
  4. Porta: 502 (non modificare se non in caso di necessità)
  5. Scheda "Indirizzi Ethernet" → inserire l'IP statico

Impostazioni avanzate (firmware recenti):

  • Timeout connessione inattiva: aumentare a 120 s (impostazione predefinita 30 s) per le connessioni di lunga durata
  • Filtraggio IP (firmware ≥ 2.60): limitare l'accesso all'indirizzo IP del gateway Eziwan

Modulo BMX NOE 0100 / BMX NOE 0110

Per i modelli M340 con modulo Ethernet esterno:

ParametroBMX NOE 0100BMX NOE 0110
Velocità di trasmissione10/100 Mbit10/100 Mbit
Scanner I/ONo
Server Modbus
ConfigurazioneTramite proprietà CPUTramite proprietà del modulo
ID unitàConfigurabileConfigurabile
warning

Sul BMX NOE 0110, l'ID unità del server Modbus TCP potrebbe essere diverso da 255. Verificare la configurazione del modulo in EcoStruxure e utilizzare l'ID unità configurato in Eziwan.


Configurazione EcoStruxure — Serie M221 / M241

SoMachine / EcoStruxure Machine Expert

La configurazione Modbus TCP sui modelli M221 e M241 viene effettuata in EcoStruxure Machine Expert (precedentemente SoMachine):

  1. Configurazione → scheda "Ethernet"
  2. Inserire l'indirizzo IP statico e la subnet mask
  3. Configurazione → scheda "Modbus TCP Slave" (o "Modbus TCP Servant")
  4. Selezionare "Enabled"
  5. Porta: 502
  6. ID unità: 1 (impostazione predefinita su M221/M241 — diversa da quella dell'M340!)

Differenza fondamentale tra M340 e M221/M241

ParametroM340 (BMX P34)M221 / M241 (TM2xx)
ID unità predefinito2551
Software di configurazioneEcoStruxure Control ExpertEcoStruxure Machine Expert
%MW max10.000 (CPU >= 2010)9.999
Server ModbusAttivato nelle proprietà della CPUAttivato nella configurazione Ethernet
warning

Questa è la trappola più comune: se si configura Eziwan con Unit ID 255 su un M221 o un M241, la connessione fallisce con un'eccezione Modbus o un timeout. Utilizzare l’Unit ID 1 su M221/M241.


Indirizzamento dei registri Modbus per intervallo

M340 — Corrispondenza %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) *
Da %Q0.0 a %Q0.7 │ bit da 0 a 7 │ Bobina (FC=01)

*La corrispondenza esatta tra ingressi e uscite analogici dipende dalla configurazione hardware.

M221 / M241 — Corrispondenza %MW ↔ Registro Modbus

La corrispondenza è identica a quella dell'M340: %MWn corrisponde all'indirizzo Modbus n.


Gestione avanzata dei tipi di dati

Variabili REAL (a virgola mobile a 32 bit) su 2 registri

Una variabile REAL in Unity Pro / EcoStruxure occupa due %MW consecutivi secondo lo standard IEEE 754:

Variabile REAL "Temperature" memorizzata in %MW100:
%MW100: parola di peso forte (MSW, byte A e B)
%MW101: parola di peso basso (LSW, byte C e D)
Ordine: ABCD (big-endian per impostazione predefinita su M340/M221/M241)

Tipo Eziwan da configurare: float32_abcd

Se i valori non sono corretti (fattore di errore costante): Provare con float32_cdab (little-endian per registro). Alcuni progetti Unity Pro utilizzano la funzione DWORD_TO_REAL con un ordine diverso.

Variabili DINT / UDINT (intero a 32 bit) su 2 registri

Variabile DINT "Contatore" su %MW200:
%MW200 : partie haute (MSW)
%MW201 : partie basse (LSW)
Type Eziwan : int32_abcd

Compressione dei valori booleani in un %MW

Per ridurre al minimo il numero di richieste Modbus, raggruppare gli stati booleani in una parola di memoria:

(* EcoStruxure Control Expert — Programme *)
(* Raggruppamento di 16 Stati in %MW300 *)

%MW300 := 0; (* Azzeramento *)
IF %Q0.0 THEN %MW300 := %MW300 OR 16#0001; END_IF; (* Pompa 1 *)
IF %Q0.1 THEN %MW300 := %MW300 OR 16#0002; END_IF; (* Pompa 2 *)
IF %I0.5 THEN %MW300 := %MW300 OR 16#0004; END_IF; (* Errore P1 *)
IF %I0.6 THEN %MW300 := %MW300 OR 16#0008; END_IF; (* Errore P2 *)
IF %M10 THEN %MW300 := %MW300 OR 16#0010; END_IF; (* Alarme *)

Con questa tecnica, 16 valori booleani vengono letti con una sola richiesta Modbus (FC=03, 1 registro).


Organizzazione consigliata delle %MW per la supervisione

Per ottimizzare l'efficienza delle query (raggruppamento automatico da parte di Eziwan):

Intervallo da %MW0 a %MW9: Impostazioni dell'operatore (valori di riferimento modificabili)
Intervallo da %MW10 a %MW49: Misure analogiche semplici (int16 ×10)
Intervallo da %MW50 a %MW99: Misure analogiche doppie (REAL su 2 registri)
Intervallo da %MW100 a %MW149: contatori a 16 bit
Intervallo da %MW150 a %MW199: contatori a 32 bit (DINT, 2 registri ciascuno)
Intervallo da %MW200 a %MW249: Stati della macchina (bitfield)
Intervallo da %MW250 a %MW299: Codici di errore
Intervallo da %MW300 a %MW349: Parametri di fabbrica (sola lettura per il cliente)

Test di connessione

Test da 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})")

# Test di lettura da %MW100 a %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}")

# Decodifica float32 se %MW100+101 contiene un REAL (test)
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 non supportato → server Modbus non attivato",
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

Assistenza tecnica estesa

SintomoCausa probabileSoluzione
Connessione TCP rifiutataServer Modbus non attivatoVerificare "Modbus Server" in EcoStruxure
Connessione TCP rifiutataRete configurata in modo erratoEseguire il ping del PLC da un PC sulla stessa rete
Eccezione 02 (indirizzo non valido)BMX P34 1000 — indirizzo > 1023Spostare l'intervallo di supervisione tra 0 e 1023
Eccezione 06 (server occupato)Troppi client connessiChiudere le connessioni SCADA locali inutilizzate
ID unità erratoM221/M241 con ID unità 255Modificare in ID unità 1 nella configurazione Eziwan
Valori tutti a 0Variabili non assegnate nel programmaVerificare che %MW100+ siano alimentati dal programma
REAL non correttoOrdine dei byte CDAB invece di ABCDProvare float32_cdab in Eziwan
Disconnessione ogni 30 sTimeout di inattività predefinito M340Aumentare il "timeout di inattività" a 120 s in EcoStruxure
Modulo NOE non rispondeIP del modulo diverso da quello della CPUUtilizzare l'IP del modulo NOE, non quello della CPU
Registri %IW e %QW inaccessibiliRichiesto FC=04 o FC=01, non FC=03Utilizzare gli FC appropriati o copiare nei %MW

👉 Risorse aggiuntive

Domande frequenti

Quali controllori Schneider sono compatibili?

L'intera gamma Modicon con comunicazione Modbus TCP: M221, M241, M251, M340, M580, oltre ai modelli Premium e Quantum dotati di accoppiatori Ethernet. Le gamme seriali (Twido, TSX) passano attraverso la porta RS-485 del gateway.

È necessario modificare il programma del controllore?

Non per la lettura dei dati: il gateway interroga le parole %MW presenti in Modbus TCP. Solo l'eventuale scrittura dei valori di setpoint potrebbe richiedere la riservazione di un intervallo di parole dedicato nel programma.

Quale porta di rete deve essere accessibile?

La porta Modbus TCP 502, esclusivamente sulla rete locale tra il gateway e il PLC. Nulla è esposto su Internet: il gateway stabilisce un tunnel VPN in uscita verso il cloud.

Come individuare un collegamento che non funziona?

Verificare nell'ordine: eseguire il ping del PLC dal gateway, verificare che la porta 502 sia aperta (assenza di firewall locale), che l'ID unità sia corretto e che l'indirizzamento %MW sia allineato (offset 0 o 1 a seconda degli strumenti). La console Eziwan visualizza i frame e i codici di errore Modbus in tempo reale.

Risorse correlate