SysGetSysTime, get system time

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Gestione Data/Ora
  6. SysGetSysTime, get system time

La funzione ritorna il tempo di sistema espresso in μS. E' possibile definire con il valore di Cmd se si vuole avere il tempo di sistema attuale (Cmd:=TRUE) oppure quello memorizzato con la precedente esecuzione della funzione (Cmd:=FALSE). Il valore di conteggio parte da 0 e dopo 4294 Secondi si resetta.

Function
CODESYS: eCDSS8CoreMng
LogicLab: eLLabS8CoreMng, eLLabXUnified12Lib

Cmd (BOOL) Indica il valore di tempo che deve essere ritornato. Se TRUE viene salvato e ritornato il valore attuale di tempo. Se FALSE viene ritornato il valore di tempo salvato dalla precedente chiamata alla funzione con Cmd:=TRUE.

La funzione ritorna una variabile (UDINT) con il valore di tempo di sistema espresso in uS.

Suggerimenti

Essendo il valore di tempo di sistema ritornato dalla funzione un numero UDINT che si incrementa ogni μS, ed al valore massimo esegue overflow a zero, non è possibile effettuare comparazioni dirette con il tempo di riferimento ma occorre sempre eseguire la differenza. Quindi è corretto utilizzare la funzione nel modo:

IF ((SysGetSysTime(TRUE)-TimeBf) > 1000000) THEN TimeBf:=SysGetSysTime(TRUE); BOut:=NOT(BOut); END_IF;

Lo stesso esempio scritto in questo modo non funziona correttamente:

IF (SysGetSysTime(TRUE) > (TimeBf+1000000)) THEN TimeBf:=SysGetSysTime(TRUE); BOut:=NOT(BOut); END_IF;

Esempi

Come utilizzare gli esempi.
Nel seguente esempio viene eseguito il lampeggio di una uscita logica con un duty cycle di 1 secondo.

LogicLab (Ptp116)
PROGRAM ST_SysGetSysTime
VAR
    TimeBf : UDINT; (* Time buffer (uS) *)
    BOut : BOOL; (* Blink output *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysGetSysTime"
// *****************************************************************************
// This program blinks an output with duty cycle of 1 second.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // PROGRAM INIT
    // -------------------------------------------------------------------------
    // Program init.

    IF (SysFirstLoop) THEN
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
    END_IF;

    // -------------------------------------------------------------------------
    // BLINKING
    // -------------------------------------------------------------------------
    // Blinks the output.

    IF ((SysGetSysTime(TRUE)-TimeBf) > 1000000) THEN
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
        BOut:=NOT(BOut); //Blink output
    END_IF;

// [End of file]
CODESYS (Ptp163)
LogicLab (Ptp164)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 23 Marzo 2020