|
Cartografia
elettronica DigiMap. Le carte ... vive |
|
I formati delle stringhe NMEA utilizate
da TourMap |
Struttura delle frasi NMEA
Tutte le frasi NMEA sono costituite da una sequenza di caratteri
ASCII, e costituiti da un prefisso, una serie di campi ed un
checksum finale. L'inizio della frase è delimitato da
un carattere "$", la fine da una sequenza CR LF ed
i singoli campi sono separati da virgole. Esempio:$PREFISSO,
campo, campo,
, campo, *checksum<CR><LF>
Se i dati per un campo non sono disponibili, il campo viene omesso,
ma le virgole che lo delimiterebbero sono comunque aggiunte,
senza spazi tra di loro.
Data e ora sono sempre riferiti al fuso di Greenwich senza eventuale
ora legale.
$GPRMC - Recommended Minimum Specific
GPS/TRANSIT Data
$GPRMC,125642.57,A,4512.72,N,00934.88,E,023.45,358.20,291105,1.2,E,A*44
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
hhmmss.ss |
125642.57 |
Ora UTC-GPS |
|
2 |
A |
A |
Stato: A=Active, Attivo; V=Void, Nullo (per ricordarne
il significato: è come una freccia in su/giù) |
|
3 |
ggpp.pp |
4512.72 |
Latitudine della posizione attuale (numero variabile di decimali) |
|
4 |
A |
N |
Emisfero della posizione attuale: N=Nord; S=Sud |
|
5 |
gggpp.pp |
00934.88 |
Longitudine della posizione attuale (numero variabile di
decimali) |
|
6 |
A |
E |
Verso della posizione attuale: E=Est; W=Ovest |
|
7 |
x.x |
023.45 |
Velocità al suolo, in nodi |
|
8 |
x.x |
358.20 |
Track Made Good - Direzione di movimento, in gradi reali |
|
9 |
ddmmyy |
291105 |
Data |
|
10 |
x.x |
1.2 |
Variazione / declinazione magnetica , in gradi |
|
11 |
A |
E |
Verso della variazione / declinazione magnetica |
|
12 |
A |
D |
Tipo di rilevazione: A=Autonomous, D=Differential, E=Estimated,
N=Non valid data (dalla versione 2.3) |
|
13 |
*CC |
*44 |
CheckSum |
ATTENZIONE: Sul disco la stringa viene memorizzata come: @nn,$GPRMC,125642.57,A,4512.72,N,00934.88,E,023.45,358.20,291105,1.2,E,A*44 @nn è un campo riservato |
$GPGGA - Global Positioning System
fix data
$GPGGA,125642.57,4512.72,N,00934.88,E,1,8,1.9,540.4,M,45.8,M,8.0,1023*33
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
hhmmss.ss |
125642.57 |
Ora UTC - GPS |
|
2 |
ggpp.pp |
4512.72 |
Latitudine della posizione attuale (numero di decimali
variabile) |
|
3 |
A |
N |
Emisfero della posizione attuale: N=Nord; S=Sud |
|
4 |
gggpp.pp |
00934.88 |
Longitudine della posizione attuale (numero di decimali
variabile) |
|
5 |
A |
E |
Verso della posizione attuale: E=Est; W=Ovest |
|
6 |
n |
1 |
Qualità del rilevamento GPS: 0=non valido; 1=GPS;
2=DGPS |
|
7 |
x |
8 |
Numero di satelliti in vista (teorica, non necessariamente
in uso o ricevuti) |
|
8 |
x.x |
1.9 |
HDOP - Horizontal Dilution Of Precision |
|
9 |
x.x |
540.4 |
Altitudine dell'antenna GPS relativa al livello medio del
mare (geoide) |
|
10 |
A |
M |
Indicatore dell'unità di misura dell'altitudine
M=metri |
|
11 |
x.x |
45.8 |
Altezza (separazione) del geoide (livello medio del mare)
rispetto all'elissiode WGS84 |
|
12 |
A |
M |
Indicatore dell'unità di misura della separazione
del geoide M=metri |
|
13 |
x.x |
8.0 |
Tempo in secondi dall'ultimo aggiornamento DGPS |
|
14 |
nnnn |
1023 |
Identificatore della stazione DGPS (0000-1023) |
|
15 |
*CC |
*33 |
CheckSum |
ATTENZIONE: Sul disco la stringa viene memorizzata come: @nn,$GPGGA,125642.57,4512.72,N,00934.88,E,1,8,1.9,540.4,M,45.8,M,8.0,1023*33 @nn è un campo riservato |
$GPIOP - Dati degli IO
$GPIOP,01001010,00000000,0.03,0.01,0.03,0.03*42
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
$GPIOP |
$GPIOP |
Identificatore di sentenza |
|
2 |
bbbbbbbb |
01001010 |
Stato degli INGRESSI (1:on, 0:off) |
|
3 |
bbbbbbbb |
00000000 |
Stato delle USCITE (1:on, 0:off) |
|
4 |
yy.yy |
0.03 |
Analogico 1 |
|
5 |
yy.yy |
0.01 |
Analogico 2 |
|
6 |
yy.yy |
0.03 |
Analogico 3 |
|
7 |
yy.yy |
0.03 |
Analogico 4 |
|
8 |
*cc |
*42 |
CheckSum |
ATTENZIONE: Sul disco la stringa viene memorizzata come: hhmmss,$GPIOP,01001010,00000000,0.03,0.01,0.03,0.03*42 Dove hhmmss è l'orario (fuso di Greenwich,
senza eventuale ora legale).Se il ricevitore GPS aveva disponibile
l'orario, coincide con l'ora in cui è stata rilevata la
stringa, altrimenti è l'ora di ricezione della stringa
da parte di TourMap Server. |
$GPTSP - Dati dei transponder
$GPTSP,260706,092900,A,4432.9986,N,01055.4016,E,1122334455,1*2D
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
ddmmyy |
260706 |
Data |
|
2 |
hhmmss.ss |
092900 |
Ora UTC GPS |
|
3 |
fix |
A |
Fix (A:ok, V o S: not ok) |
|
4 |
ggpp.pp |
4432.9986 |
Latitudine |
|
5 |
A |
N |
Latitudine (N o S) |
|
6 |
gggpp.pp |
01055.4016 |
Longitudine |
|
7 |
A |
E |
Longitudine (E o W) |
|
8 |
AAAAAAAAAA |
1122334455 |
Dati letti dal transponder |
|
9 |
b |
1 |
Campo fisso = 1 |
|
10 |
*cc |
*2D |
CheckSum |
ATTENZIONE: In alcune versioni di TourMap, sul disco la
stringa viene memorizzata come: hhmmss, $GPTSP,260706,092900,A,4432.9986,N,01055.4016,E,1122334455,1*2D Dove hhmmss è l'orario (fuso di Greenwich,
senza eventuale ora legale) in cui è stata rilevata la
stringa. Se il ricevitore GPS aveva disponibile l'orario, coincide
con il campo n. 2, altrimenti è l'ora di ricezione della
stringa da parte di TourMap Server. |
$GPTSD - Dati dei transponder
$GPTSD,260706,092900,A,4432.9986,N,01055.4016,E,1234567890123456*2D
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
ddmmyy |
260706 |
Data |
|
2 |
hhmmss.ss |
092900 |
Ora UTC GPS |
|
3 |
fix |
A |
Fix (A:ok, V o S: not ok) |
|
4 |
ggpp.pp |
4432.9986 |
Latitudine |
|
5 |
A |
N |
Latitudine (N o S) |
|
6 |
gggpp.pp |
01055.4016 |
Longitudine |
|
7 |
A |
E |
Longitudine (E o W) |
|
8 |
AAAAAAAAAAAAAAAAA |
1234567890123456 |
Dati letti dal transponder |
|
9 |
*cc |
*2D |
CheckSum |
ATTENZIONE: In alcune versioni di TourMap, sul disco la
stringa viene memorizzata come: hhmmss, $GPTSD,260706,092900,A,4432.9986,N,01055.4016,E,1234567890123456*2D Dove hhmmss è l'orario (fuso di Greenwich,
senza eventuale ora legale) in cui è stata rilevata la
stringa. Se il ricevitore GPS aveva disponibile l'orario, coincide
con il campo n. 2, altrimenti è l'ora di ricezione della
stringa da parte di TourMap Server. |
$GPTSI - Identificativo del transponder
$GPTSI,260706,092900,A,4432.9986,N,01055.4016,E,1234567890123456*2D
|
Campo |
Formato |
Esempio |
Descrizione |
|
1 |
ddmmyy |
260706 |
Data |
|
2 |
hhmmss.ss |
092900 |
Ora UTC GPS |
|
3 |
fix |
A |
Fix (A:ok, V o S: not ok) |
|
4 |
ggpp.pp |
4432.9986 |
Latitudine |
|
5 |
A |
N |
Latitudine (N o S) |
|
6 |
gggpp.pp |
01055.4016 |
Longitudine |
|
7 |
A |
E |
Longitudine (E o W) |
|
8 |
AAAAAAAAAAAAAAAAA |
1234567890123456 |
Dati letti dal transponder |
|
9 |
*cc |
*2D |
CheckSum |
ATTENZIONE: In alcune versioni di TourMap, sul disco la
stringa viene memorizzata come: hhmmss, $GPTSD,260706,092900,A,4432.9986,N,01055.4016,E,1122334455*2D Dove hhmmss è l'orario (fuso di Greenwich,
senza eventuale ora legale) in cui è stata rilevata la
stringa. Se il ricevitore GPS aveva disponibile l'orario, coincide
con il campo n. 2, altrimenti è l'ora di ricezione della
stringa da parte di TourMap Server. |
La checksum
Al termine di ciascuna frase NMEA viene posto, dopo un asterisco,
un checksum per poter individuare eventuali errori sulla linea
di trasmissione tra emettitore e ascoltatore. La checksum è
l' exclusive OR a 8-bit (senza i bit di start o stop) di tutti
i caratteri della frase NMEA, compresi i delimitatori ","
(le virgole), tra - ma escludendo - i delimitatori "$"
e "*". Il valore esadecimale dei 4 bit più "alti"
e "bassi" del risultato vengono convertiti in due caratteri
ASCII (0-9, A-F). Viene trasmesso per primo il carattere più
significativo.
Esempio di calcolo CheckSum
'====================================================================
'If the first char of A is $ then this function don't consider
it.
'If there is "*nn" string at the end of sentence, then
this function don't consider it.
'====================================================================
Function get_checksum$(b$)
Dim i%, j%, k%, nchk%, Lchk$,
a$
a = b
If (InStr(a, "@") <> 0) Then
i = InStr(a, "$")
a = Mid(a, i, Len(a))
End If
j = 1
If (Mid(a, 1, 1) = "$") Then j = 2
k = InStr(a, "*")
If (k = 0) Then
k = Len(a)
Else
k = k - 1
End If
For i = j To k
nchk = nchk Xor Asc(Mid(a, i, 1))
Next
Lchk = Hex(nchk)
If (Len(Lchk) = 1) Then Lchk = "0" + Lchk
get_checksum = Lchk
End Function |