[Lazarus-es] Comunicación serial

Antonio Evora aevorar en gmail.com
Mie Jul 17 07:56:29 CEST 2013


Hola Máxi,
Según los ejemplos es así. Primero conectas y luego configuras.

¿Alguna idea?

Saludos.

El 16/07/2013, a las 15:20, Maxi <maximiliano.duarte en gmail.com> escribió:

> 
> El 16/07/2013 09:28, "Antonio Évora" <aevorar en gmail.com> escribió:
> >
> > El 15/07/13 21:54, Maxi escribió:
> >>
> >> El día 14 de julio de 2013 09:09, Antonio Évora <aevorar en gmail.com> escribió:
> >>>
> >>> 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.
> >>>
> >>> _______________________________________________
> >>> Lazarus-es mailing list
> >>> Lazarus-es en lists.lazarus.freepascal.org
> >>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
> >>
> >> 10 veces por segundo me parece mucho, pero deberias llevar 2 registros
> >> 1 con los datos del gps y otro con los del termometro, puedes tomar el
> >> de menor tiempo como base o el del gps y repetir el valor de la
> >> lectura del termometro.
> >> Dependiendo que prioridad tienes.
> >> Yo leeria el termometro, despues habilito la lectura del gps, hago una
> >> sola lectura y deshabilito. anoto esos datos y espero la proxima
> >> lectura del termometro. a los fines practicos una lectura por segundo
> >> en mas que suficiente incluso para ir marcando en un mapa, a menos que
> >> se trate de algo muy preciso.
> >>
> >> --
> >> 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
> >
> > Primeramente gracias de nuevo.
> > Ya he conseguido capturar y casar las diferentes lecturas. Lo que si sigo teniendo es el problema de inicialización, copio y pego de mi primer post:
> >
> > * 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 
> > Es decir sin arrancar previamente Hyperterminal no hay tramas que valga :-(
> >
> > Inicializo los puertos COM con el siguiente codigo:
> > FCOM.Connect(FPuerto);
> > ConfiguraPuerto();
> > Inicializa();
> >
> > Siendo FCOM del tipo TBlockSerial y:
> >
> > procedure TMamboSensorCOMBase.ConfiguraPuerto;
> > var
> >   ParidadText: char;
> > begin
> >   if not FConnected then
> >   begin
> >     exit;
> >   end;
> >
> >   case FParidad of
> >     ptEven:
> >     begin
> >       ParidadText:='E';
> >     end;
> >     ptOdd:
> >     begin
> >       ParidadText:='O';
> >     end;
> >     ptMarked:
> >     begin
> >       ParidadText:='M';
> >     end;
> >     ptSpaced:
> >     begin
> >       ParidadText:='S';
> >     end;
> >   else
> >     ParidadText:='N';
> >   end;
> >
> >   FCOM.Config(FBaudios,FBitsDatos,ParidadText,FBitsParada,FControlFlujoSoftware,FControlFlujoHardware);
> > end; 
> >
> > procedure TMamboSensorCOMBase.Inicializa;
> > var
> >   n: integer;
> > begin
> >   if not FConnected then
> >   begin
> >     exit;
> >   end;
> >
> >   for n:=0 to FScriptInicializacion.Count-1 do
> >   begin
> >     if FCOM.CanWrite(2000) then
> >     begin
> >       FCOM.SendString(FScriptInicializacion[n]);
> >     end;
> >   end;
> > end; 
> >
> > Gracias de antemano.
> >
> > _______________________________________________
> > Lazarus-es mailing list
> > Lazarus-es en lists.lazarus.freepascal.org
> > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
> >
> Revisa los ejemplos de synaser, me parece que estas conectando y después configuras el puerto y es al revez.
> 
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130717/dbee5b6c/attachment-0002.html>


More information about the Lazarus-es mailing list