Verbindung von Schneider M340 / M221 / M241 mit der Cloud über Modbus TCP
Dieser Leitfaden behandelt die vollständige Konfiguration für die Anbindung der Schneider-Steuerungen der Modicon-Reihe an die Eziwan-Plattform: M340 (BMX P34), M221, M241, M251 und M262. Jede Baureihe weist ihre eigenen Konfigurationsbesonderheiten auf.
Schneider-Kompatibilitätsübersicht
M340-Serie (BMX P34)
| CPU | Firmware | % zugängliche MW | ETH-Modul | CPU-Unit-ID |
|---|---|---|---|---|
| BMX P34 1000 | ≥ 2,30 | 0..1023 (1.024 Wörter) | BMX NOE oder ETH-Modul | 255 |
| BMX P34 2010 | ≥ 2,30 | 0..9999 (10.000 Wörter) | Integriertes ETH | 255 |
| BMX P34 2020 | ≥ 2,30 | 0..9999 | Integriertes ETH | 255 |
| BMX P34 2030 | ≥ 2,30 | 0..9999 | Integriertes ETH | 255 |
M221-Serie (TM221)
| CPU | Firmware | % verfügbarer MW | Geräte-ID |
|---|---|---|---|
| TM221CE16R | ≥ 1,0 | 0..9999 | 1 |
| TM221C16T | ≥ 1,0 | 0..9999 | 1 |
| TM221ME16R (Ethernet) | ≥ 1,0 | 0..9999 | 1 |
| TM221M16R (+ ETH-Modul) | ≥ 1,0 | 0..9999 | 1 |
M241-Baureihe (TM241)
| CPU | Firmware | % der verfügbaren MW | Geräte-ID |
|---|---|---|---|
| TM241CE40R | ≥ 1,0 | 0..9999 | 1 |
| TM241CE40T | ≥ 1,0 | 0..9999 | 1 |
| TM241C40R (+ TMBM-Modul) | ≥ 1,0 | 0..9999 | 1 |
Baureihen M251 und M262
| CPU | Firmware | Protokolle | Geräte-ID |
|---|---|---|---|
| TM251MESE | ≥ 1.0 | Modbus TCP, EtherNet/IP | 1 |
| TM262M15MESS8T | ≥ 1.0 | Modbus TCP, EtherNet/IP, natives MQTT | 1 |
Der M262 verfügt über einen nativen MQTT-Client – Eziwan kann die vom M262 veröffentlichten Daten direkt empfangen, ohne den Modbus-Polling-Vorgang zu durchlaufen. Wende dich für die MQTT-Konfiguration an den Eziwan-Support.
EcoStruxure-Konfiguration – M340-Serie
Den Modbus-TCP-Server auf dem BMX P34 aktivieren
In EcoStruxure Control Expert (Unity Pro):
- Strukturansicht → Doppelklick auf die CPU
BMX P34 xxxx - Registerkarte „Konfiguration“ → auf die Ethernet-Schnittstelle klicken (ETH 1 oder NOE-Modul)
- Registerkarte „Dienste“ → „Modbus-Server“ aktivieren ✓
- Port: 502 (nur ändern, wenn unbedingt erforderlich)
- Registerkarte „Ethernet-Adressen“ → statische IP-Adresse eingeben
Erweiterte Einstellungen (neuere Firmware-Versionen):
- Timeout bei inaktiver Verbindung: Bei lang andauernden Verbindungen auf 120 s erhöhen (Standard: 30 s)
- IP-Filterung (Firmware ≥ 2.60): Beschränken Sie den Zugriff auf die IP-Adresse des Eziwan-Gateways
BMX-Modul NOE 0100 / BMX NOE 0110
Für M340-Modelle mit externem Ethernet-Modul:
| Parameter | BMX NOE 0100 | BMX NOE 0110 |
|---|---|---|
| Datenrate | 10/100 Mbit | 10/100 Mbit |
| I/O-Scanner | Nein | Ja |
| Modbus-Server | Ja | Ja |
| Konfiguration | Über CPU-Eigenschaften | Über Moduleigenschaften |
| Geräte-ID | Konfigurierbar | Konfigurierbar |
Beim BMX NOE 0110 kann die Unit-ID des Modbus-TCP-Servers von 255 abweichen. Überprüfen Sie die Konfiguration des Moduls in EcoStruxure und verwenden Sie die in Eziwan konfigurierte Unit-ID.
EcoStruxure-Konfiguration – Baureihen M221 / M241
SoMachine / EcoStruxure Machine Expert
Die Modbus-TCP-Konfiguration für M221 und M241 erfolgt in EcoStruxure Machine Expert (früher SoMachine):
- Konfiguration → Registerkarte „Ethernet“
- Statische IP-Adresse und Subnetzmaske eingeben
- Konfiguration → Registerkarte „Modbus TCP Slave“ (oder „Modbus TCP Servant“)
- „Enabled“ aktivieren ✓
- Port: 502
- Unit ID: 1 (Standard bei M221/M241 – abweichend vom M340!)
Grundlegender Unterschied zwischen M340 und M221/M241
| Parameter | M340 (BMX P34) | M221 / M241 (TM2xx) |
|---|---|---|
| Standard-Geräte-ID | 255 | 1 |
| Konfigurationssoftware | EcoStruxure Control Expert | EcoStruxure Machine Expert |
| Max. %MW | 10.000 (CPU >= 2010) | 9.999 |
| Modbus-Server | In den CPU-Eigenschaften aktiviert | In der Ethernet-Konfiguration aktiviert |
Das ist die häufigste Falle: Wenn Sie Eziwan auf einem M221 oder M241 mit der Unit-ID 255 konfigurieren, schlägt die Verbindung mit einer Modbus-Ausnahme oder einem Timeout fehl. Verwenden Sie die Unit-ID 1 auf M221/M241.
Adressierung der Modbus-Register nach Bereichen
M340 — Zuordnung %MW ↔ Modbus-Register
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 bis %Q0.7 │ Bit 0 bis 7 │ Spule (FC=01)
*Die genaue Zuordnung der analogen Ein- und Ausgänge hängt von der Hardwarekonfiguration ab.
M221 / M241 — Zuordnung %MW ↔ Modbus-Register
Die Zuordnung entspricht der des M340: %MWn entspricht der Modbus-Adresse n.
Erweiterte Verwaltung von Datentypen
REAL-Variablen (32-Bit-Gleitkommazahlen) in 2 Registern
Eine Variable vom Typ REAL in Unity Pro / EcoStruxure belegt zwei aufeinanderfolgende %MW-Werte im IEEE-754-Format:
Die Variable REAL „Temperature“, gespeichert unter %MW100:
%MW100: Wort mit hohem Gewicht (MSW, Bytes A und B)
%MW101: Low-Weight-Wort (LSW, Bytes C und D)
Reihenfolge: ABCD (standardmäßig Big-Endian auf M340/M221/M241)
Zu konfigurierender Eziwan-Typ: float32_abcd
Wenn die Werte falsch sind (konstanter Fehlerfaktor):
Versuchen Sie es mit float32_cdab (Little-Endian pro Register). Einige Unity Pro-Projekte verwenden die Funktion DWORD_TO_REAL mit einer anderen Reihenfolge.
DINT-/UDINT-Variablen (32-Bit-Ganzzahl) in 2 Registern
Variable DINT „Zähler“ bei %MW200:
%MW200 : partie haute (MSW)
%MW201 : partie basse (LSW)
Type Eziwan : int32_abcd
Komprimierung von Booleschen Werten in einem %MW
Um die Anzahl der Modbus-Anfragen zu minimieren, fassen Sie die booleschen Zustände in einem Speicherwort zusammen:
(* EcoStruxure Control Expert — Programme *)
(* Zusammenfassung von 16 Staaten in %MW300 *)
%MW300 := 0; (* Zurücksetzen auf Null *)
IF %Q0.0 THEN %MW300 := %MW300 OR 16#0001; END_IF; (* Pumpe 1 *)
IF %Q0.1 THEN %MW300 := %MW300 OR 16#0002; END_IF; (* Pumpe 2 *)
IF %I0.5 THEN %MW300 := %MW300 OR 16#0004; END_IF; (* Fehler P1 *)
IF %I0.6 THEN %MW300 := %MW300 OR 16#0008; END_IF; (* Fehler P2 *)
IF %M10 THEN %MW300 := %MW300 OR 16#0010; END_IF; (* Alarme *)
Mit dieser Technik lassen sich 16 Boolesche Werte mit einer einzigen Modbus-Abfrage auslesen (FC=03, 1 Register).
Empfohlene Struktur der %MW für die Überwachung
Um die Effizienz der Abfragen zu maximieren (automatische Gruppierung durch Eziwan):
Bereich %MW0 bis %MW9 : Bediener-Sollwerte (änderbare Sollwerte)
Bereich %MW10 bis %MW49 : Einfache analoge Messungen (int16 ×10)
Bereich %MW50 bis %MW99 : Doppelte Analogmessung (REAL in 2 Registern)
Bereich %MW100 bis %MW149: 16-Bit-Zähler
Bereich %MW150 bis %MW199: 32-Bit-Zähler (DINT, jeweils 2 Register)
Bereich %MW200 bis %MW249: Maschinenstatus (Bitfelder)
Bereich %MW250 bis %MW299: Fehlercodes
Bereich %MW300 bis %MW349: Herstellerparameter (für Kunden nur lesbar)
Verbindungstest
Test aus Python heraus
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})")
# Lesetest %MW100 bis %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}")
# Float32-Dekodierung, falls %MW100+101 einen REAL-Wert enthält (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 nicht unterstützt → Modbus-Server nicht aktiviert",
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
Erweiterte Fehlerbehebung
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| TCP-Verbindung abgelehnt | Modbus-Server nicht aktiviert | „Modbus Server“ in EcoStruxure überprüfen |
| TCP-Verbindung abgelehnt | Netzwerk falsch konfiguriert | Die SPS von einem PC im selben Netzwerk aus anpingen |
| Ausnahme 02 (ungültige Adresse) | BMX P34 1000 – Adresse > 1023 | Überwachungsbereich auf einen Wert zwischen 0 und 1023 verschieben |
| Ausnahme 06 (Server belegt) | Zu viele verbundene Clients | Nicht genutzte lokale SCADA-Verbindungen schließen |
| Falsche Unit-ID | M221/M241 mit Unit-ID 255 | In der Eziwan-Konfiguration auf Unit-ID 1 ändern |
| Alle Werte auf 0 | Variablen im Programm nicht zugewiesen | Überprüfen, ob %MW100+ vom Programm versorgt werden |
| Falscher REAL-Wert | Byte-Reihenfolge CDAB statt ABCD | float32_cdab in Eziwan ausprobieren |
| Trennung alle 30 s | Standardmäßiges Inaktivitäts-Timeout M340 | „Inactive Timeout“ in EcoStruxure auf 120 s erhöhen |
| NOE-Modul reagiert nicht | IP-Adresse des Moduls unterscheidet sich von der der CPU | IP-Adresse des NOE-Moduls verwenden, nicht die der CPU |
| Register %IW und %QW nicht zugänglich | FC=04 oder FC=01 erforderlich, nicht FC=03 | Verwenden Sie die entsprechenden FCs oder kopieren Sie in %MW |
- Modbus TCP mit einem Schneider M340 – Umfassende Anleitung – detaillierte Konfiguration und Rahmenstruktur
- Modbus-TCP/IP-Anleitung – Python-Code und Protokollvergleich
- Kompatibilitätsliste von Schneider herunterladen → – PDF mit allen getesteten Modellen
- Technischer Support →
Häufig gestellte Fragen
Welche Schneider-Steuerungen sind kompatibel?
Die gesamte Modicon-Produktreihe mit Modbus-TCP-Kommunikation: M221, M241, M251, M340, M580 sowie die mit Ethernet-Kopplern ausgestatteten Premium- und Quantum-Modelle. Die seriellen Baureihen (Twido, TSX) werden über den RS-485-Anschluss des Gateways angeschlossen.
Muss das Programm der SPS geändert werden?
Nicht für das Auslesen von Daten: Das Gateway fragt die in Modbus TCP vorhandenen %MW-Worte ab. Lediglich für das eventuelle Schreiben von Sollwerten kann es erforderlich sein, im Programm einen eigenen Wortbereich zu reservieren.
Welcher Netzwerkport muss zugänglich sein?
Der Modbus-TCP-Port 502, ausschließlich im lokalen Netzwerk zwischen dem Gateway und der SPS. Es wird nichts ins Internet freigegeben: Das Gateway richtet einen ausgehenden VPN-Tunnel zur Cloud ein.
Wie lässt sich feststellen, ob eine Verbindung nicht funktioniert?
Überprüfen Sie nacheinander Folgendes: Ping der SPS vom Gateway aus, Port 502 offen (keine lokale Firewall), korrekte Unit-ID und übereinstimmende %MW-Adressierung (Offset 0 vs. 1 je nach Tool). Die Eziwan-Konsole zeigt die Modbus-Frames und Fehlercodes in Echtzeit an.
Weiterführende Ressourcen
- Fernzugriff auf Schneider-SPS – EcoStruxure sicher aus der Ferne
- M340/M221 mit der Cloud verbinden – die Schritt-für-Schritt-Anleitung
- Umfassendes Modbus-Handbuch – Register, Funktionen und Fehlerbehebung
- Modbus in die Cloud – die Lösung zur Modbus-Datenerfassung
- Eine SPS mit der Cloud verbinden – alle unterstützten Marken