Comment lire n'importe quelle table de registres Modbus
Chaque appareil Modbus arrive avec sa propre table de registres — et ses propres pièges. Découvrez les quatre types de données, les codes fonction de lecture/écriture et les deux erreurs qui piègent même les intégrateurs expérimentés.
Lire une table de registres en quatre étapes
Identifier le type de donnée
Vérifiez si la valeur se trouve dans une coil, une entrée discrète, un registre input ou holding — cela détermine le code fonction et les droits d'accès.
Choisir le bon code fonction
FC03/FC04 lisent les registres holding et input, FC06/FC16 écrivent un ou plusieurs registres. Un mauvais code renvoie une exception, pas des données.
Résoudre le décalage d'adressage
Déterminez si la documentation utilise la numérotation Modicon (ex. 40001) ou l'adresse protocole réellement transmise, basée sur 0 — confondre les deux est l'erreur d'intégration la plus courante.
Vérifier l'ordre des octets et des mots
Pour toute valeur 32 bits répartie sur deux registres, vérifiez l'ordre des mots du fabricant avec une valeur de test connue avant de faire confiance au résultat mis à l'échelle.
Ce qui piège vraiment les ingénieurs
Le piège du décalage d'adressage
La numérotation Modicon démarre les registres à 40001, mais l'adresse réellement transmise sur le bus est basée sur 0 — le registre 40001 correspond à l'adresse protocole 0. Une erreur ici décale chaque lecture d'une unité.
Quatre types de données, deux niveaux d'accès
Les coils et entrées discrètes sont des valeurs sur 1 bit, les registres input et holding des mots de 16 bits. Seuls les coils et registres holding sont accessibles en écriture — les données input et entrées discrètes sont en lecture seule par conception.
Le code fonction détermine ce que vous pouvez faire
FC01/02 lisent coils et entrées discrètes, FC03/04 lisent registres holding et input, FC05/06 écrivent une seule coil ou un seul registre, FC15/16 en écrivent plusieurs. L'appareil rejette tout code non pris en charge pour ce type de donnée.
Le piège 40001/30001
La numérotation historique Modicon (40001, 30001…) ne correspond pas à l'adresse basée sur 0 transmise sur le bus. Vérifiez toujours quelle convention utilise une fiche technique donnée avant de configurer un scrutin.
L'ordre des mots n'est pas normalisé
Quand deux registres 16 bits forment une valeur 32 bits, les fabricants divergent sur celui qui contient le mot fort. Une mauvaise hypothèse produit des chiffres plausibles mais faux.
Aucune authentification native
Ni Modbus RTU ni le Modbus TCP classique n'ont été conçus avec la sécurité en tête — n'importe quel appareil du bus ou du réseau peut envoyer une commande valide. La segmentation réseau et une passerelle consciente du protocole compensent ce que le protocole ne fait pas.
Accompagnement d'ingénierie pour l'intégration Modbus
Quand une table de registres ne se comporte pas comme documenté, nos ingénieurs le vérifient avant la mise en service, pas pendant un retard sur site.
- Relecture de la table de registres au regard de la documentation constructeur
- Vérification des codes fonction et de la convention d'adressage avant mise en service
- Revue de la topologie réseau RS-485 et de la terminaison
- Contrôle de l'ordre des mots/octets pour les valeurs multi-registres
- Assemblage de tableaux et support d'intégration selon IEC 61439
Questions fréquentes
Quelle est la différence entre un registre holding et un registre input ?
Les deux sont des mots de 16 bits, mais le registre holding est en lecture/écriture (code fonction 03 en lecture, 06/16 en écriture) tandis que le registre input est en lecture seule (code fonction 04). C'est le firmware de l'appareil qui fixe cela — vérifiez dans la fiche technique lequel contient la valeur recherchée.
Pourquoi ma lecture Modbus est-elle exactement le double, la moitié, ou totalement fausse ?
C'est presque toujours un problème d'ordre des mots (endianness) quand une valeur 32 bits est répartie sur deux registres 16 bits. Les fabricants ne s'accordent pas sur le mot qui vient en premier, fort ou faible — inversez l'ordre des registres et comparez à une valeur de référence connue.
Pourquoi le registre 40001 de la fiche technique correspond-il à l'adresse 0 sur le bus ?
Cela vient de l'histoire de Modbus : la numérotation historique Modicon démarre les registres holding à 40001, mais l'adresse protocole réellement transmise est basée sur 0. Registre 40001 = adresse protocole 0, registre 40002 = adresse 1, et ainsi de suite.
Quel code fonction utiliser pour écrire une valeur sur un appareil Modbus ?
FC06 écrit un seul registre holding, FC05 une seule coil. FC16 écrit plusieurs registres holding en une transaction, FC15 plusieurs coils. On ne peut jamais écrire sur un registre input ou une entrée discrète — ils sont en lecture seule par conception.
Modbus dispose-t-il d'une sécurité native ?
Non. Ni Modbus RTU ni le Modbus TCP classique ne prévoient d'authentification ou de chiffrement dans leur spécification — n'importe quel nœud du bus ou du réseau peut envoyer une commande valide. La sécurité doit venir de l'extérieur du protocole : segmentation réseau, passerelle consciente du protocole, et restriction de l'accès au réseau d'automatisation.
Besoin d'un second avis sur une intégration Modbus ?
Nos ingénieurs vérifient tables de registres, câblage et plans de mise en service avant qu'ils ne deviennent un retard sur site. Contactez-nous.