Interfaces de contadores

Mapas de registros Modbus: direcciones, tipos de datos y escalas

Lee mapas de registros Modbus: holding e input, direcciones 40001 y base cero, 32/64 bits, orden de palabras, escala, estado y valores no disponibles.

Un mapa de registros Modbus indica los valores que publica un dispositivo y dónde encontrarlos. Para cada valor debería especificar la tabla de registros, la dirección, el tipo de dato, el orden de las palabras, el factor de escala y la unidad. La mayoría de las lecturas Modbus erróneas se deben a uno de estos seis campos, no a la conexión. Esta guía explica cada campo y cómo comprobar que se interpreta correctamente.

Esta guía forma parte de la serie sobre Modbus y RS-485. Las mismas reglas se aplican a Modbus RTU y Modbus TCP.

Las cuatro tablas de registros

El protocolo de aplicación Modbus define cuatro tablas, cada una con sus códigos de función:

TablaTamañoAccesoFunción de lecturaFunción de escrituraReferencia clásica
Bobinas (coils)1 bitLectura y escritura0105, 150xxxx
Entradas discretas1 bitSolo lectura02Ninguna1xxxx
Registros de entrada16 bitsSolo lectura04Ninguna3xxxx
Registros de retención (holding)16 bitsLectura y escritura0306, 164xxxx

Los contadores de energía suelen publicar las mediciones en registros de entrada o de retención, y la configuración en registros de retención. Utilice el código de función indicado en el mapa. Leer un registro de entrada con la función 03 devuelve otro valor o una excepción.

Convenciones de direccionamiento

Un mismo registro puede aparecer de varias formas en el mapa. La petición transmitida siempre contiene una dirección que empieza en cero:

Forma en el mapaSignificadoDirección en la petición
40001Referencia clásica de cinco cifras: tabla 4, registro 10
400001Referencia ampliada de seis cifras0
1 (base uno)Registro 1 de la tabla indicada en el mapa0
0 o 0x0000 (base cero)Dirección del protocolo0

Si el mapa mezcla convenciones o una herramienta de configuración espera otra, aparece un error de una posición: cada lectura procede del registro contiguo al correcto. Confirme primero la convención con un valor conocido. El conversor de direcciones Modbus traduce entre las distintas formas:

Tipos de datos

Un registro contiene 16 bits. El mapa indica cómo interpretar esos bits:

TipoRegistrosRango o precisión
uint161De 0 a 65.535
int161De −32.768 a 32.767
uint32, int322Aproximadamente ±2.100 millones con signo o de 0 a 4.290 millones sin signo
float32 (IEEE 754)2Unas 7 cifras significativas
uint64, int644Números enteros exactos de 18 cifras o más
float644Unas 15 o 16 cifras significativas

Los mismos bits producen cifras diferentes según el tipo. El registro 0xFFF6 vale 65.526 como uint16 y −10 como int16. Determine si tiene signo a partir del mapa, no del valor.

Un float32 ofrece unas siete cifras significativas. Un contador de energía almacenado como float32 en 12.345.678,9 kWh ya no puede mostrar un cambio de 0,1 kWh. Por eso muchos contadores también publican la energía como entero de 32 o 64 bits.

Orden de palabras en valores de 32 y 64 bits

La especificación Modbus define el orden de bytes dentro de un registro: primero el byte más significativo. No establece el orden de los registros que forman un valor de varias palabras, por lo que varía entre fabricantes. Denominemos el orden mediante los bytes del valor, siendo A el más significativo:

OrdenRegistros leídosDescripción habitual
ABCDPalabra alta y después palabra bajaOrden de mayor a menor peso; palabra alta primero
CDABPalabra baja y después palabra altaPalabras intercambiadas
BADCPalabra alta primero, bytes intercambiadosBytes intercambiados
DCBAPalabra baja primero, bytes intercambiadosOrden de menor a mayor peso

Un orden incorrecto produce una cifra aparentemente aleatoria, no una cifra ligeramente desviada. Un contador uint32 de 100.000 aparece como 0x0001 y después 0x86A0 en orden ABCD. Interpretadas en otro orden, las mismas palabras dan 2.258.632.705:

El decodificador de registros Modbus muestra los cuatro órdenes juntos y el conversor IEEE 754 muestra cómo se codifica un valor de coma flotante.

Escalas y unidades

Muchos contadores envían un entero acompañado de un factor de escala. El mapa puede expresarlo de tres formas:

  • Factor fijo. «Tensión, uint16, 0,1 V»: un valor bruto de 2.305 equivale a 230,5 V.
  • Potencia de diez. «Energía, int32, 10−2 kWh»: un valor bruto de 1.234.567 equivale a 12.345,67 kWh.
  • Registro de factor de escala. Los modelos SunSpec utilizados por muchos inversores publican otro registro que contiene la potencia de diez para un grupo de valores. Lea el factor en la misma petición que el valor, porque puede cambiar.

Siga este orden: decodifique el tipo, aplique la escala y, después, la unidad. Registre dónde se aplica el factor. Si el dispositivo, el gateway y la plataforma receptora aplican todos un factor, el valor se escala más de una vez. Una cifra 10 o 1.000 veces mayor de lo esperado suele indicar este problema.

En los contadores de energía, registre también el valor al que el contador vuelve a empezar y su comportamiento al alcanzar ese límite o reiniciarse. La guía de contadores de impulsos trata el mismo problema para ese tipo de contador.

Palabras de estado y campos de bits

Un registro de estado agrupa indicadores en sus 16 bits. El bit 0 es el menos significativo. El valor 0x0025 equivale a 0000 0000 0010 0101 en binario; por tanto, están activos los bits 0, 2 y 5. El mapa define qué significa cada bit y si un 1 indica actividad o buen estado.

Dos reglas ayudan a manejar estos campos con seguridad:

  • Consulte el mapa para conocer el significado. La posición de un bit no define por sí sola una alarma. Registre qué significan 0 y 1 para cada bit utilizado.
  • No escriba una palabra completa de estado o control para cambiar un solo bit. Sobrescribiría los demás bits con los últimos valores leídos por el software. Utilice el método documentado para el equipo: un registro de órdenes independiente, la función 22 de escritura con máscara si el dispositivo la admite o una secuencia de lectura, modificación y escritura aprobada por el propietario del equipo.

Valores no disponibles o no válidos

Muchos dispositivos devuelven un código fijo cuando no hay un valor disponible, por ejemplo 0xFFFF, 0x8000 o un float NaN. SunSpec define estos códigos para sus modelos; otros mapas indican los suyos. Si el mapa los especifica, trátelos antes de aplicar la escala y guarde la lectura como ausente, no como número. Un valor de −32.768 V es un código, no una medición.

Comprobar cada punto

Una respuesta sin errores demuestra la conexión, no el significado del dato. Para cada punto:

  1. Registre las palabras originales, el valor decodificado y el valor tras aplicar la escala.
  2. Compárelo con la pantalla del dispositivo o con un instrumento de referencia en el mismo momento.
  3. Repita la prueba en un segundo estado de funcionamiento: con una carga encendida y apagada, o con una consigna distinta.
  4. Compruebe un valor negativo si el punto puede tenerlo, por ejemplo, al exportar potencia.
  5. Conserve todo ello en el acta de aceptación.

La guía de puesta en marcha de Modbus RS-485 ofrece la secuencia completa, y la guía de diagnóstico de Modbus trata las respuestas de excepción y los valores aparentemente plausibles pero incorrectos.

Mapas de registros en el Directorio de dispositivos y Edge

El Directorio de dispositivos reúne mapas de registros de contadores Modbus habituales, con el tipo de dato y el orden de palabras de cada punto. Edge lee dispositivos Modbus TCP y Modbus RTU desde el Gateway. Para cada punto se configuran el código de función, la dirección de base cero, un tipo de dato de 16 o 32 bits, el orden de bytes y palabras, y un multiplicador y desplazamiento. Edge interpreta un float NaN como no disponible. Un código entero como 0xFFFF sigue siendo un número, de modo que debe tratarse con un punto calculado si así lo define el mapa. Para un contador alejado del Gateway, la interfaz Modbus ZMB lee hasta 30 registros localmente y los transmite por la red mallada Zigbee.

Preguntas frecuentes

¿Qué diferencia hay entre los registros de retención y los de entrada?

Ambos contienen valores de 16 bits. Los registros de entrada son de solo lectura y se leen con la función 04. Los registros de retención se leen con la función 03 y, cuando el dispositivo lo permite, se escriben con las funciones 06 y 16. Muchos contadores colocan las mediciones en registros de entrada y la configuración en registros de retención, pero otros lo ponen todo en registros de retención.

¿Qué significa la dirección Modbus 40001?

Es el primer registro de retención en la notación de referencia clásica, donde el 4 inicial identifica esa tabla. La petición transmitida utiliza la dirección 0 con la función 03. Algunos mapas emplean una forma de seis cifras (400001) o números simples que empiezan en 0 o 1.

¿Qué es el orden de palabras en Modbus?

Un valor de 32 bits ocupa dos registros de 16 bits. La especificación Modbus no indica cuál contiene la mitad más significativa, por lo que los fabricantes difieren. Si al decodificar aparece una cifra sin sentido, pruebe a intercambiar las dos palabras (de ABCD a CDAB).

¿Cuántos registros puedo leer en una petición?

Hasta 125 registros con la función 03 o 04, según la especificación del protocolo de aplicación Modbus. Muchos dispositivos aceptan menos y algunos devuelven una excepción si un bloque atraviesa un hueco en su mapa.