Décodeur de registres Modbus

Décodez des registres Modbus en nombre à virgule flottante ou en entier, et comparez les valeurs obtenues selon l’ordre des octets et des mots.

Vous avez les valeurs des registres ? Décodez-les ici. Pour convertir un nombre en registres, utilisez le convertisseur de nombres flottants IEEE 754.

Modbus et liaisons série Mis à jour Gratuit, sans inscription

Registres

Exemples

Quatre chiffres hexadécimaux par registre, dans l’ordre de lecture

Interprétation
Ordre des octets

Valeur en ordre ABCD

198656

CDAB, mots inversés
2,5921e−41
BADC, octets inversés
50
DCBA, octet faible en premier
2,3777e−41
Octets décodés, dans cet ordre
48 42 00 00

NaN ou l’infini indiquent souvent un mauvais type ou ordre, ou un état « valeur absente » documenté dans la table des registres.

Méthode de calcul

The registers are laid out as bytes in the chosen order (ABCD is the first register high byte first) and read as an IEEE 754 float or a two’s-complement integer

En ordre ABCD, les octets sont 48 42 00 00. Interprétés comme un flottant IEEE 754 de 32 bits, ils donnent 198656.

Conseil : Comparez avec une valeur connue, par exemple une tension proche de 230 ou 400 V, puis confirmez le type et l’ordre pour chaque bloc de registres documenté avant de vous fier aux autres mesures.

Décoder un nombre flottant Modbus (IEEE 754)

Un registre Modbus contient 16 bits : un nombre flottant ou entier de 32 bits occupe donc deux registres, et une valeur de 64 bits en occupe quatre. La spécification Modbus fixe l’ordre des octets dans chaque registre (octet fort en premier), mais pas l’ordre des registres. Les appareils diffèrent donc. Saisissez les registres dans l’ordre de lecture : le décodeur compare côte à côte les valeurs obtenues dans les quatre ordres. Celui qui donne une mesure cohérente est souvent évident.

Mettre les octets dans l’ordre

ABCD : A B dans le premier registre, C D dans le second

L’ordre ABCD, octet fort en premier, est le plus courant. CDAB inverse les deux registres (échange des mots), BADC inverse les octets dans chaque registre et DCBA inverse les quatre octets.

Décomposer les 32 bits

1 bit de signe | 8 bits d’exposant | 23 bits de fraction

Il s’agit du format IEEE 754 à précision simple. Le premier bit est le signe, les huit suivants l’exposant avec un biais de 127, et les 23 derniers la fraction après le 1 implicite pour les valeurs normales.

Calculer la valeur

valeur = (−1)s × 1.f × 2(e − 127)

Pour 43 6A 00 00, le signe vaut 0 et l’exposant 0x86 = 134. L’échelle est donc 27 = 128 ; la fraction 0x6A0000 donne 1,828125. Ainsi, 1,828125 × 128 = 234.

Entiers

valeur = mot fort × 65536 + mot faible

Un entier non signé de 32 bits assemble les deux registres. Un entier signé utilise le complément à deux : si le bit de poids fort est à 1, soustrayez 232 (ou 216 pour un seul registre). FF38 interprété comme entier signé de 16 bits vaut −200.

Exemples : décodage des nombres flottants Modbus

Une tension de 234 V sur deux registres

Un compteur renvoie 436A et 0000 pour une tension de phase. En ordre ABCD, les octets 43 6A 00 00 donnent 234. Avec les registres inversés, les mêmes données donnent 2,4184e‑41 : c’est un indice clair d’un mauvais ordre.

Valeur en ordre ABCD 234 Ouvrir dans le calculateur

Un flottant avec les mots inversés

Un autre appareil renvoie 4000 puis 43C8. En ordre ABCD, cela donne 2,004137, une valeur plausible mais fausse. Avec les registres inversés (CDAB), les octets deviennent 43 C8 40 00 et donnent 400,5. Vérifiez une mesure connue, par exemple une tension composée, avant de faire confiance aux autres valeurs de ce bloc de registres documenté.

Valeur en ordre CDAB 400,5 Ouvrir dans le calculateur

Un compteur d’énergie en entier non signé de 32 bits

Les registres d’énergie contiennent souvent des entiers non signés de 32 bits. 0001 E240 vaut 1 × 65 536 + 57 920 = 123456. La table des registres donne le facteur d’échelle, par exemple 0,1 kWh par unité de compte, soit 12 345,6 kWh ici.

Valeur en ordre ABCD 123456 Ouvrir dans le calculateur

Valeurs courantes dans des registres flottants de 32 bits

Registres de mesures usuelles en ordre ABCD, et valeurs obtenues si ces mêmes registres sont lus avec les mots inversés. Une valeur minuscule comme 2,4e‑41 indique souvent un mauvais ordre.

Registres (hex)Lecture en ABCDLecture en CDAB
0000 000000
3DCC CCCD0,1−107605600
3F73 33330,954,1734392e−8
3F80 000012,278e−41
BF80 0000−16,8697e−41
4248 0000502,3777e−41
4366 00002302,4178e−41
43C8 00004002,4315e−41
447A 000010002,4565e−41

Télécharger ce tableau (CSV)

Questions sur décodage des nombres flottants Modbus

Pourquoi ma valeur Modbus est-elle énorme ou minuscule?

Le plus souvent, l’ordre des registres ou le type de données est incorrect. Un flottant lu dans le mauvais ordre peut donner 2,4e‑41 ou 5,9e+25. Essayez chaque ordre et comparez avec une valeur vérifiable sur l’afficheur de l’appareil.

Modbus transmet-il l’octet fort en premier?

À l’intérieur d’un registre, oui : la spécification transmet l’octet fort en premier. Elle ne précise pas l’ordre des valeurs réparties sur deux registres ou plus ; chaque fabricant choisit. La table des registres de l’appareil doit indiquer cet ordre.

Quelle est la différence entre ABCD et CDAB?

C’est l’ordre des deux registres. En ABCD, le premier registre contient la moitié de poids fort ; en CDAB, il contient la moitié de poids faible. L’ordre des octets dans chaque registre reste identique.

Comment lire une valeur de 32 bits?

Lisez deux registres consécutifs dans une seule requête, par exemple avec la fonction 03 et une quantité de 2, à partir de l’adresse indiquée dans la table. Le convertisseur d’adresses Modbus transforme une référence de type 40001 du manuel en adresse à transmettre.

Que signifie NaN dans un registre?

NaN signifie « non numérique ». Certains appareils l’utilisent, ou utilisent 0xFFFFFFFF, pour signaler une mesure indisponible. Cela peut aussi indiquer un mauvais type ou ordre : vérifiez la table avant de conclure à une panne.

Limites de ce résultat

  • L’outil ne déduit pas le bon ordre d’une valeur simplement plausible.
  • NaN et l’infini peuvent représenter, selon la documentation, des états invalides, indisponibles ou hors plage, ou bien un mauvais type ou ordre. Consultez la table des registres de l’appareil.

Mesurer en continu

Une fois le type et l’ordre connus, un ZMB lit les registres d’un appareil RS-485 et transmet les données au Gateway par le réseau maillé sans fil, sans câble de données à ramener jusqu’au tableau.

Guides associés

Sources

  1. MODBUS Application Protocol Specification V1.1b3 (s’ouvre dans un nouvel onglet) (PDF) Modbus Organization, 2012-04-26
  2. TeSys Tera Modbus RTU communication guide: UINT32 frame example (s’ouvre dans un nouvel onglet) Schneider Electric, DOCA0355EN-01