Ir al contenido


Foto

Enviar comando AT a un gps atravez de upd con indy

indy gps delphi at

  • Por favor identifícate para responder
1 respuesta en este tema

#1 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 16 abril 2018 - 10:46

Hola amigos , en este hilo ,  logramos descifrar leer los datos que mandaba un GPS.


delphi
  1. procedure TForm3.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
  2. var
  3. i, j: Integer;
  4. texto, gprmc, campos, checksum: String;
  5. atComm:string;
  6. begin
  7.  
  8. atComm := 'AT$EVTEST';/// comando AT
  9.  
  10. ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ToBytes( atComm));
  11.  
  12.  
  13. // Comprobamos la cabecera (recuerda que los bytes estan invertidos en los integer)
  14. if (Length(AData) > 4) and (PInteger(@AData[0])^ = $00020400) then
  15. begin
  16.  
  17. texto:= Copy(PAnsiChar(@AData[4]), 1, Length(AData) - 4);
  18.  
  19. Memo1.Lines.Add(texto);
  20.  
  21. i:= Pos('$GPRMC', texto);
  22. if (i > 0) then
  23. begin
  24. j:= Pos(#13#10, texto, i);
  25. if (j > 0) then
  26. begin
  27. // Tenemos la cadena que nos interesa
  28. gprmc:= Copy(texto, i, j - i);
  29.  
  30. i:= Pos('*', gprmc);
  31. if i > 0 then
  32. begin
  33. // Separamos la suma de comprobacion del resto de la cadena
  34. campos:= Copy(gprmc, 2, i-2);
  35. checksum:= Copy(gprmc, i+1, 2);
  36.  
  37. // Comprobamos la suma de comprobacion
  38. if calcChecksum(campos) = StrToInt('$'+checksum) then
  39. begin
  40. // Separamos los campos
  41. with TStringList.Create do
  42. try
  43. StrictDelimiter:= TRUE;
  44. Delimiter:= ',';
  45. DelimitedText:= campos;
  46.  
  47. // Por ejemplo la latitud seria
  48. //Memo1.Lines.Add(Strings[3]);
  49.  
  50. finally
  51. Free;
  52. end;
  53. end;
  54. end;
  55. end;
  56. end;
  57. end;
  58.  
  59. end;

sin respuesta,

 

despues probe esto:


delphi
  1. procedure TForm3.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
  2. var
  3. i, j: Integer;
  4. texto, gprmc, campos, checksum: String;
  5. atComm:string;
  6. begin
  7.  
  8. atComm := 'AT&V';
  9.  
  10. ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ToBytes( atComm));
  11.  
  12. texto:= Copy(PAnsiChar(@AData[4]), 1, Length(AData) - 4);
  13.  
  14. Memo1.Lines.Add(texto);
  15.  
  16. end;

obtengo respuesta , pero ademas de la transmision, muchos espacios en blanco...

 

que puedo hacer para descifrar todo el contenido del "AData: TIdBytes" a texto?

 

Saludos!

 

Update:

 

He logrado hacer esto:


delphi
  1. function HexToAsc(strData:string): string;
  2. var
  3. sresult:string;
  4. sfinal:string;
  5. hexc:cardinal;
  6. i:integer;
  7. Car: string;
  8. begin
  9. i:=1;
  10. while i<=length(strData) do
  11. begin
  12. Car := copy(strData,i,2);
  13. if Car <> '00' then
  14. begin
  15. hexc := strtoint('$' + Car);
  16. sresult := inttostr(hexc);
  17. sresult := chr(strtoint(sresult));
  18. sfinal := sfinal + sresult;
  19. end;
  20.  
  21. i:=i+2;
  22. end;
  23.  
  24. result := sfinal
  25. end;
  26.  
  27. procedure TForm3.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
  28. var
  29. i, j: Integer;
  30. texto, gprmc, campos, checksum: String;
  31. atComm:string;
  32. begin
  33.  
  34. atComm := '<0><1><4><0>AT+CGSN<13>';
  35.  
  36. ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ToBytes( atComm));
  37.  
  38. texto := ToHex(AData);
  39.  
  40. texto := HexToAsc(texto);
  41.  
  42. Memo1.Lines.Add(texto);
  43.  
  44. end;

resultado:


delphi
  1. 2 5000 $GPRMC,212950.00,A,1529.161133,N,08759.134766,W,0.0,0.0,160418,1.6,W,A*3F
  2. 538605
  3. <0 <----- respuesta???

parece que necesito pulir la funcion HexToAsc, en fin. me hechan un mano?


  • 0

#2 Bertifox

Bertifox

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes
  • LocationLa Serena-Chile

Escrito 30 agosto 2019 - 02:46

Hola look, una consulta para la comunicación solo utilizas IdUDPServer?


  • 0





Etiquetado también con una o más de estas palabras: indy, gps, delphi, at

IP.Board spam blocked by CleanTalk.