Passa al contenuto principale

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.

Upgrade list

IOEncoder_v1​

Eliminato ingresso Enable ed uscita Enabled, ora il FB è sempre abilitato. Il funzionamento è identico alla precedente versione.

Descrizione​

Immagine FB IOEncoder

ParametroTipoDescrizione
ResetBOOLComando di reset quota encoder, attivando l'ingresso si azzera il valore di Quote.
APhaseBOOLIngresso canale A encoder.
BPhaseBOOLIngresso canale B encoder.
ErrorBOOLAttivo 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.
QuoteUDINTValore di quota encoder 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 (Ptp205, ST_IOEncoder)
PROGRAM ST_IOEncoder
VAR
Quote : UDINT; (* Encoder quote (Pulses) *)
DInp : SysGetPhrDI; (* Digital input acquisition *)
Encoder : IOEncoder_v1; (* 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(); //Encoder acquisition
Quote:=Encoder.Quote; //Encoder quote (Pulses)

// [End of file]