SensorCatalog

Decodificador de registros Modbus

Convierta registros holding o de entrada en bruto en el número que contienen, en cada orden de bytes y palabras, o un valor en registros.

Registros

Sentido

Valores de registro

Introducidos en

Todos los órdenes de bytes

ABCD · big-endian
1041 20 00 00
CDAB · palabras intercambiadas
2,3362448 × 10⁻⁴¹lectura improbable · 00 00 41 20
BADC · bytes intercambiados
1,6347736 × 10⁻¹⁹lectura improbable · 20 41 00 00
DCBA · little-endian
1,1570521 × 10⁻⁴¹lectura improbable · 00 00 20 41

Dirección de registro

Dirección de protocolo
00x0000 · contada desde 0, tal como se envía en la petición
Tabla de datos
Registros holding (4x)lectura FC 03 · escritura FC 06, 16
Números de referencia
40001 · 400001notación de 5 y 6 dígitos, contada desde 1
Registros leídos
0 … 12 registros consecutivos para este tipo de dato
Fórmulas y normas
ABCD: A B C D   CDAB: C D A B   BADC: B A D C   DCBA: D C B A
Valor = raw × Factor de escala + Desplazamiento

Modbus envía cada registro de 16 bits con el byte alto primero. Para un valor de 32 o 64 bits repartido en varios registros, el protocolo no fija el orden: muchos equipos envían primero el registro alto (ABCD), otros el bajo (CDAB) y algunos además intercambian los bytes de cada registro (BADC, DCBA). Cada fila decodifica los mismos registros en uno de esos órdenes; las letras indican dónde llega cada byte del valor, siendo A el más significativo.

Los valores en coma flotante son IEEE 754 binary32 (FLOAT32) o binary64 (FLOAT64). Un orden equivocado suele dar un valor absurdamente grande o pequeño, o no un número; esas filas aparecen atenuadas. El valor de ingeniería es bruto × factor de escala + desplazamiento. Las referencias como 40001 siguen la convención Modicon: el primer dígito indica la tabla y el resto cuenta desde 1, mientras que la petición lleva la dirección contada desde 0.

¿Necesita sensores y transmisores con salida Modbus RTU o TCP?

Pedir precio a SensorSpan

Cómo funciona el decodificador de registros Modbus

Modbus transporta los datos en registros de 16 bits, y cada registro viaja con el byte alto primero. Eso es todo lo que fija el protocolo. Una temperatura enviada como flotante de 32 bits, o un contador de energía como entero de 64 bits, se reparte en dos o cuatro registros, y el orden de esos registros lo elige el fabricante. La mayoría de los equipos envía primero el registro alto, algunos el bajo y unos pocos además intercambian los dos bytes de cada registro.

El decodificador toma los registros exactamente como los muestra su maestro, pasarela o herramienta de prueba y los decodifica en los cuatro órdenes a la vez. El orden se escribe con las letras de los bytes del valor, siendo A el más significativo: ABCD es big-endian, CDAB el intercambio de palabras habitual, BADC intercambia los bytes de cada registro y DCBA es little-endian completo.

Encontrar el orden de bytes correcto

Lea un par de registros sabiendo más o menos lo que debería indicar el equipo y busque la fila que tiene sentido. Los registros 0x4120 0x0000 valen 10,0 como ABCD. Leídos como CDAB dan 2,3 × 10⁻⁴¹, un valor que ningún sensor indica, y el decodificador atenúa esas filas. Si el equipo envía primero el registro bajo, verá 0x0000 0x4120, y la fila CDAB muestra el 10.

Cuando conoce el orden de un valor, es el mismo para todos los valores de ese equipo y tipo de dato. Configúrelo en el maestro en lugar de intercambiar bytes en el programa del PLC.

Escalado y tipos de dato

Muchos equipos envían enteros con una escala implícita: una presión de 1234 que significa 12,34 bar, o una temperatura en décimas de grado. Introduzca el factor de escala y el desplazamiento del mapa de registros y el decodificador mostrará el valor de ingeniería junto al bruto; el valor es bruto × factor de escala + desplazamiento. El mismo factor se aplica a la inversa cuando codifica un valor para escribirlo.

INT16 y UINT16 solo difieren en cómo se lee el bit superior: 0xFFFF es 65535 sin signo y −1 con signo. La mayoría de los mapas de registros indica el tipo de cada dirección; si no, un valor que nunca debería ser negativo suele ser sin signo.

Números de registro y direcciones

Los manuales de los equipos suelen indicar los registros como 40001, 30001 o 400001. Es la convención Modicon: el primer dígito indica la tabla (4 para registros holding, 3 para registros de entrada, 0 para bobinas, 1 para entradas discretas) y el resto cuenta desde 1. La petición en la línea lleva la dirección contada desde 0, así que 40001 es la dirección 0 de los registros holding, leída con el código de función 03. Introduzca la referencia para ver la dirección de protocolo, los códigos de función y los registros que ocupa un valor de varios registros.

Un error de uno aquí es la causa más frecuente de un valor plausible pero erróneo: el maestro lee la segunda mitad de un valor y la primera del siguiente.

Preguntas frecuentes

¿Por qué el decodificador muestra NaN en algunas filas?

Un flotante con todos los bits del exponente a uno no es un número, o es infinito. Un orden de bytes equivocado suele producir ese patrón; también un equipo que indica a propósito un fallo del sensor con NaN. Para el segundo caso, consulte el manual del equipo.

¿Puedo introducir los registros como una sola cadena hexadecimal?

Sí. Ocho o dieciséis dígitos hexadecimales sin espacios se dividen en registros de cuatro dígitos, así que 41200000 se lee como 0x4120 0x0000.

¿Y Modbus TCP?

La disposición de los registros es la misma en TCP y en RTU; solo cambia la trama. El orden de bytes de los valores de varios registros depende del equipo, no del transporte.

↑ ↓ elegir · Intro abrir · Esc cerrar