Vai al contenuto
PLC Forum


Shift register con clock variabile


GoldFloSev

Messaggi consigliati

Buona sera a tutti, ho un problema con la realizzazione di un shift register, formato ad alcune DBW i cui bit scorrono verso destra sul fronte di salita di unclock.

Il clock è stato realizzao in questo modo:

UN T1

L DBW1

SE T2

 

U T2

L DBW1

SE T1

Il valore del tempo (DBW1) è un valore che varia al variare della velocità di una rulliera.

Il tutto sembra funzionare bene i bit scorrono, ma ho notato che il tempo di clock non è regolare ma è influenzato dal tempo di scansione del programma, che è di circa 30ms mentre il clock si aggira tra i 200ms e i 400ms.

C'é un modo per evitare questo problema?

Geazie a tutti.

Link al commento
Condividi su altri siti


Non ho capito perché per generare un clock per lo shift register utilizzi due timer.

Comunque, è assolutamente normale che i timer siano influenzati dal tempo di scansione.
Per avere un clock più preciso devi usare un OB a tempo.
Potresti richiamare i timer all'interno dell'OB o, meglio, sempre all'interno dell'OB, incrementare una variabile del tempo di esecuzione dell'OB stesso.
Raggiunto il valore desiderato, attivi il clock e azzeri la variabile.
Più sarà piccolo il tempo configurato per il richiamo dell'OB, più il sistema sarà preciso.
Ovviamente non puoi scendere a valori troppo piccoli. Penso potresti provare con 5 ms.

 

Per finire, devi comunque essere cosciente del fatto che uno shift con clock derivato dalla velocità non potrà mai essere precisissimo.

Se descrivi meglio la tua applicazione, forse si può trovare un'altra soluzione.

Link al commento
Condividi su altri siti

Ciao batta grazie della risposta.

Per quando riguarda i due timer hai raggione ne basta uno solo e nella DBW si carico il tempo intero e non la metà.

Per quanto riguarda gli OB non ho mai richiamato un OB a tempo e non sò se già ci sono degli OB che fanno questa funzione.

Se potresti farmi un esempio te ne sarei molto grato.

L'applicazione dove voglio utilizzare shift register è quello della tracciature (inseguimento) dei pezzi di scarto sù una linea formata da più trasportatori messi a punto in linea che si arrestano e ripartono indipendentemente asseconda dell'intasamento, dove ci sono più punti di prelievo del pezzo buono e più punti di scarto del pezzo non conforme. Linseguimento lo vorei fare senza utilizzare le fotocellule che rilevano la presenza del pezzo sul singolo trasportatore tranne nei punti di prelievo o di scarto, perchè il pezzo di scarto molto spesso e rotto in più punti con l'impressione che siano più pezzi vicini tra loro.

Il sistema in realtà funziona bene per una porzione di linea circa la metà (il ritardo è accettabile), mentre se devo scartare alla fine dell'intera linea il pezzo identificato non conforme all'inizio della linea ho qualche problema di anticipo ma soprattuto di ritardo.

Spero di essere stato abbastanza chiaro.

Grazie.

Link al commento
Condividi su altri siti

11 ore fa, GoldFloSev scrisse:

e non sò se già ci sono degli OB che fanno questa funzione.

C'è il classico OB35. Il tempo se non ricordo male si imposta nella configurazione di sistema.

Se imposti ad esempio 10 ms, ogni 10ms l'interrupt richiamerà l'OB35; in questo OB fai "n" contatori quanti sono i timers che ti servono e, ad ogni interrupt, decrementi i timers; quando un odi questi raggiunge lo zero, lo ricarichi e richiami la funzione legata ad esso.

Link al commento
Condividi su altri siti

Quote

Il sistema in realtà funziona bene per una porzione di linea circa la metà (il ritardo è accettabile), mentre se devo scartare alla fine dell'intera linea il pezzo identificato non conforme all'inizio della linea ho qualche problema di anticipo ma soprattuto di ritardo.

Come ti dicevo, un clock basato sulla velocità non può essere preciso, perché difficilmente leggerai la velocità con precisione assoluta.
A distanza piccola corrisponde un errore piccolo; ad una distanza grande corrisponde un errore grande.

Poi dici che i trasportatori si fermano e ripartono a seconda delle condizioni. Come fai a gestire i transitori di accelerazione e decelerazione?
Perché non usare un encoder, o anche una semplice ruota dentata e un sensore? Con qualche decina di euro risolvi il problema.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...