Pour décoder une valeur float 32 bits (IEEE 754) sur 2 registres Modbus consecutifs, combien de combinaisons de byte order différentes le développéur peut-il rencontrer en pratique selon le slave ?
C — 4 (ABCD, DCBA, BADC, CDAB)
La bonne réponse est C : quatre combinaisons sont rencontrees en pratique sur le terrain, ABCD (Big Endian standard, Modbus officiel), DCBA (Little Endian inverse), BADC (Big Endian Byte Swap, registres en bon ordre mais octets internes inverses) et CDAB (Little Endian Byte Swap, registres inverses mais octets internes en bon ordre). A est faux : le standard original ne specifiait que l'ordre des registres pour 16 bits et pas la combinaison de deux registres pour un float, donc seul ABCD est insuffisant. B est faux : Big et Little Endian seuls negligent les variantes Byte Swap très repandues. D est faux : seules 4 des 24 permutations théoriques (4!) sont effectivement implémentees, parce que chaque vendor a fige son choix sans aller plus loin dans les melanges. Les bibliotheques modernes (pymodbus, libmodbus) supportent les 4 ordres en paramètre.
Mnémo côté pymodbus : Endian.Big/Endian.Little en byteorder et wordorder donnent les 4 combinaisons. Pas la peine de chercher au-delà.
- A.1 (Big endian standard)
- B.2 (Big endian, Little endian)
- C.4 (ABCD, DCBA, BADC, CDAB)✓
- D.8 (toutes les permutations possibles)
Banque Modbus en préparation
La banque complète Modbus n'est pas encore disponible. Mets ton email pour être prévenu du lancement et avoir un discount early-bird.
Rejoindre la waitlist →Voir les 9 autres questions Modbus
Questions liées
- Un bus Modbus RTU sur RS-485 supporte jusqu'à 32 noeuds par segment (extensible avec des répétéurs), exige des résistances de terminaison (typiquement 120 ohms) aux deux extrémités du bus, ainsi que des résistances de polarisation pour fixer l'état de repos.3. Modbus RTU · RS-485 Multi-Drop
- Quel function code Modbus est utilisé pour LIRE les Holding Registers (registres 16 bits lecture/écriture) d'un slave ?4. Function codes · Lesen Coils/Register
- La function 0x06 "Write Single Register" écrit un seul Holding Register 16 bits sur un slave Modbus, avec adresse et valeur codees sur 16 bits chacune dans la requête.4. Function codes · Write Single Register (0x06)
- Pour transmettre une valeur flottante 32 bits IEEE 754 en Modbus (registres 16 bits), on utilise typiquement 2 registres consécutifs, avec le byte order spécifié dans la documentation du slave.5. Data encoding · 32-Bit-Float
- Modpoll (focus-sw.com) et mbpoll (Linux/macOS) sont des outils gratuits en ligne de commande pour interroger un slave Modbus depuis un PC, indispensables au diagnostic et à la mise au point d'intégrations Modbus.6. Practical · Modpoll / mbpoll