Modbus est un protocole de couche application utilisé par de nombreux équipements industriels. Un client envoie une requête et un serveur répond selon le code de fonction. Le protocole définit les messages et les zones de données, mais chaque fabricant décide à quel registre correspond une mesure. Pour un appareil réel, gardez sa table de registres à portée de main.Les codes de fonction et les octets des trames sont écrits en hexadécimal : 0F vaut 15 et 10 vaut 16 en décimal.
1. Les quatre zones de données
- Coils : bits lisibles et inscriptibles ; codes courants 01, 05 et 0F.
- Discrete Inputs : bits en lecture seule ; code 02.
- Input Registers : mots de 16 bits en lecture seule ; code 04.
- Holding Registers : mots de 16 bits lisibles et inscriptibles selon le modèle du protocole ; lecture 03, écriture simple 06, écriture multiple 10. L’appareil peut tout de même limiter certaines écritures.
Les fonctions 03 et 04 lisent toutes deux des mots de 16 bits, mais dans des zones distinctes. Vérifiez code, numéro de registre, type, échelle et droits dans la notice du fabricant.
2. Modbus RTU et Modbus TCP
RTU fonctionne souvent sur une liaison série comme RS-485. Sa trame comprend adresse de station, code et données, puis CRC16. Chaque appareil du même bus doit avoir une adresse différente ; débit, bits de données, parité et bits d’arrêt doivent correspondre. L’octet faible du CRC est transmis en premier.
Modbus TCP utilise TCP/IP, généralement le port 502. Son en-tête MBAP de sept octets contient identifiant de transaction, identifiant de protocole, longueur et identifiant d’unité. Une trame TCP ne porte pas le CRC Modbus RTU final. Avec une passerelle TCP/série, l’identifiant d’unité désigne souvent l’appareil situé derrière la passerelle.
3. Pourquoi 40001 peut désigner l’adresse zéro
Le repère 40001 désigne habituellement le premier Holding Register. Le 4 initial indique la zone ; la requête transporte un décalage commençant à zéro. Selon cette convention, 40001 correspond à la fonction 03 et à l’adresse de départ 0000, puis 40002 à 0001. Les notices et outils peuvent afficher une numérotation à partir de un ou un décalage à partir de zéro. Vérifiez avant toute écriture.
Un registre contient 16 bits. Une valeur sur 32 bits occupe généralement deux registres, mais l’ordre de ces mots dépend de l’appareil. Une échelle telle que température divisée par dix vient également de sa documentation, pas de Modbus.
4. Lire deux Holding Registers
Supposons que température et humidité soient placées aux registres 40001 et 40002, avec valeurs brutes 250 et 400 et un facteur documenté de 0,1. La fonction 03 lit deux registres depuis le décalage zéro. Ces valeurs et unités ne sont qu’un exemple.
PDU request: 03 00 00 00 02
PDU response: 03 04 00 FA 01 90
TCP request: 00 01 00 00 00 06 01 03 00 00 00 02
TCP response: 00 01 00 00 00 07 01 03 04 00 FA 01 90
Dans la requête PDU, 03 est le code de fonction, 00 00 le décalage initial et 00 02 la quantité. Dans la réponse, 04 annonce quatre octets de données ; 00 FA vaut 250 et 01 90 vaut 400. Le facteur supposé donne 25,0 °C et 40,0 %. Dans l’exemple TCP, l’identifiant de transaction vaut 0001, celui du protocole 0000, celui de l’unité 01 ; les longueurs MBAP sont 0006 et 0007. En RTU, le même PDU exige aussi une adresse de station et un CRC16 correct.
5. Première mise en communication
- Commencez par une valeur documentée en lecture et évitez d’écrire. Vérifiez liaison, adresse de station ou IP, port et paramètres série.
- Choisissez la zone et la fonction. Déterminez si le logiciel attend « 40001 » ou « décalage 0 ».
- Lisez peu de registres, contrôlez fonction et nombre d’octets, puis interprétez les données selon la notice.
- En cas de délai dépassé, vérifiez câble, réseau et adresse. 83 02 signifie que la fonction 03 a renvoyé l’exception 02 (adresse de données illégale) ; vérifiez le décalage initial et la quantité. Ce n’est pas une mesure.
Sécurité et sources
La lecture, et surtout l’écriture, peut avoir un effet sur des machines réelles. Limitez l’accès au réseau de production et n’exposez pas directement Modbus TCP classique à Internet. Évaluez Modbus Security ou une séparation du réseau si nécessaire.