Passa al contenuto principale

NMEARMCSentence, Recommended Minimum sentence

Questo blocco funzione esegue la decodifica della sentenza NMEA RMC Recommended Minimum che contiene le informazioni di latitudine, longitudine, velocità e tempo. 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.

Sul fronte di attivazione di Decode l'FB estrae le informazioni dalla stringa NMEA definita in Sentence, se dati corretti viene attivato Done, in caso di errore si attiva Fault.

Upgrade list

NMEARMCSentence_v1​

Non viene più passato l'indirizzo dell'istanza NMEASInterface di acquisizione sentenze, ora è possibile passare in Sentence l'indirizzo del buffer dove è presente la sentenza da decodificare e con il comando Decode ne viene eseguita la decodifica.

Esempio sentenza "RMC"

$--RMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A.
+-+--+ +-+--+ + +---+----+ +----+----+ +-+-+ +-+-+ +-+--+ +--+--+ ++
| | | | | | | | | + Checksum
| | | | | | | | +----- Magnetic variation
| | | | | | | +------------- Date - 23rd of March 1994
| | | | | | +------------------- Track angle in degrees True
| | | | | +------------------------- Speed over the ground in knots
| | | | +---------------------------------- Longitude 11 deg 31.000' E
| | | +---------------------------------------------- Latitude 48 deg 07.038' N
| | +---------------------------------------------------- Status A=active or V=Void.
| +--------------------------------------------------------- Fix taken at 12:35:19 UTC
+---------------------------------------------------------------- Talker identifier, GP: GPS only, GN: More than one constellation

Descrizione​

Immagine FB NMEARMCSentence_v1

ParametroTipoDescrizione
SpyOnBOOLSe attivo permette di spiare il funzionamento del FB (Vedi articolo).
DecodeBOOLSul fronte di attivazione comanda la decodifica della sentenza.
Sentence@STRINGl’indirizzo del buffer che contiene la sentenza da decodificare.
DoneBOOLAttivo per un loop di programma se sentenza corretta.
FaultBOOLAttivo per un loop di programma se errore esecuzione.
TalkerSTRING\[2\]Stringa definizione Talker, ogni dispositivo GPS viene identificato con 2 caratteri. Solitamente i dispositivi GPS sono identificati con le lettere GP.
LatitudeLREALLatitudine, il valore è espresso in frazione di gradi. Valori positivi indicano latitudine nord, valori negativi latitudine sud.
LongitudeLREALLongitudine, il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
FixTimeDATE_AND_TIMEValore data Epoch time UTC che indica data in cui è stato effettuato il fix dei valori.
GSpeedREALVelocità di movimento (Km/h).
TrackAngleREALDirezione di movimento (Gradi).
DeclinationREALDeclinazione magnetica, il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
SCounterUDINTContatore sentenze corrette ricevute.
ErrorsUDINTContatore errori esecuzione.

Trigger di spy​

Se SpyOn attivo  è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Livelli di trigger

TriggerDescrizione
16#00000001Rx: Stringa ricevuta.
16#10000000Lg: Log valori decodificati.
16#40000000Er: Errore esecuzione.

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 RMC ricevuta.

LogicLab (Ptp123, ST_NMEARMCSentence)
PROGRAM ST_NMEARMCSentence
VAR
LDTS : LDATETIMESTRUCT; (* Long Date/Time struct *)
NMEA : NMEASInterface_v1; (* NMEA sentence interface *)
RMC : NMEARMCSentence_v1; (* NMEA RMC sentence decoding *)
Serial : SysSerialPort; (* Serial port management *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_NMEARMCSentence"
// *****************************************************************************
// The program receives and decodes the NMEA RMC 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
RMC.SpyOn:=FALSE; //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(File:=Serial.File); //NMEA sentence interface
NMEA.Enable:=SysFIsOpen(Serial.File); //Enable
RMC(Decode:=NMEA.Done, Sentence:=NMEA.Sentence); //NMEA RMC sentence decoding

// Convert fix time in Date/Time.

IF (RMC.Done) THEN
eTO_JUNK(SPLIT_DT(TO_DATE_AND_TIME(RMC.FixTime), ADR(LDTS.Year), ADR(LDTS.Month), ADR(LDTS.Day), ADR(LDTS.Hours), ADR(LDTS.Minutes), ADR(LDTS.Seconds)));
END_IF;

// [End of file]