![]() |
Comunicaciones RS232 - Tratamiento de la información.
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?
Muchas gracias de antemano Un saludo Juan P. |
Por lo que comentas los paquetes de datos me parece que estan representados de esta forma:
Cita:
El CheckSum <BCC> es un simple XOR (OR exclusivo) desde el primer caracter <STX> hasta el caracter anterior al <ETX>. Si pudieras mostrar una cadena ejemplo podriamos ayudarte con mas certeza. Salud OS. PD, el link que pones no se puede acceder. |
Ahora no puedo poner los datos porque no tengo el equipo conmigo, mañana pondré lo que me sale, y también el código que empleo.
El link está dirigido a un pdf y efectivamente no funciona, no sé. Si copias y pegas la dirección en el navegador sí accedes al pdf. |
Por lo que entiendo tenes tu evento OnPacket donde recibis los datos, ahi copias el contenido a un buffer interno o lo procesas directamente (preferible lo primero)
esto es una idea de lo que tenes que hacer. falta definir tambien tu funcion WordToFloat que es la que te transforma tu formato de dato. Espero que te ayudea empezar |
Hola:
En la línea que indica Crandel he hecho el procedimiento que listo más abajo. La salida del procedimiento también la listo a continuación. He hecho algunas modificaciones: En :
Se producía un error al compilar Cita:
También modifiqué la formula para obtener los datos.
Creo que los datos que obtengo son correctos, tengo que contrastarlos con los de otra estación meteorológica para verlo. Agradecería que me dijerais si encontráis algún error. Si todo fuera correcto, me quedan dos preguntas: 1.- Determinar el resultado de la autoverificación: A la luz de los resultado que obtengo para el 2 byte, cualquier valor diferente a 255 indicaría un error. Pero quería saber cómo puedo determinar cuál es en base a la tabla de auto-test. 2.- Control de validación "Checksum". ¿Cómo implemento en pascal la verificación del paquete?
Cita:
Un Saludo Juan Pedro. |
parece que vas avanzado bien ;)
Cita:
La conversion correcta seria:
Cita:
Cita:
|
Hola:
Ya he resuelto los problemas, pero surgen otros: En relación a la verificación del autotest, la sentencia que propones: genera un error al compilar: Cita:
Luego se puede comprobar los valores de FAutoTest. El problema que tengo ahora es con los valores negativos de las magnitudes, en concreto con la temperatura: Cita:
Nuevamente muchas gracias por el tiempo que me dedicáis. Un Saludo Juan Pedro. |
Perdon por pasarte los codigos sin verificar. Es que no tengo Delphi en el trabajo.
Por un lado la comprobacion seria:
y la funcion de conversion correcta es:
|
| La franja horaria es GMT +2. Ahora son las 00:47:24. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi