[Lazarus-es] Comunicación serial

Maxi maximiliano.duarte en gmail.com
Mar Jul 16 15:20:38 CEST 2013


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.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130716/434cff60/attachment-0002.html>


More information about the Lazarus-es mailing list