SysGetCounter, get counter

List

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

Questo blocco funzione esegue la lettura di un contatore, in base alla definizione di Mode è possibile gestire conteggio su fronte positivo, negativo o su entrambi i fronti dell’ingresso clock. Se il modulo che gestisce il contatore lo prevede è possibile anche definire comandi hardware (Ingressi logici) di reset conteggio e di inversione conteggio.

Per abilitare i counter opzionali occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E’ comunque possibile utilizzarli liberamente in modo test per 15 Min.

Moduli supportati

Questo FB opera solo sui moduli che implementano la gestione hardware del contatore, di seguito una tabella riassuntiva.

Module codeCountersClock modeReset modeReverse modeNote
PCB131, MPS05010Non gestitoNon gestitoConnesso a Di00
PCB135, MPS05310Non gestitoNon gestitoConnesso a Di00
PCB137, MPS05420, 1Non gestitoNon gestitoPossono essere connessi a qualsiasi ingresso
PCB141, MPS0564 (Di cui 2 opzione)0, 1Non gestitoNon gestitoPossono essere connessi a qualsiasi ingresso
PCB124*00020, 1Non gestitoNon gestitoPossono essere connessi a qualsiasi ingresso
PCB124*01040, 1Non gestitoNon gestitoPossono essere connessi a qualsiasi ingresso
Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib

Descrizione

Address (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione (Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L’indirizzo 255 indica il modulo CPU.
Channel (USINT) Occorre specificare l’indirizzo del canale sul modulo (Range da 0 a 15).
Mode (UDINT) Modo acquisizione (Vedi definizione).
RCount (BOOL) Reverse counting, attivando questo ingresso Value viene decrementato ad ogni variazione di conteggio.
Reset (BOOL) Attivando questo ingresso si ha il reset del valore di conteggio Value.
Done (BOOL) Dato acquisisto, viene attivato per un loop di programma al termine della acquisizione.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di gestione.
Value (UDINT) Valore contatore.

Immagine FB_SysGetCounter
Definizione Mode

Modo acquisizione, espresso su 32 bit secondo lo schema riportato. Per calcolare il valore di mode si applica la formula: ((Reverse mode)*2097152)+((Reverse input)*65536)+((Reset mode)*8192)+((Reset input)*256)+((Clock mode)*32)+(Clock input)

Immagine selezione modo FB_SysGetCounter
  • Clock Input: Definisce ingresso logico da utilizzare come clock.
  • Clock Mode: 0:Conta su fronte salita, 1:Conta su fronte discesa, 2:Conta su entrambi i fronti.
  • Reset Input: Definisce ingresso logico da utilizzare come reset.
  • Reset Mode: 0:Non è utilizzato ingresso di reset, 1:Reset counter se ingresso attivo, 2:Reset counter se ingresso non attivo.
  • Reverse Input: Definisce ingresso logico da utilizzare come inversione conteggio
  • Reverse Mode: 0:Non è utilizzato ingresso di reverse, 1:Inverte conteggio counter se ingresso attivo, 2:Inverte conteggio counter se ingresso non attivo

Esempi

Come utilizzare gli esempi.

ST_SysGetCounter: Viene eseguita l’acquisizione del contatore 0 dal modulo CPU di SlimLine, il valore di conteggio è trasferito nella variabile Value. Attivando da debug RCount si inverte il conteggio ad ogni variazione dell’ingresso di clock viene decrementato il valore in uscita. Attivando da debug Reset viene eseguito il reset del conteggio.

ST_SpeedCalculation: Viene eseguito il calcolo della velocità di rotazione di un albero acquisendo gli impulsi generati da una ruota fonica che genera 10 impulsi al giro.

LogicLab (Ptp116, ST_SysGetCounter)
PROGRAM ST_SysGetCounter
VAR
    Value : UDINT;    (* Counter value *)
    CInp : SysGetCounter;    (* Counter acquisition *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysGetCounter"
// *****************************************************************************
// This program acquires a counter from the CPU module.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // COUNTER ACQUISITION
    // -------------------------------------------------------------------------
    // Acquires counter 0 by CPU module.

    CInp.Address:=255; //Module address
    CInp.Channel:=0; //Module channel
    CInp.Mode:=16#00000000; //Acquisition mode
    CInp(); //Counter acquisition
    IF (CInp.Done) THEN Value:=CInp.Value; END_IF;

// [End of file]
LogicLab (Ptp116, ST_SpeedCalculation)
PROGRAM ST_SpeedCalculation
VAR
    TimeBf : UDINT; (* Time buffer (mS) *)
    Memo : UDINT; (* Memo counter *)
    Pulses : UDINT; (* Number of pulses *)
    Speed : REAL; (* Speed (RPM) *)
    CInp : SysGetCounter; (* Counter acquisistion *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SpeedCalculation"
// *****************************************************************************
// This program calculates the rotation speed of a shaft by counting the pulses
// generated by a phonic wheel.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Acquires counter 0 by CPU module. Counter is set to count on both edges.

    IF (SysFirstLoop) THEN
        CInp.Address:=255; //Module address
        CInp.Channel:=0; //Module channel
        CInp.Mode:=16#00000000; //Acquisition mode
    END_IF;

    // -------------------------------------------------------------------------
    // COUNTER ACQUISITION
    // -------------------------------------------------------------------------
    // At every 1 S is acquired the number of pulses counted.

    IF ((SysTimeGetMs()-TimeBf) < T#1s) THEN RETURN; END_IF;
    TimeBf:=SysTimeGetMs(); //Time buffer (mS)

    CInp(); //Counter acquisition
    Pulses:=CInp.Value-Memo; //Number of pulses
    Memo:=CInp.Value; //Memo counter

    // Calculate speed, having 10 pulses at revolution. The calculation is
    // executed at every 1 S, so to have RPM the result is multiplied by 60.

    Speed:=(TO_REAL(Pulses)/10.0)*60.0; //Speed (RPM)

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