¿Qué es el intercambio de palabras y de bytes en valores flotantes?
Un valor de punto flotante de 32 bits tiene que viajar a través de dos registros de 16 bits, y no hay acuerdo universal sobre cuál mitad va primero ni cómo se ordenan los bytes dentro de cada mitad. Eso deja cuatro arreglos posibles de los mismos cuatro bytes, y solo uno de ellos se decodifica al número que el dispositivo quiso enviar. Esta guía se enfoca en el ángulo práctico de solución de problemas: la diferencia entre un intercambio de palabras y un intercambio de bytes, por qué el equivocado produce basura o NaN, y cómo diagnosticar el arreglo correcto a partir de un valor de referencia conocido.
Intercambio de palabras y de bytes en una línea: Un intercambio de palabras invierte el orden de las dos palabras de 16 bits que forman un flotante de 32 bits, mientras que un intercambio de bytes invierte los dos bytes dentro de cada palabra. Como un flotante abarca dos registros sin un orden universal, sus cuatro bytes pueden llegar en una de cuatro combinaciones, y aplicar el intercambio de palabras o de bytes equivocado los reensambla en un número erróneo o en NaN en lugar del valor pretendido.
Intercambio de palabras frente a intercambio de bytes
Un flotante de 32 bits son cuatro bytes, llevados como dos palabras de 16 bits a través de dos registros consecutivos. Dos preguntas independientes determinan cómo se alinean esos bytes. La primera es el orden de palabras: ¿llega primero o segundo el registro que guarda la mitad de orden alto? Invertir eso es un intercambio de palabras, y es la más común de las dos variaciones porque tantos controladores y computadoras de flujo envían primero la palabra baja. La segunda pregunta es el orden de bytes dentro de cada palabra: dentro de un solo registro, ¿viene primero el byte alto o el byte bajo? Invertir eso es un intercambio de bytes.
Como los dos intercambios son independientes, se multiplican en cuatro arreglos posibles de los mismos cuatro bytes, normalmente escritos con una taquigrafía como ABCD, CDAB, BADC y DCBA, donde cada letra es un byte en el orden en que llega. ABCD es el arreglo recto sin intercambio. CDAB es un intercambio de palabras puro, que mantiene intactos los bytes de cada registro pero invierte los dos registros. BADC es un intercambio de bytes puro, que mantiene el orden de registros pero voltea los bytes dentro de cada uno. DCBA son ambos intercambios a la vez, una inversión completa. Un flotante que se decodifica mal está casi siempre a una de estas permutaciones de ser correcto.
La razón por la que las cuatro existen es que el orden dentro de un registro está estandarizado en Modbus mientras que el orden de los registros para un valor de múltiples registros no lo está, así que los proveedores eligieron distinto. Eso deja la pregunta del intercambio de palabras genuinamente abierta por dispositivo, y algunos dispositivos agregan un intercambio de bytes encima. La consecuencia práctica es que el intercambio de palabras y el intercambio de bytes son dos ajustes separados que cada uno puede necesitar alternar, y acertar un flotante significa elegir la combinación de los dos que coincide con cómo un dispositivo dado transmite en realidad.
Por qué el intercambio equivocado produce basura o NaN
Un flotante no es un entero simple; sus cuatro bytes se dividen en un signo, un exponente y una fracción, y los bits del exponente acarrean una influencia enorme sobre el resultado. Cuando los bytes se reensamblan en el orden equivocado, los bits que debían ser la fracción pueden caer donde pertenece el exponente y viceversa. Como el exponente escala el valor por potencias de dos, un exponente mal colocado puede convertir un número modesto en uno astronómicamente grande o desvanecientemente pequeño, y por eso un flotante mal intercambiado tan a menudo se lee como una magnitud descabelladamente equivocada en lugar de un valor solo un poco desviado.
El mismo mecanismo explica el NaN. Ciertos patrones de bits en el campo del exponente están reservados para significar no-es-un-número, así que si un intercambio equivocado coloca por casualidad bits que forman ese patrón reservado en el exponente, el valor decodificado es NaN aunque el número original fuera perfectamente ordinario. Una lectura que aparece como NaN es, por lo tanto, una fuerte pista de un problema de orden de bytes en lugar de una falla de sensor, porque un sensor sano que envía un valor real nunca debería producir un NaN genuino.
Esto es lo que hace fáciles de reconocer los errores de orden de flotante una vez que conoce la firma. Un bit de estado empaquetado en un solo registro se decodifica bien sin importar nada, así que los puntos digitales se ven sanos y lo arrullan a uno pensando que el enlace está bueno. Los valores flotantes, sin embargo, salen como números enormes, números diminutos o NaN, todos agrupados en los puntos de dos registros. Cuando solo los flotantes y los enteros largos están rotos y los valores de un solo registro están bien, el diagnóstico casi nunca es el cableado de campo ni los sensores; es el intercambio de palabras o de bytes en los valores de múltiples registros.
Diagnosticar el orden correcto a partir de un valor conocido
La manera confiable de encontrar el arreglo correcto es forzar un valor que ya conoce y ver cuál combinación de intercambio lo reproduce. Pídale al dispositivo reportar algo predecible - un valor de ingeniería fijo, un totalizador que pueda leer de su pantalla local, o un registro de prueba documentado - luego pruebe los cuatro órdenes hasta que el número decodificado coincida con el conocido. La documentación del proveedor normalmente indica el orden, pero los manuales a veces son ambiguos y las revisiones de firmware pueden diferir, así que una confirmación en vivo contra una lectura que pueda verificar de forma independiente es la comprobación de confianza.
Recorrer los cuatro es sistemático en lugar de adivinanza. Comience con el arreglo recto ABCD; si ese está mal, pruebe el intercambio de palabras puro, que es el culpable más común, luego el intercambio de bytes puro, y luego la inversión completa. Como solo hay cuatro, encontrará la coincidencia rápido, y una vez que lo haga puede confiar en que toda la familia de dispositivos usa ese. La disciplina es registrar cuál combinación necesita cada perfil de dispositivo, ya que dos dispositivos en la misma línea serial pueden usar legítimamente órdenes distintos y usted no quiere redescubrir esto cada vez.
En un SCADA de nube como Merobix, el arreglo vive enteramente en la configuración del punto, no en el cableado de campo. Cada punto de múltiples registros se mapea con un tipo de dato explícito y el orden de palabras y de bytes que el dispositivo usa, así que un controlador que envía flotantes con intercambio de palabras se normaliza al valor correcto en la plataforma sin tocar el dispositivo. Fijar esto una vez por perfil de dispositivo significa que cada flotante de esa familia aterriza correctamente y sigue aterrizando correctamente a medida que se agregan más sitios idénticos, lo que más importa para los totalizadores que alimentan medición y contabilidad, donde un valor mal decodificado no es un fallo cosmético sino un número equivocado en un reporte.
Preguntas frecuentes
¿Cuál es la diferencia entre un intercambio de palabras y un intercambio de bytes?
Un intercambio de palabras invierte el orden de los dos registros de 16 bits que forman un valor de 32 bits, así que la palabra de orden bajo llega donde se esperaba la palabra de orden alto. Un intercambio de bytes invierte los dos bytes dentro de cada registro individual. Son independientes, así que un flotante puede necesitar un intercambio de palabras, un intercambio de bytes, ambos o ninguno, que es lo que produce los cuatro arreglos posibles.
¿Por qué mi flotante se lee como NaN?
Los bytes de un flotante incluyen un campo de exponente, y ciertos patrones de bits del exponente están reservados para significar no-es-un-número. Cuando un intercambio de palabras o de bytes equivocado reensambla los cuatro bytes en el orden erróneo, puede colocar bits que forman ese patrón reservado en el exponente, así que el valor se decodifica como NaN aunque el número original fuera ordinario. Un NaN en un punto de dos registros es una fuerte señal de un problema de orden de bytes, no de una falla de sensor.
¿Cómo encuentro el orden de bytes correcto para un dispositivo?
Fuerce un valor que pueda verificar de forma independiente, como un totalizador legible de la pantalla local del dispositivo o un valor de prueba documentado, luego pruebe los cuatro arreglos hasta que el número decodificado coincida. El intercambio de palabras puro es el arreglo más común, así que pruébelo temprano. Registre la combinación que funciona para ese perfil de dispositivo, ya que distintos dispositivos pueden usar legítimamente órdenes distintos y usted quiere configurarlo una vez en lugar de redescubrirlo.
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.