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
-
Se l'oggetto aggiornato non è nell'ultima versione del package, vedi capitolo "Aggiornamento librerie" in questo articolo.
-
Gli oggetti obsoleti sono inseriti nella libreria eLLabObsoleteLib fare riferimento al relativo manuale ed al manuale programmazione in formato pdf.
IOEncoder_v1
Eliminato ingresso Enable ed uscita Enabled, ora il FB è sempre abilitato. Il funzionamento è identico alla precedente versione.
Descrizione
| Parametro | Tipo | Descrizione |
|---|---|---|
| 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. |
| 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 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]