NMEASInterface, NMEA sentence interface

List

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

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.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabNMEALib

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.

Immagine FB NMEASInterface_v1

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]
Was this article helpful?