![]() |
daten von gps-maus über Com-Port auslesen
Hi, bin ein relativer Delphi Noob, habe mir in Delphi ne kleine Oberfläche für meinen PC im Auto erstellt und möchte jetzt Daten von meiner GPS-Maus auslesenund z.B. die Geschwindigkeit etc. auslesen... bin jetzt hier seit etlichen stunden am rumsuchen und hab es inzwischen geschafft die daten übers hyperterminal auszulesen und hab auch schon eine beschreibung zum entsprechenden protokoll gefunden.
Hyperterminal Auszug: Zitat:
ich hoffe es gibt da eine einfache möglichkeit, die auch ein delphi noob wie ich versteht! Schon mal danke! mfg btbe PS: Wenn es was hilft der GPS Empfänger ist per usb angeschlossen und läuft uber den "usb-to-serial" treiber an COM5! |
Re: daten von gps-maus über Com-Port auslesen
Naja, du kannst ja die Daten in eine datei speichern, nach Kommata suchen und dann jeden Kommawert in eine Variable speichern.
Da ganze eben in einem Timer mit Interval 1000. Aus deiner fragestellung denke ich zu erkennen, dass du weißt, wie man an die Daten vom Com-Port rankommt. :-) Sollte dies nicht der Fall sein, hilft bestimmt eine DP-Suche nach Comport oder Com-Port ;-) PS: Bist du schon begrüßt worden? wenn nicht, dann: Herzlich willkommen :dp: :mrgreen: |
Re: daten von gps-maus über Com-Port auslesen
Für die serielle Kommunikation würde ich
![]() Für den Rest solltest Du dir eine vernünftige Struktur überlegen: Z.B. eine Komponete TGPSEventer entwickeln. Verbindbar mit AsyncPro-Komponente und bei Empfang eine mit lesbareren Parametern versehenen Event auslösen. In Formular wird dann nur die Geschwindigkeitsberechnung durchgeführt. |
Re: daten von gps-maus über Com-Port auslesen
@ultimator ne, keine ahnung wie ich an die daten rankomme, das ist eigentliche problem! die daten dannin variablen schreiben würd ich wahrscheinlich mit viel rumprobieren hinbekommen, was ich mir erhoffe ist ne anleitung in der form
"Du brauchst diese komponente oder package oder was auch immer, das installierst du so udn so und den com port öffnest du so die daten kannst du dann so in ein label, datei, etc. schreiben....) ich weiß eben nicht was ich dafür brauche oder wie ich es anwende, mein delphi wissen beschränkt sich so ziehmlich auf das was ich in der schule im info lk gemacht habe (funktionsgraphen zeichnen etc... thnx |
Re: daten von gps-maus über Com-Port auslesen
Kurze unrelevante Frage... Wie / Wo hast du deinen Rechner im Auto eingebaut? Und was für eine GPS-Maus hast du? Interessiert mich ernsthaft ! :)
|
Re: daten von gps-maus über Com-Port auslesen
Hallo,
noch jemand der ein Computer im Auto hat :-) Ich habe ebenfalls ein CarPuter mit 7" TFT TouchScreen. Ich hatte ebenfalls mal vor für meine Programmoberfläche eine GPS funktion einzubauen. Leider habe ich aus Zeitgründen schon lange nicht mehr daran weitergemacht. Unten findest du meinen bislang geschriebenen Quelltext. Der ist noch sehr unsauber geschrieben, und die Interprtation funktioniert auch nicht. Aber zum einlesen der daten vom COM Port reicht es. Ist denke ich ein guter Anfang. Wenn du weiter kommst, wäre es schön wenn du dein Quellcode hier postest.
Delphi-Quellcode:
Mfg
//################################################################
//###################### COM Port Functionen ##################### //################################################################ function TForm1.opencom(comport : string): boolean; begin hport:= CreateFile(PChar(comport),GENERIC_READ + GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0); GetCommState(hport,dcb); dcb.BaudRate := strtoint(form2.Baudrate.text); // Bautrate dcb.ByteSize := strtoint(form2.Data.text); // 8 Bits je Byte dcb.Parity := strtoint(form2.Parity.Text); // kein Paritäts Bit NOPARITY dcb.StopBits := strtoint(form2.Stopbit.Text); // ein Stopp Bit ONESTOPBIT dcb.wReserved:= 0; // In Buffer // Out Buffer if SetupComm(hPort, 800, 8) then begin result := true; //Statusbar.Panels.Text := ('erfolgreich initialisiert...'); end else begin result := false; //Statusbar.Panels.Text :=('konnte NICHT initialisiert!'); end; SetCommState(hport,dcb); end; function inport(var Str: string): Integer; var BytesTrans, nRead: DWORD; Buffer : String; i, j : Integer; temp, temp2 : string; begin Str := ''; SetLength(Buffer,1); ReadFile(hport,PChar(Buffer)^, 1, nRead, nil); while nRead > 0 do begin temp := temp + PChar(Buffer); ReadFile(hport,PChar(Buffer)^, 1, nRead, nil); end; //Remove the end token. BytesTrans := Length(temp); SetLength(str,BytesTrans-2); for i:=0 to BytesTrans-2 do begin str[i] := temp[i]; end; Result := BytesTrans; end; procedure closecom; var result : LongBool; begin CloseHandle(hport); end; //########################################################### //################ NMEA Interpreter ######################### //########################################################### procedure TForm1.Timer1Timer(Sender: TObject); Var received_data: String; i : integer; temp : String; begin inport(received_data); memo1.Text := memo1.Text + CRLF + received_data; { temp := ''; for i := 1 to length(received_data) do begin temp := temp + received_data[i]; //if copy(temp,i,1) = CRLF then //begin memo1.Lines.Add(temp); // temp := ''; //end; end; for j := 0 to length(temp2) do begin if copy(temp[j],1,1) = CRLF then str := temp2; end; memo1.Lines.Add(received_data);} end; Salomon |
Re: daten von gps-maus über Com-Port auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
@hOnkibOnk: PC: 800Mhz Duron
256MB DDR Ram 2GB CompactFlash Karte als bootplatte (wegen stößen, etc.) externe Platte 80GB (wird angeschlossen falls benötigt für mp3s etc.) Haicom HI-202E GPS-Maus GeForce4 MX440 am tv out 7" TFT zu weihnachten kommt n touchscreen rein deshalb progge ich auch die oberfläche (windows ist nich grad Fingerfreundlich!) PC is im Kofferraum in nem selbstgebauten Gehäuse Geplant ist langfristig noch ne relaissteuerung über den pc für endstufe, etc. und eine verbindung zwischen pc und boardcomputer via obd-II Schnittstelle.... aber das is noch zukunftsmusik.... Wenn ihr bilder von euren systemen habt, schickt mir doch mal ein paar so als anregungen (webmaster@btbe-design.de), wer interesse hat dem kann ich auch bilder schicken! Ich hab mal ein Bild von der Software angehängt, soweit wie sie jetzt ist. Wer interesse hat dem kann ich sobald ich mit der gpsintegration ferig bin das programm schicken! So aber um mal zum thema zurückzukommen: Hab jetzt mal async pro installiert und habe es geschafft mithilfe eines codes den ich hier im Forum gefunden hab die einzelnen chars auszugeben. Hier der Code:
Delphi-Quellcode:
Jetzt müssen diese in arrays geschrieben werden (pro zeile 1 array) z.B. GPGGA[1] = 173722.000, GPGGA[2] = 5004.8731, GPGGA[3] = N,...... Gebraucht werden die zeilen GPGGA, GPGSA und GPRMC und dann kommt das ganze wieder neu vom gps und nun soll wieder von vorne angefangen werden und die alten werte überschrieben werden...
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OoMisc, AdPort, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; ComPort: TApdComPort; Label1: TLabel; Button1: TButton; procedure ComPortTriggerAvail(CP: TObject; Count: Word); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Data: String; I: Integer; implementation {$R *.dfm} procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word); begin { OnTriggerAvail; Read the data } for I:= 0 to Count -1 do Data := ComPort.GetChar; Label1.Caption := Label1.Caption + Data; end; end. Hat da jemand ne saubere Lösung? |
Re: daten von gps-maus über Com-Port auslesen
SOWAS nenne ich sexy ;)
|
Re: daten von gps-maus über Com-Port auslesen
hm.... hab hier mal n ansatz, um die einzelnen elemente einer zeile in das entsprechende array zu schreiben...
Delphi-Quellcode:
komme aber nicht weiter, da wenn ich ein array ausgeben will, kommt diese Fehlermeldung:
procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
begin { OnTriggerAvail; Read the data } for I:= 0 to Count -1 do Data := ComPort.GetChar; Label2.Caption := Label2.Caption + Data; if Data = '*' then begin Memo1.Text := Label2.Caption; Label2.Caption := ''; if pos('GPGGA', Label2.Caption) > 0 then begin while x < length(Label2.Caption) do begin if Label2.Caption[x] = ',' then begin y := y + 1; x := x + 1; end else begin GPGGA[y] := Label2.Caption[x]; end; end; end; Label1.Caption := Label1.Caption + Data; end; end; Zitat:
thnx btbe |
Re: daten von gps-maus über Com-Port auslesen
Hi,
Delphi-Quellcode:
'' enthält niemals 'GPGGA' ;) Das erklärt zwar nich unbedingt die AV, is mir nur beim Überfliegen so aufgefallen ;)
Label2.Caption := '';
if pos('GPGGA', Label2.Caption) > 0 then edit: setz ma nen Breakpoint (F5) und prüf, wo/wann die AV auftritt (F7,F8 ) Gruß Stephan :dance: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz