[Lazarus-es] Comunicación serial

Maxi maximiliano.duarte en gmail.com
Vie Jul 12 14:41:06 CEST 2013


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




More information about the Lazarus-es mailing list