gps NMEA-Daten über COM-Port loggen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

    gps NMEA-Daten über COM-Port loggen

    Hallo ich bin neu hier im Forum


    Ich habe eine USB GPS-Maus und möchte gerne über den
    COM-Port die NMEA-Daten aufzeichnen.


    Ich habe hier im Forum schon ein fertiges Programm dazu
    gefunden was allerdings nicht funktioniert.


    Ist es eventuell möglich
    das Ganze mit einem System.IO.Ports
    Objekt zu realisieren.



    Freue mich auf antworten. :)
    hi, das sollte kein Problem sein. In der Toolbox gibt es die Komponente "SerialPort".
    In der Anwendung solltest du die COM-Ports auflisten, damit der Nutzer den entsprechenden wählen kann - My.Computer.Ports.SerialPortNames wäre die einfachste Möglichkeit soweit ich weiß. Ebenfalls sollte man die Baud-Rate einstellen können, für NMEA-Daten normalerweise 4800.

    Das ist soweit das wichtigste, weitere Informationen zur Nutzung des SerialPort gibts hier:
    msdn.microsoft.com/de-de/libra…alport%28v=vs.100%29.aspx

    Wie das Auslesen genau gehandhabt wird weiß ich nicht (habe mich bisher nur mit dem Senden befasst) - sieht hier aber recht einfach aus:
    msdn.microsoft.com/de-de/libra…ialport.datareceived.aspx

    Was du dann mit den empfangen Daten anfängst ist dein Problem^^ vermutlich wirst du sie direkt in eine .txt-Datei schreiben

    lg



    EDIT: habe dich falsch verstanden glaubich

    Du willst die GPS-Daten der USB-GPS-Maus via COM-Port versenden?
    Also: GPS-Maus -> Computer -> COM-Port
    Willkommen im Forum. :thumbup:
    System.IO.Ports ist ein NameSpace, davon kannst Du kein Objekt ableiten. Meinst Du dies:

    VB.NET-Quellcode

    1. Dim xx As New System.IO.Ports.SerialPort
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke schon mal für die Antwort
    Ich möchte die Daten in eine Text Datei abspeichern. Später wird es mein zweites Projekt sein diese Daten dann zu "entschlüsseln", also in Länge Breite Höhe usw.
    Das mit dem COM-Port ist so: Ich glaube die Maus hat einen Virtuellen COM-Port, der die Daten alle 100ms sendet. Folglich brauche ich nur das empfangen der Daten, nichts zu senden.
    Sicher, dass du dafür kein fertiges Programm nutzen willst? Für sowas sollte es mehr als genug geben (COM-Logger, NMEA-Logger, etc).

    Ansonsten einfach die SerialPort-Komponente benutzen. Im DataReceived-Event kannst du einen ankommenden NMEA-Datensatz mit SerialPort1.ReadLine auslesen und direkt in eine Textdatei schreiben. Wie in meinem fleißig durchgestrichenem Post mal zu lesen war: zumindest die Baud-Rate und der Quell-COM-Port sollten in der Anwendung festlegbar sein.
    Ich Habes gelöst mit SerialPort1.ReadLine funktioniert es.
    Wenn jemand einen Code hat um diese NMEA-Daten in kml umzuwandeln oder weiß wie man die Daten für Satelliten Anzahl, Geschwindigkeit, länge, breite, usw. ausliest und darstellt, wäre ich sehr dankbar wenn ihr helfen würdet. Klar gibt es im Internet viele fertige Tools die das machen, die auch in vb geschrieben sind, nur ich würde mir da gerne ein eigenes Tool basteln nach meinen Vorstellungen und dabei lernt man ja auch immer was;).
    hey, guck mal hier: kowoma.de/gps/zusatzerklaerungen/NMEA.htm (da war ja doch jemand schneller xD)
    da ist genau beschrieben wie die datensätze aussehen und was die informationen bedeutet. Mit einfachen String-Methoden (Split, Replace, etc) kannst du die Sätze in ihre Bestandteile zerlegen. Es empfiehlt sich eine Klasse/mehre Klassen anzulegen in denen du die informationen (sind ja doch einige) speicherst.

    Um das ganze optisch schön darzustellen kannst du auf GDI+ zurückgreifen (siehe meine Signatur). Es empfiehlt sich sicher das ein oder andere UserControl zu erstellen (z.b. einen Kompass, visualisierung der genauigkeit, vllt eine art Tacho für die Geschwindigkeit und was dir sonst noch so einfällt).

    Wenn du ein solches Tool schon selbst programmieren möchtest, dann musst du dich zuerst mit .NET beschäftigen - wie du schon sagst, dabei lernt man immer^^
    Oh ja, sehr gut so was hab ich gesucht. Ich muss mir nur mal die Befehle für des Zerlegen raussuchen, denn ich hab so was noch nie verwendet.;)
    Ui, das Tutorial ist echt gut werde ich mir mal genau anschauen, sowas wusste ich das es geht aber ich hab bisher keinen blassen Schimmer davon. Das ist ja toll (edit: ich binn ja auch noch relativ neu im bereich vb)
    Dein Projekt ist mmn. sogar sehr gut zum Einsteigen geeignet, da man dank der String Funktionen mit einigen Datentypen und Arrays bekanntschaft machen wird ;)

    Kleiner Tipp, um Anfängerfehler auszuschließen: Mach in die allererste Zeile ein "Option Strict On".
    Das sorgt dafür, dass du VB nicht direkt sagen kannst, mach aus der Zeichenfolge "3442" eine Zahl -> 3442.
    Besser ist hier Convert.ToInt32("3442").

    Gruß,
    Manawyrm

    EDIT: Hey, bist du Elektroniker? Ne555 ftw. Aber -- nimm deine Signatur lieber schnell raus! Ist laut boardregeln verboten ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()

    Danke für den Tipp. Ich hab da noch ne frage: das mit dem split hab ich jetzt :thumbsup: , aber wie mach ich die Unterscheidung der einzelnen Datenstrings, ob $GPGGA oder $GPGSA ?gibt es da irgendwie was ähnliches wie "if string beginns $GPGSA then"?....hat sich erledigt is ja einfach....man hat immermal nen Denkfehler;)

    Edit: Jap ich bin ein Elektroniker (Hobby) :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „simonengel3“ ()

    Sicher doch.

    Du kannst bei einem Objekt wie einem String (einer Zeichenfolge) verschiedene Methoden aufrufen, da deine Zeichenfolge ja auf der Klasse String basiert.

    VB.NET-Quellcode

    1. if meinegpsdaten.StartsWith("$GPGGA") then
    2. *mööp*
    3. end if


    Gruß,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()