Un flotante de 32 bits en dos registros Modbus
Un registro Modbus guarda dieciséis bits, pero una tasa de flujo o un totalizador de punto flotante necesita treinta y dos, así que el valor tiene que abarcar dos registros leídos juntos como un par. Ese emparejamiento es donde una medición limpia tan a menudo se convierte en basura aparente: lea los dos registros en el orden equivocado, o con los bytes intercambiados, y los mismos bits decodifican a un número terriblemente equivocado. Esta guía explica cómo un computador de flujo empaca un flotante IEEE-754 en dos registros consecutivos, por qué la lectura parece rota hasta que el emparejamiento es correcto, y cómo verificarlo en un sondeo en vivo.
Flotante de 32 bits en dos registros Modbus en una línea: Un flotante IEEE-754 de 32 bits no cabe en un solo registro Modbus de 16 bits, así que un dispositivo lo coloca a través de dos registros consecutivos que deben leerse juntos y reensamblarse en un número. Los 32 bits llevan un signo, un exponente y una fracción que solo significan el valor previsto cuando los dos registros y sus bytes se combinan en el orden que el dispositivo usó. Como Modbus no estandariza ese orden de palabras, el mismo par de registros puede decodificar a una tasa de flujo correcta o a un sinsentido según cómo el maestro los empareje.
Por qué un flotante toma dos registros
El formato IEEE-754 de precisión simple representa un número real en 32 bits: un bit de signo, ocho bits de exponente y veintitrés bits de fracción, que juntos codifican un amplio rango de magnitudes con precisión fraccionaria. Una tasa de flujo de gas de, digamos, unos cuantos miles de pies cúbicos estándar por hora, o un totalizador contando volumen a lo largo del tiempo, necesita exactamente este tipo de representación porque lleva una parte decimal y abarca órdenes de magnitud que un entero simple de 16 bits no puede expresar sin una escala incómoda.
Un registro Modbus, sin embargo, es de solo dieciséis bits de ancho, la mitad de lo que un flotante de precisión simple requiere. Así que un dispositivo que quiere exponer un flotante no tiene más opción que repartir esos 32 bits a través de dos registros adyacentes y esperar que el maestro lea ambos y los pegue de vuelta. Por esto los computadores de flujo y los analizadores tan a menudo listan una sola medición como ocupando dos números de registro: el valor es un número conceptualmente pero dos registros físicamente, y el maestro debe traer el par y reconstruir el flotante a partir de los 32 bits.
Leer solo uno de los dos registros le da la mitad del número, lo cual es sin sentido por sí solo: un registro contiene parte del exponente y la fracción, el otro el resto, y ninguna mitad decodifica a algo útil sola. El maestro por lo tanto tiene que saber que un valor dado es un flotante de dos registros, leer ambos registros en una sola operación o como un par adyacente, e interpretar los 32 bits combinados como IEEE-754. Tratar cualquiera de los registros como un entero independiente produce un número sin relación con la medición real.
Por qué la lectura parece basura
El problema es que Modbus define el orden de bytes dentro de un solo registro pero nunca estandarizó el orden de los dos registros que forman un valor de 32 bits, así que los fabricantes eligieron distinto. Un dispositivo coloca el registro que contiene la mitad más significativa primero, otro coloca la mitad menos significativa primero, y algunos además intercambian los dos bytes dentro de cada registro. El flotante solo decodifica correctamente cuando el maestro reensambla los cuatro bytes en el orden exacto en que el dispositivo los escribió, y como hay varios ordenamientos plausibles, adivinar mal es común.
Cuando el orden está mal, la falla es dramática en vez de sutil. La codificación de punto flotante concentra un significado enorme en los bits del exponente, así que barajar cuáles bits caen en la posición del exponente puede convertir una tasa de flujo modesta en un número astronómicamente grande, una fracción diminuta, un valor negativo, o un resultado no numérico. Por esto un flotante mal emparejado se lee como basura obvia - valores como diez a la trigésima potencia o flujos terriblemente negativos - en vez de un casi acierto plausible. La buena noticia es que esta obviedad hace el problema fácil de detectar: una magnitud sin sentido es una señal fuerte de que el orden de palabras o de bytes, no la dirección del registro, está mal.
La variable que lo corrige es el orden de palabras y el orden de bytes, el mismo conjunto de combinaciones que gobierna cualquier valor de varios registros. Un flotante puede arreglarse con la palabra alta primero o la palabra baja primero, y con los bytes en orden normal o intercambiado dentro de cada palabra, dando un pequeño conjunto de combinaciones a probar. Solo una de ellas produce el número correcto, y el maestro debe configurarse para coincidir con la elección del dispositivo. Este es un paso distinto de acertar la dirección del registro: la dirección puede ser perfecta mientras el orden de emparejamiento está mal, que es justo por qué un flotante correctamente ubicado aun puede leerse como basura.
Verificar el emparejamiento en un sondeo en vivo
La forma más rápida de confirmar el emparejamiento es comparar un sondeo en vivo contra un valor que ya conoce. Los computadores de flujo típicamente muestran la misma tasa de flujo o totalizador en una pantalla local o en el software del fabricante, así que sondee el valor de dos registros, decodifíquelo con un orden de palabras elegido, y revise si coincide con la lectura mostrada. Si coincide, el emparejamiento es correcto; si regresa como una magnitud absurda, cambie el orden de palabras o de bytes y lea de nuevo. Con solo un puñado de combinaciones, ciclarlas contra un valor conocido encuentra rápido la correcta.
Una segunda confirmación es ver el valor moverse. Las tasas de flujo y los totalizadores reales cambian con el tiempo de formas esperadas - un totalizador solo cuenta hacia arriba, una tasa de flujo sigue las condiciones de operación - así que un flotante correctamente decodificado se comportará de forma sensata en una tendencia mientras que uno mal emparejado salta entre extremos sin sentido. Observar el valor a lo largo de una sesión corta de sondeo, en vez de confiar en una sola muestra, distingue una decodificación genuinamente correcta de un emparejamiento equivocado que resultó producir un número no obviamente loco en una lectura.
En un SCADA en la nube esta verificación es parte de la puesta en marcha de cada tag analógico. Cuando Merobix sondea un computador de flujo por Modbus, un tag de flotante de 32 bits se configura con su desplazamiento base de dos registros y un ajuste de orden de palabras y de bytes, y el integrador confirma el valor decodificado contra la propia pantalla del computador de flujo antes de confiar en la tendencia. Acertar el emparejamiento una vez, y verificarlo contra una lectura conocida, es lo que convierte un chorro de basura en una tendencia confiable de flujo o totalizador, y hacerlo en la puesta en marcha evita la situación mucho peor de un flotante que lee mal en silencio mucho después de que nadie mira la pantalla.
Preguntas frecuentes
¿Por qué un flotante de 32 bits necesita dos registros Modbus?
Un flotante IEEE-754 de precisión simple es de 32 bits de ancho - un bit de signo, ocho bits de exponente y veintitrés bits de fracción - pero un registro Modbus guarda solo dieciséis bits. Así que un dispositivo reparte los 32 bits a través de dos registros consecutivos, y el maestro debe leer ambos y reensamblarlos en un número. Leer solo un registro da la mitad del valor, que decodifica a nada significativo por sí sola.
¿Por qué mi flotante Modbus lee un número enorme o negativo?
Casi siempre porque los dos registros, o los bytes dentro de ellos, se combinan en el orden equivocado. Modbus no estandariza el orden de los dos registros de un valor de 32 bits, así que si el maestro los empareja de forma distinta a como el dispositivo los escribió, los bits caen en las posiciones equivocadas, y como los bits del exponente pesan tanto, el resultado suele ser un valor astronómicamente grande, diminuto o negativo en vez de un casi acierto. Ajustar el orden de palabras y de bytes lo corrige.
¿Cómo verifico que un flotante de 32 bits se decodifica correctamente en un sondeo en vivo?
Compare el valor decodificado contra una referencia conocida, como la pantalla local del computador de flujo o el software del fabricante que muestra la misma tasa de flujo o totalizador. Sondee el valor de dos registros, pruebe un ajuste de orden de palabras y de bytes, y revise si el resultado coincide; si es sin sentido, cambie el orden y lea de nuevo. Observe también el valor a lo largo del tiempo: un flotante correcto se comporta de forma sensata, mientras que uno mal emparejado salta entre extremos sin sentido.
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.