Passa al contenuto principale

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

NMEASInterface_v1​

Modificato contatore sentenze ricevute SCounter che diventa SOk. Aggiunto contatore SBroken delle sentenze incomplete.

Descrizione​

Immagine FB NMEASInterface_v1

ParametroTipoDescrizione
EnableBOOLAbilitazione blocco funzione.
SpyOnBOOLSe attivo permette di spiare il funzionamento del FB (Vedi articolo).
FileeFILEPFlusso dati stream da cui sono ricevute le sentenze NMEA.
DoneBOOLAttivo 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.
FaultBOOLAttivo per un loop se errore esecuzione comando.
Sentence@STRINGRitorna l'indirizzo del buffer che contiene la sentenza ricevuta, valido solo se Done=TRUE.
SOkUDINTContatore sentenze corrette ricevute.
SBrokenUDINTContatore sentenze incomplete ricevute.
ErrorsUDINTContatore 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

TriggerDescrizione
16#00000001Rx: Sentenza ricevuta.
16#40000000Er: Errore esecuzione.
16#10000000Lg: 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]