GPS-Anwendung
2014-03-15

NMEA-0183 Daten

Worum es sich dabei handelt

Die NMEA (National Marine Electronics Association, Nationale Vereinigung für Marineelektronik) engagiert sich für die Ausbildung und den Fortschritt der Marine-Elektronikindustrie und dem Markt, den diese bedient. Es handelt sich dabei um eine nicht auf Profit ausgelegte Vereinigung von Herstellern, Vertreibern, Ausbildungsinstitutionen und anderen mit Interesse an diesem Markt (frei aus "NMEA News"). Genaueres über die NMEA findet sich hier (englisch).

 

Wozu die Daten gut sind

Mit Hilfe der weitestgehend standardisierten NMEA-Daten gelingt es sehr leicht, die Daten praktisch jedes GPS-Geräts mit einem Navigations- und Kartenprogramm auf dem PC, Laptop oder Handheld zu verwenden. Sogenannte GPS-Mäuse (GPS-Empfänger ohne Display nur mit serieller Schnittstelle) kommunizieren ausschliesslich auf diese Art mit Ihrer Aussenwelt. In der Seefahrt werden Kursplotter und ähnliches mit Hilfe von NMEA-Datensätzen mit Positionsdaten versorgt.

 

Das Protokoll NMEA-0183

Die NMEA hat nun unter anderem den Standard NMEA-1083 definiert, um einen Datenaustausch zwischen verschiedenen Geräten aus der Marineelektronik zu ermöglichen. Die NMEA-0180,0182 und 0183 Standards (die ersten beiden sind nicht mehr von Bedeutung) sehen pro "Netz" ein Sendegerät und diverse Empfangsgeräte vor. Der Sender soll Daten nach dem RS-232-Standard (vom PC als Datenformat der COM-Schnittstellen bekannt) ausgeben. Die Datenrate beträgt 4800 baud (ca. 600 bytes/Sekunde) und es ist in diesem Standard kein Stecker oder ähnliches definiert. Die Anschlussart bleibt also dem Hersteller überlassen, weswegen alle Geräte unterschiedliche Stecker benötigen.
Die Einschränkung, dass es nur einen Sender geben darf sorgt dafür, dass nicht wild durcheinandergequatscht wird. Sollen die Daten von mehreren Geräten zusammengefasst werden, braucht man mindestens ein Gerät, dass auch als Empfänger arbeitet und alle erhaltenen Daten in einen neues "Netz" wieder kombiniert einspeist.

Die Daten werden im ASCII-Format (American Standard Code for Information Interchange, Amerikanischer Standard Code für Informationsaustausch) übertragen. Dabei sind alle druckbaren Zeichen sowie Carriage-Return (CR, Waagenrücklauf) und Line-Feed (LF, Neue Zeile) erlaubt und die Daten werden in der Form von Sätzen übertragen. Jeder dieser Sätze beginnt mir dem Zeichen "$", einer zwei Zeichen langen Senderkennung, einer drei Zeichen langen Satzkennung und dann folgt eine Reihe von Datensätzen, die mit Kommas unterteilt werden. Schliesslich wird der Satz mit einer optionalen Prüfsumme und einer CR/LF abgeschlossen. Jeder Satz kann inklusive des führenden "$" und den beiden CR/LF bis zu 82 Zeichen enthalten. Ist ein Datenfeld in einem Satz zwar vorgesehen aber nicht verfügbar, so wird er einfach weggelassen, das dazugehörige Komma zur Trennung der Datensätze wird aber ohne Leerzeichen beibehalten. Durch Zählen der Kommas kann ein Empfänger dann aus jeden Satz die entsprechenden Informationen richtig zuordnen.

Die meist optionale Prüfsumme besteht aus einem "*" und eine Hexadezimalzahl, die sich durch ein (bitweise) exklusiv-oder (1+1=0, 1+0=1, 0+0=0) aller Zeichen zwischen dem "$" und dem "*" berechnen. Bei manchen Sätzen ist die Prüfsumme notwendig.

ALs Beispiel berechnet sich die Prüfsumme folgendermassen: Aus $GPVTG... wird GPVTG... und die Prüfsumme berechnet sich aus dem ASCII-Werten aller Zeichen: 71 XOR 80 XOR 86 XOR 84 XOR 71 XOR ...

Der erhaltene Wert als Hexadezimalzahl ist die Prüfsumme.

Der Standard erlaubt weiterhin einzelnen Herstellern eigene (proprietäre) Satzformate. Diese fangen mit "$P" an, gefolgt von der drei Buchstaben langen Herstellerkennung. Anschliessend folgen die Daten.

Einige gängige Senderkennungen sind:

GP GPS Empfänger
LC Loran-C Empfänger (älteres Positionsbestimmungssystem)
OM Omega Navigations Empfänger (altes Radionavigationssystem; ausser Betrieb)
II Integrated Instrumentation (z.B. AutoHelm Seatalk System; Autopiloten)

 

Die Datensätze der unterschiedlichen Geräte können sehr viele verschiedene Informationen beinhalten, darunter Position, Geschwindigkeit, Richtung, Wassertiefe, Wassertemperatur, Wegpunkte, Windgeschwindigkeit usw.

Nachfolgend sollen beispielhaft die Daten, die ein Garmin etrex Vista ausgibt näher beschrieben werden.

Wichtig ist, dass das Datenformat des GPS auf NMEA umgestellt wird (heisst beim Vista genau: NMEA In/NMEA Out). Die Daten werden dann einmal alle zwei Sekunden über die Schnittstelle ausgegeben. Viele PC-Navigations- und Kartenprogramme mit Anschlussmöglichkeit für GPS-Empfänger erwarten im übrigen auch das NMEA-Format zur Navigation. Funktioniert das Zusammenspiel zwischen GPS und einem PC-Programm nicht, sollte man also sowohl kontrollieren, ob man den GPS an der richtigen seriellen Schnittstelle (COM1 oder COM2) angeschlossen hat, als auch überprüfen, ob das Ausgabeformat am GPS auf NMEA eingestellt ist.

Ein kompletter Block Daten sieht dann beispielsweise beim Garmin etrex Vista (Software Version 2.41) folgendermassen aus:

$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,181102,0.4,E,A*19
$GPRMB,A,9.99,L,,Exit,4726.8323,N,00820.4822,E,29.212,107.2,,V,A*69
$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
$GPGSA,A,3,,,,15,17,18,23,,,,,,4.7,4.4,1.5*3F
$GPGSV,2,1,08,02,59,282,00,03,42,287,00,06,16,094,00,15,80,090,48*79
$GPGLL,4735.5634,N,00739.3538,E,191410,A,A*4A
$GPBOD,221.9,T,221.5,M,Exit,*6B
$GPVTG,0.0,T,359.6,M,0.0,N,0.0,K*47
$PGRME,24.7,M,23.5,M,34.1,M*1D
$PGRMZ,1012,f*36
$PGRMM,WGS 84*06
$HCHDG,170.4,,,0.4,E*03
$GPRTE,1,1,c,*37

Wenn die Navigation mit einer Route aktiviert wurde, können noch weitere Sätze hinzukommen, die die Route beschreiben. Interessant ist auch, dass anscheinend je nach leicht Softwareversion unterschiedliche Datensätze ausgegeben werden.

Nachfolgend sind noch einige Datensätze im einzelnen aufgeschlüsselt:

 

Die Datensätze

GPRMC

Der GPRMC-Datensatz (RMC = recommended minimum sentence C, empfohlener Minimumdatensatz) ist eine Empfehlung für das Minimum, was ein GPS-Empfänger ausgeben soll.

$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,181102,0.4,E,A*19
       ^      ^ ^           ^            ^   ^   ^      ^     ^
       |      | |           |            |   |   |      |     |
       |      | |           |            |   |   |      |     Neu in NMEA 2.3:
       |      | |           |            |   |   |      |     Art der Bestimmung
       |      | |           |            |   |   |      |     A=autonomous (selbst)
       |      | |           |            |   |   |      |     D=differential
       |      | |           |            |   |   |      |     E=estimated (geschätzt)
       |      | |           |            |   |   |      |     N=not valid (ungültig)
       |      | |           |            |   |   |      |     S=simulator
       |      | |           |            |   |   |      |   
       |      | |           |            |   |   |      Missweisung (mit Richtung)
       |      | |           |            |   |   |     
       |      | |           |            |   |   Datum: 18.11.2002     
       |      | |           |            |   |        
       |      | |           |            |   Bewegungsrichtung in Grad (wahr)
       |      | |           |            |
       |      | |           |            Geschwindigkeit über Grund (Knoten)
       |      | |           |            
       |      | |           Längengrad mit (Vorzeichen)-Richtung (E=Ost, W=West)
       |      | |           007° 39.3538' Ost
       |      | |                        
       |      | Breitengrad mit (Vorzeichen)-Richtung (N=Nord, S=Süd)
       |      | 46° 35.5634' Nord
       |      |
       |      Status der Bestimmung: A=Active (gültig); V=void (ungültig)
       |
       Uhrzeit der Bestimmung: 19:14:10 (UTC-Zeit)

GPGGA

Der GPGGA-Datensatz ist einer der wichtigesten Datensätze, darin enthalten sind Zeit, Position (inkl. Höhe) sowie Qualität der Messung.

$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
       ^      ^           ^            ^ ^  ^   ^       ^     
       |
     |           |            | |  |   |       |    
       |      |           |            | |  |   |       Höhe Geoid minus
       |      |           |            | |  |   |       Höhe Ellipsoid (WGS84)
       |      |           |            | |  |   |       in Metern (48.0,M)
       |      |           |            | |  |   |        |      |           |            | |  |   Höhe über Meer (über Geoid)
       |      |           |            | |  |   in Metern (351.5,M)
       |      |           |            | |  |
       |      |           |            | |  HDOP (horizontal dilution
       |      |           |            | |  of precision) Genauigkeit
       |      |           |            | |
       |      |           |            | Anzahl der erfassten Satelliten
       |      |           |            |
       |      |           |            Qualität der Messung
       |      |           |            (0 = ungültig)
       |      |           |            (1 = GPS)
       |      |           |            (2 = DGPS)
       |      |           |            (6 = geschätzt nur NMEA-0183 2.3)
       |      |           |
       |      |           Längengrad
       |      |
       |      Breitengrad
       |
       Uhrzeit

 

GPGSA

Der GPGSA-Datensatz (SA=satellites active, aktive Satelliten) enthält Informationen über die PRN-Nummern der Satelliten, deren Signale zur Positionsbestimmung verwendet werden.

$GPGSA,A,3,,,,15,17,18,23,,,,,,4.7,4.4,1.5*3F
       ^ ^ ^                   ^   ^   ^
       | | |                   |   |   |
       | | |                   |   |   VDOP (vertikale Genauigkeit)
 
     | | |                   |   |
       | | |                   |   HDOP (horizontale Genauigkeit)
       | | |                   |
       | | |                   PDOP (Genauigkeit)
       | | |
       | | PRN-Nummern von maximal 12 Satelliten
       | |
       | Art der Positionsbestimmung (3 = 3D-fix)
       |                             (2 = 2D-fix)
       |                             (1 = kein Fix)
       |
       Auto-Auswahl 2D oder 3D Bestimmung

 

GPGSV

Der GPGSV-Datensatz (SV=satellites in view, sichtbare Satelliten) enthält Informationen über Satelliten, die zur Zeit möglicherweise empfangen werden können und Informationen zu deren Position, Signalstärke usw. Da pro Satz nur die Informationen von vier Satelliten übertragen werden können (Beschränkung auf 82 Zeichen), kann es bis zu drei solche Datensätze geben.

$GPGSV,2,1,08,02,59,282,00,03,42,287,00,06,16,094,00,15,80,090,48*79

 

GPGLL

Der GPGLL-Datensatz ist ein Überbleibsel aus der Zeit, als es nur LORAN-C als Navigationssystem gab und enthält die geographische Position. Das GPS-Gerät emuliert sozusagen den LORAN-C Empfänger.

$GPGLL,4735.5634,N,00739.3538,E,191410,A,A*4A

 

GPBOD

Der GPBOD-Datensatz gibt Informationen zur Richtung vom Startpunk zum Zielpunkt an. Der Kurs wird als wahrer (T=true) und magnetischer (M=magnetic) Kurs zum benannten Zielpunkt (hier 'Exit', da keiner angegeben ist) ausgegeben.

$GPBOD,221.9,T,221.5,M,Exit,*6B

 

GPVTG

Der GPVTG-Datensatz enthält Daten zur Bewegungsgeschwindigkeit und Richtung.

$GPVTG,0.0,T,359.6,M,0.0,N,0.0,K*47
       ^     ^       ^     ^
       |     |       |     |
       |     |       |     Geschwindigkeit über Grund in km/h (K)
       |     |       |
       |     |       Geschwindigkeit über Grund in Knoten (N)
       |     |      
       |     Kurs (magnetisch, M)     
       |
       Kurs (wahr, T)

Die folgenden drei Datensätze sind Garmin-eigene Datensätze, was die Kürzel P (proprietary) und GRM (Garmin).

 

PGRME

Der PGRME-Datensatz enthält den geschätzen Fehler der horizontalen und vertikalen Position. Die Angaben sind jeweils in Meter. Der erste Wert ist der horizontale, der zweite der vertikale und der dritte ein sphärischer Fehler (Kugelradius einer "Fehlerkugel").

$PGRME,24.7,M,23.5,M,34.1,M*1D

 

PGRMZ

Der PGRMZ-Datensatz enthält die Höhe in Fuss.

$PGRMZ,1012,f*36

 

PGRMM

Der PGRMM-Datensatz enthält das verwendete horizontale Datum. Zu beachten ist, dass die Positionsangaben aus den Navigationsdatensätzen sich auf das hier angegebene Datum beziehen.

$PGRMM,WGS 84*06

 

HCHDG

Der HCHDG-Datensatz enthält Angaben vom Magnetkompass, den nur wenige GPS-Geräte besitzen (vista, summit, GPS76s). Es sind Daten zur Richtung (170.4°) und Deklination (auch als 'deviation' bezeichnet; Abweichung von magnetisch Nord zu wahrem Nord, siehe auch hier).

$HCHDG,170.4,,,0.4,E*03

 

GPRTE

Der GPRTE-Datensatz schliesslich enthält Angaben zur programmierten Route. Zum Zeitpunkt des angebenen Datenblocks war keine Route definiert, ansonsten würde der Satz wesentlich mehr Informationen enthalten.

$GPRTE,1,1,c,*37

Andere GPS-Geräte enthalten teilweise andere herstellerspezifische Datensätze, die für die Position wichtigsten sind jedoch immer enthalten.

 

Detailliertere Informationen zur NMEA-0183 Datenstruktur findet sich hier (englisch).