Glosario de Automatización • Entero de 32 bits invertido Modbus

¿Qué es un orden de palabras invertido en un entero de 32 bits Modbus?

Ingeniería Merobix • • 8 min de lectura

Los contadores, las horas de operación y los totalizadores no caben en un solo registro Modbus, así que se llevan como enteros de 32 bits que abarcan dos registros consecutivos, y el orden en que esas dos mitades se unen no está estandarizado entre fabricantes. Equivoque el orden de palabras y el total sale como basura o, para un valor con signo, como un número negativo inverosímil, aunque la comunicación esté perfectamente sana. Esta página se enfoca específicamente en enteros de 32 bits en lugar de flotantes: qué significan palabra alta y palabra baja, las cuatro permutaciones de decodificación que surgen, y cómo elegir la correcta usando un valor de referencia conocido.

Volver al glosario

Entero de 32 bits invertido Modbus en una línea: Un entero de 32 bits Modbus es un valor de contador o totalizador demasiado grande para un registro, así que se parte en dos registros como una palabra alta y una palabra baja, y no hay una regla universal sobre cuál va primero. Si el driver une las palabras en el orden equivocado, o invierte los bytes dentro de ellas, el entero decodificado sale mal, muchas veces un total enorme o negativo en lugar de un error obvio. Como el orden de bytes y el orden de palabras son independientes, hay cuatro arreglos posibles, y usted selecciona el correcto decodificando un valor de referencia conocido hasta que coincida.

Por qué un entero abarca dos registros

Un solo registro Modbus contiene dieciséis bits, que solo pueden contar hasta 65535 como valor sin signo. Eso es demasiado pequeño para los números que muchos dispositivos necesitan reportar: un totalizador que acumula flujo, un contador de pulsos o eventos, un medidor de horas de operación de equipo, o un total de energía, todos excederán dieciséis bits rápidamente. Para llevarlos, el dispositivo usa un entero de 32 bits, que abarca dos registros consecutivos y puede representar valores hasta los miles de millones. Esto deja a un contador seguir subiendo por mucho tiempo antes de volver a cero, que es exactamente lo que los totalizadores y los medidores de horas de operación necesitan.

Cuando un valor se parte de esta forma, un registro lleva la mitad más significativa y el otro lleva la mitad menos significativa, por lo general descritas como la palabra alta y la palabra baja. La palabra alta contiene los valores de posición mayores y la palabra baja los menores, y el verdadero número de 32 bits se reconstruye combinándolas en el orden correcto. Este es el mismo partido usado para los flotantes de 32 bits, pero la interpretación difiere: un entero se decodifica como un número entero en lugar de como un valor de punto flotante, así que el modo de falla luce distinto cuando el orden está mal.

El detalle es que Modbus nunca fijó una regla universal sobre cuál registro lleva la palabra alta y cuál lleva la palabra baja. Algunos dispositivos colocan la palabra alta en el primer registro y la palabra baja en el segundo, y otros hacen lo inverso, y ambos son comunes. Esto significa que un driver tiene que ser instruido, por dispositivo, sobre cómo ese dispositivo particular ordena sus palabras, porque no hay forma de inferirlo del protocolo solo. Esa libertad es la raíz del problema del entero invertido: un par de registros transmitido de forma perfecta aun así puede decodificar al número equivocado si el driver supone el orden equivocado.

Las cuatro permutaciones de decodificación

Dos elecciones independientes determinan cómo se ensamblan los cuatro bytes de un entero de 32 bits, y juntas producen cuatro arreglos posibles. La primera elección es el orden de palabras: cuál de los dos registros es la palabra alta y cuál la palabra baja. La segunda elección es el orden de bytes: dentro de cada registro de dieciséis bits, cuál de sus dos bytes es el más significativo. Como estas dos preguntas son independientes, combinar los dos órdenes de palabras con los dos órdenes de bytes da cuatro permutaciones distintas, y solo una de ellas reconstruye el número que el dispositivo en realidad pretendía. Las páginas de concepto sobre inversión de palabras y orden de bytes describen estos dos ejes; para enteros el punto es que las cuatro combinaciones pueden ocurrir en distintos equipos.

El síntoma de la permutación equivocada depende de la clase de entero. Para un valor sin signo de 32 bits, un orden de palabras invertido típicamente produce un número salvajemente demasiado grande o demasiado pequeño comparado con el total real, porque las mitades significativa e insignificante intercambiaron lugares. Para un valor con signo de 32 bits el efecto puede ser más engañoso: un orden equivocado puede voltear el valor a un número negativo grande, así que un medidor de horas de operación o un totalizador que solo debería subir de pronto reporta un total negativo, que es una fuerte pista de una falla de orden de palabras o bytes en lugar de una lectura genuina. Las inversiones de bytes dentro de las palabras causan corrupción similar a una escala más fina.

Lo que hace a los enteros invertidos particularmente peligrosos comparados con los flotantes invertidos es que la respuesta equivocada muchas veces luce como un número plausible en lugar de un NaN obvio. Un flotante decodificado con el orden de palabras equivocado con frecuencia sale como no-un-número, que es fácil de detectar, pero un entero siempre decodifica a algún número entero, así que un totalizador mal ordenado puede reportar en silencio un valor acumulado que luce creíble pero es equivocado. Por eso los totalizadores y los contadores exigen cuidado extra: un error silencioso de orden de palabras corrompe datos acumulados que pueden alimentar el seguimiento de volumen o la conciliación, y no se anunciará como lo hace un flotante roto.

Elegir el orden correcto y confiar en los totales en el SCADA

La forma confiable de elegir entre las cuatro permutaciones es decodificar un valor de referencia conocido en lugar de adivinar. Lea el mismo total en la propia pantalla del dispositivo, o use un punto donde el contador esté en un valor que usted pueda verificar, y pruebe cada uno de los cuatro arreglos en el driver hasta que el número decodificado coincida. Como solo una permutación reconstruye el valor verdadero, coincidir con un número conocido confirma el orden de forma inequívoca, y una vez que lo ha encontrado para un dispositivo puede aplicarlo a cada entero de 32 bits que ese dispositivo reporta. Esto es mucho más confiable que suponer un orden y esperar que los números luzcan bien.

También vale la pena revisar el valor en un momento en que el contador está cambiando, porque una coincidencia estática puede ser ocasionalmente una casualidad. Observar el total incrementarse en la cantidad que usted espera, en lugar de solo coincidir una vez, prueba que tanto el orden de palabras como el orden de bytes son correctos y que la palabra baja está pasando a la palabra alta de forma adecuada. Para un totalizador esta es la prueba real: el número debería subir de forma suave y en incrementos sensatos, no saltar de manera errática ni correr hacia atrás, y una permutación que produce incrementos suaves y correctos es la correcta.

En el SCADA y el monitoreo en la nube, acertar con el orden de palabras del entero es un asunto de integridad de datos con consecuencias duraderas, porque los totalizadores y las horas de operación alimentan cosas de las que la gente depende: volúmenes acumulados, totales de energía, intervalos de mantenimiento, y a veces la conciliación entre sitios. Una plataforma SCADA en la nube como Merobix almacenará fielmente lo que sea que el driver decodifique, así que un totalizador invertido en silencio corrompe los totales historizados desde el momento en que se configura, y como el valor equivocado luce plausible puede pasar sin detectarse por mucho tiempo. La salvaguarda es validar cada tag de entero de 32 bits contra una referencia conocida en la puesta en marcha y verificar de forma sensata que los totales solo suban, para que los datos acumulados que reporta un sitio remoto de verdad se puedan confiar.

Preguntas frecuentes

¿Por qué mi total de entero de 32 bits Modbus está mal o negativo?

Un entero de 32 bits abarca dos registros como una palabra alta y una palabra baja, y Modbus no fija cuál registro lleva cuál, así que si el driver los une en el orden equivocado el número decodificado sale mal. Para un valor sin signo eso por lo general significa un total salvajemente demasiado grande, y para un valor con signo puede voltearse a un número negativo grande, que es por qué un totalizador que solo debería subir de pronto lee negativo. Pruebe el orden de palabras correcto contra un valor de referencia conocido.

¿De cuántas formas se puede decodificar un entero de 32 bits Modbus?

Cuatro. Dos elecciones independientes producen las permutaciones: el orden de palabras, es decir cuál registro es la palabra alta, y el orden de bytes dentro de cada registro. Combinar los dos órdenes de palabras con los dos órdenes de bytes da cuatro arreglos, y solo uno reconstruye el número que el dispositivo pretendía. Usted encuentra el correcto decodificando un valor que pueda verificar de forma independiente hasta que coincida.

¿Por qué un entero invertido es más peligroso que un flotante invertido?

Un flotante decodificado con el orden de palabras equivocado muchas veces sale como no-un-número, que es obvio y fácil de atrapar. Un entero siempre decodifica a algún número entero, así que un totalizador mal ordenado puede reportar en silencio un valor acumulado creíble pero equivocado que nadie nota. Como los totalizadores y las horas de operación alimentan el seguimiento de volumen y la conciliación, ese error silencioso corrompe datos acumulados, así que los tags de entero merecen validación extra contra una referencia conocida.

Más en Protocolos industriales
Orden de bytes (endianness) en Modbus  •  Flotante de 32 bits en dos registros Modbus  •  ADU vs PDU en Modbus  •  Borrar una excepcion Modbus de direccion de datos ilegal  •  Corregir errores CRC de Modbus RTU  •  Todo en Protocolos industriales →
Capacitación SCADA gratuita para operadores
Merobix University - 70 lecciones en video y 261 preguntas de examen, del primer inicio de sesión a los reportes de cumplimiento (contenido en inglés). Sin llamada de ventas.
Comenzar gratis →