Schneider M340 / M221 / M241 verbinden met de cloud via Modbus TCP

Deze handleiding behandelt de volledige configuratie voor het aansluiten van de Schneider-PLC’s uit de Modicon-serie op het Eziwan-platform: M340 (BMX P34), M221, M241, M251 en M262. Elke serie heeft zijn eigen configuratiespecificaties.


Compatibiliteitstabel van Schneider

M340-serie (BMX P34)

CPUFirmware% beschikbare MWETH-moduleCPU-unit-ID
BMX P34 1000≥ 2,300..1023 (1 024 woorden)BMX NOE of ETH-module255
BMX P34 2010≥ 2,300..9999 (10 000 woorden)Geïntegreerde ETH255
BMX P34 2020≥ 2,300..9999Geïntegreerde ETH255
BMX P34 2030≥ 2,300..9999Geïntegreerde ETH255

M221-serie (TM221)

CPUFirmware% beschikbare MWUnit-ID
TM221CE16R≥ 1,00..99991
TM221C16T≥ 1,00..99991
TM221ME16R (Ethernet)≥ 1,00..99991
TM221M16R (+ ETH-module)≥ 1,00..99991

M241-serie (TM241)

CPUFirmware% beschikbare MWUnit-ID
TM241CE40R≥ 1,00..99991
TM241CE40T≥ 1,00..99991
TM241C40R (+ TMBM-module)≥ 1,00..99991

M251- en M262-serie

CPUFirmwareProtocollenUnit-ID
TM251MESE≥ 1.0Modbus TCP, EtherNet/IP1
TM262M15MESS8T≥ 1.0Modbus TCP, EtherNet/IP, native MQTT1
tip

De M262 beschikt over een native MQTT-client — Eziwan kan de door de M262 gepubliceerde gegevens rechtstreeks ontvangen zonder gebruik te maken van Modbus-polling. Neem contact op met de Eziwan-helpdesk voor de MQTT-configuratie.


EcoStruxure-configuratie — M340-serie

De Modbus TCP-server op de BMX P34 inschakelen

In EcoStruxure Control Expert (Unity Pro):

  1. Structuurweergave → dubbelklik op de CPU BMX P34 xxxx
  2. Tabblad "Configuratie" → klik op de Ethernet-interface (ETH 1 of NOE-module)
  3. Tabblad "Services" → vink "Modbus Server" aan ✓
  4. Poort: 502 (niet wijzigen tenzij absoluut noodzakelijk)
  5. Tabblad "Ethernet-adressen" → voer het statische IP-adres in

Geavanceerde instellingen (recente firmwareversies):

  • Time-out voor inactieve verbinding: verhogen naar 120 s (standaard 30 s) voor langdurige verbindingen
  • IP-filtering (firmware ≥ 2.60): beperk de toegang tot het IP-adres van de Eziwan-gateway

BMX NOE 0100 / BMX NOE 0110-module

Voor de M340-modellen met een externe Ethernet-module:

ParameterBMX NOE 0100BMX NOE 0110
Snelheid10/100 Mbit10/100 Mbit
I/O-scannerNeeJa
Modbus-serverJaJa
ConfiguratieVia CPU-eigenschappenVia module-eigenschappen
Unit-IDConfigureerbaarConfigureerbaar
waarschuwing

Bij de BMX NOE 0110 kan de Unit ID van de Modbus TCP-server afwijken van 255. Controleer de configuratie van de module in EcoStruxure en gebruik de Unit ID die in Eziwan is geconfigureerd.


EcoStruxure-configuratie — M221-/M241-serie

SoMachine / EcoStruxure Machine Expert

De Modbus TCP-configuratie op de M221 en M241 gebeurt in EcoStruxure Machine Expert (voorheen SoMachine):

  1. Configuratie → tabblad "Ethernet"
  2. Voer het statische IP-adres en het subnetmasker in
  3. Configuratie → tabblad "Modbus TCP Slave" (of "Modbus TCP Servant")
  4. Vink "Enabled" aan ✓
  5. Poort: 502
  6. Unit ID: 1 (standaard op M221/M241 — anders dan bij de M340!)

Fundamenteel verschil tussen de M340 en de M221/M241

ParameterM340 (BMX P34)M221 / M241 (TM2xx)
Standaard Unit ID2551
ConfiguratiesoftwareEcoStruxure Control ExpertEcoStruxure Machine Expert
Max. %MW10.000 (CPU >= 2010)9.999
Modbus-serverIngeschakeld in CPU-eigenschappenIngeschakeld in Ethernet-configuratie
waarschuwing

Dit is de meest voorkomende valkuil: als u Eziwan configureert met Unit ID 255 op een M221 of M241, mislukt de verbinding met een Modbus-uitzondering of een time-out. Gebruik Unit ID 1 op de M221/M241.


Adressering van Modbus-registers per reeks

M340 — Overeenkomst %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 tot %Q0.7 │ bit 0 tot 7 │ Spoel (FC=01)

*De exacte toewijzing van de analoge in- en uitgangen is afhankelijk van de hardwareconfiguratie.

M221 / M241 — Overeenkomst %MW ↔ Modbus-register

De toewijzing is identiek aan die van de M340: %MWn komt overeen met het Modbus-adres n.


Geavanceerd beheer van gegevenstypen

REAL-variabelen (32-bits drijvende komma) in 2 registers

Een variabele REAL in Unity Pro / EcoStruxure neemt twee opeenvolgende %MW-waarden in beslag volgens de IEEE 754-standaard:

REAL-variabele "Temperature" opgeslagen in %MW100:
%MW100: woord met groot gewicht (MSW, bytes A en B)
%MW101: woord met laag gewicht (LSW, bytes C en D)
Volgorde: ABCD (standaard big-endian op M340/M221/M241)

Te configureren Eziwan-type: float32_abcd

Als de waarden onjuist zijn (constante foutfactor): Probeer float32_cdab (little-endian per register). Sommige Unity Pro-projecten gebruiken de functie DWORD_TO_REAL met een andere volgorde.

DINT-/UDINT-variabelen (32-bits geheel getal) in 2 registers

Variabele DINT "Teller" op %MW200:
%MW200 : partie haute (MSW)
%MW201 : partie basse (LSW)
Type Eziwan : int32_abcd

Booleaanse waarden comprimeren in een %MW

Om het aantal Modbus-verzoeken tot een minimum te beperken, kunt u de booleaanse statussen in één geheugenwoord samenvoegen:

(* EcoStruxure Control Expert — Programme *)
(* Groep van 16 staten in %MW300 *)

%MW300 := 0; (* Op nul zetten *)
IF %Q0.0 THEN %MW300 := %MW300 OR 16#0001; END_IF; (* Pomp 1 *)
IF %Q0.1 THEN %MW300 := %MW300 OR 16#0002; END_IF; (* Pomp 2 *)
IF %I0.5 THEN %MW300 := %MW300 OR 16#0004; END_IF; (* Fout P1 *)
IF %I0.6 THEN %MW300 := %MW300 OR 16#0008; END_IF; (* Fout P2 *)
IF %M10 THEN %MW300 := %MW300 OR 16#0010; END_IF; (* Alarme *)

Met deze techniek worden 16 booleaanse waarden met één Modbus-verzoek (FC=03, 1 register) uitgelezen.


Aanbevolen indeling van de %MW voor toezicht

Om de efficiëntie van de zoekopdrachten te maximaliseren (automatische groepering door Eziwan):

Bereik %MW0 tot %MW9 : Instructies voor de operator (aanpasbare instelwaarden)
Bereik %MW10 tot %MW49 : Eenvoudige analoge metingen (int16 ×10)
Bereik %MW50 tot %MW99 : dubbele analoge metingen (REAL op 2 registers)
Bereik %MW100 tot %MW149: 16-bits tellers
Bereik %MW150 tot %MW199 : 32-bits tellers (DINT, elk met 2 registers)
Bereik %MW200 tot %MW249 : Machinestatus (bitvelden)
Bereik %MW250 tot %MW299 : Foutcodes
Bereik %MW300 tot %MW349 : Fabrieksinstellingen (alleen-lezen voor klanten)

Verbindingstest

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

# Leestest %MW100 tot %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-decodering als %MW100+101 een REAL bevat (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 niet ondersteund → Modbus-server niet geactiveerd",
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

Uitgebreide probleemoplossing

SymptoomWaarschijnlijke oorzaakOplossing
TCP-verbinding geweigerdModbus-server niet geactiveerdControleer "Modbus Server" in EcoStruxure
TCP-verbinding geweigerdNetwerk verkeerd geconfigureerdPing de PLC vanaf een pc op hetzelfde netwerk
Uitzondering 02 (ongeldig adres)BMX P34 1000 — adres > 1023Verplaats de supervisiezone tussen 0 en 1023
Uitzondering 06 (server bezet)Te veel verbonden clientsSluit ongebruikte lokale SCADA-verbindingen
Onjuiste Unit IDM221/M241 met Unit ID 255Wijzig naar Unit ID 1 in de Eziwan-configuratie
Alle waarden op 0Variabelen niet toegewezen in het programmaControleer of %MW100+ door het programma worden gevoed
Onjuiste REALBytevolgorde CDAB in plaats van ABCDProbeer float32_cdab in Eziwan
Verbinding wordt elke 30 seconden verbrokenStandaard inactieve time-out M340Verhoog de "inactive timeout" naar 120 seconden in EcoStruxure
NOE-module reageert nietIP-adres van de module verschilt van dat van de CPUGebruik het IP-adres van de NOE-module, niet dat van de CPU
Registers %IW en %QW niet toegankelijkFC=04 of FC=01 vereist, niet FC=03Gebruik de juiste FC's of kopieer naar %MW

👉 Aanvullende bronnen

Veelgestelde vragen

Welke Schneider-besturingsunits zijn compatibel?

Het volledige Modicon-assortiment dat via Modbus TCP communiceert: M221, M241, M251, M340, M580, evenals de Premium- en Quantum-modellen die zijn uitgerust met Ethernet-koppelingen. De seriële series (Twido, TSX) maken gebruik van de RS-485-poort van de gateway.

Moet het programma van de PLC worden aangepast?

Dit geldt niet voor het uitlezen van gegevens: de gateway vraagt de bestaande %MW-woorden op via Modbus TCP. Alleen voor het eventueel instellen van instelwaarden kan het nodig zijn om in het programma een speciaal woordbereik te reserveren.

Welke netwerkpoort moet toegankelijk zijn?

Modbus TCP-poort 502, uitsluitend op het lokale netwerk tussen de gateway en de PLC. Er wordt niets naar het internet blootgesteld: de gateway zet een uitgaande VPN-tunnel op naar de cloud.

Hoe stel je vast dat een verbinding niet tot stand komt?

Controleer in deze volgorde: ping naar de PLC vanaf de gateway, poort 502 open (geen lokale firewall), juiste Unit ID en %MW-adressering op elkaar afgestemd (offset 0 versus 1, afhankelijk van de gebruikte tools). De Eziwan-console geeft de Modbus-frames en foutcodes in realtime weer.

Gerelateerde bronnen