Connexion Siemens S7-1200 / S7-1500 au cloud via Eziwan
Ce guide couvre la configuration complète pour connecter un automate Siemens S7-1200 ou S7-1500 à la plateforme Eziwan. Il inclut les configurations Modbus TCP (S7-1200 et S7-1500) et OPC-UA (S7-1500 uniquement), les spécificités par modèle de CPU, et le dépannage des problèmes courants.
Tableau de compatibilité par modèle
Siemens S7-1200
| CPU | Firmware min. | Modbus TCP | OPC-UA | Remarques |
|---|---|---|---|---|
| CPU 1211C AC/DC/Relay | V4.0 | ✓ MB_SERVER | ✗ | 50 KB programme, limiter à 50 registres max |
| CPU 1211C DC/DC/DC | V4.0 | ✓ | ✗ | — |
| CPU 1212C | V4.0 | ✓ | ✗ | 75 KB programme |
| CPU 1212FC | V4.0 | ✓ | ✗ | Version Fail-safe |
| CPU 1214C | V4.0 | ✓ | ✗ | 100 KB, recommandé pour supervision |
| CPU 1214FC | V4.0 | ✓ | ✗ | Fail-safe |
| CPU 1215C | V4.0 | ✓ | ✗ | 125 KB, 2 ports Ethernet |
| CPU 1217C | V4.0 | ✓ | ✗ | 150 KB, I/O haute vitesse |
Recommandation : pour les projets de supervision intensive (> 50 variables, polling 1s), utiliser une CPU 1214C ou supérieure. La CPU 1211C avec ses 50 KB de programme laisse peu de place pour les FB MB_SERVER et les données.
Siemens S7-1500
| CPU | Firmware min. | Modbus TCP | OPC-UA | Remarques |
|---|---|---|---|---|
| CPU 1511-1 PN | V2.0 | ✓ | ✓ V2.0 | Standard, 1 Mbit programme |
| CPU 1513-1 PN | V2.0 | ✓ | ✓ | 300 KB données |
| CPU 1515-2 PN | V2.0 | ✓ | ✓ | 2 ports Ethernet physiques |
| CPU 1516-3 PN/DP | V2.0 | ✓ | ✓ | Profibus DP intégré |
| CPU 1517-3 PN/DP | V2.0 | ✓ | ✓ | Haute performance |
| CPU 1518-4 PN/DP | V2.0 | ✓ | ✓ | Top de gamme S7-1500 |
| CPU 1511F-1 PN | V2.0 | ✓ | ✓ | Fail-safe |
| ET 200SP CPU 1510SP | V2.0 | ✓ | ✓ | Compact, pour armoires petites |
Avantage OPC-UA sur S7-1500 : pas de FB dans le programme, pas de DB avec accès absolu. Les variables sont directement publiées via le namespace OPC-UA — plus simple à configurer et plus robuste.
Siemens S7-300 et S7-400 (legacy)
| Module | Protocole | Remarques |
|---|---|---|
| CPU 31x avec CP 343-1 Advanced | Modbus TCP (option firmware) | CP 343-1 IT (6GK7343-1GX31) requis |
| CPU 41x avec CP 443-1 Advanced | Modbus TCP | CP 443-1 IT (6GK7443-1GX30) |
| S7-300 avec IM 153-2 | Modbus RTU via RS-485 gateway | Via port RS-485 Eziwan |
| Tous S7-300/400 | S7Comm (non sécurisé) | Déconseillé, pas supporté Eziwan |
Le protocole S7Comm (port 102) des S7-300/400 n'est pas supporté par Eziwan pour des raisons de sécurité : S7Comm n'a aucune authentification et est exposé à des attaques connues. Utiliser Modbus TCP via CP 343-1 ou RS-485 Modbus RTU.
Configuration Modbus TCP sur S7-1200
Prérequis réseau
- Adresse IP statique sur le port X1 de la CPU
- La gateway Eziwan sur le même sous-réseau (ou routage inter-VLAN si VLAN séparés)
- Port TCP 502 non bloqué entre la gateway et la CPU
Étape 1 — Configurer l'IP de la CPU dans TIA Portal
- Project tree → double-clic sur la CPU
- Properties → onglet "PROFINET interface [X1]"
- "Ethernet addresses" → désactiver DHCP, saisir l'IP statique
- Exemple :
192.168.1.10 / 255.255.255.0 - Laisser la passerelle vide si pas de routage inter-VLAN
Étape 2 — Créer le Data Block pour MB_SERVER
Créer un nouveau Data Block dans TIA Portal :
// Paramètres du DB
Nom : "Eziwan_DB"
Numéro : automatique (ex. DB10)
Type : Global DB
Accès optimisé : DÉSACTIVÉ ← CRITIQUE
L'accès optimisé doit être désactivé. Dans les propriétés du DB, décocher "Optimized block access". Sans cela, l'accès absolu par adresse mémoire (nécessaire pour MB_SERVER) ne fonctionne pas. C'est la cause n°1 des erreurs lors d'une première intégration.
Structure du DB :
DATA_BLOCK "Eziwan_DB"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
// Zone de holding registers (500 mots de 16 bits)
// Accessible en Modbus FC=03 adresses 0 à 499
MB_HOLD_REG : ARRAY [0..499] OF WORD;
// Variables internes (non accessibles en Modbus)
MBStatus : WORD;
MBError : BOOL;
NewData : BOOL;
END_VAR
Étape 3 — Ajouter MB_SERVER dans OB1
// Bloc de connexion TCP (dans un FC ou directement dans OB1)
// Type : TCON_IP_v4 (instancier comme variable Static dans un FB
// ou comme DB de connexion statique)
"ConnectDB".InterfaceId := 64; // Port X1 = toujours 64 sur S7-1200
"ConnectDB".ID := W#16#0001; // ID de connexion (1 à 0xFFF)
"ConnectDB".ConnectionType := 11; // 11 = TCP
"ConnectDB".ActiveEstablished := FALSE; // Serveur : attente de connexion
"ConnectDB".RemoteAddress.ADDR[1] := 0; // Accepter toutes les IP
"ConnectDB".RemoteAddress.ADDR[2] := 0;
"ConnectDB".RemoteAddress.ADDR[3] := 0;
"ConnectDB".RemoteAddress.ADDR[4] := 0;
"ConnectDB".RemotePort := 0; // Port source quelconque
"ConnectDB".LocalPort := 502; // Port Modbus TCP
// Appel du FB MB_SERVER (instance dans un DB d'instance)
"MB_SERVER_DB"(
DISCONNECT := FALSE, // TRUE pour fermer la connexion
MB_HOLD_REG := "Eziwan_DB".MB_HOLD_REG,
CONNECT := "ConnectDB",
NDR => "Eziwan_DB".NewData, // TRUE si nouvelles données reçues
DR => #DataReady,
ERROR => "Eziwan_DB".MBError,
STATUS => "Eziwan_DB".MBStatus
);
Étape 4 — Alimenter les registres depuis le programme
// Dans OB1 ou un OB cyclique (OB30, OB35...)
// Convention recommandée :
// Registres 0-49 : variables analogiques
// Registres 50-99 : compteurs et accumulateurs
// Registres 100-127: états et codes défaut (bitfields)
// Valeurs analogiques (×10 pour 1 décimale)
"Eziwan_DB".MB_HOLD_REG[0] := REAL_TO_UINT("GVL_Process".Temperature_Four * 10.0);
"Eziwan_DB".MB_HOLD_REG[1] := REAL_TO_UINT("GVL_Process".Debit_Ligne * 100.0);
"Eziwan_DB".MB_HOLD_REG[2] := REAL_TO_UINT("GVL_Process".Pression * 100.0);
// Float 32 bits sur 2 registres (si précision décimale suffisante avec ×10 ci-dessus)
// Utiliser MOVE pour copier les octets
"Eziwan_DB".MB_HOLD_REG[10] := WORD("GVL_Analog".Debit_MSW); // Poids fort
"Eziwan_DB".MB_HOLD_REG[11] := WORD("GVL_Analog".Debit_LSW); // Poids faible
// Bitfield d'états (16 booléens dans un seul registre)
"Eziwan_DB".MB_HOLD_REG[100] := 0; // Reset
IF "GVL_Status".Pompe_1_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0001; END_IF;
IF "GVL_Status".Pompe_2_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0002; END_IF;
IF "GVL_Alarms".Defaut_Thermique THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0004; END_IF;
IF "GVL_Status".Arret_Urgence THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0008; END_IF;
// Compteur de production (int32 sur 2 registres)
"Eziwan_DB".MB_HOLD_REG[50] := INT_TO_WORD("GVL_Count".Pieces_SHR 16); // MSW
"Eziwan_DB".MB_HOLD_REG[51] := INT_TO_WORD("GVL_Count".Pieces_AND 16#FFFF); // LSW
Configuration OPC-UA sur S7-1500 (recommandé)
L'avantage de l'OPC-UA sur S7-1500 : aucun FB dans le programme. Les variables sont publiées directement depuis le namespace OPC-UA sans modification du code automate.
Activer OPC-UA dans TIA Portal V16+
- Propriétés CPU → "OPC UA" → "Server" → cocher "Activate OPC UA server"
- Port : 4840 (standard OPC-UA, ou 48010/48020 selon contraintes réseau)
- Security : choisir "Basic256Sha256 - Sign & Encrypt" (niveau SL2+ recommandé)
- Authentication : activer "Username/Password" ou "Certificate" (désactiver "Anonymous")
Configurer les variables exposées
Dans TIA Portal, créer des OPC UA Access Points :
- Dans le bloc de données ou les PLC Tags → sélectionner les variables à exposer
- Clic droit → "Properties" → activer "Accessible from HMI/OPC UA"
- Les variables apparaissent dans l'OPC UA Address Space sous
ns=3;s=<NomVariable>
Configuration dans Eziwan pour OPC-UA
Dans le tableau de bord, créer l'équipement S7-1500 avec protocole OPC-UA :
equipement:
protocole: opc_ua
endpoint: "opc.tcp://192.168.1.10:4840"
securite: "Basic256Sha256"
authentification: "username"
identifiant: "eziwan"
mot_de_passe: "votre-mot-de-passe"
Test de connexion Modbus TCP
Test rapide depuis Python
from pymodbus.client import ModbusTcpClient
# Test S7-1200 avec MB_SERVER
client = ModbusTcpClient("192.168.1.10", port=502, timeout=3)
if client.connect():
# Unit ID = 1 pour S7-1200 avec MB_SERVER
result = client.read_holding_registers(address=0, count=10, slave=1)
if not result.isError():
print(f"✓ Connexion OK. Registres 0-9 : {result.registers}")
else:
print(f"✗ Erreur Modbus : exception_code={getattr(result, 'exception_code', '?')}")
else:
print("✗ Connexion TCP impossible — vérifier IP et que le programme S7 tourne")
client.close()
Vérification du statut MB_SERVER
Dans TIA Portal, surveiller les variables de statut du DB :
"Eziwan_DB".MBStatus = ?
Valeur Signification
0x0000 Pas de connexion établie (en attente)
0x7002 Connexion établie, en attente de requête
0x7003 Requête en cours de traitement
0x8XYZ Erreur (voir tableau codes erreur TIA Portal)
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| Connexion TCP refusée | Programme non chargé ou CPU en STOP | Mettre CPU en RUN, vérifier que OB1 s'exécute |
| MB_STATUS 0x8090 | DB accès optimisé activé | Désactiver S7_Optimized_Access |
| Exception Modbus 01 | FB MB_SERVER non appelé dans le programme | Vérifier que MB_SERVER est bien dans OB1 |
| Exception Modbus 02 | Adresse > taille du tableau MB_HOLD_REG | Augmenter la taille du tableau ou vérifier l'adresse |
| Toutes les valeurs à 0 | Variables process non copiées dans MB_HOLD_REG | Vérifier la section de copie dans OB1 |
| MB_STATUS 0x80C3 | Connexion ID déjà utilisée | Changer l'ID de connexion dans TCON_IP_v4 |
| Valeurs REAL incorrectes | Mauvais ordre octets | Essayer float32_abcd vs float32_cdab dans Eziwan |
| Disconnect aléatoire | Timeout paramétré trop court | Augmenter le timeout dans les paramètres de connexion |
| OPC-UA : certificat rejeté | Certificat Eziwan non approuvé | Approuver le certificat dans TIA Portal > Server > Trusted Clients |
- Comment connecter un S7 à distance sans ouvrir de port — architecture VPN et sécurité
- Guide Modbus TCP/IP — structure de trame et code Python
- Support technique → — réponse sous 4h ouvrées
Questions fréquentes
Quelle différence entre S7-1200 et S7-1500 pour la connexion cloud ?
Les deux exposent Modbus TCP et OPC-UA (serveur OPC-UA natif sur S7-1500, licence runtime sur S7-1200 selon firmware). Le S7-1500 offre plus de nœuds OPC-UA simultanés ; pour une simple remontée de données, Modbus TCP suffit sur les deux.
Faut-il activer PUT/GET dans TIA Portal ?
Uniquement pour les communications S7 natives. Pour Modbus TCP via les blocs MB_SERVER ou pour OPC-UA, PUT/GET n'est pas requis — c'est d'ailleurs préférable pour la sécurité.
Modbus TCP ou OPC-UA : que choisir avec un S7 ?
Modbus TCP est plus simple à mettre en œuvre (mapping de DB vers registres) ; OPC-UA apporte le typage, la structure et la sécurité par certificats. Pour un projet neuf sur S7-1500, OPC-UA est recommandé ; pour du retrofit rapide, Modbus TCP.
L'accès TIA Portal à distance est-il possible ?
Oui, à travers le tunnel VPN de la gateway : le poste d'ingénierie rejoint le réseau de la machine et TIA Portal fonctionne comme en local (online, diagnostic, chargement), sans exposer l'automate sur Internet.
Ressources associées
- Accès distant automate Siemens S7 — TIA Portal à distance sécurisé
- Connecter un S7 au cloud — l'article pas-à-pas
- Intégration OPC-UA — configuration serveur/client détaillée
- OPC UA vers le cloud industriel — la solution de collecte OPC-UA
- Connecter un automate au cloud — toutes les marques supportées