NMEA Blöcke - Welche Daten kommen zuerst?

  • Moins ihr !


    Ich bin gerade dabei NMEA Daten auszuwerten. Soweit ja auch kein Hexenwerk, aber ich bin mir noch nicht ganz im Klaren, welche Daten bei NMEA zuerst kommen sollten, oder ob das von der Firmware abhängt (und es gar keine Abhängigkeit gibt).
    Nehmen wir mal den Block:
    $GPRMC,172219.100,A,5125.0701,N,00840.6763,E,0.08,112.09,290410,,,A*61
    $GPGGA,172219.100,5125.0701,N,00840.6763,E,1,8,1.28,522.8,M,,,*2F
    $GPGSA,A,3,28,26,17,15,27,09,12,18,,,,,1.52,1.28,0.82*0F
    $GPVTG,112.09,T,,M,0.08,N,0.15,K,A*3A
    $GPRMC,172219.200,A,5125.0701,N,00840.6763,E,0.10,112.09,290410,,,A*6B


    wenn man auf die Zeiten schaut könnte man ja davon ausgehen das RMC als erstes kommen sollte. Aber ich habe auch Daten da schaut das so:
    $GPRMC,152548.052,A,5132.8579,N,00844.4922,E,0.07,289.63,090905,,*0C
    $GPGGA,152549.052,5132.8579,N,00844.4923,E,1,08,0.9,358.8,M,47.5,M,0.0,0000*78
    $GPGSA,A,3,01,04,09,06,30,02,14,07,,,,,1.9,0.9,1.7*3C
    $GPRMC,152549.052,A,5132.8579,N,00844.4923,E,0.06,130.05,090905,,*0C


    Hier müsste man mit GGA starten und nicht mit RMC.


    Kurzum, kennt von euch einer eine brauchbare Methode wie ich die GPS Daten sinnvoll zusammenfassen kann um sie dann auszuwerten? Mit sinnvoll zusammenfassen meine ich, die NMEA Zeilen in logisch zueinander passende Blöcke zusammenfassen (im letzten Fall also alles grüne ...).

  • Erstmal hängt es von den Einstellungen des Empfängers ab, welche Unterprotokolle in welchem Rythmus kommen. RMC, GGA und VTG kommen typischerweise jede Sekunde (manche Empfänger können auch 4 HZ, also jede 1/4 Sekunde), GSA kann sekündöich, aber auch nur alle 5 Sek und GSV ebenfalls.


    Üblicherweise werden sie dann aber "blockweise" gesendet und normalerweise ändert sich die Reihenfolge im Block nicht.


    Also z.B. bei RMC, VTG und GGA = 1 und GSA / GSV = 5:


    RMC
    VTG
    GGA
    RMC
    VTG
    GGA
    RMC
    VTG
    GGA
    RMC
    VTG
    GGA
    RMC
    VTG
    GGA
    GSA
    GSV


    Es muß aber im Block nicht


    RMC
    VTG
    GGA


    lauten, es kann imho auch


    GGA
    VTG
    RMC


    sein.


    Interessant ist aber dein erster Ausschnitt, dieser läßt darauf schließen, dass dieser Empfänger mit 10 Hz sendet.


    Was genau willst Du denn auswerten ? Da könnte es doch reichen, wenn Du nach dem Unterprotokoll sortierst, welches die benötigte Information beinhaltet, also z.B. RMC, wenn Du Position und Zeit für einen einfachen Track haben willst.

    Kaum bist mal kurz weg sieht alles gleich ganz anders aus ??

  • Die Reihenfolge kann bei unterschiedlichen Geräten unterschiedlich sein. Bei gleichen Geräten ist dies mir noch nicht aufgefallen.


    Verstehe aber das Problem nicht wirklich, werte halt einfach in der Reihenfolge aus in der die Protokolle einlaufen, oder wo ist wirklich Dein Problem?


    Ich hatte bei meinem GPSLog mit Case ausgewertet (Excel-Makro [VBA]).

  • Moin !


    Im Grunde ist es nicht so relevant. Aber die Blöcke haben ja teilweise doch einen zeitlichen Bezug.
    So findet man z.B. in RMC und GGA die Zeit. Und ich würde es als sinnvoll erachten, wenn ich die Blöcke zeitlich korrekt zusammen lege.
    Denn ich möchte die Telegramme nicht einzeln auswerten (das liegt an der Art wie unsere Software Daten auswertet). Ich möchte den ganzen Block auf einen Schlag verarbeiten lassen.


    Aber ich denke ich habe eine Lösung:
    Bei Logs von einem Gerät werden die Blöcke eh zeitlich korrekt geschrieben. In dem Fall habe ich also zuerst RMC oder GGA. Was zuerst kommt bestimmt den Blockanfang. Das klappt eigentlich bei all meinen aufgezeichneten Logs - egal welches GPS genutzt wurde.
    Bei Livedaten (also NMEA Daten von der Schnittstelle aufzeichnen) ist es etwas anders. Hier werde ich auch das Protokoll als Rahmen nutzen was zuerst kommt (GGA oder RMC). Im Worst Case ist der Block nicht korrekt zusammen gesetzt. Dann hätten die Daten mitunter einen Versatz von einer Sekunde.
    Aber ich vermute mal dass das keinem auffallen würde ;)


  • Das denke ich auch. Den Blockanfang bestimmt die erste sich ändernde Zeit. Und bei gleicher Zeit sind z.B. auch die Koordinaten in RMC und GGA gleich.


    "Probleme" könnte es geben bei der Zuordnung der Zeilen, die keine Zeit beinhalten. So könnte man darüber philosophieren, gehören sie zum vorhergehenden oder nächsten Block. Was aber sicher nur dann wirklich auffallen könnte, wenn man sich gerade in einer steilen Geschwindigkeitsänderung befindet und VTG mit RMC vergleicht. Ist mir bislang nicht aufgefallen, und ich habe schon so "ein paar" logs untersucht.


    Nachtrag: in Deinem angeführten Fall gehört VTG zum Block mit RMC, 0,08 knots!

    Viele Grüße, Charly


    Quod licet Iovi, non licet bovi

    Einmal editiert, zuletzt von karomue ()

  • VTG würde ich einfach unter den Tisch fallen lassen, da die Geschwindigkeit und Richtung auch in RMC steht. Bei GSA und GSV düfte es in der Tat nicht schwerwiegend sein, sollte es beim Zuordnen zu dem richtigen Block zu einem zeitlichen Versatz von 1 Sekunde kommen und in GGA und RMC steht die Zeit ja drin.

    Kaum bist mal kurz weg sieht alles gleich ganz anders aus ??

  • VTG würde ich einfach unter den Tisch fallen lassen, da die Geschwindigkeit und Richtung auch in RMC steht. Bei GSA und GSV düfte es in der Tat nicht schwerwiegend sein, sollte es beim Zuordnen zu dem richtigen Block zu einem zeitlichen Versatz von 1 Sekunde kommen und in GGA und RMC steht die Zeit ja drin.


    Hm, jein, Geschwindigkeit ließe sich umrechnen, wen man nicht zu "faul" dazu ist und sie in km/h direkt haben möchte. Beim Kurs gibt es Unterschiede, das müsste man sich anschauen. (true, magnetic).