Passa al contenuto principale

NMEAGLLSentence, Geographic Position sentence

Questo blocco funzione esegue la decodifica della sentenza NMEA GLL Geographic Position che contiene le informazioni di latitudine, longitudine. Questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E’ comunque possibile utilizzarlo liberamente in modo test per 30 Min.

Sul fronte di attivazione di Decode l'FB estrae le informazioni dalla stringa NMEA definita in Sentence, se dati corretti viene attivato Done, in caso di errore si attiva Fault.

Upgrade list

NMEAGLLSentence_v1​

Non viene più passato l'indirizzo dell'istanza NMEASInterface di acquisizione sentenze, ora è possibile passare in Sentence l'indirizzo del buffer dove è presente la sentenza da decodificare e con il comando Decode ne viene eseguita la decodifica. L'uscita FixTime ora è di tipo TIME_OF_DAY.

Esempio sentenza "GLL"

$GPGLL,4916.45,N,12311.12,W,225444.000,A,*1D
+-+-+ +---+---+ +---+----+ +--+-----+ + ++
| | | | | + Checksum
| | | | +--- Data Active or V (void)
| | | +----------- Fix taken at 22:54:44.000 UTC
| | +--------------------- Longitude 123 deg. 11.12 min. West
| +------------------------------- Latitude 49 deg. 16.45 min. North
+--------------------------------------- Talker identifier

Descrizione​

Immagine FB NMEAGLLSentence_v1

ParametroTipoDescrizione
SpyOnBOOLSe attivo permette di spiare il funzionamento del FB (Vedi articolo).
DecodeBOOLSul fronte di attivazione comanda la decodifica della sentenza.
Sentence@STRINGl’indirizzo del buffer che contiene la sentenza da decodificare.
DoneBOOLAttivo per un loop di programma se sentenza corretta.
FaultBOOLAttivo per un loop di programma se errore esecuzione.
TalkerSTRING\[2\]Stringa definizione Talker, ogni dispositivo GPS viene identificato con 2 caratteri. Solitamente i dispositivi GPS sono identificati con le lettere GP.
LatitudeLREALLatitudine, il valore è espresso in frazione di gradi. Valori positivi indicano latitudine nord, valori negativi latitudine sud.
LongitudeLREALLongitudine , il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
FixTimeTIME_OF_DAYOra UTC in cui è stato effettuato il fix dei valori.
SCounterUDINTContatore sentenze corrette ricevute.
ErrorsUDINTContatore errori esecuzione.

Trigger di spy​

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Livelli di trigger

TriggerDescrizione
16#00000001Rx: Stringa ricevuta.
16#10000000Lg: Log valori decodificati.
16#40000000Er: Errore esecuzione.

Esempi​

Come utilizzare gli esempi.
Viene gestita la ricezione di sentenze NMEA da un dispositivo GPS collegato alla porta seriale di uno SlimLine e viene decodificata la sentenza GLL ricevuta.

LogicLab (Ptp123, ST_NMEAGLLSentence)
PROGRAM ST_NMEAGLLSentence
VAR
FixHour : USINT; (* Fix time (Hour) *)
FixMinute : USINT; (* Fix time (Minute) *)
FixSecond : USINT; (* Fix time (Second) *)
Serial : SysSerialPort; (* Serial port management *)
NMEA : NMEASInterface; (* NMEA sentence interface *)
GLL : NMEAGLLSentence; (* NMEA GLL sentence decoding *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_NMEAGLLSentence"
// *****************************************************************************
// The program receives and decodes the NMEA GLL sentence.
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.

IF (SysFirstLoop) THEN
Serial.COM:=ADR('COM0'); (* COM port definition *)
Serial.Baudrate:=9600; (* Baudrate *)
Serial.Parity:='N'; (* Parity *)
Serial.DataBits:=8; (* Data bits *)
Serial.StopBits:=1; (* Stop bits *)
Serial.DTRManagement:=DTR_AUTO_WO_TIMES; (* DTR management *)
Serial.DTRComplement:=FALSE; (* DTR complement *)
Serial.EchoFlush:=FALSE; (* Received echo flush *)
Serial.DTROnTime:=0; (* DTR On time delay (mS) *)
Serial.DTROffTime:=0; (* DTR Off time delay (mS) *)
Serial.FlushTm:=0; (* Flush time (mS) *)
Serial.RxSize:=0; (* Rx buffer size *)
Serial.TxSize:=0; (* Tx buffer size *)

NMEA.SpyOn:=TRUE; //Spy On
GLL.SpyOn:=TRUE; //Spy On
END_IF;

// -------------------------------------------------------------------------
// NMEA SENTENCE MANAGEMENT
// -------------------------------------------------------------------------
// Connect to the NMEA device.

Serial(Open:=TRUE); //Serial port management

// Sentence reception and GLL sentence decoding.

NMEA.Enable:=SysFIsOpen(Serial.File); //Enable
NMEA(File:=Serial.File); //NMEA sentence interface
GLL(NMEASInterface:=ADR(NMEA)); //NMEA GLL sentence decoding

// Calculate fix time in HH:MM:SS.

IF (GLL.Done) THEN
FixHour:=TO_USINT(GLL.FixTime/3600.0); //Fix time (Hour)
FixMinute:=TO_USINT(MOD(TO_UDINT(GLL.FixTime/60.0), 60)); //Fix time (Minute)
FixSecond:=TO_USINT(MOD(TO_UDINT(GLL.FixTime), 60)); //Fix time (Second)
END_IF;

// [End of file]