NMEA 0183 - NMEA 0183

NMEA 0183 ist eine kombinierte elektrische und Datenspezifikation für die Kommunikation zwischen Schiffselektronik wie Echolot , Sonars , Anemometer , Kreiselkompass , Autopilot , GPS-Empfänger und vielen anderen Arten von Instrumenten. Es wurde von der National Marine Electronics Association definiert und wird von ihr kontrolliert . Er ersetzt die früheren Standards NMEA 0180 und NMEA 0182 . In der Freizeitschifffahrt wird es langsam zugunsten des neueren NMEA 2000- Standards abgeschafft, obwohl NMEA0183 in der Berufsschifffahrt nach wie vor die Norm bleibt.

Der verwendete elektrische Standard ist EIA-422 , obwohl die meisten Hardware mit NMEA-0183-Ausgängen auch einen einzelnen EIA-232- Port ansteuern können . Obwohl die Norm isolierte Ein- und Ausgänge fordert, gibt es verschiedene Hardwareserien, die diese Anforderung nicht erfüllen.

Der NMEA 0183 - Standard verwendet ein einfaches ASCII , serielles Kommunikationsprotokoll , das definiert , wie Daten in einem „Satz“ übertragen werden von einem „Talker“ , um mehr „Hörer“ zu einer Zeit. Durch die Verwendung von Zwischenerweiterungen kann ein Sprecher eine unidirektionale Konversation mit einer nahezu unbegrenzten Anzahl von Zuhörern führen, und unter Verwendung von Multiplexern können mehrere Sensoren mit einem einzigen Computeranschluss kommunizieren.

Auf der Anwendungsschicht definiert der Standard auch den Inhalt jedes Satz-(Nachrichten-)Typs, sodass alle Zuhörer Nachrichten genau analysieren können.

Während NMEA0183 nur einen RS422-Transport definiert, existiert auch ein De-facto-Standard, bei dem die Sätze aus NMEA0183 in UDP- Datagramme (ein Satz pro Paket) abgelegt und über ein IP-Netzwerk gesendet werden.

Der NMEA-Standard ist proprietär und kostet ab September 2020 mindestens 2000 US-Dollar (außer für Mitglieder der NMEA). Vieles davon wurde jedoch aus öffentlichen Quellen nachgebaut.

Serielle Konfiguration (Datenverbindungsschicht)

Typische Baudrate 4800
Daten Bits 8
Parität Keiner
Stopp-Bits 1
Händedruck Keiner

Es gibt eine Variation des Standards namens NMEA-0183HS, die eine Baudrate von 38.400 spezifiziert. Dies wird im Allgemeinen von AIS- Geräten verwendet.

Nachrichtenstruktur

  • Alle übertragenen Daten sind druckbare ASCII- Zeichen zwischen 0x20 (Leerzeichen) bis 0x7e (~)
  • Datenzeichen sind alle oben genannten Zeichen außer den reservierten Zeichen (Siehe nächste Zeile)
  • Reservierte Zeichen werden von NMEA0183 für folgende Zwecke verwendet:
ASCII Verhexen Dezember Verwenden
<CR> 0x0d 13 Wagenrücklauf
<LF> 0x0a 10 Zeilenvorschub, Endbegrenzer
! 0x21 33 Beginn des Kapselungssatztrennzeichens
$ 0x24 36 Starttrennzeichen
* 0x2a 42 Prüfsummentrennzeichen
, 0x2c 44 Feldtrennzeichen
\ 0x5c 92 TAG-Blocktrennzeichen
^ 0x5e 94 Codetrennzeichen für die HEX-Darstellung von ISO/IEC 8859-1 (ASCII)-Zeichen
~ 0x7e 126 Reserviert
  • Nachrichten haben eine maximale Länge von 82 Zeichen, einschließlich $ oder ! Anfangszeichen und das Ende <LF>
  • Das Startzeichen für jede Nachricht kann entweder ein $ (für herkömmliche feldgetrennte Nachrichten) oder ! (für Nachrichten, die eine spezielle Kapselung enthalten)
  • Die nächsten fünf Zeichen identifizieren den Sprecher (zwei Zeichen) und die Art der Nachricht (drei Zeichen).
  • Alle folgenden Datenfelder sind durch Kommas getrennt.
  • Wo Daten nicht verfügbar ist, wird das entsprechende Feld leer bleibt (es enthält keine Zeichen vor dem nächsten Begrenzer - siehe Beispieldatei Abschnitt unten).
  • Das erste Zeichen, das unmittelbar auf das letzte Datenfeldzeichen folgt, ist ein Asterisk, wird aber nur bei Angabe einer Prüfsumme eingefügt.
  • Auf das Sternchen folgt unmittelbar eine Prüfsumme, die als zweistellige Hexadezimalzahl dargestellt wird . Die Prüfsumme ist das bitweise exklusive ODER von ASCII- Codes aller Zeichen zwischen $ und * , nicht inklusive. Laut offizieller Spezifikation ist die Prüfsumme für die meisten Datensätze optional, aber für RMA, RMB und RMC (unter anderem) obligatorisch.
  • <CR><LF> beendet die Nachricht.

Als Beispiel hat ein Wegpunkt-Ankunftsalarm die Form:

$GPAAM,A,A,0.10,N,WPTNME*32

Ein weiteres Beispiel für AIS-Nachrichten ist:

!AIVDM,1,1,,A,14eG;o@034o8sd<L9i:a;WF>062D,0*7D

Anbietererweiterungen

Die meisten GPS-Hersteller enthalten in ihren Produkten zusätzlich zum Standard-NMEA-Set spezielle Meldungen für Wartungs- und Diagnosezwecke. Erweiterte Nachrichten beginnen mit "$P". Diese erweiterten Nachrichten sind nicht standardisiert.

Softwarekompatibilität

NMEA 0183 wird von verschiedenen Navigations- und Kartensoftware unterstützt. Bemerkenswerte Anwendungen umfassen:

Beispieldatei

Eine Beispieldatei, die von einem Tripmate 850 GPS-Logger erstellt wurde. Diese Datei wurde in Leixlip , County Kildare , Irland erstellt . Die Aufnahme dauert zwei Sekunden.

$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,8,1.03,61.7,M,55.2,M,,*76
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,19,13,28,070,17,26,23,252,,04,14,186,14*79
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092750.000,A,5321.6802,N,00630.3372,W,0.02,31.66,280511,,,A*43
$GPGGA,092751.000,5321.6802,N,00630.3371,W,1,8,1.03,61.7,M,55.3,M,,*75
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,16,13,28,070,17,26,23,252,,04,14,186,15*77
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45

Beachten Sie einige leere Felder, zum Beispiel:

  • GSV- Aufzeichnungen, die Satelliten als „sichtbar“ beschreiben, fehlen das SNR-Feld (Signal-Rausch-Verhältnis) für Satellit 16 und alle Daten für Satellit 36.
  • Der GSA- Datensatz, der Satelliten auflistet, die zur Bestimmung eines Fixpunktes (Position) verwendet werden, und einen DOP des Fixpunktes angibt, enthält 12 Felder für die Nummern der Satelliten, aber nur 8 Satelliten wurden berücksichtigt – also bleiben 4 Felder leer.

C-Implementierung der Prüfsummengenerierung

Die Prüfsumme am Ende jedes Satzes ist das XOR aller Bytes im Satz, mit Ausnahme des anfänglichen Dollarzeichens. Der folgende C-Code generiert eine Prüfsumme für den als "mystring" eingegebenen String und gibt sie an den Ausgabestream aus. Im Beispiel wird ein Satz aus der Beispieldatei verwendet.

#include <stdio.h>

int checksum(const char *s) {
    int c = 0;

    while (*s)
        c ^= *s++;

    return c;
}

int main()
{
    char mystring[] = "BNALF,1,1,0,,B,W,V,,220003,,0,0,VISUAL ALARM";

    printf("String: %s\nChecksum: 0x%02X\n", mystring, checksum(mystring));

    return 0;
}

Status

NMEA 0183 wurde weiterhin separat gepflegt: V4.10 wurde Anfang Mai 2012 veröffentlicht und am 12. Mai 2012 ein Erratum vermerkt. Es ist nicht klar, ob es eine aktive Entwicklung gibt. Die neueste NMEA-Ankündigung zu diesem Thema ist älter als der V4.10-Standard. Es gibt ein Update vom 27.11.2018 auf den 4.11.

Siehe auch

Verweise

Externe Links