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.