Zum Hauptinhalt springen

NMEA 0183 (Maritime / Schiffbau)

NMEA 0183 ist ein 1983 von der US-amerikanischen National Marine Electronics Association standardisiertes ASCII-Kommunikationsprotokoll für Schiffs- und Marinegeräte. Nahezu alle maritimen Sensoren – GPS, Kreiselkompass, Windmesser, Echolot, AIS – verwenden dieses Sentence-Format.

Der NMEA-Treiber des Gateways empfängt den Sentence-Stream über TCP (NMEA over IP), prüft die Checksumme (XOR) und stellt die Felder je nach Sentence-Typ geparst bereit. Der Betrieb ist ausschließlich lesend.

Bei Brückengeräten mit UDP-Multicast

In Umgebungen, die Sentences per IEC 61162-450 (Lightweight Ethernet) multicasten – etwa integrierte Schiffsbrücken –, verwenden Sie den IEC 61162-450-Treiber. Da derselbe Sentence-Parser zum Einsatz kommt, sind Tag-Adressnotation und Aliase identisch mit diesem Dokument.


Eingabefelder im Registrierungsformular

EingabefeldWas einzutragen istBeispiel
IP-AdresseIP des NMEA-Multiplexers / -Routers192.168.0.140
PortNMEA-TCP-Port10110 (De-facto-Standard) / 4001 (geräteabhängig)
  • Der Zeichensatz ist fest auf US-ASCII eingestellt (keine Formularoption).
  • Erweiterte Option nmea.port (nicht im Formular sichtbar — bei Registrierung über die REST API nur per options angebbar): Ist ein Wert gesetzt, wird statt des Ports aus dem Formular dieser Wert für die Verbindung verwendet.
Kein Schreibzugriff

Bei NMEA 0183 ist unidirektionales Sentence-Broadcasting die Regel. Das Gateway arbeitet read-only. Wird eine Gerätesteuerung benötigt, sehen Sie ein separates NMEA 2000- / Modbus-Gateway vor.


PLC-Adressnotation der Tags

Die Adresse lautet <sentence-type>.<field-no|alias>Punktnotation (.). Die Feldnummer ist ein 1-basierter Index ohne die zwei Talker-Zeichen.

NotationBedeutung
RMC.7Feld 7 von RMC (Geschwindigkeit über Grund in kn)
GGA.2Feld 2 von GGA (Breitengrad)
RMC.latAlias — siehe Tabelle unten (Groß-/Kleinschreibung irrelevant)
RMC(Feld weggelassen) zuletzt empfangener Roh-Sentence vollständig

Auch Sentence-Typen ohne definierte Aliase sind über die Feldnummer (XXX.3) zugänglich; wird nur der Typ angegeben, erhält man den vollständigen Roh-Sentence als Zeichenkette.

Abweichung von der alten Notation

Die Doppelpunkt-Notation (RMC:lat) und die RAW:<sentence-type>-Notation werden nicht unterstützt — registrieren Sie stattdessen RMC.lat bzw. <sentence-type> (nur Typ). Lange Alias-Namen wie satellites / windAngle / windSpeed gibt es ebenfalls nicht — die tatsächlichen Aliase lauten sats / angle / speed (die folgende Tabelle enthält die vollständige Treiberdefinition).

Unterstützte Sentences / vollständige Alias-Liste (Treiberdefinition)

sentencealias
RMCutc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode
GGAutc, lat, ns, lon, ew, fix, sats (Anzahl Satelliten), hdop, alt, altunit, geoidsep, sepunit, dgpsage, dgpsid
GLLlat, ns, lon, ew, utc, status, mode
VTGcogtrue, cogmag, speed (kn, = speedkn), speedkm (km/h), mode
GSAmode1, mode2, pdop, hdop, vdop
GSVtotalmsgs, msgnum, satsinview
HDTheading (true), t
HDMheading (magnetic), m
MWVangle (Windwinkel), ref (R/T), speed (Windgeschwindigkeit), units, status
DBTdepthft, depthm (= depth, m), depthfa
DPTdepth (m), offset, max
MTWtemp, units
VHWheadingt, headingm, speed (kn), speedkm
ZDAutc, day, month, year, tzh, tzm
XDRtype, value, units, id (nur erste Transducer-Gruppe)

Empfangsregeln (Treiberverhalten)

  • Es werden ausschließlich Sentences verarbeitet, die mit $ beginnen — die !-Encapsulation (AIVDM / AIVDO bei AIS) wird nicht unterstützt.
  • Sentences mit abweichender Checksumme (XOR über den Bereich $~*) werden verworfen. Sentences ohne Checksumme (einige ältere Geräte) werden akzeptiert.
  • Die zwei Talker-Zeichen (GP / GN / GL / HC / II …) werden automatisch entfernt — $GPRMC und $GNRMC werden unter demselben Schlüssel RMC zwischengespeichert, sodass der zuletzt empfangene Wert bereitsteht. Proprietäre $P...-Sentences werden ohne Talker-Abtrennung unverändert als Schlüssel verwendet.

Zuordnung der Datenformate

Die Werte werden exakt als ASCII-Original des Sentence-Feldes bereitgestellt — der Treiber führt keine Einheiten- oder Koordinatenumrechnung durch.

Sentence-FeldDatenformatFormatzusatz
Numerische Felder wie Geschwindigkeit / Wassertiefe / Höhe / DOPFloatREAL
Fix-Qualität / Anzahl SatellitenInteger(leer)
Breite / Länge (Original DDMM.MMMM)Float (+ Umrechnung per Formel empfohlen)REAL
UTC-Zeit / Statuszeichen (A/V) / Roh-SentenceStringSTR[80]
Breite und Länge im Originalformat DDMM.MMMM

NMEA-Koordinaten liegen im Format "GradGradMinMin.MinMin" vor (z. B. 4807.038 = 48°07,038′); der Treiber rechnet nicht in Dezimalgrad (decimal degree) um. Werden Dezimalgrad benötigt, hinterlegen Sie über Formel anwenden eine Umrechnungsformel am Tag.


Häufige Probleme und Lösungen

Symptom / MeldungMögliche UrsacheLösung
„Connection refused“TCP-Port des NMEA-Routers nicht geöffnetIn der Konfiguration des Multiplexers (Brookhouse / Actisense / NavLink2) den TCP-Server aktivieren
Nur ein Teil der Sentences kommt anGerät sendet diesen Sentence nichtListe der gesendeten Sentences im Gerätehandbuch prüfen
Koordinaten als ungewöhnlich große ZahlenAusgabe des Originals DDMM.MMMM (normales Verhalten — der Treiber rechnet nicht um)Umrechnung in Dezimalgrad per Formel anwenden
AIS-Werte (AIVDM) kommen nicht an!-Encapsulation nicht unterstützt (nur $-Sentences werden verarbeitet)Über separaten AIS-Decoder einbinden (siehe Tipp unten)
Mehrere Talker senden denselben SentenceNach Talker-Entfernung derselbe Schlüssel — nur der zuletzt empfangene Wert steht bereitTalker-Filter am Router aktivieren
Sentences treffen zu schnell einNMEA arbeitet üblicherweise mit 1 Hz bis 10 HzBei einem Tag-Polling-Intervall von 1 Sekunde wird der jeweils letzte Wert übernommen

Häufig verwendete Beispiele

Basispaket aus GPS und Umgebungssensorik eines Schiffes:

Tag-NameAdresseDatenformatFormatzusatz
Breite (DDMM.MMMM)RMC.latFloatREAL
Länge (DDDMM.MMMM)RMC.lonFloatREAL
Geschwindigkeit (knots)RMC.speedFloatREAL
Anzahl SatellitenGGA.satsInteger(leer)
Fix-QualitätGGA.fixInteger(leer)
WindwinkelMWV.angleFloatREAL
WindgeschwindigkeitMWV.speedFloatREAL
Wassertiefe (m)DPT.depthFloatREAL
KreiselkursHDT.headingFloatREAL
AIS separat behandeln

AIS (Schiffsidentifikation) ist eine eigenständige Nutzlast, die auf NMEA 0183 aufsetzt. Ist eine Dekodierung der Binär-Payload von AIVDM- / AIVDO-Sentences erforderlich, empfiehlt sich die Einbindung über einen separaten AIS-Decoder (gpsd / aisutils).


Ausführlichere Beispiele / automatisierte Registrierung