NMEAGLLSentence, Geographic Position sentence

List

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

Questo blocco funzione esegue la decodifica della sentenza NMEA GLL Geographic Position che contiene le informazioni di latitudine, longitudine. 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

NMEAGLLSentence_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. L’uscita FixTime ora è di tipo TIME_OF_DAY.

Esempio sentenza “GLL”
$GPGLL,4916.45,N,12311.12,W,225444.000,A,*1D
 +-+-+ +---+---+ +---+----+ +--+-----+ +  ++
   |       |         |         |       |  + Checksum
   |       |         |         |       +--- Data Active or V (void)
   |       |         |         +----------- Fix taken at 22:54:44.000 UTC
   |       |         +--------------------- Longitude 123 deg. 11.12 min. West
   |       +------------------------------- Latitude 49 deg. 16.45 min. North
   +--------------------------------------- Talker identifier
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 (TIME_OF_DAY) Ora UTC in cui è stato effettuato il fix dei valori.
SCounter (UDINT) Contatore sentenze corrette ricevute.
Errors (UDINT) Contatore errori esecuzione.

Immagine FB NMEAGLLSentence_v1

Trigger di spy

Se SpyOn attivo è possibile utilizzare 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 GLL ricevuta.

LogicLab (Ptp123, ST_NMEAGLLSentence)
PROGRAM ST_NMEAGLLSentence
VAR
    FixHour : USINT; (* Fix time (Hour) *)
    FixMinute : USINT; (* Fix time (Minute) *)
    FixSecond : USINT; (* Fix time (Second) *)
    Serial : SysSerialPort; (* Serial port management *)
    NMEA : NMEASInterface; (* NMEA sentence interface *)
    GLL : NMEAGLLSentence; (* NMEA GLL sentence decoding *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_NMEAGLLSentence"
// *****************************************************************************
// The program receives and decodes the NMEA GLL 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
        GLL.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
    GLL(NMEASInterface:=ADR(NMEA)); //NMEA GLL sentence decoding

    // Calculate fix time in HH:MM:SS.

    IF (GLL.Done) THEN
        FixHour:=TO_USINT(GLL.FixTime/3600.0); //Fix time (Hour)
        FixMinute:=TO_USINT(MOD(TO_UDINT(GLL.FixTime/60.0), 60)); //Fix time (Minute)
        FixSecond:=TO_USINT(MOD(TO_UDINT(GLL.FixTime), 60)); //Fix time (Second)
    END_IF;

// [End of file]
Was this article helpful?