Vai al contenuto

makeng52

ENCODER INCREMENTALE PER LUNGHEZZA TUBI

Recommended Posts

makeng52

Bongiorno a tutti.

Ho cercato in giro per il forum di trovare soluzione al mio problema , ma non sono riuscito. Mi scuso se c'è ma non l'ho visto.

PRoblema: misurare una lunghezza di un tubo con encoder incrementale con ruota calettata assialmente all'encoder. La circonferenza è di 504 mm e l'encoder è un I/O LINK ifm RV3100 incrementale da 10000 impulsi giro. La precisione che vorrei è al mm.

Utilizzo un sistema ETHERCAT beckhoff con interfaccia I/O link dove ho già la variabile con gli incrementi al giro ( UDINT) agggiornata in tenpo reale.

L'encoder è programmabile, quindi posso scegliere ed impostare la precisione. con 1000 impulsi al giro dovrei essere a posto ( 1 impulso ogni 0.5 mm)

Relativamente al programma PLC come mi conviene impostarlo? Salvo la word in una variabile che al completamento di 1000 impulsi ne incrementa un'altra ( quando va a 1 questa ho fatto 500 mm)?

O mi conviene altro?

grazie

Condividi questa discussione


Link discussione
Condividi su altri siti
Lucky67

Visto che sai la relazione tra misura e impulsi, prendi il tuo set point (il valore della misura a cui dovrai tagliare) e lo scali in impulsi in modo da fare il confronto diretto tra misura reale data dall'encoder e la misura del set point trasformata in impulsi. Compari e per valori reali >= al setpoint fai  le operazioni che devi fare.

Condividi questa discussione


Link discussione
Condividi su altri siti
pigroplc
15 ore fa, makeng52 scrisse:

misurare una lunghezza di un tubo con encoder incrementale con ruota calettata assialmente all'encoder.

utilizza il numero massimo di impulsi come prima cosa,se devi solamente misurare ti basta azzerare la quota dell'encoder quando perdi il segnale del tubo.

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

"Visto che sai la relazione tra misura e impulsi, prendi il tuo set point (il valore della misura a cui dovrai tagliare) e lo scali in impulsi in modo da fare il confronto diretto tra misura reale data dall'encoder e la misura del set point trasformata in impulsi. Compari e per valori reali >= al setpoint fai  le operazioni che devi fare"

 

Si ma il problema è che l'encoder emette impulsi al giro. Non è multigiro.  Si parla di incrementale ma lo è solo per 1 giro. Almeno è quello che mi dicono quelli della ifm. Per me incrementale dovrebbe dire altro. Cioè la possibilità di spalmare gli impusli su più giri. Se no che incrementale è?? Io pensavo sul programma PLC di utilizzare due contatori. Il primo si incrementa quando si azzerano gli impulsi dell'encoder o raggiunge il max di impostato di 1000 ( = ho fatto un giro ossia il tubo ha percorso 504mm) . Se ho fatto ad esempio 10 giri, ho la variabile a 10 e i metri sono 5,04.

Poi gestisco una variabili "interna " al giro per controllare la distanza fra lo zero relativo precedente e il conteggio attuale. Se ad esempio ho 500 impulsi su 1000 al giro, vuol dire che ho percorso 5.04 metri + 0.252 m = 5.292 metri. Corretto ? 

Condividi questa discussione


Link discussione
Condividi su altri siti
Lucky67

A parte il fatto che (per quanto ho capito io) la descrizione che fai è un minestrone. Parli di lunghezza del tubo e poi misuri la circonferenza (?). Poi francamente non ho capito cosa ti aspettavi da questo povero encoder: da quello che descrivi fa il suo dovere di encoder incrementale: 1 giro completo di 360 gradi dell'albero corrispondono all'emisione di n impulsi (questo deve fare). Tu conti gli impulsi e siccome sai il rapporto giro/impulsi sai quanto ha girato l'encoder. Se l'encoder è 1000 impulsi/giro contando ad esempio duemila giri vuol dire che l'albero ha compiuto 2 giri...francamente non capisco il resto delle tue elucubrazioni.

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

?

Questo capita quando un elettronico si dimentica della geometria. Non del minestrone. PEr misurare linearmente devi calettare una ruota e se non consideri il diametro come fai a risalire ai metri?? Se fai 1 giro con una ruota da 1 metro di diametro o da 10 cm di diametro non è la stessa cosa.... Non è un POSIZIONATORE. Altrimenti avrei fatto il cuoco.....

Scusa il sarcarsmo ma un pò te lo meriti....

 

Se avessi un encoder incrementale multigiro avrei solo bisogno di una variabile. Avendo invece un encoder incrementale al giro devo calcolare il numero dei giri e il parziale del giro per avere la lunghezza attuale. Con questo però gestisco la tolleranza in modo costante al mm sia che si misuri 10 metri , sia che se ne producano 100 metri. Se volessi  la tolleranzia % sulla lunghezza totale , dovrei tutte le volte riprogrammare l'encoder in funzione della lunghezza.

Condividi questa discussione


Link discussione
Condividi su altri siti
Lucky67
19 ore fa, makeng52 scrisse:

Scusa il sarcarsmo ma un pò te lo meriti....

 

Me lo meriterei se ti spiegassi meglio. Se io parlo di lunghezza di un tubo, a mio parere, parlo di una verga che può essere lunga 1 mm o 1 km e la cosa, se permetti, è indipendente dal diametro ed è indipendente da come caletti l'encoder. Ad esempio se tu metti l'encoder su un rullo dove scorre una verga di tubo e quindi misuri una distanza lineare spiegami tu cosa c'entra il diametro. In un tubo io vedo la la sua lunghezza, il suo diamtro e se vuoi...lo sviluppo del diametro...

Condividi questa discussione


Link discussione
Condividi su altri siti
step-80

Effettivamente non è che ti sei spiegato in maniera chiarissima,anche se mi sembra di aver capito quello che vuoi fare. 

Ho dato un occhiata al datasheet dell'encoder, e sembra un normalissimo incrementale a 2 canali + z parametrizzabile e monitorabile via i/o link. 

Se imposti 1000 ppr come dicevi dovresti vedere la tua variabile UDINT incrementarsi, ma se la vedi azzerarsi ad ogni ciclo secondo me c' è qualche impostazione da controllare. Forse hai impostato il reset automatico, funzione tipica nella gestione encoder..

 

Se ho fatto bene i calcoli , con la risoluzione da te scelta dovresti arrivare a contare senza problemi circa 2.1 km di tubo con la tua UDINT.

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

Quindi non esistono degli encoder incrementali MULTIGIRO. Questo è esattamente quello che chiedevo. Spero solo che per alte velocità questi passaggi per lo zero non creino problemi all'entrata del PLC. Non vorrei essere costretto ad acquistare un ingresso a conteggio veloce solo per questo.

grazie

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

Passare da una grandezza lineare ad una circolare ( pitagora) occorre considerare il vecchio Pgreco e non penso che per misurare una lunghezza di 100 metri è necessario utilizzare una ruota con una circonferenza uguale per avere 1 giro. Sono costretto ad avere MULTIGIRI . Scusate se non sono stato chiaro.

Condividi questa discussione


Link discussione
Condividi su altri siti
step-80

@makeng52 : non vorrei commettere una gaffe clamorosa, ma da come scrivi non sembri italiano..questo solo perchè i tuoi post sembrano tradotti con google traduttore. Se cosi fosse, non ti devi scusare..ci mancherebbe. Se cosi non fosse..beh mi autobanno😁

 

Quote

Quindi non esistono degli encoder incrementali MULTIGIRO. 

 

Assolutamente no. Un encoder incrementale da in uscita puramente un treno di impulsi (anzi in questo caso 2 treni sfasati ) . Come contarli e come interpretarli sta a chi lo monta/programma. 

P.s: ma perchè ti accanisci col multigiro? Quello che hai tu è un incrementale. Se vedi la variabile azzerarsi per come la vedo io o devi impostare qualcosa lato plc o lato encoder.

Condividi questa discussione


Link discussione
Condividi su altri siti
Lucky67
13 ore fa, step-80 scrisse:

.beh mi autobanno😁

 

 

Ti seguo a ruota...quando si parlano "due lingue diverse" non ci sono possibilità di interlocuzione.

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

Buongiorno

Scusate se non vi ho risposto. Sono ancora un principiante e tendo a fare confusione. Adesso è molto più chiaro il problema: con l'encoder RV3100 io link, ho una word UINT che mi rimanda un valore ciclico da 0 a 199 ( che corrispondono a 200 impulsi /giro). Di fatto devo interpretare come se avessi un CONTATORE . Ad ogni ciclo il tubo ha percorso 504 mm.

Fin qui nulla di strano. Il problema nasce dal fatto che l'encoder ha uno zero fisso mentre io comincio a contare in una posizione "a caso" intermedia.

Quando inizio la word uint che leggo sulla memoria è ( ad esempio) 115. Vuol dire che io inizio da quel valore e devo shiftare lo zero in modo da avere in quella posizione lo zero della funzione periodica. Ho cercato di risolvere inserendo una variabile di appoggio che legge il valore iniziale e lo memorizza. Quando il sistema si muove l'encoder conta ciclicamente.

Di solito venivano usate le schede di conteggio che contano degli impulsi. In questo caso non sono impulsi ma una variabile che si incrementa. Potete consigliarmi come risolvere ? Sicuramente la soluzione è dietro l'angolo ...... ma all'inizio è sempre cosi.

grazie

Condividi questa discussione


Link discussione
Condividi su altri siti
roberto8303

non conosco il tuo sistema, ma ci sono molte cose che non ho capito.

1) l encoder ha una ruota che segue il tubo per tutta la sua lunghezza? se è cosi sapendo il diametro della ruota sai ogni giro e quindi ogni tot impulsi quanti mm hai misurato. Basta moltiplicare per le rotazioni totali da inizio a fine tubo e sai la lunghezza totale.

di solito in ogni sistema plc che legge un encoder c è la possibilità di azzerare un conteggio tramite un evento esterno o un preset confronto operazione matematica praticamente quasi sempre. Perchè dici di iniziare a contare a caso? l encoder può essere azzerato con l inizio del conteggio.

Condividi questa discussione


Link discussione
Condividi su altri siti
Livio Orsini

Tralasciando qualsiasi considerazione sulla discutibile filosofia che ha portato alla scelta di questo tipo di trsduttore, la soluzione del tuo problema è semplice, a patto che tu possa acquisire i dati molto più velocemente di quanto impiega l'encoder per effettuare uan rotazione completa

 

Per prima cosa it devi creare 3 variabili di appoggio.

In una memorizzi l'offset di partenza.

Nella seconda il valore attuale dell'encoder

Nella terza il valore della lettura precedente.

Infine avrai  un integratore delle rivoluzioni, ovvere ad ogni rotazione completa sommi 199.

La misura reale sarà data dalla somma del valore istantaneo letto più il valore corrispondente all'integratore meno l'offset iniziale.

 

Ad ogni nuova lettura verifichi se il valore è maggiore dell'offset iniziale; se è maggiore verifichi se la lettura precedente era minore dell'offset iniziale, in questo caso significa che hai compiuto una rivoluzione completa e sommi 199 all'integratore.

Memorizzi il valore attuale nella memoria del valore precedente e sei pronto per una nuova acquisizione.

 

E' molto più lunga e difficile la descrizione che la scrittura delle istruzioni necessarie.

 

Quello che ti ho descritto è la classica gestione dei "trabocchi" di conteggio, solo che solitamente il valore di trabocco è molto più elevato di 199.:smile:🏴󠁧󠁢󠁷󠁬󠁳󠁿

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

Si grazie. Adesso mi è più chiaro. Si tratta di mera programmazione.

Sulla velocità non c'è problema perchè il sistema IO link discrimina eventi al di sopra dei 2,3 msec. Impostando 200 impulsi al giro con la velocità max che ho arrivo al massimo a 2,5 msec ad impulso. Normalmente sono sopra. E la tolleranza è abbondantemente rispettata.

Grazie e scusa. Sono un proncipiante e mi perdo facilmente.

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti
Livio Orsini
1 ora fa, makeng52 scrisse:

Sulla velocità non c'è problema perchè il sistema IO link discrimina eventi al di sopra dei 2,3 msec

 

Non  è sufficiente!

Per avere un conteggio senza errori, avendo un impulso ogni 2.5ms, dovrebbe discriminare eventi  <1.25 ms

Poi questa è solo una parte del problema, l'altra è la frequenza con cui vai a leggere la variabile che contiene il conteggio.

Se il tuo programma, ad esempio, entra nella funzione di lettura conteggio ogni 10 ms l'errore aumenta.

 

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

Inserendo un timer di 1 msec di lettura del PLC dovrei discriminare abbastanza bene il discorso. Inserisco una funzione TON e continuo a memorizzare il valore prima e dopo 1 msec.

Se il valore dopo è maggiore del precedente ed è diverso dal massimo la formula è quella. Altrimenti se il valore è 199 e quello prima è inferiore >>> aggiungo 199 all'integratore.

Altrimenti se è uguale vuol dire che il sistema è fermo e non faccio niente.

Corretto?

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti
makeng52

PEnso di aver capito il problema. Il sistema beckhoff non ha inegrato ingressi veloci. Bisogna per forza acquistarne a parte. Io ero abituato ad avere ingressi veloci di default. Con un time di 10 msec del plc non vado da nessuna parte. E' necessario per forza una scheda counter aggiuntiva.

 

Grazie comunque

Condividi questa discussione


Link discussione
Condividi su altri siti

Registrati o accedi per inserire messaggi

Devi essere un utente registrato per lasciare un messaggio. La registrazione è GRATUITA.

Crea un account

Iscriviti alla nostra comunità. È facile!

Registra un nuovo account

Connettiti

Hai già un account? Connettiti qui

Connettiti adesso

×