Vai al contenuto
PLC Forum


Encoder Assoluto - è necessario?


roberto8303

Messaggi consigliati

a questo punto a livello economico non è migliore comprare un encoder assoluto?

Dipende da quello che vuoi fare.

L'assoluto è (quasi) insostituibile se devi controllare su di un giro, tipo una una camma p.e.

L'assoluto ha lo svantaggio di avere tanti fili di collegamento: da un minimo 10 (per un 8 bit) a 20 per un 16 bit.

Nel caso che ho considerato io hai solo 4 fili: alimentazione e rs485

Link al commento
Condividi su altri siti


  • Risposte 61
  • Created
  • Ultima risposta

Top Posters In This Topic

  • roberto8303

    29

  • rddiego

    10

  • busanela

    10

  • mazzinga

    6

L'assoluto ha lo svantaggio di avere tanti fili di collegamento: da un minimo 10 (per un 8 bit) a 20 per un 16 bit

Quelli "paralleli" , ma ci sono quelli con bus di campo, Profibus o CanOpen su tutti, con 4 fili (24V e bus).

Ci sono anche ethernet e wireless ma i prezzi salgono e non ne vale la pena forse.

Link al commento
Condividi su altri siti

ma ci sono quelli con bus di campo, Profibus o CanOpen su tutti,

Perè devi avere l'interfaccia CAN o Profibus, idem per ethernet e wirless.E' tutta una questione da valutare. Se, per esempio, hai gia dispositivi profibus o CAN aggiungere un encoder può essere conveniente, altrimenti devi considerare anche l'interfaccia.

Link al commento
Condividi su altri siti

Ho riletto i primi post di roberto8303 e mi sono accorto che fa sempre riferimento a numeri interi di giro... E' un caso o il conteggio delle spire non richiede la precisione di porzioni di bobina? Se davvero bastasse il numero di spira (o di giro di bobina) credo si potrebbe risolvere con una coppia di beri che leggono un'unico riferimento sulla circonferenza della bobinatrice: il primo bero interessato rileva il senso di rotazione, assieme al secondo ad ogni giro incrementa un semplice contatore che se la velocità di rotazione non è troppo elevata, dato che è sulla circonferenza esterna, non serve neanche che sia veloce; tanto meglio se il diametro della bobinatrice è grande.

Volendo essere precisi, in fase di accensione (o di ri-accensione), si effettua uno "zero" facendo ruotare all'indietro la bobinatrice fino al primo bero, si scala 1 dal contatore impostato a ritenzione, si riparte iniziando a contare in avanti.

Link al commento
Condividi su altri siti

Livio ma quando ho un encoder assoluto a 20 fili posso collegarlo sulla s7 200? a cosa occorrono 20 fili??non ho uno schema di un encoder assoluto ma ora me lo vado a cercare per curiosita!non ho necissita di controllare su un giro in questo caso, ma ho molta voglia di imparare!

per busanela

con una coppia di beri che leggono un'unico riferimento

a dire la verita avevo gia pensato una cosa del genere: volevo usare dei normali contatori della cpu siccome la velocita non è superiore a 300-400giri/min pero mi mancava chi avrebbe stabilito il senso di direzione per fare il conteggio o il deconteggio! avevo pensato da subito di sfruttare un contatto libero dei contattori avanti dietro per impostare nella cpu il conteggio in avanti o dietro! il problema è che quando l operatore sbaglia di una spira puo succedere che il filo va sulla sagoma adiacente a quella dove sta lavorando, per ritornare indietro mette a folle la macchina e gira il piatto a mano!! quindi avevo in tal caso il teleruttore fermo! ora non ho capito che sono questi beri?? se ho un segnale che mi dice quando va avanti e quando va indietro posso usare benissimamente o un proximity o un micro ad ogni giro! e ho risolto il problema! anche della memorizzazione dopo la corrente!!! Questo forum mi piace propio :)

Link al commento
Condividi su altri siti

un encoder assoluto a 20 fili posso collegarlo sulla s7 200? a cosa occorrono 20 fili??

certo che sì, colleghi quelli che ti servono ai normali ingressi 24Vcc. Dipende dai modelli ma molto in generale e sinteticamente i fili che ti interessano sono quelli che rappresentano i bit codificati in binario (più spesso in Gray) della misura che sta rilevando l'encoder assoluto.

Col PLC poi leggerai gli ingressi, facendo le opportune conversioni, codifiche ecc.

mi sono accorto che fa sempre riferimento a numeri interi di giro

stai a vedere che tutte ste menate con gli encoder ed invece gli bastano due input!!!!

Link al commento
Condividi su altri siti

stai a vedere che tutte ste menate con gli encoder ed invece gli bastano due input!!!!

forse si!! :rolleyes: pero quello che mi hai spiegato tu è molto utile quando la velocita diventa alta e non è piu controllabile con un conteggio normale ctu !!e poi non abbiamo per niente perso tempo a trovare la soluzione e sviluppare le righe di programma che mi hai fatto!! anzi ti ringrazio tantissimo! mi servira senz altro! solo che ancora non sono riuscito a farlo funzionare bene, ma non mi fermo ogni lavoro iniziato deve essere compiuto! anzi ora lo provo di nuovo ;)

Link al commento
Condividi su altri siti

stai a vedere che tutte ste menate con gli encoder ed invece gli bastano due input!!!!

:lol: Di solito le cose più semplici sono quelle che vanno meglio, sono più facili da realizzare e danno meno problemi, è sufficiente non perdere di vista l'obbiettivo!

pero mi mancava chi avrebbe stabilito il senso di direzione per fare il conteggio o il deconteggio!

I "beri" ( o proximity) devono essere 2 proprio per questo motivo: se durante la rotazione il cambio di fronte avviene prima al n. 1 e poi al n. 2, supponiamo tu stia ruotando in senso orario. Se invece diviene on prima il n. 2 del n.1 allora il senso di rotazione è inverso, cioè antiorario; e questo che tu lo comandi con uscita del plc o "girando il piatto a mano".

Per la gestione del programma è sufficiente una sequenza logica con le condizioni per l'incremento del conteggio in up o down, a seconda del sensore che viene interessato per primo. ;)

Link al commento
Condividi su altri siti

eccomi di nuovo, ieri sera era un po tardi e non ho avuto la voglia di osservare il comportamento ''strano'' del sistema. Ora ti spiego meglio cosa succede rddiego:

succede che, accendo il sistema è a 0 sia hco che vd0. decido di fare 4 giri con di albero encoder (risoluzione 3600impg) arrivo a 4 e leggo in vd0 10425 in hco leggo 12859, pero deve essere 4 giri per 3600 = 14400 , cè da dire che non sono propio preciso a fermarmi allo stesso punto e inoltre quello che mi hai detto tu cioe che non devo pensare al valore di hc0!

comunque ora faccio questo, riporto a 0 i miei 4 giri, cioe li scalo, e leggo in vd0 -1088 e in hc0 -1368, in realta avrei dovuto avere 0 almeno in vd0 perche io sono partito da 0 ora ruotando a mano è vero che non mi sono fermato allo stesso punto di partenza ma 1000imp sono circa 45° di errore!

ora se io avessi vd0 funzionante come dico io lo trasformo e cioe ps.14400 diviso 3600= 4 spire risultato che mando al pannello per sapere quante spiere ho fatto! perche se ritorno a 0 devo trasferire -1000 diviso 3600 e non 0 siccome sono veramente tornato a 0??qualcosa non va...

Link al commento
Condividi su altri siti

accendo il sistema è a 0 sia hco che vd0. decido di fare 4 giri con di albero encoder (risoluzione 3600impg) arrivo a 4 e leggo in vd0 10425 in hco leggo 12859

già qui vedo che non stai facendo le operazioni giuste. Da ciò che mi hai descritto e dai calcoli che dovresti eseguire VD0 deve essere necessariamente uguale ad HC0. Quello che temo è che tu stia memorizzando quello che dovrebbe essere il valore precedente dell'encoder in un momento successivo perdendo così alcuni impulsi.. Mi spiego meglio. Prendiamo il primo ciclo di scansione del PLC, si deve leggere il valore dall'encoder (che sta ruotando), poniamo che sia 100, lo salvo nella variabile VD12.

A questo punto per tutta quella scansione 100 sarà il valore attuale con cui svolgere i calcoli ed anche il valore precedente rispetto al ciclo successivo. Quindi eseguiro la differenza che in questa scansione sarà 100 (VD12) - 0 (VD4) e la salvo in VD8.

A questo punto sommo la differenza al totale finale e cioè 0 (VD0) + 100 (VD8) e lo salvo nuovamente in VD0.

Infine copio VD12 in VD4 cioè memorizzo il valore attuale in quello che dopo sarà usato come valore precedente.

Seconda e successiva scansione. Leggo nuovamente l'encoder e poniamo che valga 500 e lo salvo in VD12. Eseguo VD12 - VD4 cioè 500 - 100 = 400 e lo salvo in VD8. Eseguo VD0 + VD8 cioè 100 + 400 = 500 e lo salvo in VD0. Copio VD12 in VD4 che ora varrà 500.

E così via... Come vedi, proseguendo così VD0 varrà sempre quanto HC0 fino al fondo scala dell'encoder ovviamente dopo di che se dici che è un 3600 imp/g sempre continuando con l'esempio si avrà col nuovo valore 100 dell'encoder un valore 3700 e via e via...

Per finire quello che temo è che, se esegui la copia finale dell'encoder leggendo nuovamente HC0 per salvarlo in VD4, nel tempo necessario al plc per eseguire quest'ultima istruzione il valore sia di un po' incrementato ed ecco perchè ti risulta VD0 minore. Probabilmente la lettura di HC0 è un interrupt.

Usa VD12 come valore dell'encoder in tutto il programma e dovresti risolvere la cosa... spero... eheh

Link al commento
Condividi su altri siti

per busanela invece:

Di solito le cose più semplici sono quelle che vanno meglio, sono più facili da realizzare e danno meno problemi,

e gia!! :)

Volendo essere precisi, in fase di accensione (o di ri-accensione), si effettua uno "zero" facendo ruotare all'indietro la bobinatrice fino al primo bero, si scala 1 dal contatore impostato a ritenzione, si riparte iniziando a contare in avanti.

devo portare il tasto reset sulla macchina...potrei usarlo per faro lo zero non appena l operatore ha posizionato il filo sulla sagoma ed è pronto per partire!

inoltre devo visualizzare il numero di spire fatte e il numero di spire da fare.quando arriva a tot spire la macchina si ferma l operatore controlla se il numero di spire fatte è uguale a quello scritto all inizio, smonta la bobina , rimette il filo Resetta le spire contate e riparte con la sequenza. quindi il tasto reset potrebbe assolvere il compito dello zero nella fase di accensione?

poi un altra cosa, mettiamo che sta contando in avanti quindi passa sul primo proximity 1 diciamo quello posteriore, e siccome quello che conta all indietro 2 è subito vicino lo devo disabilitare, ma nel caso si ferma il disco e torna indietro come faccio ad abilitare il 2?? posso sfruttare il fatto che lo attraversa una prima volta e se anche la seconda allora abilita quello perche sta tornando indietro??faccio un disegno per chiarire meglio...

Link al commento
Condividi su altri siti

che artista!

ho capito cosa vuoi dire ma se non li sente tutti e due in sequenza non incrementa o decrementa nemmeno il contatore, che ti frega. La logica che mi viene in mente è tipo questa:

Chiamando i due sensori A e B

Condizione 1 : se è la prima volta che passo su un sensore, memorizzo cosa dovrò fare

Se A e non B1 allora devo incrementare (setta C)

Se B e non A1 allora devo decrementare (setta D)

Condizione 2 : se ripasso nuovamente sullo stesso sensore cioè sto tornando indietro annullo tutte le operazioni

Se A e A1 resetta A1 e B1 e C e D

Se B e B1 resetta A1 e B1 e C e D

Condizione 3 : Se passo su un sensore memorizzo che ci sono passato

Se A Set di A1

Se B Set di B1

Condizione 4 : Se passo anche sul secondo sensore eseguo il conteggio e cancello tutte le operazioni

Se A e B1 allora decrementa e resetta A1 e B1 e C e D

Se B e A1 allora incrementa e resetta A1 e B1 e C e D

A questo punto lascio a te programmare sta roba (se è giusta). NB che resetto sempre tutto tanto non fa male..

Link al commento
Condividi su altri siti

Rileggi bene il mio ultimo post.

Non devi "disabilitare" nessun sensore: devi utilizzarli entrambi, ad ogni giro, per controllare sempre se la rotazione è oraria od anti-oraria. Per fare questo, come detto, basta un confronto and tra gli ingressi all'interno di un tempo di filtro o con il set-reset di memorie, come preferisci.

il tasto reset potrebbe assolvere il compito dello zero nella fase di accensione?

Si, ma io valutavo il caso della mancanza improvvisa di tensione: se stai sbobinando e manca la tensione, il tamburo si ferma, il contatore ha segnato una spira che in realtà non ha ancora compiuto il giro completo, quindi una in più: da quì l'esigenza di riportare indietro fino al sensore per scalare il conteggio di -1 e ripartire con l'esatto numero di spire. Il tasto reset in questo caso non ti aiuta, ma ti resetta quello contato fino a quel momento, perdendo il lavoro fatto dall'operatore.

Quindi, semmai, un tasto di ripristino per decrementare di 1 il conteggio spire senza portarlo indietro "a mano" e fare ripartire il ciclo da dove si era interrotto.

Link al commento
Condividi su altri siti

Chiarissimo!!! é un piacere '' discutere'' con voi! ;) stasera porto un pannello hmi a casa e mi faccio il programma e vi faro sapere! GRAziee

Link al commento
Condividi su altri siti

eccomi ragazzi, allora vi posto quello che ho pensato di fare trovatemi tutto cio che non va!

LD I0.0

LD I0.1

LD I0.5

CTUD C0, 1

LD C0

S Q0.0, 1

LDW= C0, -1

R Q0.0, 1

LDN Q0.0

= Q0.5

praticamente ho usato un solo contatore che tramite i due beri i0.0 i0.1 (io5=reset) mi incrementano e decrementano il contatore stesso. solo quando il disco torna indietro il numero nel contatore cambia di ancora una unita, quidni sfrutto questa condizione per resettare un merker conteggio avanti, e quindi con un negato attivo il merker conteggio indietro! secondo voi va bene? ho pensato di usare un terzo micro dedicato solo per il conteggio delle spire mentre i due beri assolvono il compito della direzione del conteggio/deconteggio.

Link al commento
Condividi su altri siti

Secondo me, non funziona.

Quando il primo proximity è interessato (I0.0), C0 aggiunge +1, subito dopo c'è I0.1 che toglie 1, quindi C0 resta sempre a 0.

Come detto precedentemente, devi condizionare con dei merker l'abilitazione all'addizione od alla sottrazione, a seconda che venga interessato per primo l'uno o l'altro sensore.

Link al commento
Condividi su altri siti

non capisco la logica di ciò che hai scritto e comunque non puoi pensare di utilizzare gli ingressi così senza farti delle memorie..

Ribadisco che secondo me dovresti partire dalle condizioni che ti avevo postato. Traducile meramente e poi metti a posto il tutto (con dei salti o altro) per far in modo che le condizioni non si annullino a vicenda.

Link al commento
Condividi su altri siti

ho pensato di usare questa logica per fare prima, io l ho provato a banco premendo in sequenza i0.0 e i0.1 si attiva il merker avanti, premendo sempre io.0 e poi i0.1 resta attivo il merker avanti, se pero ripremo i0.1 e poi i0.0 si disattiva il merker avanti e quindi conto indietro. attenzione il contatore del conteggio non c è nelle righe che ho postato!! il contatore C0 serve solo per darmi il senso di direzione percio il suo valore oscilla in un campo tra due unita cioe aumenta e diminuisce, toglie e aggiunge, nel caso in cui trabocca di un altra unita significa inevitabilmente che un proximity è stato impegnato due volte quindi il piatto sta tornando indietro! per me è piu facile cosi,devo scrivere un altro contatore che mi conta le spire!ora continuo su questa strada vediamo dove mi porta altrimenti abbondono e seguiro con piacere i vostri consigli!!

Link al commento
Condividi su altri siti

mi chiedevo, come mai nessuno mi ha consigliato di mettere un encoder incrementale configurarlo con un interrupt ad ogni giro in modo che ogni volta che viene scatenato l interrupt del giro completo, mi si incrementa un contatore c0 che posso usare con la memoria ritentiva, e inoltre gestire il senso di rotazione per avvolgere svolgere con un bit di stato della direzione conteggio encoder? cosi avevo gia risolto...

pero ora sto cercando di farlo andare con il sistema a due proximity, ho risolto per il senso di direzione, solo che non mi piace il fatto che se l operatore scavalca di qualche centimetro il proximity e poi torna indietro subito avviene la scalatura di una spira quando invece il piatto ancora non ha fatto il giro completo! se non trovo una soluzione a questo usero l encoder incrementale come ho postato sopra.

Link al commento
Condividi su altri siti

mi chiedevo, come mai nessuno mi ha consigliato di mettere un encoder incrementale [...]? cosi avevo gia risolto...

Ti preghiamo di scusarci!!! <_<

Non mi pare ci siano contratti in essere con gli utilizzatori del forum per avere le soluzioni ai propri problemi, o perlomeno non ho mai ricevuto bonifici in merito! Ho sempre creduto, magari erroneamente, che le idee, gli spunti, i suggerimenti dati in queste righe, non fossero impegnative sia per chi le dava che per chi le riceveva, quindi sta ad ognuno di noi che utilizza queste pagine ricavare il meglio dalle risposte che ognuno LIBERAMENTE da.

Mi sembra che chi ti ha risposto, ti ha illustrato il modo di risolvere una questione che tu hai sollevato; poi ti è stata prospettata una strada nuova che è stato intuito

Ho riletto i primi post di roberto8303 e mi sono accorto che fa sempre riferimento a numeri interi di giro... E' un caso o il conteggio delle spire non richiede la precisione di porzioni di bobina? Se davvero bastasse il numero di spira (o di giro di bobina) credo si potrebbe risolvere con una coppia di beri

potesse risparmiarti il costo di installare un encoder, senza che tu dessi tutti i particolari.

Non so dalle tue parti, ma dalle mie il costo di un encoder è ben piu alto di quello di due induttivi Aeco. Certamente che il sistema proposto poteva essere sviluppato con un encoder a 2 canali, ma di solito, i miei progetti sono abituato a gestirli con la spesa minore, la migliore facilità di realizzazione harware e software, le migliori possibilità di intervento in caso di manutenzione o modifiche future.

Tutto questo per ribadire che se tu hai visto una strada diversa per risolvere la questione, tanto meglio per te, ma di sicuro se non hai risolto prima non puoi accusare chi ti ha risposto (o chi non lo ha fatto), ma solo te stesso! <_<

Link al commento
Condividi su altri siti

busanela, la mia non vuole per niente essere una lamentela!! anzi è gia troppo quello che mi viene suggerito! essendo come dici tu tutto gratis.. :) ,pero l idea era partita di utilizzare un encoder incrementale o assoluto,

io stavo utilizzando un encoder incrementale ma avevo il problema di memorizzare il valore contato quando andava via la tensione, non ho chiesto una soluzione economica...

poi se mi è stata data io la accetto ringrazio moltissimo e ne faccio tesoro.

rispetto all encoder pero usando i proximity ci sono differenze di funzionamento il che potrebbero giustificare l utilizzo piu costoso di un encoder, io me ne sono accorto solo facendo il programma perche sono alle prime armi!

Tutto questo per ribadire che se tu hai visto una strada diversa per risolvere la questione, tanto meglio per te, ma di sicuro se non hai risolto prima non puoi accusare chi ti ha risposto (o chi non lo ha fatto), ma solo te stesso!

io non accuso nessuno, era solo una curiosita mia!io non ho visto una strada diversa volevo sin dall inizio utilizzare un encoder, poi mi hai suggerito i beri che non sapevo nemmeno cosa fossero se ricordi, quindi ho cambiato strada perche piu economica ma comunque non riesco a gestire la scalatura di una spira quando tocco il sensore indietro anche se il disco non è tornato indietro di 360°! ecco perche sto ripensando di usare l encoder a meno che non ci sia una soluzione a questo ''difetto'' con i beri...

mi preme ribadire che io non accuso nessuno di chi ha risposto e di chi no anzi ringrazio!!

Link al commento
Condividi su altri siti

ragazzi è normale che se incremento un contatore C0 in avanti ogni volta che il confronto hc0 = 3590 ( un giro) se giro piano si incrementa se ruoto l alberino piu veloce il contatore non incrementa piu?? dipende dal ciclo di scansione?come posso fare?

Link al commento
Condividi su altri siti

mi preme ribadire che io non accuso nessuno di chi ha risposto e di chi no anzi ringrazio!!

OK, scusa Roberto, ma sembrava una lamentela :thumb_yello:

ma comunque non riesco a gestire la scalatura di una spira quando tocco il sensore indietro anche se il disco non è tornato indietro di 360°! ecco perche sto ripensando di usare l encoder a meno che non ci sia una soluzione a questo ''difetto'' con i beri...

Ti allego i 3 segmenti necessari per fare il controllo che ti serve:

   E0.0          M0.1  M0.0
---] [----(P)----]/[----(S)----|
               |
               | M0.0  M0.1
               --]/[----(R)----|

   E0.1           M0.0  M0.1
---] [----(P)----]/[----(S)----|
               |
               | M0.1  M0.0
               --]/[----(R)----|

                   C1
    M0.0     -------------
----] [----| ZV           |
           |              |
    M0.1   |              |
----] [----| ZR           |
            --------------

se ruoto l alberino piu veloce il contatore non incrementa piu?? dipende dal ciclo di scansione?come posso fare?

Effettua il confronto all'interno di una routine d'interupt.

Modificato: da busanela
Link al commento
Condividi su altri siti

se ruoto l alberino piu veloce il contatore non incrementa piu??

Fai il conto della massima velocità di rotazione del tuo avvolgitore. Se, ad esempio, fosse 600 rpm avresti 0.1" di periodo dei tuoi impulsi. quindi è necesario che il tuo programma cicli sempre in un tempo <50 ms.

Però, dovendo discriminare il senso di rotazione, le cose si complicano. Oltre a dovere rivelare 2 impulsi vicini, per i due sensori, hai anche la sistuazione in cui l'avvolgitore può alternarsi nelle due direzioni, facendo "trillare" gli impulsi.

Per evitare comunque falsi conteggi ti conviene legare i due sensori ad ingressi veloci ed alaborare in interrupt.

Modificato: da Livio Orsini
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...