Home 
  
 
- Programmierdetails zu PsiNMEA -
  
  
  
 

Parseroutinen ab Version 1.03:
(vollständig implementiert ab Version 1.05)

Die folgende Beschreibung bezieht sich auf den vollständig implementierten Parser (Version 1.05), der sich von seinen Vorgängerversionen auf Grund von Weiterentwicklungen leicht unterscheidet.

Damit ein Standard-Satzformat $--XYZ vom Parser interpretiert werden kann muß folgendes erfüllt sein:
  • In Prozedur PROC SentenceType_Standard$:(sentence$,n%):
    Die String-Liste STypes$() muß den Formatbezeichner XYZ enthalten.

  • Es muß folgende Prozedur geben

    PROC NMEA_xyz%:
    descr$="Kurze Beschreibung des Formates"
    fields%=Anzahl der Parsefelder
    field$(1)=erster Parsefeld-Deskriptor
    ...
    field$(n)=n. Parsefeld-Deskriptor
    ENDP

    (Zum Aufbau eines Parsefeld-Deskriptors siehe weiter unten.)
Für ein proprietäres Format $PMMMc des Herstellers mit dem Code MMM gilt das gleiche, wobei die Prozedurnamen hier jedoch SentenceType_MMM$:(sentence$,n%) und NMEA_MMM_c%: lauten. Zusätzlich muß jeder Hersteller-Code, für den proprietäre Daten implementiert sind, in der String-Liste MTypes$() der Prozedur ManufacturersType$:(mIDs$,n%) enthalten sein. (Momentan sind nur Message-Codes der Länge eines Zeichens implementiert.)

Die wenigen Schritte, die sich daraus ergeben, um dem Quelltext ein neues Format hinzuzufügen, sind hier ausführlich beschrieben.

Aufbau eines Parsefeld-Deskriptors:

ParseFeld-Deskriptor:='"' Datenbeschreibung ',' Datenformat ( Repeat-Indikator ) '"'
Datenbeschreibung:=String
String:=Zeichen { Zeichen }
Zeichen:=ASCII-Symbol
Datenformat:= Charformat | Boolformat | Stringformat | Zahlformat | Hexformat
| Kompaßformat | 'T' | 'D' | 'A' | 'O' | 'E' | 'N' | '-'
Charformat:='C' [ 'D' | 'R' | 'T' | 'L' | 'C'
| '(' Zeichen2 '=' String2 ')' '(' Zeichen2 '=' String2 ')' ]
Boolformat:='B' [ '(' String2 ')' '(' String2 ')' ]
Stringformat:=String [ '(' Zahl ')' ]
Zahlformat:='X' [ '(' [ '0' ] Zahl ')' ][ Einheitenformat ]
Hexformat:=Hexzahl [ '(' Zahl ')' ]
Kompaßformat:='M' [ 'M' | 'T' | 't' | 'm' ]
Einheitenformat:='[' Einheitengruppe '=' Einheitenzeichen ']'
Einheitengruppe:= 'D' | 'V' | 'T' | 'U' | 'K' | 'P' | 'v' | 'F' | 'S' | 'H' | 'R'
Einheitenzeichen:= 'B' | 'C' | 'D' | 'F' | 'f' | 'H' | 'h' | 'I'
| 'i' | 'j' | 'K' | 'k' | 'l' | 'M' | 'm' | 'N'
| 'P' | 'S' | 's' | 'R' | '#' | '*' | Zahl
Zahl:=Ziffer { Ziffer }
Hexzahl:=Hexziffer { Hexziffer }
Ziffer:='0' | '1' | ... | '9'
Hexziffer:=Ziffer | 'A' | ... | 'F'
String2:=Zeichen2 { Zeichen2 }
Zeichen2:=ASCII-Symbol \ Syntaxsymbol
Syntaxsymbol:=',' | '(' | ')'
Repeat-Indikator:='*'

Ausführliche Semantikbeschreibung: siehe hier

Achtung ! Parsefeld ist nicht das gleiche, wie Datenfeld. Ein Parsefeld kann unter Umständen auch zwei aufeinanderfolgende Datenfelder beinhalten (oder sogar Wiederholungen von Datenfeldern beschreiben).
Beispiel:
$--RMChhmmss.ssAllll.llN|Syyyyy.yyE|Wx.xx.xxxxxx.xE|W
DatenfelderUTC timestatuslatitudelatitude
direction
longitudelongitude
direction
speedtrackdatemagnetic
variation
magnetic
variation
ParsefelderUTC timestatuslatitudelongitudespeedtrackdatemagnetic
variation

Zugehörige Deskriptoren:

"UTC Time,T"
"Status,C(A=okay)(V=Navigation receiver warning)"
"Latitude,A"
"Longitude,O"
"Speed over ground,X[V=N]"
"Track made good,MT"
"Date,D"
"Magnetic Variation,X[R=*]"

Parse-Vorgang

Das Interpretieren eines Standard-NMEA-Satzes erfolgt intern in folgenden Schritten (Prozedur Parse:):
  • Einlesen eines Satzes
  • Test, ob das Format implementiert ist (Prozedur SentenceType_Standard$:)
  • Erstellen der Parse-Deskriptoren für dieses Format (Prozedur NMEA_XYZ:)
  • Auswerten des Satzes (Prozedur ReadDatas%:)
  • Anzeigen/Auswerten der Daten
Intern stehen danach die Daten wie folgt zur Verfügung: siehe hier



Beteiligte Personen

NameSchwerpunkteMail/WWW
Torsten Baumbach Organisation,
Allgemeine Programmierung
(System/Oberfläche)

Homepage
Wolfram Müller (+) Programmierung leider verschieden

Reservierte UId

UID NameKUidTorstenBaumbach
UID268456758 (10005336 hex)

17.12.2007,