Un registro Modbus tiene 16 bits, así que un float o un entero de 32 bits ocupa dos, y los equipos no se ponen de acuerdo en el orden. Ingrese los dos registros y vea el valor en todos los órdenes a la vez; el correcto suele saltar a la vista.
Llame A B C D a los cuatro bytes, el más significativo primero, como los define IEEE 754. El estándar Modbus fija el orden de los bytes dentro de un registro (big-endian) pero no dice qué registro va primero, y algunos equipos además intercambian los bytes.
ABCD es big-endian en todo. CDAB intercambia los dos registros, que es la alternativa más común y se suele llamar intercambio de palabras. BADC intercambia los bytes dentro de cada registro. DCBA invierte todo.
Lea un valor que conozca, como la temperatura ambiente o un punto de ajuste, y elija el orden que lo reproduce. Luego configure ese orden una vez en el sistema que lee el equipo. La hoja de datos debería indicarlo, y a menudo no lo hace.
El equipo envía los 16 bits bajos del valor en el primer registro y los 16 bits altos en el segundo. Los bytes dentro de cada registro siguen en orden normal.
Casi siempre es el orden de palabras equivocado. Un float pequeño leído con los registros invertidos cae en el rango desnormalizado o muy fuera de escala. Pruebe los otros órdenes.
En complemento a dos: un registro por encima de 32767 es negativo, así que 0xFF9F es -97. Muchos sensores envían el valor multiplicado por 10 o por 100, así que -97 puede significar -9.7.
Genesis lee sensores RS485 Modbus, transductores analógicos y sondas 1-Wire en los mismos cuatro puertos y los reporta por red celular. Cuéntenos qué necesita leer.
Hablemos →