<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">El 15/07/13 21:54, Maxi escribió:<br>
</div>
<blockquote
cite="mid:CAOL=nArBdq52mECneAhPruU-roGukwbt_CtOG-qyDpN1hdfoGg@mail.gmail.com"
type="cite">
<pre wrap="">El día 14 de julio de 2013 09:09, Antonio Évora <a class="moz-txt-link-rfc2396E" href="mailto:aevorar@gmail.com"><aevorar@gmail.com></a> escribió:
</pre>
<blockquote type="cite">
<pre wrap="">El 12/07/13 14:41, Maxi escribió:
</pre>
<blockquote type="cite">
<pre wrap="">El día 12 de julio de 2013 09:19, Antonio Évora <a class="moz-txt-link-rfc2396E" href="mailto:aevorar@gmail.com"><aevorar@gmail.com></a>
escribió:
</pre>
<blockquote type="cite">
<pre wrap="">
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
<a class="moz-txt-link-abbreviated" href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a>
</pre>
</blockquote>
<pre wrap="">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:
<a class="moz-txt-link-freetext" href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a>
Linux User #495070
<a class="moz-txt-link-freetext" href="http://domonetic.com/blog">http://domonetic.com/blog</a>
_______________________________________________
Lazarus-es mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a>
</pre>
</blockquote>
<pre wrap="">
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
<a class="moz-txt-link-abbreviated" href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a>
</pre>
</blockquote>
<pre wrap="">
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:
<a class="moz-txt-link-freetext" href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a>
Linux User #495070
<a class="moz-txt-link-freetext" href="http://domonetic.com/blog">http://domonetic.com/blog</a>
_______________________________________________
Lazarus-es mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a>
</pre>
</blockquote>
Primeramente gracias de nuevo.<br>
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:<br>
<address>* Problema de inicialización: </address>
<address> Si arranco la aplicación no recibe ningún dato del GPS,
para que
empiece
a recibir datos tengo que: </address>
<address> - Cerrar la aplicación </address>
<address> - Abrir hyperterminal, conectarme al GPS (este
empieza a recibir
tramas) y cerrar hyperterminal </address>
<address> - Abrir la aplicación y empiezo a recibir tramas </address>
<address>Con esto intuyo que hyperterminal hace algún tipo de
inicialización
del
dispositivo que no hace TBlockSerial</address>
<br>
Es decir sin arrancar previamente Hyperterminal no hay tramas que
valga :-(<br>
<br>
Inicializo los puertos COM con el siguiente codigo:<br>
FCOM.Connect(FPuerto);<br>
ConfiguraPuerto();<br>
Inicializa();<br>
<br>
Siendo FCOM del tipo TBlockSerial y:<br>
<br>
procedure TMamboSensorCOMBase.ConfiguraPuerto;<br>
var<br>
ParidadText: char;<br>
begin<br>
if not FConnected then<br>
begin<br>
exit;<br>
end;<br>
<br>
case FParidad of<br>
ptEven:<br>
begin<br>
ParidadText:='E';<br>
end;<br>
ptOdd:<br>
begin<br>
ParidadText:='O';<br>
end;<br>
ptMarked:<br>
begin<br>
ParidadText:='M';<br>
end;<br>
ptSpaced:<br>
begin<br>
ParidadText:='S';<br>
end;<br>
else<br>
ParidadText:='N';<br>
end;<br>
<br>
FCOM.Config(FBaudios,FBitsDatos,ParidadText,FBitsParada,FControlFlujoSoftware,FControlFlujoHardware);<br>
end; <br>
<br>
procedure TMamboSensorCOMBase.Inicializa;<br>
var<br>
n: integer;<br>
begin<br>
if not FConnected then<br>
begin<br>
exit;<br>
end;<br>
<br>
for n:=0 to FScriptInicializacion.Count-1 do<br>
begin<br>
if FCOM.CanWrite(2000) then<br>
begin<br>
FCOM.SendString(FScriptInicializacion[n]);<br>
end;<br>
end;<br>
end; <br>
<br>
Gracias de antemano.<br>
</body>
</html>