Funzioni ed FB supporto protocollo NMEA (eLLabNMEALib)¶
Attenzione! Per utilizzare la libreria occorre importarla nel proprio progetto. Vedere capitolo relativo all”import delle librerie.
NMEA 0183 (O più comunemente NMEA) è uno standard di comunicazione di dati utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L’ente che gestisce e sviluppa il protocollo è la National Marine Electronics Association.
Questo protocollo si basa sul principio che la fonte, detta talker, può soltanto inviare i dati (sentences) e la ricevente, detta listener, può soltanto riceverli.
La libreria eLLabNMEALib fornisce una serie di funzioni e blocchi funzione per gestire le sentenze NMEA, in pratica è possibile realizzare programmi con l’ambiente di sviluppo LogicLab che si comportano come listeners di sentenze NMEA.
NMEASInterface_v1, NMEA system interface¶
Type | Library |
FB | eLLabNMEALib_C000 |
Questo blocco funzione gestisce l’interfaccia verso un dispositivo che invia sentenze NMEA connesso al dispositivo di I/O definito in File, 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.
L’FB riceve le sentenze NMEA dal dispositivo, ne controlla il prefisso comparandolo con la stringa definita in DID, controlla se la sentenza ricevuta è corretta (Controllo sul CRC). L’uscita Done si attiva per un loop ad ogni ricezione di sentenza NMEA corretta.
L’FB ritorna un NMEAID che deve essere passato alle FB collegate (FB di gestione sentenze NMEA). L’uscita RxString riportala stringa ricevuta dal dispositivo.
Enable (BOOL) | Abilitazione blocco funzione. |
SpyOn (BOOL) | Attiva spionaggio. |
File (FILEP) | Flusso dati stream ritornato dalla funzione Sysfopen. |
DID (STRING[2]) | Stringa di definizione prefisso dispositivo. |
Done (BOOL) | Attivo per un loop di programma su ricezione sentenza corretta. |
Fault (BOOL) | Attivo per un loop di programma se errore gestione. |
NMEAID (@_NMEADATASTRUCT) | ID interfaccia con sistema NMEA da passare alle FB collegate. |
RxString (STRING[82]) | Stringa ricevuta dal dispositivo. |
Codici di errore
In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10017010 | Valore di File non definito. |
10017020 | FB protetta, terminato tempo funzionamento in modo demo. |
10017050 | Timeout esecuzione. |
10017070 | Errore case gestione. |
10017100~4 | Errore ricezione sentenza NMEA. |
GLLSentence, Geographic Position sentence¶
Type | Library |
FB | eLLabNMEALib_C000 |
Questo blocco funzione esegue la ricezione della sentenza GLL Geographic Position, si collega al blocco funzione NMEASInterface di gestione dispositivo NMEA. Occorre passare NMEAID in uscita dal blocco funzione di gestione dispositivo.
La sentenza GLL contiene le informazioni di latitudine, longitudine ora e fix, esempio di sentenza $IIGLL,4419.0173,N,00829.6653,E,084550.00,A,2*09<CR><LF>.
L’FB controlla correttezza dei campi della sentenza e ne estrae le informazioni di latitudine, longitudine e tempo. L’uscita Done si attiva per un loop ad ogni ricezione di sentenza GLL corretta.
Enable (BOOL) | Abilitazione blocco funzione. |
NMEAID (@_NMEADATASTRUCT) | ID interfaccia con sistema NMEA fornito in uscita dal blocco funzione MEASInterface. |
Done (BOOL) | Attivo per un loop di programma su ricezione sentenza GLL corretta. |
Fault (BOOL) | Attivo per un loop di programma se errore sentenza. |
Latitude (REAL) | Valore di latitudine indicato nella sentenza, il valore è espresso in frazione di gradi. Valori positivi indicano latitudine nord, valori negativi latitudine sud. |
Longitude (REAL) | Valore di longitudine indicato nella sentenza, il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest. |
UTCHour (USINT) | Valore di ora UTC indicato nella sentenza. |
UTCMinute (USINT) | Valore di minuti UTC indicato nella sentenza. |
UTCSecond (USINT) | Valore di secondi UTC indicato nella sentenza. |
Codici di errore
In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10018010 | NMEAID non definito. |
10018020 | NMEAID non corretto. |
10018100~5 | Errore nel valore di latitudine. |
10018200~5 | Errore nel valore di longitudine. |
10018300~3 | Errore nel valore ora UTC. |
10018400 | Errore acquisizione Status sentenza. |
MWVSentence, Wind Speed and Angle sentence¶
Type | Library |
FB | eNMEALib_B000 |
Questo blocco funzione esegue la ricezione della sentenza MWV wind speed and angle, si collega al blocco funzione NMEASInterface di gestione dispositivo NMEA. Occorre passare NMEAID in uscita dal blocco funzione di gestione dispositivo.
La sentenza MWV contiene le informazioni di velocità e direzione del vento, esempio di sentenza $IIMWV,120.09,R,4.53,N,A*35<CR><LF>.
L’FB controlla correttezza dei campi della sentenza e ne estrae le informazioni di velocità e direzione. L’uscita Done si attiva per un loop ad ogni ricezione di sentenza MWV corretta.
Enable (BOOL) | Abilitazione blocco funzione. |
NMEAID (@_NMEADATASTRUCT) | ID interfaccia con sistema NMEA fornito in uscita dal blocco funzione MEASInterface. |
Done (BOOL) | Attivo per un loop di programma su ricezione sentenza MWV corretta. |
Fault (BOOL) | Attivo per un loop di programma se errore sentenza. |
WSpeed (REAL) | Valore di velocità del vento (Nodi). |
WPAngle (REAL) | Valore angolo polare (Relative) direzione vento. |
Codici di errore
In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10020010 | NMEAID non definito. |
10020020 | NMEAID non corretto. |
10020100~3 | Errore nel valore di angolo vento. |
10020200~3 | Errore nel valore di velocità vento. |
10020400 | Errore acquisizione Status sentenza. |
Esempi¶
Ecco un semplice programma che acquisisce le sequenze NMEA da un ricevitore GPS collegato alla porta COM0.
Definizione variabili
Esempio ST (PTP123B000, ST_GPSInterface)
(\* Serial port initialization. \*)
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 \*)
END_IF;
(\* Manage the serial port. \*)
Serial(Open:=TRUE); (\* Serial port management \*)
(\* Execute the NMEA interface. \*)
NMEARx.DID:='GP'; (\* Device ID \*)
NMEARx.SpyOn:=TRUE; (\* Spy on \*)
NMEARx.File:=Serial.File; (\* Data stream \*)
NMEARx(Enable:=SysFIsOpen(NMEARx.File)); (\* NMEA device interface FB \*)
(\* Acquires the GLL sentence. \*)
GLL.NMEAID:=NMEARx.NMEAID; (\* NMEA interface ID \*)
GLL(Enable:=TRUE); (\* GLL sentence acquisistion FB \*)
(\* Acquires the MWV sentence. \*)
MWV.NMEAID:=NMEARx.NMEAID; (\* NMEA interface ID \*)
MWV(Enable:=TRUE); (\* MWV sentence acquisistion FB \*)
(\* [End of file] \*)