AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

COM Port Ausgabe teilen

Ein Thema von einballimwasser · begonnen am 30. Dez 2010 · letzter Beitrag vom 31. Dez 2010
Antwort Antwort
einballimwasser

Registriert seit: 30. Dez 2010
3 Beiträge
 
#1

COM Port Ausgabe teilen

  Alt 30. Dez 2010, 23:33
Hallo,

ich versuche momentan ein Gerät mit dem PC zu verbinden. Das funktioniert über die serielle Schnittstelle und das gar nicht mal so schlecht. Ich nutze die TComport Library bzw Routinen um die serielle Schnittstelle auszulesen. Mit dem TComTerminal bekomme ich auch eine schöne Ausgabe der Messages. Jetzt gibt es einen Standard, der Messages in dieser Fom vorsieht:

Zitat:
$GPGGA,135843.000,0000.0000,N,00000.0000,E,0,00,0. 0,0.0,M,0.0,M,,0000*65
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPRMC,135843.000,V,0000.0000,N,00000.0000,E,000.0 ,000.0,280606,,,N*74
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02
Was ich nun aber benötige ist der erste Teil, der $GPGGA String. Ich suche nun eine Möglichkeit, diesen aus der Message zu extrahieren und später weiter zu verarbeiten.
Mir fällt leider keine Möglichkeit ein, wie cih das bewerkstelligen könnte, ohne eine Endlosschleife zu produzieren. Die Hilfe zur Lib gibt mir leider keine Ahnhaltspunkte, wie cih das realisieren könnte. Das einzige Event, das mir vllt nützlich sein könnte ist eines, das immer aufgerufen wird, wenn ein Char in den Buffer geschrieben wird. Doch auch da benötige ich eine Endlosschleife, um den String zu identifizieren.
Von Delphi habe ich nur das Basiswissen, was man mir in der Schule angedreht hat.

Ist mir noch zu helfen?
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

AW: COM Port Ausgabe teilen

  Alt 30. Dez 2010, 23:47
Wie möchtest du die Daten denn haben?
Von
Code:
$GPGGA,135843.000,0000.0000,N,00000.0000,E,0,00,0. 0,0.0,M,0.0,M,,0000*65
nach
Code:
$GPGGA
135843.000
0000.0000
N
00000.0000
E
0
00
0. 0
0.0
M
0.0
M

0000*65
So richtig? Die Kommata als Trennzeichen?
Oder habe ich dich falsch verstanden?
  Mit Zitat antworten Zitat
einballimwasser

Registriert seit: 30. Dez 2010
3 Beiträge
 
#3

AW: COM Port Ausgabe teilen

  Alt 31. Dez 2010, 00:00
Danke für die Antwort.

Die Daten kommen als $... Strings an. Ich möchte diesen Stream nun teilen in den $GPGGA String (der ja durch ein Line Forward beendet werden sollte?), der als Variable abgelegt wird. Der Rest ist dann einfach für mich.

Mein konkretes Problem besteht darin, eine effektive Methode zu finden, diesen Stream, der sekündlich ankommt (alle $GP Messages meine ich damit) zu trennen und den $GPGGA String herauszuschneiden. Dabei möchte ich auf eine Endlosschleife verzichten und suche daher einen Algorithmus (bzw eine Möglichkeit), der mir eine sichere Extraktion dieses $GPGGA Strings ermöglicht. Konkret:

Diesen Stream:
Zitat:
$GPGGA,135843.000,0000.0000,N,00000.0000,E,0,00,0. 0,0.0,M,0.0,M,,0000*65\LF$GPGSA,A,1,,,,,,,,,,,,,0. 0,0.0,0.0*30\LF$GPRMC,135843.000,V,0000.0000,N,000 00.0000,E,000.0 ,000.0,280606,,,N*74\LF$GPVTG,000.0,T,,M,000.0,N,0 00.0,K,N*02\LF.......
muss ich so trennen, das ich die $GPGGA Messages als einzelnen String bekomme. Das ginge auf jeden Fall, wenn ich die Schnittstelle andauernd pollen würde. Das möchte ich aber nicht wirklich. \LF ist das Line Feed Kontrollzeichen der seriellen Schnittstelle.

Geändert von einballimwasser (31. Dez 2010 um 00:05 Uhr)
  Mit Zitat antworten Zitat
LargoD

Registriert seit: 8. Jun 2007
42 Beiträge
 
#4

AW: COM Port Ausgabe teilen

  Alt 31. Dez 2010, 00:17
TComPort bietet eine Paketerkennung, d. h. Du definierst Start- und Stop-String und dann wird das OnPaket Event ausgelöst, wenn so ein Paket angekommen ist. Dann ist es sehr leicht, die gewünschten Teile mit Stringfunktionen heraus zu schneiden.
Gruß
Erich
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: COM Port Ausgabe teilen

  Alt 31. Dez 2010, 00:24
In OnRecieve alles in einen Puffer schreiben, schauen ob eine kompletter $GPGAA da ist, wenn ja diesen in einen GPGAA-Puffer schreiben, den Puffer bis ans Ende des Strings leeren, und eine von Dir zuwählende Ereignisbehandlungsroutine aufrufen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
einballimwasser

Registriert seit: 30. Dez 2010
3 Beiträge
 
#6

AW: COM Port Ausgabe teilen

  Alt 31. Dez 2010, 01:11
Hallo,

ich habe die ganze Zeit nicht gesucht, wonach ich wissen wollte. Nun klappt es ohne Probleme


Danke euch!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz