Hola:
Empelando el componente Async Professional (Apro) trato de obtener los datos que proporciona una la estación meteorológica WST 7000C.
La estructura del mensaje transmitido por la estación la detallo al final del post.
He pensado emplear el componente ApdDataPacket para leer como un paquete completo, creo haberlo configurado correctamente y en su evento OnPacket pretendo leer el contenido.
En este evento se recibe como argumentos:
Data: pointer
Size: integer
Mi problema está como no puede ser de otra forma en mis escasos conocimientos. Mi pregunta es ¿cómo obtengo de
Data cada uno de los bytes que componen el mensaje y los transformo en el su valor adecuado?
Código Delphi
[-]
Byte nº 1
El primer byte transmitido indica que la sonda está empezando a enviar un nuevo mensaje.
El valor de este byte es fijo en el 85 decimal.
Byte nº 2
Informa sobre la "longitud del mensaje" que falta por recibir, su valor depende del tipo de sonda que envía el mensaje.
El valor en mi caso es 18 decimal.
Byte nº 3
Este es el byte del sistema automático interno de control de validación de datos.
El valor de cada bit del byte depende de la validez de la medición de cada uno delos parámetros meteorológicos.
El valor lógico "1" indica que la medición es válida.
El valor lógico "0" indica que la medición no es válida.
Para una función no puesta en marcha, el bit que representa se coloca al valor lógico "1".
Tabla de autotest
Bit número Función Observada
O LSB Velocicidad del viento
1 Dirección del viento
2 Temperatura del aire
3 Presión barométrica
4 Humedad relativa
5 Punto de rocio
6 Ninguna - Puesto a 1
7 MSB Ángulo medido por la brújula.
Bytes nº 4 a xx “Valores de los parámetros meteorológicos”
Cada parámetro meteorológico se transmite con un formato de 2 bytes.
12 bits se utilizan para representar los números enteros y 4 bits para las fracciones del número entero. La estructura de los bytes se representa a continuación.
El primer byte transmitido representa 8 de los 12 bits usados para representar el entero.
El segundo byte transmitido utiliza los primeros 4 bits para representar el resto de los enteros y los cuatro últimos bits para representar las fracciones.
El bit menos significativo (LSB) tiene un valor de 1/16º de la unidad de tamaño medida.
Los números negativos se expresan usando el valor 2.
High byte Low byte
----------------------------------------- ---------------------------
MSB> 15 | 14 | 14 | 13 | 12 | 11 | 10 | 9 | 8 || 7 | 6 | 5 | 4 | 3 | 2 | 1 < LSB
Cálculo del valor de dos bytes = ((Byte alto * 256) + (Byte bajo))/16
Una velocidad del viento de 22,75 m /s se codifica 016C Hex
Una dirección del viento de 22,00 grados se codifica 0160 Hex
Una temperatura de -22,75 °C se codifica FE94 Hex
Una presión de 1013 hPa se codifica 3F50 Hex
Bytes nº 16 & 17
Tipo de sonda Función medida Metodología de decodificación
WST 7000 C Ángulo entre el norte Según el párrafo 4.3.4
y el acimut 0°
Bytes Nº 18 y 19 Entrada analógica externa
Los bytes 18 y 19 se usan para transmitir la representación en 12 bits de una tensión analógica en el rango de 0 a +10 VCC.
El byte 18 transmite los 4 bits más significativos. El byte 19 transmite los 8 bits menos significativos.
La resolución es 10 V / 212 es decir, 2,4414 mV.
Último byte del mensaje, control de validez de los datos
El último byte transmitido es el de la "Checksum". Su valor se calcula tomando el "OR Exclusivo" de todos los bytes de mensaje transmitidos, excepto el último.
El mensaje recibido es válido si esta "Checksum" es idéntica al último byte transmitido.
Guía completa: http://juanpedro.l.googlepages.com/Manual.pdf
Muchas gracias de antemano
Un saludo
Juan P.