INTERPRETACIÓN DE DATOS MODBUS
¿Por qué puede funcionar la comunicación y, aun así, ser incorrecta una lectura?
Un intercambio correcto entrega el contenido de los registros, pero no demuestra cómo debe interpretarlo la aplicación. Un valor de 32 bits requiere la disposición correcta de las palabras completas, el tipo de dato, el escalado y la unidad. También requiere una actualización temporalmente coherente. Comience por el mapa de registros del dispositivo y conserve la respuesta sin procesar. Estos son conceptos generales, no una configuración de un instrumento concreto ni una garantía de instantáneas atómicas.
Bytes
Un registro estándar de 16 bits se transmite como dos bytes ordenados.
Palabras
Reconstruya las palabras completas utilizando el mapa del dispositivo y el tipo de dato correcto.
Instantes
Compruebe si ambas palabras pertenecen a una misma actualización coherente.
Confirme la notación de direcciones, la cantidad de registros, el tipo, la escala y la unidad.
Guarde una solicitud de lectura autorizada y su respuesta correspondiente.
Verifique el comportamiento de actualización y cualquier marca de tiempo de la caché de la pasarela.
Lista de comprobación para la selección y la verificación — desplegar
| Comprobación | Qué confirmar | Cómo verificarlo |
|---|---|---|
| Codificación | Orden de bytes y de palabras completas | Compare los bytes sin procesar con el mapa oficial |
| Significado | Tipo de dato, escala y unidad | Compruebe varios valores conocidos |
| Actualidad de los datos | Actualizaciones coherentes y antigüedad de la caché | Consulte la implementación y las evidencias de las marcas de tiempo |
Un instrumento muestra 25, mientras que el ordenador muestra un valor decimal inverosímil y el registro de comunicaciones indica que el intercambio se realizó correctamente. El cable o la fibra no tienen por qué estar defectuosos: los datos pueden haber llegado intactos y haberse interpretado después de forma incorrecta. Comprender el orden de palabras de Modbus no requiere una página de ecuaciones. Siga qué contiene un registro, cómo lo transporta un mensaje y cómo reconstruye el valor el software para distinguir una transmisión correcta de una lectura correcta.

Empiece por compartimentos de datos numerados
Modbus define reglas para intercambiar datos de dispositivos industriales. Al leer registros de retención o registros de entrada, imagine el área de datos del dispositivo como una fila de compartimentos numerados. Cada uno de estos registros contiene 16 bits, o dos bytes; cada byte contiene ocho bits. Se trata de unidades lógicas de datos, no de una afirmación de que el instrumento contenga una fila física de chips independientes.
El número indica al software dónde buscar, pero no explica por completo qué se almacena allí. Los mismos dos bytes podrían representar un entero sin signo o un conjunto de indicadores de estado. El mapa de registros del dispositivo explica si los datos representan temperatura, presión, energía u otra magnitud. Trate el mapa como una lista de contenido: la dirección, el tipo de dato, la unidad, el escalado y las condiciones de validez deben considerarse conjuntamente. No basta con copiar solo la dirección.
Compruebe también la notación de direcciones. Un manual puede utilizar una referencia de registro de retención como 40001, mientras que el mensaje utiliza un desplazamiento inicial; algunos programas realizan la conversión por el usuario. Compare una solicitud de ejemplo de esa misma documentación para determinar si la interfaz espera un número de referencia o un desplazamiento. Así se evita desplazar toda la lectura un compartimento. Intercambiar palabras repetidamente para compensar un error de dirección solo dificulta el diagnóstico.
¿Qué byte sale primero de un registro?
El valor de registro de ejemplo 0x1234 puede separarse en los bytes 12 y 34. La notación hexadecimal es simplemente una forma compacta de registrar datos sin procesar, no un cálculo avanzado necesario en campo. La codificación estándar de registros Modbus coloca el byte alto, 12, antes del byte bajo, 34. El software receptor utiliza ese orden para recuperar el mismo contenido de 16 bits.
Esto describe el orden de bytes en el mensaje, que no debe confundirse con el orden de los bits individuales transmitidos en serie dentro de un byte. La disposición en la memoria del ordenador es otra cuestión distinta: la organización de almacenamiento nativa de un procesador no autoriza a una aplicación a modificar la codificación de los mensajes del protocolo. Una captura muestra los bytes del mensaje; un depurador puede mostrar ya un valor convertido en memoria. Identifique el punto de observación antes de compararlos.
Dos registros introducen el orden de palabras
Un valor de 32 bits no cabe en un único registro de 16 bits y normalmente ocupa dos registros adyacentes. Además del orden de bytes dentro de cada registro, surge otra pregunta: ¿contiene el primer registro los 16 bits altos o los 16 bits bajos del valor completo? Ese es el orden de palabras que se aborda aquí. Los dispositivos y las configuraciones pueden diferir, por lo que la compatibilidad con Modbus no establece por sí sola una disposición común.
Por ejemplo, 25.0 en formato de coma flotante de precisión simple IEEE 754 tiene los cuatro bytes 41 C8 00 00. Un mapa de registros ilustrativo coloca 41C8 en el registro N y 0000 en N+1; otro invierte las dos palabras. Ambos producen 25.0 cuando se leen y reconstruyen según sus respectivos mapas. Aplicar la primera interpretación al segundo puede producir un valor completamente erróneo a pesar de que el intercambio se haya realizado correctamente. Son ejemplos didácticos, no direcciones ni ajustes de instrumentos reales.

Intercambiar palabras no es lo mismo que intercambiar bytes dentro de las palabras
Imagine dos libros, cada uno con una página superior y otra inferior que representan cuatro bytes de datos. Intercambiar las posiciones de los libros se asemeja a intercambiar dos palabras de 16 bits; intercambiar las páginas dentro de cada libro se asemeja a intercambiar bytes dentro de las palabras. Las operaciones afectan a límites diferentes. Las etiquetas del software, como big-endian, little-endian o swap, pueden referirse a distintos niveles, por lo que el nombre de una opción de menú no basta para identificar la transformación.
Registre los cuatro bytes sin procesar en el orden recibido y anote al lado el orden de reconstrucción del software. Cambie un solo ajuste de interpretación claramente identificado cada vez y compárelo con el mapa de registros oficial. Evite aplicar a ciegas el mismo intercambio a todos los puntos o considerar un único número plausible como prueba de que todo el mapa es correcto. Los valores próximos a cero pueden ocultar un error de orden, así que compruebe varios valores conocidos y distintos.
El CRC al final de una trama Modbus RTU es un código de detección de errores que ayuda a comprobar si el contenido transmitido ha cambiado. Si un dispositivo devuelve intencionadamente los datos con la palabra baja primero, su CRC puede ser válido. Que el software los interprete después como si la palabra alta estuviera primero no hará que el CRC señale ese error de interpretación. La lectura de una dirección distinta pero válida también puede superar la comprobación. Conserve evidencias separadas de lo que llegó y de cómo se interpretó.
Los mismos bytes pueden requerir interpretaciones diferentes
El orden correcto es solo uno de los requisitos. Un entero de 32 bits y un valor de coma flotante de 32 bits utilizan interpretaciones diferentes. Los formatos de coma flotante pueden representar fracciones, pero eso no significa que todo elemento de cuatro bytes deba decodificarse como un valor de coma flotante. Los enteros con signo permiten valores negativos, mientras que los enteros sin signo utilizan una interpretación diferente del intervalo de valores. Obtenga esas opciones de la documentación del dispositivo en lugar de adivinarlas por lo razonable que parezca lo mostrado en pantalla.
El escalado y las unidades también forman parte de la cadena de interpretación. Si un mapa de registros indica explícitamente que el entero sin procesar 253 significa 25.3 grados Celsius, el software debe aplicar esa convención en lugar de mostrar 253 grados Celsius. Este es un ejemplo independiente del valor de coma flotante 25.0 anterior. Compruebe también las codificaciones de valores no válidos, los indicadores de desconexión y los bits reservados. Representar gráficamente un código especial de dato no disponible como si fuera una medición normal puede crear una perturbación del proceso convincente, pero falsa.

El orden correcto también requiere un instante de muestreo coherente
Cuando se leen dos registros en solicitudes separadas, el dispositivo puede actualizarse entre las lecturas. Considere un contador ilustrativo sin signo de 32 bits que cambia de 0000 FFFF a 0001 0000. Leer la palabra alta anterior 0000 y después la palabra baja nueva 0000 produce 0000 0000. Ese resultado no es ni el valor anterior completo ni el valor nuevo completo. El problema es la coherencia del muestreo.
Leer dos registros consecutivos en una sola solicitud suele reducir el intervalo introducido por las solicitudes separadas, pero no demuestra que todos los dispositivos proporcionen una instantánea atómica. Consulte la documentación de implementación para comprobar si existen mecanismos de captura y retención, comportamientos de actualización, números de secuencia o marcas de tiempo que identifiquen una actualización coherente. Si una pasarela almacena datos en caché, registre también la hora de actualización de la caché. Un mensaje recién recibido no contiene necesariamente un valor recién medido, y un sondeo más rápido no puede sustituir a un mecanismo de coherencia.
Asigne responsabilidades a lo largo de la ruta de comunicación
El sitio web de FCTELE presenta el módem óptico industrial FCP-D8G Modbus para carril DIN, destinado al transporte punto a punto de comunicaciones serie Modbus por fibra. Esto ilustra una distinción útil: el enlace óptico transporta los datos de comunicación, mientras que el mapa de registros del instrumento define su significado. El uso de un módem óptico Modbus no implica el reconocimiento automático del orden de palabras de coma flotante de todos los instrumentos, la conversión de unidades ni la obtención de instantáneas de medición sincronizadas. Verifique las capacidades reales en la documentación de la versión del producto correspondiente.
Comience la verificación con un dispositivo y un punto autorizado de solo lectura. Guarde la solicitud y la respuesta de la misma transacción, confirme el destino, el código de función, la convención de dirección inicial y la cantidad de registros; después compruebe los registros sin procesar, el orden de palabras, el tipo de dato, el escalado, las unidades y la hora de actualización. Una comprobación de integridad satisfactoria es un paso, no una prueba de que la interpretación para la aplicación sea correcta. Explique y documente esta cadena de lectura completa antes de ampliar el trabajo a otros puntos. El registro servirá entonces de apoyo para realizar comprobaciones sistemáticas cuando cambie un instrumento o un paquete de software.
Si un punto se lee correctamente con una herramienta local, pero de forma incorrecta a través de un enlace óptico, compare las respuestas sin procesar del mismo dispositivo con la misma configuración y después revise la selección de canal, los ajustes serie y los registros de actividad. Unos bytes sin procesar idénticos con valores mostrados diferentes apuntan a los ajustes del decodificador; unos bytes diferentes o unas transacciones que no se corresponden requieren una investigación adicional a lo largo de la ruta de comunicación. Este orden reduce las sustituciones innecesarias de hardware sin descartar fallos reales de transmisión como si fueran problemas de orden de palabras.
Referencias y alcance
Organización Modbus: registros y formatos de datos; Protocolo de aplicación V1.1b3, sección 4.2: codificación de bytes; Schneider Electric: mapeo de registros y ejemplos de orden de palabras; Schneider Electric: lectura de valores de coma flotante con palabras intercambiadas; Información del módem óptico FCTELE FCP-D8G Modbus (en chino). Los ajustes de terceros no establecen las capacidades de los productos FCTELE. Las ilustraciones y los ejemplos son explicaciones creadas de forma independiente, no resultados medidos ni instrucciones de cableado.
Traducido del artículo técnico en chino: Leer el artículo original en chino.
Preguntas frecuentes
¿Por qué un intercambio Modbus correcto puede seguir mostrando un valor erróneo?
La transmisión y la interpretación son cuestiones distintas. Compruebe el destino, la convención de direcciones, la cantidad de registros, el orden de palabras, el tipo de dato, el escalado, la unidad y la hora de actualización. Un CRC válido no demuestra que la interpretación para la aplicación sea correcta.
¿Intercambiar dos registros es lo mismo que intercambiar bytes?
No. Una operación cambia las posiciones de palabras completas de 16 bits; la otra puede cambiar las posiciones de los bytes dentro de una palabra. Compruebe el mapa del dispositivo y la reconstrucción real, en lugar de basarse únicamente en la etiqueta de una opción de menú.
¿Una sola solicitud de dos registros garantiza un único instante de muestreo?
No. Una lectura en bloque puede reducir el intervalo introducido por las solicitudes separadas, pero las instantáneas atómicas, la captura y retención y el comportamiento de actualización dependen de la implementación. Los datos almacenados en la caché de una pasarela también requieren comprobar su hora de actualización.
Lecturas adicionales
Varios PLC y un concentrador Modbus · Entramado de bytes y muestreo UART


