En bref
Modbus est un protocole maître/esclave (client/serveur en TCP) simple et très répandu (compteurs, variateurs, PAC, groupes froids). Les spécifications sont publiées par Modbus Organization. Le maître interroge ; l'esclave répond. Aucun esclave n'émet spontanément.
Les 4 tables de données
| Table | Fonctions | Référence usuelle | Contenu |
|---|---|---|---|
| Coils | 01, 05, 15 | 0xxxx | Bits en lecture/écriture |
| Discrete Inputs | 02 | 1xxxx | Bits en lecture seule |
| Input Registers | 04 | 3xxxx | Mots 16 bits en lecture seule |
| Holding Registers | 03, 06, 16 | 4xxxx | Mots 16 bits en lecture/écriture |
Le piège de l'adressage (décalage de 1)
Dans la trame, l'adresse est 0-based : la référence documentaire 40001 correspond à l'adresse protocole 0 avec la fonction 03. Certains fabricants documentent directement l'adresse protocole, d'autres la référence 4xxxx, d'autres encore une adresse décimale « 1-based ». Si toutes vos valeurs semblent décalées d'un registre, essayez ±1.
Les valeurs sur 32 bits
Un registre fait 16 bits (octet de poids fort en premier). Les valeurs 32 bits (FLOAT32, INT32, UINT32) occupent deux registres, mais l'ordre des mots n'est pas normalisé : ABCD (big-endian) ou CDAB (mots inversés) sont les plus fréquents. La documentation de l'équipement fait foi ; à défaut, testez les ordres et retenez la valeur physiquement plausible. Pensez aussi aux facteurs d'échelle (×0,1, ×0,01…) et aux unités indiquées dans la table.
👉 Décodez vos registres dans le Laboratoire des protocoles.
Modbus RTU (série)
- Support RS-485 (2 fils + référence commune), 1 maître, jusqu'à 247 esclaves adressés (1 à 247 ; 0 = diffusion sans réponse).
- Format par défaut de la spécification : 8 bits de données, parité paire, 1 bit de stop ; sans parité, 2 bits de stop. Dans la pratique, beaucoup d'équipements sont livrés en « 8N1 » : alignez vitesse, parité et bits de stop sur tout le bus.
- Trames séparées par un silence ; contrôle d'intégrité par CRC-16.
- Mêmes règles de câblage que tout bus RS-485 : bus chaîné, terminaison aux extrémités, une polarisation, écran correctement relié.
Modbus TCP
- Port 502. En-tête MBAP de 7 octets (identifiant de transaction, protocole = 0, longueur, Unit ID) puis la même PDU qu'en RTU, sans CRC.
- Le Unit ID sert surtout aux passerelles TCP/RTU pour désigner l'esclave série ; pour un équipement TCP natif, la valeur attendue est indiquée dans sa notice (souvent 1 ou 255).
Limites par requête
Lecture de registres : 125 maximum (fonctions 03/04). Écriture multiple : 123 registres (fonction 16). Lecture de bits : 2 000. Regroupez les lectures par blocs contigus pour gagner du temps, sans dépasser ces limites ni « traverser » des zones non implémentées (qui provoquent l'exception 02).
Codes d'exception
| Code | Signification | Piste |
|---|---|---|
| 01 | Illegal Function | Fonction non gérée (ex. 04 au lieu de 03) |
| 02 | Illegal Data Address | Adresse inexistante, décalage 0/1, bloc trop long |
| 03 | Illegal Data Value | Valeur ou quantité refusée |
| 04 | Server Device Failure | Défaut interne de l'esclave |
| 0A / 0B | Passerelle | Chemin indisponible / esclave absent derrière la passerelle |
Check-list d'intégration
- Obtenir la table Modbus officielle correspondant au modèle et à la version de firmware.
- Noter : adresse esclave, vitesse, parité, stop, fonctions, adresses, types, ordre des mots, échelle, unités.
- Tester un registre simple et connu (ex. tension) avant de tout configurer.
- Régler les temporisations (timeout, délai entre requêtes) selon le nombre d'esclaves et la vitesse.
- Prévoir un point « défaut de communication » par équipement dans la supervision.
Fiche de synthèse : pour les valeurs propres à un produit, référez-vous toujours à sa documentation officielle et aux textes en vigueur.