Decodificador de registros Modbus

Decodifique registros Modbus como números en coma flotante o enteros y compare los valores en cada orden de bytes y palabras.

¿Tiene los valores de los registros? Decodifíquelos aquí. Para convertir un número en registros, use el conversor de coma flotante IEEE 754.

Modbus y comunicaciones serie Actualizado Gratis, sin registro

Registros

Ejemplos

Cuatro dígitos hexadecimales por registro, en el orden de lectura

Interpretación
Orden de bytes

Valor, orden ABCD

−2,4178e−41

CDAB, palabras invertidas
230,5
BADC, bytes invertidos
1,1791628e−38
DCBA, de menor a mayor peso
2,3021767e+23
Bytes decodificados, en orden
80 00 43 66

NaN o infinito suelen indicar un tipo u orden incorrectos, o un estado «sin valor» documentado en el mapa de registros.

Cómo se calcula

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 orden ABCD, los bytes son 80 00 43 66; interpretados como un número IEEE 754 de 32 bits en coma flotante, dan −2,4178e−41.

Consejo: Compare el resultado con un valor conocido, como una tensión próxima a 230 o 400 V, y confirme el tipo y el orden de cada bloque de registros documentado antes de confiar en otras lecturas.

Cómo decodificar un valor Modbus en coma flotante (IEEE 754)

Un registro Modbus contiene 16 bits; por tanto, un número de 32 bits en coma flotante o entero ocupa dos registros, y uno de 64 bits ocupa cuatro. La especificación Modbus fija el orden de bytes dentro de cada registro (primero el más significativo), pero no el orden de los registros, que varía según el dispositivo. Introduzca los registros tal como se leen: el decodificador muestra el valor en los cuatro órdenes para compararlos. Compare con una lectura conocida y con el mapa del dispositivo; un número plausible por sí solo no confirma el orden.

Ordenar los bytes

ABCD: A B del primer registro, C D del segundo

ABCD, con el byte más significativo primero, es habitual. CDAB intercambia los dos registros (palabras invertidas), BADC intercambia los bytes dentro de cada registro y DCBA invierte los cuatro bytes.

Dividir los 32 bits

1 bit de signo | 8 bits de exponente | 23 bits de fracción

IEEE 754 de precisión simple. El primer bit indica el signo, los ocho siguientes el exponente con sesgo 127 y los 23 últimos la fracción tras un 1 inicial implícito para valores normales.

Calcular el valor

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

En 43 6A 00 00, el signo es 0 y el exponente es 0x86 = 134; por tanto, el factor es 27 = 128. La fracción 0x6A0000 da 1,828125. Así, 1,828125 × 128 = 234.

Enteros

valor = palabra alta × 65536 + palabra baja

Un entero de 32 bits sin signo une los dos registros. Un entero con signo usa complemento a dos: si el bit superior vale 1, reste 232 (o 216 para un registro). FF38 interpretado como entero de 16 bits con signo es −200.

Ejemplos: decodificación de valores Modbus en coma flotante

Tensión de 234 V en dos registros

Un contador devuelve 436A y 0000 para una tensión de fase. Interpretados en orden ABCD, los bytes 43 6A 00 00 dan 234. Con los registros invertidos, esos mismos datos dan 2,4184e‑41, señal clara de un orden incorrecto en este ejemplo.

Valor, orden ABCD 234 Abrir en la calculadora

Valor en coma flotante con palabras invertidas

Otro dispositivo devuelve primero 4000 y luego 43C8. En orden ABCD el resultado es 2,004137, aparentemente plausible pero incorrecto. Al invertir los registros (CDAB), los bytes son 43 C8 40 00, que dan 400,5. Compruebe una lectura verificable, como la tensión de línea, antes de confiar en otros valores de ese bloque de registros documentado.

Valor, orden CDAB 400,5 Abrir en la calculadora

Contador de energía como entero sin signo de 32 bits

Los registros de energía suelen contener enteros sin signo de 32 bits. 0001 E240 equivale a 1 × 65.536 + 57.920 = 123456. El mapa de registros indica el factor de escala; por ejemplo, 0,1 kWh por cuenta daría 12.345,6 kWh.

Valor, orden ABCD 123456 Abrir en la calculadora

Valores habituales como registros de coma flotante de 32 bits

Registros de lecturas corrientes en orden ABCD, con el byte más significativo primero, y el resultado de leer esos mismos registros con las palabras invertidas. Un número diminuto como 2,4e‑41 suele indicar un orden incorrecto.

Registros (hex.)Leídos como ABCDLeídos como 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

Descargar esta tabla (CSV)

Preguntas sobre decodificación de valores Modbus en coma flotante

¿Por qué obtengo un número enorme o diminuto al leer un valor Modbus?

Suele deberse a un orden de registros o tipo de datos incorrecto. Un valor en coma flotante leído en otro orden puede dar cifras como 2,4e‑41 o 5,9e+25. Pruebe los órdenes y compare con una lectura que pueda comprobar en la pantalla del dispositivo.

¿Modbus usa el byte más significativo primero?

Dentro de cada registro, sí: la especificación transmite primero el byte más significativo. Para valores distribuidos entre dos o más registros no fija un orden; cada fabricante lo elige. El mapa de registros del dispositivo debe indicarlo.

¿Cuál es la diferencia entre ABCD y CDAB?

El orden de los dos registros. En ABCD el primero contiene la mitad más significativa del valor; en CDAB, la menos significativa. Los bytes dentro de cada registro mantienen su orden.

¿Cómo leo un valor de 32 bits?

Lea dos registros consecutivos en una sola petición, por ejemplo, con la función 03 y cantidad 2 desde la dirección indicada en el mapa. El conversor de direcciones Modbus convierte un número del manual como 40001 en la dirección que debe enviarse.

¿Qué significa NaN en un registro?

Significa «no es un número». Algunos dispositivos lo usan, o usan 0xFFFFFFFF, para indicar que una lectura no está disponible. También puede señalar un tipo u orden incorrectos; consulte el mapa antes de suponer que hay una avería.

Límites de este resultado

  • La herramienta no deduce el orden correcto a partir de un número que parezca plausible.
  • NaN e infinito pueden representar estados de lectura no válida, indisponible o fuera de rango documentados, o un tipo u orden incorrectos. Consulte el mapa de registros del dispositivo.

Medir de forma continua

Una vez conocidos el tipo y el orden, un ZMB lee los registros de un dispositivo RS-485 y los envía al Gateway por la red mallada inalámbrica, sin cable de datos de vuelta al cuadro.

Guías relacionadas

Fuentes

  1. MODBUS Application Protocol Specification V1.1b3 (se abre en una nueva pestaña) (PDF) Modbus Organization, 2012-04-26
  2. TeSys Tera Modbus RTU communication guide: UINT32 frame example (se abre en una nueva pestaña) Schneider Electric, DOCA0355EN-01