Connexion Schneider M340 / M221 / M241 au cloud via Modbus TCP
Ce guide couvre la configuration complète pour connecter les automates Schneider de la gamme Modicon à la plateforme Eziwan : M340 (BMX P34), M221, M241, M251 et M262. Chaque gamme a ses spécificités de configuration.
Tableau de compatibilité Schneider
Gamme M340 (BMX P34)
| CPU | Firmware | %MW accessibles | Module ETH | Unit ID CPU |
|---|---|---|---|---|
| BMX P34 1000 | ≥ 2.30 | 0..1023 (1 024 mots) | BMX NOE ou module ETH | 255 |
| BMX P34 2010 | ≥ 2.30 | 0..9999 (10 000 mots) | ETH intégré | 255 |
| BMX P34 2020 | ≥ 2.30 | 0..9999 | ETH intégré | 255 |
| BMX P34 2030 | ≥ 2.30 | 0..9999 | ETH intégré | 255 |
Gamme M221 (TM221)
| CPU | Firmware | %MW accessibles | Unit ID |
|---|---|---|---|
| TM221CE16R | ≥ 1.0 | 0..9999 | 1 |
| TM221C16T | ≥ 1.0 | 0..9999 | 1 |
| TM221ME16R (Ethernet) | ≥ 1.0 | 0..9999 | 1 |
| TM221M16R (+ module ETH) | ≥ 1.0 | 0..9999 | 1 |
Gamme M241 (TM241)
| CPU | Firmware | %MW accessibles | Unit ID |
|---|---|---|---|
| TM241CE40R | ≥ 1.0 | 0..9999 | 1 |
| TM241CE40T | ≥ 1.0 | 0..9999 | 1 |
| TM241C40R (+ module TMBM) | ≥ 1.0 | 0..9999 | 1 |
Gamme M251 et M262
| CPU | Firmware | Protocoles | Unit ID |
|---|---|---|---|
| TM251MESE | ≥ 1.0 | Modbus TCP, EtherNet/IP | 1 |
| TM262M15MESS8T | ≥ 1.0 | Modbus TCP, EtherNet/IP, MQTT natif | 1 |
Le M262 dispose d'un client MQTT natif — Eziwan peut recevoir directement les données publiées par le M262 sans passer par le polling Modbus. Contact le support Eziwan pour la configuration MQTT.
Configuration EcoStruxure — Gamme M340
Activer le serveur Modbus TCP sur BMX P34
Dans EcoStruxure Control Expert (Unity Pro) :
- Vue structurelle → double-clic sur la CPU
BMX P34 xxxx - Onglet "Configuration" → cliquer sur l'interface Ethernet (ETH 1 ou module NOE)
- Onglet "Services" → cocher "Modbus Server" ✓
- Port : 502 (ne pas modifier sauf contrainte)
- Onglet "Adresses Ethernet" → saisir l'IP statique
Paramètres avancés (firmwares récents) :
- Timeout connexion inactive : augmenter à 120s (défaut 30s) pour les connexions longues
- Filtrage IP (firmware ≥ 2.60) : restreindre l'accès à l'adresse IP de la gateway Eziwan
Module BMX NOE 0100 / BMX NOE 0110
Pour les M340 avec module Ethernet externe :
| Paramètre | BMX NOE 0100 | BMX NOE 0110 |
|---|---|---|
| Débit | 10/100 Mbit | 10/100 Mbit |
| I/O Scanner | Non | Oui |
| Serveur Modbus | Oui | Oui |
| Configuration | Via CPU Properties | Via module Properties |
| Unit ID | Configurable | Configurable |
Sur le BMX NOE 0110, le serveur Modbus TCP peut avoir un Unit ID différent de 255. Vérifier la configuration du module dans EcoStruxure et utiliser le Unit ID configuré dans Eziwan.
Configuration EcoStruxure — Gammes M221 / M241
SoMachine / EcoStruxure Machine Expert
La configuration Modbus TCP sur M221 et M241 se fait dans EcoStruxure Machine Expert (anciennement SoMachine) :
- Configuration → onglet "Ethernet"
- Saisir l'IP statique et le masque
- Configuration → onglet "Modbus TCP Slave" (ou "Modbus TCP Servant")
- Cocher "Enabled" ✓
- Port : 502
- Unit ID : 1 (défaut sur M221/M241 — différent du M340 !)
Différence fondamentale M340 vs M221/M241
| Paramètre | M340 (BMX P34) | M221 / M241 (TM2xx) |
|---|---|---|
| Unit ID par défaut | 255 | 1 |
| Logiciel de config | EcoStruxure Control Expert | EcoStruxure Machine Expert |
| %MW max | 10 000 (CPU >= 2010) | 9 999 |
| Serveur Modbus | Activé dans propriétés CPU | Activé dans config Ethernet |
C'est le piège le plus courant : si vous configurez Eziwan avec Unit ID 255 sur un M221 ou M241, la connexion échoue avec une exception Modbus ou un timeout. Utiliser Unit ID 1 sur M221/M241.
Adressage des registres Modbus par gamme
M340 — Correspondance %MW ↔ Registre 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 à %Q0.7 │ bit 0 à 7 │ Coil (FC=01)
*La correspondance exacte des entrées/sorties analogiques dépend de la configuration matérielle.
M221 / M241 — Correspondance %MW ↔ Registre Modbus
La correspondance est identique au M340 : %MWn correspond à l'adresse Modbus n.
Gestion des types de données avancés
Variables REAL (flottant 32 bits) sur 2 registres
Une variable REAL dans Unity Pro / EcoStruxure occupe deux %MW consécutifs en IEEE 754 :
Variable REAL "Temperature" stockée à %MW100 :
%MW100 : mot de poids fort (MSW, octets A et B)
%MW101 : mot de poids faible (LSW, octets C et D)
Ordre : ABCD (big-endian par défaut sur M340/M221/M241)
Type Eziwan à configurer : float32_abcd
Si les valeurs sont incorrectes (facteur d'erreur constant) :
Essayer float32_cdab (little-endian par registre). Certains projets Unity Pro utilisent la fonction DWORD_TO_REAL avec un ordre différent.
Variables DINT / UDINT (entier 32 bits) sur 2 registres
Variable DINT "Compteur" à %MW200 :
%MW200 : partie haute (MSW)
%MW201 : partie basse (LSW)
Type Eziwan : int32_abcd
Compactage de booléens dans un %MW
Pour minimiser le nombre de requêtes Modbus, regrouper les états booléens dans un mot mémoire :
(* EcoStruxure Control Expert — Programme *)
(* Regroupement de 16 états dans %MW300 *)
%MW300 := 0; (* Remise à zéro *)
IF %Q0.0 THEN %MW300 := %MW300 OR 16#0001; END_IF; (* Pompe 1 *)
IF %Q0.1 THEN %MW300 := %MW300 OR 16#0002; END_IF; (* Pompe 2 *)
IF %I0.5 THEN %MW300 := %MW300 OR 16#0004; END_IF; (* Défaut P1 *)
IF %I0.6 THEN %MW300 := %MW300 OR 16#0008; END_IF; (* Défaut P2 *)
IF %M10 THEN %MW300 := %MW300 OR 16#0010; END_IF; (* Alarme *)
Avec cette technique, 16 booléens se lisent avec 1 requête Modbus (FC=03, 1 registre).
Organisation recommandée des %MW pour supervision
Pour maximiser l'efficacité des requêtes (grouping automatique par Eziwan) :
Zone %MW0 à %MW9 : Consignes opérateur (setpoints modifiables)
Zone %MW10 à %MW49 : Mesures analogiques simples (int16 ×10)
Zone %MW50 à %MW99 : Mesures analogiques double (REAL sur 2 registres)
Zone %MW100 à %MW149 : Compteurs 16 bits
Zone %MW150 à %MW199 : Compteurs 32 bits (DINT, 2 registres chacun)
Zone %MW200 à %MW249 : États machine (bitfields)
Zone %MW250 à %MW299 : Codes défaut
Zone %MW300 à %MW349 : Paramètres constructeur (lecture seule pour client)
Test de connexion
Test depuis 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 lecture %MW100 à %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}")
# Décodage float32 si %MW100+101 contient 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 supporté → serveur Modbus non activé",
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
Dépannage étendu
| Symptôme | Cause probable | Solution |
|---|---|---|
| Connexion TCP refusée | Serveur Modbus non activé | Vérifier "Modbus Server" dans EcoStruxure |
| Connexion TCP refusée | Réseau mal configuré | Pinger l'automate depuis un PC sur le même réseau |
| Exception 02 (adresse invalide) | BMX P34 1000 — adresse > 1023 | Décaler la zone de supervision entre 0 et 1023 |
| Exception 06 (serveur occupé) | Trop de clients connectés | Fermer les connexions SCADA locales inutilisées |
| Unit ID incorrect | M221/M241 avec Unit ID 255 | Changer en Unit ID 1 dans la config Eziwan |
| Valeurs toutes à 0 | Variables non affectées dans programme | Vérifier que %MW100+ sont alimentés par le programme |
| REAL incorrect | Ordre octets CDAB au lieu de ABCD | Essayer float32_cdab dans Eziwan |
| Déconnexion toutes les 30s | Timeout inactif par défaut M340 | Augmenter "inactive timeout" à 120s dans EcoStruxure |
| Module NOE non répondant | IP du module différente de la CPU | Utiliser l'IP du module NOE, pas celle de la CPU |
| Registres %IW et %QW inaccessibles | FC=04 ou FC=01 requis, pas FC=03 | Utiliser les FC appropriés ou copier dans des %MW |
- Modbus TCP avec un Schneider M340 — Guide complet — configuration détaillée et structure de trame
- Guide Modbus TCP/IP — code Python et comparatif protocoles
- Télécharger la fiche de compatibilité Schneider → — PDF avec tous les modèles testés
- Support technique →
Questions fréquentes
Quels automates Schneider sont compatibles ?
Toute la gamme Modicon communicante en Modbus TCP : M221, M241, M251, M340, M580, ainsi que les Premium et Quantum équipés de coupleurs Ethernet. Les gammes série (Twido, TSX) passent par le port RS-485 de la gateway.
Faut-il modifier le programme de l'automate ?
Non pour la lecture des données : la gateway interroge les mots %MW existants en Modbus TCP. Seule l'écriture éventuelle de consignes peut nécessiter de réserver une plage de mots dédiée dans le programme.
Quel port réseau doit être accessible ?
Le port Modbus TCP 502, uniquement sur le réseau local entre la gateway et l'automate. Rien n'est exposé sur Internet : la gateway établit un tunnel VPN sortant vers le cloud.
Comment diagnostiquer une liaison qui ne monte pas ?
Vérifiez dans l'ordre : ping de l'automate depuis la gateway, port 502 ouvert (pas de firewall local), Unit ID correct, et adressage %MW aligné (offset 0 vs 1 selon les outils). La console Eziwan affiche les trames et codes d'exception Modbus en temps réel.
Ressources associées
- Accès distant automate Schneider — EcoStruxure à distance en toute sécurité
- Connecter un M340/M221 au cloud — l'article pas-à-pas
- Guide Modbus complet — registres, fonctions et dépannage
- Modbus vers le cloud — la solution de collecte Modbus
- Connecter un automate au cloud — toutes les marques supportées