Jump to content
PLC Forum


GoldFloSev

Shift register con clock variabile

Recommended Posts

GoldFloSev

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.

Share this post


Link to post
Share on other sites

batta

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.

Share this post


Link to post
Share on other sites
GoldFloSev

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.

Share this post


Link to post
Share on other sites
Livio Orsini
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.

Share this post


Link to post
Share on other sites
batta
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.

Share this post


Link to post
Share on other sites
ken

esatto, su un piccolo tappeto avevo usato un encoder per monitorare la posizione dei fogli di lamiera.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...