IOEncoder, incremental encoder over I/O

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Libreria utilità generale / IOEncoder, incremental encoder over I/O

Gli encoder sono apparati elettromeccanici che convertono la posizione in un segnale elettrico digitale composto da due onde quadre fuori fase di 90°. Questo blocco funzione esegue la lettura di un encoder incrementale connesso agli ingressi logici la lettura è realizzata con un algoritmo software, non è da confondere con il FB SysGetEncoder, get encoder input, dove la lettura è effettuata da un circuito hardware presente nel modulo che garantisce lettura di frequenze molto più alte.

Basta appoggiare sui due ingressi APhase e BPhase del blocco funzione i due ingressi di acquisizione del canale A e del canale B di un encoder incrementale. Il blocco funzione esegue la quadratura dei segnali, il controllo della direzione di rotazione e gestisce il valore di Quote in uscita. La quadratura dei segnali esegue la moltiplicazione per 4 delle tacche encoder quindi il valore di Quote al termine di un giro completo dell'encoder è pari al numero di tacche encoder moltiplicato per 4.

Function block
CODESYS: Non disponibile
LogicLab: eLLabUtyLib

Enable (BOOL) Abilitazione gestione conteggio encoder.

Reset (BOOL) Comando di reset quota encoder, attivando l'ingresso si azzera il valore di Quote.

APhase (BOOL) Ingresso canale A encoder.

BPhase (BOOL) Ingresso canale B encoder.

Enabled (BOOL) Conteggio encoder abilitato.

Error (BOOL) Attivo per un loop su errore acquisizione encoder. Si attiva se la frequenza di ingresso dei segnali
encoder è maggiore rispetto al tempo di esecuzione del blocco funzione.

Quote (UDINT) Valore di quota encoder espresso in impulsi. Numero tacche giro encoder moltiplicato per 4.

Esempi

Come utilizzare gli esempi.
Nell'esempio è gestita l'acquisizione di un encoder incrementale connesso agli ingressi digitali di un modulo CPU SlimLine. Eseguendo il programma nella task Fast (Ogni 1 mS) è possibile acquisire un frequenza massima degli ingressi di 400 Hz. Il valore di Quote verrà incrementato se la rotazione è oraria (CW) oppure decrementato se la rotazione è antioraria (CCW), verrà conteggiato il numero di tacche giro dell'encoder moltiplicato per 4.

LogicLab (Ptp114)
PROGRAM ST_IOEncoder
VAR
    Quote : UDINT; (* Encoder quote (Pulses) *)
    DInp : SysGetPhrDI; (* Digital input acquisition *)
    Encoder : IOEncoder; (* Encoder acquisition *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_IOEncoder"
// *****************************************************************************
// Is managed the acquisition of an incremental encoder connected to digital
// inputs of a CPU module.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------

    IF (SysFirstLoop) THEN
        DInp.Address:=255; //Module address
        DInp.Mode:=DI_I_8_LL; //Acquisition mode
    END_IF;

    // -------------------------------------------------------------------------
    // ENCODER ACQUISITION
    // -------------------------------------------------------------------------
    // Acquires encoder connected to Di00 and Di00.

    DInp(); //Digital input acquisition
    Encoder.APhase:=TO_BOOL(DInp.Value AND 16#00000001);
    Encoder.BPhase:=TO_BOOL(DInp.Value AND 16#00000002);
    Encoder(Enable:=TRUE); //Encoder acquisition
    Quote:=Encoder.Quote; //Encoder quote (Pulses)

// [End of file]

Ti è stato utile questo articolo ?