[Lazarus-es] Comunicación serial

Antonio Évora aevorar en gmail.com
Dom Jul 14 14:09:17 CEST 2013


El 12/07/13 14:41, Maxi escribió:
> El día 12 de julio de 2013 09:19, Antonio Évora <aevorar en gmail.com> escribió:
>> Estimados compañeros,
>> Estoy depurando una aplicación que recibe información de un GPS usando el
>> protocolo NMEA y configurado para que envie solamente tramas GGA y GSA. La
>> conexion con el pc es mediante usb (usando un conversor COM-USB pues el
>> puerto original de GPS es COM, esta conversión es necesaria pues el pc no
>> tiene puerto COM) y es reconocido como un COM virtual. En mi aplicación uso
>> synaser (ultima version disponible en sus repositorios) para la comunicación
>> llamando al método Recvstring de la clase TBlockSerial llamada desde un
>> timer (probado con distintos intervalos de tiempo) y me encuentro con los
>> siguientes problemas:
>>
>> * Problema de inicialización:
>>      Si arranco la aplicación no recibe ningún dato del GPS, para que empiece
>> a recibir datos tengo que:
>>          - Cerrar la aplicación
>>          - Abrir hyperterminal, conectarme al GPS (este empieza a recibir
>> tramas) y cerrar hyperterminal
>>          - Abrir la aplicación y empiezo a recibir tramas
>>      Con esto intuyo que hyperterminal hace algún tipo de inicialización del
>> dispositivo que no hace TBlockSerial
>>
>> * Problema en la recepción de tramas:
>>      Hay tramas que llegan solapadas unas con otras, por ejemplo:
>> $GPGSA,M,3,11,03,16,06,18,22,08,19,01,,,,3.14,1.72,2$GPGGA,194255.90,xxxx.xxxxxxx,N,yyyyy.yyyyyyy,W,4,09,2.09,144.4792,M,49.7596,M,0.9,0000*68
>>
>> * Inversión del orden de las tramas:
>>      Supuestamente la recepción de tramas debería ser:
>>          TramaGGA
>>          TramaGSA
>>                  ...
>>          TramaGGA
>>          TramaGSA
>>                  ...
>>          TramaGGA
>>          TramaGSA
>> Sin embargo durante la recepción se ven invertidas, esto no se si puede ser
>> debido problema anterior.
>>
>> El problema debe de estar en la implementación del TBlockSerial o en el
>> conversor COM-USB. Yo personalmente me inclino por el conversor (estoy
>> trabajando a 115200 baudios) que no da a bastos.
>>
>> Un cordial saludo y gracias de antemano.
>>
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
> No es el conversor, de seguro.
> Primero, quien enia datos? el gps? lo consultas o solo transmite?
> Si lo consultas si es valido el timer, pero ten en cuanta de
> inhabilitar el timer para no solapar llamadas y datos hasta que
> termine de recibir.
> Si el gps transmite solo a intervalos, no uses el timer, deja que
> synaser reciba datos cuando llegan realmente y debes controlar que se
> cumpla el bloque esperado sino lo descartas, aveces pasa que se
> pierden bits y hasta que no llega otro paquete no se completa el
> bloque y recibes informacion falsa.
> Verifica que tipo de handshake usa el gps, es el unico caso en que el
> adaptador pueda fallar porque no siempre implementan algunos de estos
> DTR,RTS,CTS,DSR.
>
> Cuenta un poco mas
> --
> El que pregunta aprende, y el que contesta aprende a responder.
>
> No a la obsolecencia programada:
> http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml
>
> Linux User #495070
> http://domonetic.com/blog
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Gracias Maxi por contestar,
El GPS trasmite a intervalos, 10 veces por segundo. Bueno, mejor te 
explico mejor lo que pretendo hacer:
Tengo un GPS el cual debe darme la posición, la cual debo sincronizar 
con la lectura de un termómetro (conectado también mediante COM), para 
asignar temperatura a una posición concreta.
Otro problema con el que me encuentro es el de poder sincronizar estas 
lecturas, ya que el termómetro es capaz de darme una medida por segundo 
y el GPS 10.
Supongo que para hacer lo que me cuentas debo de usar el evento OnStatus 
(lo acabo de ver). ¿Puedes instruirme con un ejemplo sencillo?

Un cordial saludo y gracias de antemano.




More information about the Lazarus-es mailing list