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)
| CPU | Firmware | % MW accessibili | Modulo ETH | ID unità CPU |
|---|---|---|---|---|
| BMX P34 1000 | ≥ 2,30 | 0..1023 (1.024 parole) | BMX NOE o modulo ETH | 255 |
| BMX P34 2010 | ≥ 2,30 | 0..9999 (10.000 parole) | ETH integrato | 255 |
| BMX P34 2020 | ≥ 2,30 | 0..9999 | ETH integrato | 255 |
| BMX P34 2030 | ≥ 2,30 | 0..9999 | ETH integrato | 255 |
Serie M221 (TM221)
| CPU | Firmware | % MW accessibili | ID unità |
|---|---|---|---|
| TM221CE16R | ≥ 1,0 | 0..9999 | 1 |
| TM221C16T | ≥ 1,0 | 0..9999 | 1 |
| TM221ME16R (Ethernet) | ≥ 1,0 | 0..9999 | 1 |
| TM221M16R (+ modulo ETH) | ≥ 1,0 | 0..9999 | 1 |
Serie M241 (TM241)
| CPU | Firmware | % MW accessibili | ID unità |
|---|---|---|---|
| TM241CE40R | ≥ 1,0 | 0..9999 | 1 |
| TM241CE40T | ≥ 1,0 | 0..9999 | 1 |
| TM241C40R (+ modulo TMBM) | ≥ 1,0 | 0..9999 | 1 |
Serie M251 e M262
| CPU | Firmware | Protocolli | ID unità |
|---|---|---|---|
| TM251MESE | ≥ 1.0 | Modbus TCP, EtherNet/IP | 1 |
| TM262M15MESS8T | ≥ 1.0 | Modbus TCP, EtherNet/IP, MQTT nativo | 1 |
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):
- Vista strutturale → doppio clic sulla CPU
BMX P34 xxxx - Scheda "Configurazione" → cliccare sull'interfaccia Ethernet (ETH 1 o modulo NOE)
- Scheda "Servizi" → selezionare "Modbus Server" ✓
- Porta: 502 (non modificare se non in caso di necessità)
- 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:
| Parametro | BMX NOE 0100 | BMX NOE 0110 |
|---|---|---|
| Velocità di trasmissione | 10/100 Mbit | 10/100 Mbit |
| Scanner I/O | No | Sì |
| Server Modbus | Sì | Sì |
| Configurazione | Tramite proprietà CPU | Tramite proprietà del modulo |
| ID unità | Configurabile | Configurabile |
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):
- Configurazione → scheda "Ethernet"
- Inserire l'indirizzo IP statico e la subnet mask
- Configurazione → scheda "Modbus TCP Slave" (o "Modbus TCP Servant")
- Selezionare "Enabled" ✓
- Porta: 502
- ID unità: 1 (impostazione predefinita su M221/M241 — diversa da quella dell'M340!)
Differenza fondamentale tra M340 e M221/M241
| Parametro | M340 (BMX P34) | M221 / M241 (TM2xx) |
|---|---|---|
| ID unità predefinito | 255 | 1 |
| Software di configurazione | EcoStruxure Control Expert | EcoStruxure Machine Expert |
| %MW max | 10.000 (CPU >= 2010) | 9.999 |
| Server Modbus | Attivato nelle proprietà della CPU | Attivato nella configurazione Ethernet |
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
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Connessione TCP rifiutata | Server Modbus non attivato | Verificare "Modbus Server" in EcoStruxure |
| Connessione TCP rifiutata | Rete configurata in modo errato | Eseguire il ping del PLC da un PC sulla stessa rete |
| Eccezione 02 (indirizzo non valido) | BMX P34 1000 — indirizzo > 1023 | Spostare l'intervallo di supervisione tra 0 e 1023 |
| Eccezione 06 (server occupato) | Troppi client connessi | Chiudere le connessioni SCADA locali inutilizzate |
| ID unità errato | M221/M241 con ID unità 255 | Modificare in ID unità 1 nella configurazione Eziwan |
| Valori tutti a 0 | Variabili non assegnate nel programma | Verificare che %MW100+ siano alimentati dal programma |
| REAL non corretto | Ordine dei byte CDAB invece di ABCD | Provare float32_cdab in Eziwan |
| Disconnessione ogni 30 s | Timeout di inattività predefinito M340 | Aumentare il "timeout di inattività" a 120 s in EcoStruxure |
| Modulo NOE non risponde | IP del modulo diverso da quello della CPU | Utilizzare l'IP del modulo NOE, non quello della CPU |
| Registri %IW e %QW inaccessibili | Richiesto FC=04 o FC=01, non FC=03 | Utilizzare gli FC appropriati o copiare nei %MW |
- Modbus TCP con Schneider M340 — Guida completa — configurazione dettagliata e struttura del frame
- Guida Modbus TCP/IP — codice Python e confronto tra protocolli
- Scarica la scheda di compatibilità Schneider → — PDF con tutti i modelli testati
- Assistenza tecnica →
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
- Accesso remoto al PLC Schneider — EcoStruxure in remoto in tutta sicurezza
- Collegare un M340/M221 al cloud — la guida passo passo
- Guida completa a Modbus — registri, funzioni e risoluzione dei problemi
- Da Modbus al cloud — la soluzione per la raccolta dati Modbus
- Collegare un PLC al cloud — tutte le marche supportate