GPS Maus - Daten einlesen...

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Mr.Question
Beiträge: 8
Registriert: So 17. Jun 2012, 10:21

GPS Maus - Daten einlesen...

Beitrag von Mr.Question »

Hallo,

ich würde gerne die Daten, die von einer GPS-Maus via USB and meinen PC übermittelt werden in einem Lazarus-Programm analysieren.

Das Analysieren wird denke ich nicht das große Problem. Das Problem ist: Wie bekomme ich den übermittelten String (NMEA0183 v3.01 protocol)
in mein Programm rein. Ich hab ein wenig gegoogelt und was zu einem (virtuellen) Com Port gefunden.

Leider hab ich immer noch keine Ahnung, was zu tun ist.

Brauche ich weitere Units, die ich einbinden muss um aus den USB-Port zugreifen zu können? Gibt es die schon im Lazarus Package irgendwo oder muss ich das extern downloaden, wenn ja: wo?

Wie geht's dann weiter, wie gehe ich vor?

Vielen Dank für hoffentlich hilfreiche Infos!

Dennis

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPS Maus - Daten einlesen...

Beitrag von Socke »

Mr.Question hat geschrieben:ich würde gerne die Daten, die von einer GPS-Maus via USB and meinen PC übermittelt werden in einem Lazarus-Programm analysieren.

Welches Produkt verwendest du und auf welchen Betriebssystemen soll dein Programm laufen?

Mr.Question hat geschrieben:Das Analysieren wird denke ich nicht das große Problem. Das Problem ist: Wie bekomme ich den übermittelten String (NMEA0183 v3.01 protocol)
in mein Programm rein. Ich hab ein wenig gegoogelt und was zu einem (virtuellen) Com Port gefunden.

Unter Windows erstellt in der Regel ein mitgelieferter Treiber einen virtuellen COM-Port, sodass du mit dem ganzen USB-Kram nichts mehr zu tun hast. Auf die COM-Ports kannst du über die Dateinamen COM1 bis COM9 (bei mehr Ports musst du mal nach den Dateinamen googeln) wie eine Dateizugreifen. Eventuell solltest du dir auch Synapse ansehen, da es dort eine plattformunabhängige Möglichkeit gibt auf COM-Ports zuzugreifen (SynaSer).

Mr.Question hat geschrieben:Gibt es die schon im Lazarus Package irgendwo oder muss ich das extern downloaden, wenn ja: wo?

Lazarus bringt kein Package zum Parsen von NMEA-Strings mit. Eventuell gibt es Klassen irgendwo im Internet -- einfach mal suchen (eventuell findest du die auch unter dem Stichwort "Delphi").
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mr.Question
Beiträge: 8
Registriert: So 17. Jun 2012, 10:21

Re: GPS Maus - Daten einlesen...

Beitrag von Mr.Question »

Socke hat geschrieben:Welches Produkt verwendest du und auf welchen Betriebssystemen soll dein Programm laufen?


Bis jetzt hab ich noch keins gekauft. Das Programm soll anschließend ausschließlich auf Windows 7 laufen

Socke hat geschrieben:Auf die COM-Ports kannst du über die Dateinamen COM1 bis COM9 (bei mehr Ports musst du mal nach den Dateinamen googeln) wie eine Dateizugreifen.


Wie genau realisiere ich diesen Zugriff (Hast du vielleicht nen Code-Beispiel)?
Oder läuft der Zugriff, wie beim einlesen einer Text datei? Wie schaut die "Get" Methode aus (falls man hier davon sprechen kann), mit der ich jeweils den aktuellen NMEA String abrufe.

Mr.Question hat geschrieben:Lazarus bringt kein Package zum Parsen von NMEA-Strings mit.


Das Parsen würd ich glatt selbst übernehmen wollen. Denke das bekomm ich hin.

Gruß

Dennis

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPS Maus - Daten einlesen...

Beitrag von Socke »

Mr.Question hat geschrieben:
Socke hat geschrieben:Auf die COM-Ports kannst du über die Dateinamen COM1 bis COM9 (bei mehr Ports musst du mal nach den Dateinamen googeln) wie eine Dateizugreifen.


Wie genau realisiere ich diesen Zugriff (Hast du vielleicht nen Code-Beispiel)?
Oder läuft der Zugriff, wie beim einlesen einer Text datei? Wie schaut die "Get" Methode aus (falls man hier davon sprechen kann), mit der ich jeweils den aktuellen NMEA String abrufe.

Das geht wie bei einer Textdatei. Bei Seriellen Schnittstellen kannst du aber zusätzlich noch die Verbindungsparameter (Baud-Rate usw.) einstellen. Wie das geht: einfach nach "COM Port PASCAL OR Delphi" googeln.
Codebeispiele habe ich gerade keine zur Hand, und wenn wären das auch nur nicht funktionsfähige Experimente mit meinem Navi.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: GPS Maus - Daten einlesen...

Beitrag von mschnell »

Socke hat geschrieben:Das geht wie bei einer Textdatei. Bei Seriellen Schnittstellen kannst du aber zusätzlich noch die Verbindungsparameter (Baud-Rate usw.) einstellen.

Ob die Einstellung der Baudrate etc bei "virtuellen COM-Port Geräten" relevant ist und was bei Umstellung der Baudrate passiert, hängt vom Treiber und vom Device selber ab. Es müsste in der Intercace-Doku beschrieben sein.

Ich mache das bei meinen USB-Devices meist so: eine bestimmte Baudrate ("1234") einstellen zur Konfiguration des Gerätes, jede andere Baudrate: Daten-Kommunikation mit dem Gerät.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: GPS Maus - Daten einlesen...

Beitrag von mschnell »

Mr.Question hat geschrieben:Ich hab ein wenig gegoogelt und was zu einem (virtuellen) Com Port gefunden.


Es ist eine recht übliche Methode, zu einem an USB anzuschließendes Device einen "virtuellen Com-Port-Treiber" mitzuliefern. Der muss natürlich für Dein Betriebssystem passend vom Device-Hersteller mitgeliefert werden. Der Treiber muss kein Executable sein, es reicht auch eine Text-Datei, die einem Standard-Treiber (z.B. dem Standard "virtueller Com-Port über USB" Treiber) sagt, dass er dieses Gerät (gekennzeichnet durch Vendor-ID und Device-ID) betreuen soll.

Wenn Du das instaslliert hast, kannst Du durch öffnen der "Datei" "COMn" (Windows) oder "TTYxxx" (Linux) mit dem Device sprechen.

-Michael

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: GPS Maus - Daten einlesen...

Beitrag von MAC »

Eventuell kann dir die Unit synaser (bzw. Synapse) bei Virtual Com Ports helfen.
Damit hab ich es gepackt eine BT-verbindung mit einem NXT über Lazarus aufzubauen...

http://www.ararat.cz/synapse/doku.php/download

Code: Alles auswählen

Signatur := nil;

Mr.Question
Beiträge: 8
Registriert: So 17. Jun 2012, 10:21

Re: GPS Maus - Daten einlesen...

Beitrag von Mr.Question »

EDIT: Problem gelöst - Oh man Leute sorry...dämlicher Fehler beim parsen...Ich hab die Kommas zählen lassen und vergessen nach dem Schleifendurchlauf die Zahl der kommas auf null zurück zu setzen ...*facepalm*


Erstmal allen vielen Dank für die Beiträge.

Ich habe mich für den Anfang mal für den allersimpelsten Weg entschieden. Das funktioniert auch erstmal sehr gut. Es sei denn man hat vor fortlaufend Daten einzulesen. :D

Folgendes funktioniert:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
AssignFile(F, 'COM3');
Reset(F);
end;
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
CloseFile(F);
end;
 
...
 
while *beliebige Abbruchbedingung* do
begin
    Readln(F, S);
    Memo1.Lines.add(S);
end


ABER:Der Wert für S ändert sich nicht, also es werden beim ReadLn keine "aktuelleren" Werte abgeholt und somit hat das Memo-Feld irgendwann 100 identische Einträge.

UND: Das hier funktioniert nicht, denn: 'RunError 59584' :

Code: Alles auswählen

while *beliebige Abbruchbedingung* do
begin
   AssignFile(F, 'COM3');
   Reset(F);
   Readln(F, S);
   CloseFile(F);
   Memo1.Lines.add(S);
end


Kann mir jemand sagen, wieso? :(

Viele Grüße ;)

Antworten