Vai al contenuto

EncoderPulses, calcolo impulsi da encoder

Vai all indice del manuale di programmazione
Tipo: Blocco funzione
Libreria LogicLab: eLLabMotionLib
Libreria Codesys: Non disponibile

Acquisendo i segnali da un encoder rotativo (vedi i FB SysGetEncoder e IOEncoder), si ottiene un valore di impulsi espresso su di una variabile a numero di bits definito. Ma l’encoder connesso ad un motore può dover conteggiare un numero di impulsi superiore alla capacità della variabile di conteggio che raggiunto il suo valore massimo và in overflow e si azzera. Ecco quindi la necessità di dover gestire il conteggio su variabili con numero di bits maggiori di quella della FB di acquisizione.

Fornendo al FB in ingresso su Encoder il valore di conteggio ritornato dal FB di acquisizione ed indicando in BitNr il numero di bits su cui è espresso il conteggio, verrà ritornata su Pulses la differenza espressa in numero di impulsi tra due esecuzioni successive. Nel calcolo viene considerato l’overflow del valore Encoder in ingresso sia nell’incremento di quota quindi il passaggio dal valore massimo a 0 che nel decremento di quota quindi il passaggio da 0 al valore massimo.

Descrizione

Encoder (UDINT) Valore impulsi encoder ritornati dalla FB di acquisizione.
BitNr (USINT) Numero di bits su cui è espresso il valore Encoder, il valore massimo è 31 bits.
Pulses (DINT) Numero impulsi encoder dalla esecuzione precedente.

Immagine FB EncoderPulses

Esempi

Come utilizzare gli esempi
ST_EncoderPulses: Viene acquisito un encodere incrementale dal un modulo di estensione ed il valore acquisito espresso su variabile a 16 bits viene calcolato su una variabile quota a 32 bits.

LogicLab (Ptp206, ST_EncoderPulses)
PROGRAM ST_EncoderPulses
VAR
    Quote : UDINT; (* Quote value *)
    EInp : SysGetEncoder; (* Encoder acquisition *)
    EPulses : EncoderPulses; (* Encoder pulses *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_EncoderPulses"
// *****************************************************************************
// This program acquires an encoder from the extension module 0, the acquired
// value is spread on a 32 bits variable.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // ENCODER ACQUISITION
    // -------------------------------------------------------------------------
    // Acquires encoder 0 from the extension module 0.

    EInp.Address:=0; //Module address
    EInp.Channel:=0; //Module channel
    EInp(); //Encoder acquisition

    // Spread value over a 32 bits quote variable.

    EPulses.BitNr:=16; //Encoder bit number
    EPulses(Encoder:=EInp.EQuote); //Encoder pulses

// [End of file]
Structured Text (IEC 61131-3)
Was this article helpful?