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
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]