Questo blocco funzione esegue la decodifica della sentenza NMEA GLL Geographic Position, si collega al blocco funzione NMEASInterface di interfaccia sentenze NMEA il cui indirizzo di allocazione è passato nel parametro NMEASInterface. La sentenza GLL contiene le informazioni di latitudine, longitudine, ecco un esempio di sentenza:
$GPGLL,4916.45,N,12311.12,W,225444,A,*1D Where: GLL Geographic position, Latitude and Longitude 4916.46,N Latitude 49 deg. 16.45 min. North 12311.12,W Longitude 123 deg. 11.12 min. West 225444 Fix taken at 22:54:44 UTC A Data Active or V (void) *iD checksum data
L'FB controlla il checksum della sentenza e ne estrae le informazioni. I dati in uscita sono sincroni con l'attivazione di Done attivato per un loop ad ogni ricezione di sentenza corretta.
Function block
CODESYS: Non disponibile
LogicLab: eLLabNMEALib
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
NMEASInterface (@NMEASInterface) Indirizzo istanza FB NMEASInterface di interfaccia sentenze NMEA.
Done (BOOL) Attivo per un loop di programma su ricezione sentenza corretta. I valori in uscita sono validi sulla sua attivazione.
Fault (BOOL) Attivo per un loop se errore esecuzione.
Talker (STRING[2]) Stringa definizione Talker, ogni dispositivo GPS viene identificato con 2 caratteri. Solitamente i dispositivi GPS sono identificati con le lettere GP.
Latitude (REAL) Latitudine, il valore è espresso in frazione di gradi. Valori positivi indicano latitudine nord, valori negativi latitudine sud.
Longitude (REAL) Longitudine , il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
FixTime (UDINT) Valore in secondi UTC che indica il tempo in cui è stato effettuato il fix dei valori.
SCounter (UDINT) Contatore sentenze corrette ricevute.
Errors (UDINT) Contatore 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.
Errori
In caso di errore si attiva l'uscita Fault, eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.
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.
PROGRAM ST_NMEAGLLSentence VAR Serial : SysSerialPort; (* Serial port management *) NMEA : NMEASInterface; (* NMEA sentence interface *) GLL : NMEAGLLSentence; (* NMEA GLL sentence decoding *) FixHour : USINT; (* Fix time (Hour) *) FixMinute : USINT; (* Fix time (Minute) *) FixSecond : USINT; (* Fix time (Second) *) 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:=FALSE; //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); //Fix time (Hour) FixMinute:=TO_USINT(MOD(GLL.FixTime/60, 60)); //Fix time (Minute) FixSecond:=TO_USINT(MOD(GLL.FixTime, 60)); //Fix time (Second) END_IF; // [End of file]
Ultimo aggiornamento: 5 Ottobre 2020