Vai al contenuto
PLC Forum


Encoder Assoluto - è necessario?


roberto8303

Messaggi consigliati

Devo rimodernare una macchina per avvolgere matasse, vorrei mettere un plc con encoder sulla bobinatrice e un pannello dove scrivere e leggere il numero di spire da avvolgere e ovviamente sottrarle se bisogna tornare indietro.

ho pensato di farlo con encoder incrementale ma se va via la corrente e l operatore avra fatto 3000spire e ne doveva fare 5000 dopo l interruzione della corrente non sapra quante ne ha fatte..!c è un modo nel plc per memorizzare tale valore oppure ci vuole per forza un encoder assoluto?

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'encoder assoluto ti consegna una grandezza che equivale ad un determinato angolo tra 0 e 360 gradi.

Ad ogni giro completo di ruota, sarebbe una variabile retentiva che va acquisendo i numeri di giri eseguiti piu' l'ultimo valore angolare. Niente altro.

Link al commento
Condividi su altri siti

Imposta come ritentive le memorie in cui appoggi il valore di conteggio, semplice.

come si fa?? intendi usando un encoder incrementale? ad esempio memorizzo hc0 in una word che poi la leggo dal pannello quindi come faccio a memorizzarla?

ora la macchina ha un micro che conta con una camma sul albero ogni giro e uno strumento contatore della omron, ha il vantaggio che rimane memorizzato l ultimo valore se manca la corrente, ma ovviamente se si va all indietro l operatore deve contare lui... :rolleyes:

secondo voi per l encoder che risoluzione dovrei scegliere visto che non serve nessuna precisione la ruota è 400mm e anche se si ferma 20° piu avanti non è un problema.

Link al commento
Condividi su altri siti

ho capito devo andare su aree a ritenzione ma non capisco cosa impostare in area 0 in offset e numero elementi. ad esempio io voglio che il valore in vw100 dell encoder incrementale rimanga in memoria cosa scrivo nelle tre caselle?

Link al commento
Condividi su altri siti

Le caselle sono numerate da 0 a 5 perchè hai la possibilità di designare come ritentive 6 aree di memoria (per es. per temporizzatori, contatori, merker M e V, ...).

La prima cella denominata Area Dati, definisce quale tipo di elemento destinare alla ritentiva (VB, VW, T, C, MB, MW, ...); la seconda cella (offset) da quale memoria iniziare il salvataggio nella mem. non volatile, la terza definisce il numero di elementi da salvare, in riferim. a quanto definito nella prima cella.

Per es. se nell'area dati hai definito VB, nell'offset 0 e come numero di elementi 10, hai destinato alla mem. non volatile 10 Byte della memoria V, da VB0 a VB10.

Tieni comunque presente che le aree a ritenzione sono quelle aree della memoria di dati che l’utente definisce in modo che

restino invariate in seguito allo spegnimento e alla riaccensione della CPU, purché il condensatore ad elevata capacità (e la batteria opzionale, se presente) non si scarichino.

Modificato: da busanela
Link al commento
Condividi su altri siti

Busanela ho trasferito hco in Vd0 ho messo nell area 1 Vd offset 0 e n elementi 2048, quando vado a caricare il programma nella cpu mi esce un avvertenza 2756 e dice che l area a ritenzione 0 non è ammessa per il tipo di cpu selezionata. che vuole dire??

Link al commento
Condividi su altri siti

la 222, a me non sembra chiaro, perche io ho identificato la cpu con refresh e quindi la riconosce in automatico! forse la mia cpu non puo svolgere questa funzione??

Link al commento
Condividi su altri siti

allora ho notato due cose...

primo l errore che giustamente il programma mi riportava era perche selezionavo molte aree di memoria, piu di quanto la mia cpu ne potesse memorizzare.

quindi ho scritto memorizza da vd0 a vd10 e gia l errore non esce piu.

ora pero c è un altro problema ho caricato hco in vd0 sia nel main che nel sbr0 ma quando tolgo corrente al ripristino sia vd0 che hco nella tabella di stato sono a 0! ho fatto pero un altra prova perche mi piace osservare come si comporta qualsiasi sistema passi per le mie mani, e cioe ho caricato un numero ad es 100 in vd0 e quando tolgo la corrente questo invece viene memorizzato!! ora mi chiedo perche hco no???? e forse mi spiego che nella tabella aree a ritenzione ci sono i contatori C ma non hco quindi siccome quando va via la corrente hc0 cade a 0 viene trasferito 0 nella vd 0? è forse cosi??

Link al commento
Condividi su altri siti

sì ma Roberto è evidente che, se devi memorizzare il valore di un encoder incrementale che ad ogni nuova accensione parte naturalmente con valore 0, non devi passare il valore dell'encoder direttamente nella variabile VD0!!! Dovrai fare in maniera differente e cioè dovrai eseguire delle semplici somme algebriche.

VD0 sarà uguale a sè stesso più il valore attuale dell'encoder meno il valore precedente (della precedente lettura)

Tutto questo se conti in avanti, se conti indietro dovrai sottrarre a VD0 sempre la differenza tra la lettura precedente meno l'attuale (o se vuoi usi il valore assoluto della prima operazione)

Spero di essermi spiegato e di avere fatto le operazioni corrette, ma ad ogni modo è più facile che faccia tu i calcoli e ti renda conto di cosa ti sto dicendo...

Link al commento
Condividi su altri siti

Grazie per il chiarimento rddiego!!infatti non ci avevo pensavo che all inizio della scansione con Sm0.1 carica 0 nel bit Smd...nel interrupt dell encoder! ecco spiegato.

VD0 sarà uguale a sè stesso più il valore attuale dell'encoder meno il valore precedente (della precedente lettura)

quindi Vd0=Vd0+ come faccio a calcolare il valore precedente dell encoder??

Link al commento
Condividi su altri siti

Tieni presente che il sistema ti permette di memorizzare con precisione il valore raggiunto solo se l'interruzione di corrente avviene a macchina ferma.

Se invece tale interruzione avviene a macchina in funzione, il plc smetterà di contare praticamente all'istante, mentre l'avvolgitura continuerà per inerzia.

Link al commento
Condividi su altri siti

HC0 = valore attuale letto direttamente dall'encoder

VD0 = valore finale (che utilizzerai in tutto il programma)

VD2 = valore della lettura precedente

VD4 = differenza tra attuale e precedente

Esegui nell'ordine:

VD4 = HC0 - VD2

VD2 = HC0

VD0 = VD0 + VD4

Esempio

Prima scansione (ipotizza che l'encoder segni 5)

VD4 = 5 - 0

VD2 = 5

VD0 = 0 + 5

Successiva scansione (ora l'encoder segna 10)

VD4 = 10 - 5

VD2 = 10

VD0 = 5 + 5

Nuova accensione (l'encoder sarà = 0 e ripartendo segnerà nuovamente 5)

VD4 = 5 - 0

VD2 = 5

VD0 = 10 + 5

E così via ... stessa roba andando indietro ma eseguendo sottrazioni

NB.

Nell'esempio si suppone ritentivo solo VD0 quindi hai due possibilità:

1 -> per VD2 e VD4 usi variabili non ritentive che andranno a 0 ad ogni riaccensione

2 -> ad ogni riaccensione utilizzando il bit di prima scansione (SM0.0 credo non ricordo) imponi a 0 VD2 e VD4

Ci sono poi ulteriori controlli che dovresti mettere per esempio che la variabile VD0 incrementi o decrementi solo con il bit di running del motore per evitare che durante una manutenzione dell'encoder (muovendolo a mano praticamente) non si sfalsi la misura (teoricamente la misura di posizione non cambia nella realtà). Verificare ed evitare che HC0 raggiunga valori limite per cui dovrai eseguire ulteriori calcoli per il ritorno a 0 del valore letto dall'encoder durante il movimento.

Modificato: da rddiego
Link al commento
Condividi su altri siti

per Batta, la macchina ha un elettrofreno sul motore

Per Rddiego ora sono a lavoro ho dato solo un occhiata stasera lo provo subito!! grazie per la pazienza che hai avuto per postare tutto :) ti faccio sapere come va questa sera stesso ;)

Link al commento
Condividi su altri siti

Nuova accensione (l'encoder sarà = 0 e ripartendo segnerà nuovamente 5)

ho provato non è cosi :( , mi da una misura minore all accensione! per esempio lo fermo a 5000 all accensione mi esce 3500, poi anche mentre conta hco da una misura e vd0 ne da un altra. ho solo usato vd0 vd4 vd8 perche non potevo fare operazione con byte della stessa parola.io faccio i calcoli nel main con sm0.0 ma secondo me c è sempre un ritardo di elaborazione il che fa perdere il conto alla cpu quando taglio la corrente!

LD SM0.1

CALL HSC_INIT:SBR1

LD SM0.0

MOVD HC0, VD8

-D VD4, VD8

LD SM0.0

MOVD HC0, VD4

LD SM0.0

+D VD8, VD0

ritentive ho messo vd0 a vd2 non ho scritto il procedimento per la differenza perche sto provando solo ad incrementare non centra se non funziona?

Link al commento
Condividi su altri siti

il calcolo è corretto ovviamente devi saperlo gestire con quel PLC.

Anzichè eseguire la seconda istruzione come hai fatto tu

LD SM0.0

MOVD HC0, VD4

è meglio che scrivi così

LD SM0.0

MOVD VD8, VD4

ho solo usato vd0 vd4 vd8 perche non potevo fare operazione con byte della stessa parola

Perfetto, il mio è solo un esempio, non sto programmando S7200, non ho neanche pensato al formato delle variabili per me poteva essere x, y, z

ho provato non è cosi , mi da una misura minore all accensione! per esempio lo fermo a 5000 all accensione mi esce 3500

non importa tu col bit di prima scansione metti VD4 e VD8 uguali entrambi a HC0 sempre e comunque, così siccome noi vogliamo sommare una differenza tra la misura attuale e la successiva alla prima accensione la differenza sarà certamente 0 (ovviamente da fermo)

mentre conta hco da una misura e vd0 ne da un altra

per forza scusa non possono essere uguali, noi stiamo sommando delle variazioni a prescindere dal valore letto dall'encoder

secondo me c è sempre un ritardo di elaborazione il che fa perdere il conto alla cpu quando taglio la corrente

sì ma scusa tu tagli la corrente mentre si muove??? se il plc si spegne mentra la bobina si muove ehehe è sicuro che non ti ritrovi.

A questo punto ho perso il filo della tua richiesta/problema. Probabilmente forse ti ci vuole un assoluto allora

Link al commento
Condividi su altri siti

ti seguo,

non importa tu col bit di prima scansione metti VD4 e VD8 uguali entrambi a HC0 sempre e comunque

ma io ho usato il bit che è sempre attivo ad ogni scansione e cioe sm0.0 invece con sm0.1 bit solo alla prima scansione e solo per la prima ricihamo l interrpt encoder.

no non ho fermato l encoder mentre girava, a me serve come stai cercando di farmi capire tu, perche tanto se va via la corrente l elettrofreno senza corrente blocca il disco subito circa max 10gradi di spostamento e non arriva mai ad un giro!ora riprovo

Link al commento
Condividi su altri siti

allora ho messo con Sm0.1 vd4 e vd8 uguali a hco solo per il primo ciclo, cosi facendo memorizza il valore e funziona :) poi ho provato a cambiare il secondo segmento, i numeri in vd0 crescono da soli anche ad albero encoder fermo!! meglio il primo caso!

pero ho fatto un altra prova ho provato a fare parecchi mezzi giri di albero dopo 4 -5 volte quindi se prima l escursione del mezzo giro avanti indietro era da 500 a 2000 mano mano è sceso il valore è arrivato da -1000 a 500 eppure l albero lo spostavo di soli e sempre circa 180° :huh:

Link al commento
Condividi su altri siti

i numeri in vd0 crescono da soli anche ad albero encoder fermo

mi sembra strano che incrementi con albero fermo poichè

VD8 = HC0 - VD4 con albero fermo deve dare risultato 0

siccome dopo copi HC0 in VD4, la scansione successiva con albero fermo, HC0 non è variato perciò ancora uguale a VD4 e ne risulta di conseguenza che VD8 deve essere uguale a 0.

L'istruzione VD0 = VD0 + VD8 non farà niente infatti VD8 con albero fermo è uguale a 0

pero ho fatto un altra prova ho provato a fare parecchi mezzi giri di albero dopo 4 -5 volte quindi se prima l escursione del mezzo giro avanti indietro era da 500 a 2000 mano mano è sceso il valore è arrivato da -1000 a 500 eppure l albero lo spostavo di soli e sempre circa 180°

con questo mi vuoi dire che la variazione di 180° equivale sempre a 1500 punti encoder?? Oppure ti da fastidio il segno -? Il risultato della differenza mettilo in valore assoluto.

Link al commento
Condividi su altri siti

con questo mi vuoi dire che la variazione di 180° equivale sempre a 1500 punti encoder??

Buongiorno, no, ti voglio dire che se io giro l encoder di 180° ad esempio quota 500 2000 deve essere sempre 500 e 2000 e non dopo tanti e stessi(solo avanti indietro) spostamenti cambia il numero!! perche se l encoder fisicamente è in quella posizione io devo leggere sempre quel valore!

Link al commento
Condividi su altri siti

devo leggere sempre quel valore

in teoria sì se non viene mai spento l'encoder, ma la filosofia che ti voglio far adottare è svincolata dal valore "assoluto" letto dall'encoder poichè il valore vero è dato da VD0 che è la somma di tutte le variazioni (differenza tra valore attuale e precedente).

Quello che in questo modo importa e non dovrebbe variare è appunto questa differenza cioè per uno spostamento di 180° ipotizziamo l'encoder misuri 1000 punti, questo numero deve essere rilevato sempre per tutti i valori di partenza dell'encoder.

Esempio 1:

Valore iniziale encoder 0; rotazione di 180°; valore finale 1000; differenza 1000

Esempio 2:

Valore iniziale encoder 500; rotazione di 180°; valore finale 1500; differenza 1000

Esempio 3:

Valore iniziale encoder -100; rotazione di 180°; valore finale 900; differenza 1000

Esempio 4:

Valore iniziale encoder -3000; rotazione di 180°; valore finale -2000; differenza 1000

Più chiaro così?? "Disinteressati" del valore letto da HC0, soffermati sulle variazioni

Link al commento
Condividi su altri siti

domanda ( magari nel tuo caso non è possibile ):

ma quando spegni la macchina puoi tenere

in vita il plc alimentando l'encoder

e tagliare gli ausiliari

in ditta da me ci sono macchine che si spengono

ma il plc è sempre alimentato .

in questo modo se si dovesse muovere il nastro

non perderesti niente.

:rolleyes:

Link al commento
Condividi su altri siti

Anni fa c'erano encoder incrementali, alimentati con batteria in tampone e contatore interno, lettura in modo seriale con linea RS485 veloce.

Erano in catalogo anche da un costruttore italiano.

Con questo tipo di encoder si avrebbe la sicurezza di non perdere il conteggio anche in caso di improvvisa mancanza di alimentazione al PLC o all'encoder.

Link al commento
Condividi su altri siti

per felino

ma quando spegni la macchina puoi tenere

in vita il plc alimentando l'encoder

si ma posso farlo solo con una batteria perche nell azienda viene tolta la tensione forza motrice a fine giornata!inoltre il plc è a 220volt e l encoder lo alimento con al 24volt del plc!

per Livio

alimentati con batteria in tampone e contatore interno, lettura in modo seriale con linea RS485 veloce

mi domando (non conoscendo la differenza di prezzo): a questo punto a livello economico non è migliore comprare un encoder assoluto?

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...