NMEASInterface, NMEA sentence interface
Questo blocco funzione gestisce l'interfaccia verso un dispositivo che invia sentenze NMEA connesso allo stream 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, controlla il CRC della sentenza e se la sentenza ricevuta è corretta viene incrementato il valore di SOk, l'uscita Done si attiva per un loop, e in Sentence è ritornato l'indirizzo del buffer dove è contenuta la sentenza ricevuta.
In caso di errore esecuzione viene attivata per un loop di programma l'uscita Fault ed incrementato il valore in Errors.
Upgrade list
-
Se l'oggetto aggiornato non è nell'ultima versione del package, vedi capitolo "Aggiornamento librerie" in questo articolo.
-
Gli oggetti obsoleti sono inseriti nella libreria eLLabObsoleteLib fare riferimento al relativo manuale ed al manuale programmazione in formato pdf.
NMEASInterface_v1
Modificato contatore sentenze ricevute SCounter che diventa SOk. Aggiunto contatore SBroken delle sentenze incomplete.
Descrizione
| Parametro | Tipo | Descrizione |
|---|---|---|
| Enable | BOOL | Abilitazione blocco funzione. |
| SpyOn | BOOL | Se attivo permette di spiare il funzionamento del FB (Vedi articolo). |
| File | eFILEP | Flusso dati stream da cui sono ricevute le sentenze NMEA. |
| Done | BOOL | Attivo per un loop di programma su ricezione sentenza corretta. Contemporaneamente alla attivazione in Sentence è ritornato l'indirizzo del buffer dove si trova la sentenza ricevuta. |
| Fault | BOOL | Attivo per un loop se errore esecuzione comando. |
| Sentence | @STRING | Ritorna l'indirizzo del buffer che contiene la sentenza ricevuta, valido solo se Done=TRUE. |
| SOk | UDINT | Contatore sentenze corrette ricevute. |
| SBroken | UDINT | Contatore sentenze incomplete ricevute. |
| Errors | UDINT | Contatore errori esecuzione. |
Trigger di spy
Se SpyOn attivo è possibile utilizzare di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
| Trigger | Descrizione |
|---|---|
| 16#00000001 | Rx: Sentenza ricevuta. |
| 16#40000000 | Er: Errore esecuzione. |
| 16#10000000 | Lg: Messaggi di log funzionamento. |
Esempi
Come utilizzare gli esempi.
ST_NMEASInterface: Viene gestita la ricezione di sentenze NMEA da un dispositivo GPS collegato alla porta seriale.
ST_TCPClientNMEADecode: Viene gestita la ricezione di sentenze NMEA da un dispositivo GPS collegato con connessione TCP. Può essere utilizzato per acquisire il segnale GPS dai routers WLink.
LogicLab (Ptp123, ST_NMEASInterface)
PROGRAM ST_NMEASInterface
VAR
Serial : SysSerialPort; (* Serial port management *)
NMEA : NMEASInterface_v1; (* NMEA sentence interface *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_NMEASInterface"
// *****************************************************************************
// The program connects to a serial NMEA receiver and receives and decodes the
// NMEA sentences.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// 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
END_IF;
// -------------------------------------------------------------------------
// NMEA SENTENCE MANAGEMENT
// -------------------------------------------------------------------------
// Connect to the NMEA device.
Serial(Open:=TRUE); //Serial port management
// Sentence reception.
NMEA.Enable:=SysFIsOpen(Serial.File); //Enable
NMEA(File:=Serial.File); //NMEA sentence interface
// [End of file]
LogicLab (Ptp123, ST_TCPClientNMEADecode)
PROGRAM ST_TCPClientNMEADecode
VAR
TimeBf : UDINT; (* Time buffer (mS) *)
TCPClient : SysTCPClient; (* TCP client management *)
NMEA : NMEASInterface_v1; (* NMEA sentence interface *)
GLL : NMEAGLLSentence_v1; (* NMEA GLL sentence decoding *)
RMC : NMEARMCSentence_v1; (* NMEA RMC sentence decoding *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_TCPClientNMEADecode"
// *****************************************************************************
// The program connects to a TCP server and receives and decodes the NMEA
// sentences received.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.
IF (SysFirstLoop) THEN
TCPClient.PeerAdd:=ADR('192.168.0.184'); //Peer address
TCPClient.PeerPort:=20000; //Peer port
TCPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
TCPClient.LocalPort:=0; //Local port
TCPClient.FlushTm:=10; //Flush time (mS)
TCPClient.LifeTm:=10; //Life time (S)
TCPClient.RxSize:=512; //Rx buffer size
TCPClient.TxSize:=64; //Tx buffer size
NMEA.SpyOn:=TRUE; //Spy On
GLL.SpyOn:=TRUE; //Spy On
RMC.SpyOn:=TRUE; //Spy On
TimeBf:=SysTimeGetMs(); //Time buffer (mS)
END_IF;
// -------------------------------------------------------------------------
// NMEA SENTENCE MANAGEMENT
// -------------------------------------------------------------------------
// Connect to the NMEA device.
TCPClient(); //TCPClient management
// If connection goes in fault a delay is waited.
IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#1m)) THEN TCPClient.Connect:=TRUE; END_IF;
IF (TCPClient.Fault) THEN TCPClient.Connect:=FALSE; TimeBf:=SysTimeGetMs(); END_IF;
// Sentence reception.
NMEA(File:=TCPClient.File); //NMEA sentence interface
NMEA.Enable:=SysFIsOpen(TCPClient.File); //Enable
GLL(Decode:=NMEA.Done, Sentence:=NMEA.Sentence); //NMEA GLL sentence decoding
RMC(Decode:=NMEA.Done, Sentence:=NMEA.Sentence); //NMEA RMC sentence decoding
// [End of file]