SensorCatalog

Décodeur de registres Modbus

Convertir des registres de maintien ou d’entrée bruts en la valeur qu’ils portent, dans chaque ordre d’octets et de mots, ou une valeur en registres.

Registres

Sens

Valeurs des registres

Saisis en

Tous les ordres d’octets

ABCD · big-endian
1041 20 00 00
CDAB · mots inversés
2,3362448 × 10⁻⁴¹lecture improbable · 00 00 41 20
BADC · octets inversés
1,6347736 × 10⁻¹⁹lecture improbable · 20 41 00 00
DCBA · little-endian
1,1570521 × 10⁻⁴¹lecture improbable · 00 00 20 41

Adresse de registre

Adresse protocole
00x0000 · comptée à partir de 0, telle qu’envoyée dans la requête
Table de données
Registres de maintien (4x)lecture FC 03 · écriture FC 06, 16
Numéros de référence
40001 · 400001notation à 5 et 6 chiffres, comptée à partir de 1
Registres lus
0 … 12 registres consécutifs pour ce type de donnée
Formules et normes
ABCD: A B C D   CDAB: C D A B   BADC: B A D C   DCBA: D C B A
Valeur = raw × Facteur d’échelle + Décalage

Modbus envoie chaque registre de 16 bits octet de poids fort en premier. Pour une valeur de 32 ou 64 bits répartie sur plusieurs registres, le protocole ne fixe pas d’ordre : beaucoup d’appareils envoient le registre de poids fort en premier (ABCD), d’autres celui de poids faible (CDAB), et quelques-uns inversent aussi les octets de chaque registre (BADC, DCBA). Chaque ligne décode les mêmes registres dans l’un de ces ordres ; les lettres indiquent où arrive chaque octet de la valeur, A étant le plus significatif.

Les valeurs flottantes sont au format IEEE 754 binary32 (FLOAT32) ou binary64 (FLOAT64). Un mauvais ordre donne en général une valeur absurdement grande ou petite, ou pas un nombre ; ces lignes sont grisées. La valeur physique est brut × facteur d’échelle + décalage. Les références comme 40001 suivent la convention Modicon : le premier chiffre désigne la table, le reste compte à partir de 1, tandis que la requête porte l’adresse comptée à partir de 0.

Besoin de capteurs et transmetteurs avec sortie Modbus RTU ou TCP ?

Demander un prix à SensorSpan

Comment fonctionne le décodeur de registres Modbus

Modbus transporte les données dans des registres de 16 bits, et chaque registre voyage octet de poids fort en premier. C’est tout ce que fixe le protocole. Une température envoyée en flottant 32 bits, ou un compteur d’énergie en entier 64 bits, se répartit sur deux ou quatre registres, et l’ordre de ces registres est choisi par le fabricant. La plupart des appareils envoient d’abord le registre de poids fort, certains celui de poids faible, et quelques-uns inversent aussi les deux octets de chaque registre.

Le décodeur prend les registres exactement tels que votre maître, passerelle ou outil de test les affiche, et les décode dans les quatre ordres à la fois. L’ordre s’écrit avec les lettres des octets de la valeur, A étant le plus significatif : ABCD est big-endian, CDAB l’inversion de mots courante, BADC inverse les octets de chaque registre, DCBA est entièrement little-endian.

Trouver le bon ordre d’octets

Lisez une paire de registres en sachant à peu près ce que l’appareil devrait indiquer, et cherchez la ligne qui a du sens. Les registres 0x4120 0x0000 valent 10,0 en ABCD. Lus en CDAB, ils donnent 2,3 × 10⁻⁴¹, une valeur qu’aucun capteur n’indique ; le décodeur grise ces lignes. Si l’appareil envoie d’abord le registre de poids faible, vous verrez 0x0000 0x4120, et la ligne CDAB affiche le 10.

Une fois l’ordre connu pour une valeur, il est le même pour toutes les valeurs de cet appareil et de ce type. Inscrivez-le dans la configuration du maître plutôt que d’inverser des octets dans le programme de l’automate.

Mise à l’échelle et types de données

Beaucoup d’appareils envoient des entiers avec une échelle implicite : une pression de 1234 qui signifie 12,34 bar, ou une température en dixièmes de degré. Saisissez le facteur d’échelle et le décalage de la table des registres, et le décodeur affiche la valeur physique à côté de la valeur brute ; la valeur vaut brut × facteur d’échelle + décalage. Le même facteur s’applique en sens inverse quand vous encodez une valeur à écrire.

INT16 et UINT16 ne diffèrent que par la lecture du bit de poids fort : 0xFFFF vaut 65535 non signé et −1 signé. La plupart des tables de registres indiquent le type de chaque adresse ; sinon, une valeur qui ne devrait jamais être négative est en général non signée.

Numéros de registre et adresses

Les manuels listent souvent les registres sous la forme 40001, 30001 ou 400001. C’est la convention Modicon : le premier chiffre désigne la table (4 pour les registres de maintien, 3 pour les registres d’entrée, 0 pour les bobines, 1 pour les entrées TOR) et le reste compte à partir de 1. La requête sur la ligne porte l’adresse comptée à partir de 0 : 40001 est donc l’adresse 0 des registres de maintien, lue avec le code fonction 03. Saisissez la référence pour voir l’adresse protocole, les codes fonction et les registres qu’occupe une valeur sur plusieurs registres.

Un décalage d’une unité est ici la cause la plus fréquente d’une valeur plausible mais fausse : le maître lit la seconde moitié d’une valeur et la première moitié de la suivante.

Questions fréquentes

Pourquoi certaines lignes affichent-elles NaN ?

Un flottant dont les bits d’exposant sont tous à un n’est pas un nombre, ou est infini. Un mauvais ordre d’octets produit souvent ce motif ; un appareil qui signale volontairement un défaut capteur par NaN aussi. Pour ce second cas, consultez le manuel de l’appareil.

Puis-je saisir les registres en une seule chaîne hexadécimale ?

Oui. Huit ou seize chiffres hexadécimaux sans espace sont découpés en registres de quatre chiffres : 41200000 est lu comme 0x4120 0x0000.

Et Modbus TCP ?

La disposition des registres est la même en TCP et en RTU ; seule la trame diffère. L’ordre des octets des valeurs sur plusieurs registres dépend de l’appareil, pas du transport.

↑ ↓ choisir · Entrée ouvrir · Échap fermer