NMEARMCSentence, Recommended Minimum sentence

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

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
Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabNMEALib

Descrizione

SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
Decode (BOOL) Sul fronte di attivazione comanda la decodifica della sentenza.
Sentence (@STRING) l’indirizzo del buffer che contiene la sentenza da decodificare.
Done (BOOL) Attivo per un loop di programma se sentenza corretta.
Fault (BOOL) Attivo per un loop di programma se errore esecuzione.
Talker (STRING[2]) Stringa definizione Talker, ogni dispositivo GPS viene identificato con 2 caratteri. Solitamente i dispositivi GPS sono identificati con le lettere GP.
Latitude (LREAL) Latitudine, il valore è espresso in frazione di gradi. Valori positivi indicano latitudine nord, valori negativi latitudine sud.
Longitude (LREAL) Longitudine, il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
FixTime (DATE_AND_TIME) Valore data Epoch time UTC che indica data in cui è stato effettuato il fix dei valori.
GSpeed (REAL) Velocità di movimento (Km/h).
TrackAngle (REAL) Direzione di movimento (Gradi).
Declination (REAL) Declinazione magnetica, il valore è espresso in frazione di gradi. Valori positivi indicano longitudine est, valori negativi longitudine ovest.
SCounter (UDINT) Contatore sentenze corrette ricevute.
Errors (UDINT) Contatore errori esecuzione.

Immagine FB NMEARMCSentence_v1

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
    i : UDINT; (* Auxiliary variable *)
    Serial : SysSerialPort; (* Serial port management *)
    LDTS : LDATETIMESTRUCT; (* Long Date/Time struct *)
    NMEA : NMEASInterface; (* NMEA sentence interface *)
    RMC : NMEARMCSentence; (* NMEA RMC sentence decoding *)
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:=TRUE; //Spy On
        RMC.SpyOn:=TRUE; //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.Enable:=SysFIsOpen(Serial.File); //Enable
    NMEA(File:=Serial.File); //NMEA sentence interface
    RMC(NMEASInterface:=ADR(NMEA)); //NMEA GLL sentence decoding

    // Convert fix time in Date/Time.

    IF (RMC.Done) THEN
        i:=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]
Was this article helpful?