Modbus — Protocole de Communication Industrielle
Définition et historique
Modbus est un protocole de communication industrielle publié en 1979 par Modicon (aujourd'hui Schneider Electric) pour permettre la communication entre son automate programmable et des périphériques de terrain. Devenu un standard ouvert et libre de droits en 2002, Modbus est aujourd'hui le protocole le plus répandu dans l'industrie, présent sur des centaines de millions d'appareils à travers le monde.
Sa popularité repose sur trois qualités fondamentales : simplicité (facile à implémenter, bien documenté), robustesse (fonctionne sur des liaisons de mauvaise qualité) et interopérabilité (standard ouvert, supporté par quasiment tous les équipements industriels — automates, variateurs de vitesse, compteurs d'énergie, capteurs, régulateurs).
Malgré son âge, Modbus reste incontournable, en particulier dans les installations existantes (brownfield) et pour les équipements bas coût. Son principal défaut est l'absence de sécurité native (pas d'authentification, pas de chiffrement), ce qui impose de le protéger derrière un VPN lorsqu'il transite sur un réseau non maîtrisé.
Modbus RTU vs Modbus TCP
Il existe deux variantes principales du protocole Modbus :
Modbus RTU (Serial)
- Couche physique : RS-232 (point à point) ou RS-485 (bus multi-drops jusqu'à 32 équipements, 1 200 m de distance maximale à 9 600 bauds).
- Transmission : binaire, compacte. Chaque message contient l'adresse de l'esclave, le code fonction, les données et un CRC-16 de contrôle d'intégrité.
- Topologie : maître-esclave (un seul maître, jusqu'à 247 esclaves adressables de 1 à 247).
- Usage : compteurs d'énergie, variateurs de fréquence, capteurs industriels avec sortie RS-485, automates anciens.
Modbus TCP (Ethernet)
- Couche physique : Ethernet (10/100/1000 Mbps), protocole IP, port TCP 502.
- Encapsulation : la trame Modbus RTU est encapsulée dans un en-tête MBAP (Modbus Application Protocol) de 7 octets qui remplace le CRC (Ethernet assure lui-même l'intégrité).
- Topologie : client-serveur (le client, ex-maître, interroge le serveur, ex-esclave). Plusieurs clients peuvent interroger simultanément un même serveur.
- Usage : automates avec port Ethernet (Siemens S7, Schneider M340/M580, Allen-Bradley), HMI/SCADA, passerelles cloud.
| Critère | Modbus RTU | Modbus TCP |
|---|---|---|
| Couche physique | RS-232 / RS-485 | Ethernet / TCP-IP |
| Vitesse typique | 9 600 à 115 200 baud | 10/100 Mbps |
| Distance | Jusqu'à 1 200 m (RS-485) | Réseau Ethernet standard |
| Nombre d'esclaves | 1 à 247 | Illimité (adressage IP) |
| Contrôle intégrité | CRC-16 | TCP checksum |
| Sécurité native | Aucune | Aucune (utiliser VPN) |
Structure d'un message Modbus
Modbus RTU — Trame
| Adresse esclave (1 octet) | Code fonction (1 octet) | Données (N octets) | CRC-16 (2 octets) |
Exemple de requête FC03 lisant 2 registres à partir de l'adresse 0x0000 sur l'esclave 1 :
01 03 00 00 00 02 C4 0B
Modbus TCP — Trame (avec en-tête MBAP)
| Transaction ID (2 octets) | Protocol ID (2 octets, = 0x0000) | Longueur (2 octets) | Unit ID (1 octet) | Code fonction | Données |
Registres Modbus
Modbus organise les données en quatre types de registres, identifiés par leur adresse de référence :
| Type | Adresse | Accès | Description |
|---|---|---|---|
| Coils (bobines) | 0x0001–0xFFFF (base 1) | Lecture / Écriture | Sorties numériques TOR (bit) — état d'une vanne, d'un relais |
| Discrete Inputs | 0x1001–0xFFFF | Lecture seule | Entrées numériques TOR (bit) — état d'un capteur tout-ou-rien |
| Holding Registers | 0x4001–0xFFFF | Lecture / Écriture | Registres 16 bits en lecture/écriture — consignes, paramètres, valeurs mesurées |
| Input Registers | 0x3001–0xFFFF | Lecture seule | Registres 16 bits en lecture seule — mesures capteurs, valeurs process |
Note : l'adressage réel dans les trames commence à 0 (offset -1 par rapport aux références documentées). Ainsi, le Holding Register référencé 40001 est adressé 0x0000 dans la trame.
Codes fonction (Function Codes) courants
| Code | Hex | Nom | Description |
|---|---|---|---|
| FC01 | 0x01 | Read Coils | Lire l'état de N coils (sorties TOR) |
| FC02 | 0x02 | Read Discrete Inputs | Lire l'état de N entrées TOR |
| FC03 | 0x03 | Read Holding Registers | Lire N registres 16 bits en R/W — le plus utilisé |
| FC04 | 0x04 | Read Input Registers | Lire N registres 16 bits en lecture seule |
| FC05 | 0x05 | Write Single Coil | Écrire une seule sortie TOR (0x0000 = OFF, 0xFF00 = ON) |
| FC06 | 0x06 | Write Single Register | Écrire un seul registre Holding 16 bits |
| FC16 | 0x10 | Write Multiple Registers | Écrire plusieurs registres consécutifs en une seule transaction |
FC03 est de loin le code le plus utilisé pour la supervision : il permet de lire les mesures, états et compteurs d'un équipement.
Adressage esclave (Unit ID)
En Modbus RTU, chaque appareil sur le bus RS-485 possède une adresse unique de 1 à 247. L'adresse 0 est réservée à la diffusion (broadcast) — seules les commandes d'écriture peuvent être broadcastées.
En Modbus TCP, le champ Unit ID (anciennement appelé Slave ID) est conservé dans l'en-tête MBAP. Il est généralement fixé à 1 ou 255 pour les automates avec une seule entité, mais peut être utilisé pour adresser différents bus RS-485 derrière une même passerelle Modbus TCP/RTU.
Configuration Modbus sur la Gateway Eziwan
La Gateway Eziwan supporte nativement Modbus RTU (via RS-485) et Modbus TCP (via Ethernet). La configuration se fait via l'interface web de la gateway :
- Sélectionner le protocole : choisir "Modbus RTU" ou "Modbus TCP" dans le menu Source de données.
- Paramètres série (RTU uniquement) : débit bauds (9 600, 19 200, 38 400, 57 600 ou 115 200), parité (None/Even/Odd), bits de stop (1 ou 2).
- Adresse esclave : entrer l'adresse de l'équipement (1 à 247).
- Définir les points de données : pour chaque valeur à lire, spécifier le code fonction (FC01 à FC04), l'adresse de registre et le type de données (INT16, UINT16, INT32, FLOAT32, BOOL).
- Période d'acquisition : fréquence de polling (de 1 seconde à plusieurs minutes selon le besoin).
- Tester la connexion : utiliser la fonction "Test lecture" pour vérifier que les données sont correctement lues avant d'activer la remontée cloud.
Ressources associées
- Guide complet RS-485 et Modbus
- Connecter un automate à la plateforme Eziwan
- Article de blog : Modbus TCP vs RTU — quand utiliser lequel ?
- PLC / API — Automate Programmable Industriel
Questions fréquentes
Quelle différence entre Modbus RTU et Modbus TCP ?
Modbus RTU circule sur une liaison série RS-485 (bus multi-esclaves, jusqu'à 1 200 m) ; Modbus TCP encapsule les mêmes requêtes dans une trame Ethernet/IP sur le port 502. Une gateway fait le pont entre les deux mondes.
Qu'est-ce qu'un registre Modbus ?
Une case mémoire de 16 bits identifiée par une adresse. Les registres de maintien (holding registers, FC03/FC06/FC16) portent les valeurs de process ; les grandeurs 32 bits (flottants, compteurs) occupent deux registres consécutifs.
Modbus est-il sécurisé ?
Non : le protocole n'a ni authentification ni chiffrement. Il ne doit jamais être exposé sur Internet — la règle est de le confiner au réseau local et de transporter les données vers le cloud dans un tunnel VPN chiffré.
Combien d'équipements sur un bus Modbus RTU ?
Jusqu'à 32 esclaves sans répéteur (247 adresses logiques possibles). Au-delà, ou pour mélanger des cadences de polling différentes, on segmente en plusieurs bus sur des ports RS-485 distincts.
Ressources associées
- Modbus vers le cloud — collecter et superviser vos équipements Modbus
- Passerelle Modbus RTU / TCP — le pont série ↔ IP
- Modbus RTU vs TCP — le comparatif détaillé
- Guide Modbus complet — configuration et dépannage
- Protocoles industriels — le hub des protocoles OT