Cómo intercambiar registros por valores de punto flotante de Modbus

Actualizado el Apr 3, 2023

Ambiente

Software

  • LabVIEW Full
  • LabVIEW Datalogging and Supervisory Control Module

Mi aplicación LabVIEW Modbus Slave requiere que los bytes menos significativos de un solo número de punto flotante se coloquen en el primer registro. Actualmente, los bytes más significativos se colocan en el primer registro, ¿cómo puedo intercambiar los bytes para mi aplicación?

Dado que Modbus utiliza registros de 16 bits para mantener valores, los números de punto flotante de 32 bits deben dividirse entre dos registros. Modbus no declara un estándar sobre cómo representar números de punto flotante, por lo que es posible que un dispositivo maneje los números de punto flotante de manera diferente a LabVIEW. El siguiente artículo describe las diferentes formas en que los números de punto flotante se pueden representar con dos registros: Cómo se codifican los datos reales (punto flotante) y de 32 bits en los mensajes de Modbus RTU (en inglés).

La figura 1 a continuación muestra cómo se definen los números de punto flotante utilizando el estándar IEEE 754. Los bits menos significativos se almacenan en el primer registro.


 
Figura 1: Los valores menos significativos primero.
De esta forma, si intenta almacenar el número 123456.00 en el registro F400001, los bytes "A B" se almacenan en el primer registro, F40001. Los bytes "C D" se almacenan en el segundo registro, F400002. Con LabVIEW 2011 y versiones anteriores, NO es así como LabVIEW representa los números de punto flotante en los registros Modbus cuando se usa un Modbus Slave I/O Server. Si su dispositivo espera los bits menos significativos primero, sus datos aparecerán como el valor decimal en la figura 2.


Figura 2: Los valores más significativos primero
La Figura 2 muestra cómo LabVIEW coloca los bytes más significativos, "C D", en el primer registro. Luego los bytes menos significativos, "A B", se colocan en el segundo registro. Esta forma generalmente se llama  "word swapped".

Si su dispositivo sigue la forma de la Figura 1, puede realizar un "word swap". en el único valor de punto flotante en LabVIEW antes de escribir el valor en el dispositivo. La imagen de abajo muestra cómo revertir el orden, y los pasos explican cómo configurarlo.


Figura 3: valor de punto flotante de intercambio de palabras
  1. Coloque una función Type Cast en el diagrama de bloques. Conecte una constante de matriz numérica en la entrada de type. Cablee un solo número de punto flotante en la entrada x .
  2. Haga clic con el botón derecho en Numeric Constant en la matriz y seleccione Representation»I16.
  3. Coloque la función de matriz inversa 1D conecte el primer tipo de conversión a la entrada del array.
  4. Coloque una segunda función Type Cast. Conecte un solo número de punto flotante en la entrada de type. Conecte la salida de la matriz invertida a la entrada x .
  5. El valor de punto flotante único intercambiado ahora se puede escribir en el registro Modbus. Este ejemplo utiliza una variable compartida vinculada a un registro Modbus.