Vai al contenuto
PLC Forum


problema controllo posizione di un asse e rispettiva rampa di discesa


TonySlash

Messaggi consigliati

buona sera, mi presento sono antonio e sono molto nuovo sia su dispositivi schneider che nell' ambito del controllo di posizionamento.

ho gia dato una lettura alle dispense del sig. Orsini ho provato ad implementare un posizionatore simile al suo ma continuo ad avere problemi.

Vi spiego l' applicazione, si tratta di un asse che deve posizionarsi su due posizioni, una fissa(una sorta di home da raggiungere a fine missione) ed una quota che viene definita maualmente,e fin qui concettualmente,almeno, niente di complicato. il problema si complica in quanto sull asse si muove un carro piuttosto grosso e quindi necessito di rampe ad S in modo da avere un accelerazione più dolce.

il mio sistema è composto da:

-plc m 241

-encoder da 100 impulsi/giro (a,b con quadratura x4,collegato su contatore veloce della cpu e gestito nello stesso task del posizionatore)

-inverter control tecniques(comandato con ingresso analogico 0-10V per pilotarne la frequenza)

- la precisione di posizionamento è al massimo di 1mm

-dati noti durata delle due rampe di acc/dec scalate rispetto alla velocità massima

-velocità dell' asse

-posizione target

 

Sto riscontrando forti problemi col posizionamento in quanto sembra che la quota di inizio decelerazione sia sbagliata, o meglio ho provato con differenti formule ma la quota che ricavo è pressochè simile,varia di un paio di mm tra un tentativo e l altro ma il posizionamento è sempre fuori di almeno 10mm nel caso migliore. Ho quasi l'impressione che l'asse si muova ad una velocità diversa rispetto a quella comandata.

Per cercare di essere più preciso ed esaustivo possibile cercherò di riassumere più semplicemente possibile le operazioni che effettuo nel preparare la missione di movimento:

  1. in base alla velocità impostata calcolo la durata delle rampe di acc/dec
  2. calcolo l'accelerazione/decelerazione come vmax/tempoRampa (è corretto come calcolo?)
  3.  calcolo lo spazio di accelerazione e decelerazione come v^2/2*accelerazione(decelerazione) oppure con la legge del moto x=v0*tRampa + 0.5 * acc/dec * tRampa^2                                      dove v0 nel primo caso vale 0(partendo da fermo) e nel secondo caso varrà la velocita massima raggiunta prima di decelerare
  4. verifico che le due distanze non eccedano la distanza massima da percorrere,nel caso eccedano decremento la velocità e ritorno al passo 1
  5. dopo aver verificato che posso effettuare la missione passo al calcolo del jerk per ottenere le S (calcolo sia il jerk che il tempo in cui la rampa è concava o convessa)
  6. poi calcolo tutti i vari step da eseguire per generare le rampe (numero di cicli per generare le rampe in base al tempo di durata del mio task di esecuzione)
  7. poi dalla legge del moto x(t)= v0*t + 1/2*acc*t^2 + 1/6*jerk*t^3 vado a derivare fino alla derivata terza per calcolare istante per istante la mia accelerazione,velocità e posizione.
  8. per quel che riguarda la parte a velocità costante uso la formula del moto rettilineo uniforme. in questa fase controllo la quota dell' encoder e appena raggiunge la quota a cui dovrei iniziare a decelerare parte la rampa di decelerazione. ora in questo caso noto che la quota memorizzata per ricalcolare tutto è corretta, cioè corrisponde con la quota a cui vorrei iniziare a decelerare ma pare sia tutto sbagliato in quanto il posizionamento finale è errato. Ho provato a far seguire già l' encoder con la traiettoria ideale che genero ma ci sono delle differenze abissali tra quello che calcolo e quello che leggo, cioè a velocite basse la mia quota è molto più elevata rispetto all' encoder mentre a velocità alte è l' esatto opposto. Ho verificato attentamente i calcoli e potrebbe essere che sbaglio però se la matematica è questa non ci si scappa tanto.

 

Quindi riassumento mi piacerebbe capire dove sbaglio,innanzitutto, poi mi piacerebbe capire se esiste un modo per controllare la rampa ad S come nell' esempio del sig. Orsini e magari capire come gestire l'encoder per poterne stimare la velocità corrente in modo corretto(adesso stimo una velocità media, cioè leggo la differenza di impulsi ad intervalli regolari ogni 20ms e poi dopo 5 letture medio il tutto,pero non so se sia un metodo efficace. Ho provato inoltre a calcolare una velocità istantanea ma in base al tempo di campionamento avevo variazioni enormi). Non potendo quindi usufruire di funzioni per il motion control (tipo gli MC_###) che modi potrei utilizzare come alternativa a quello che sto gia facendo?

per me sarebbe utile anche sapere se esiste un libro o qualcosa che spieghi un po tutte queste cose soprattutto dal punto di vista pratico con esempli e magari semplici applicazioni gia implementate/da implementare.

 

Ringrazio anticipatamente tutti coloro che leggeranno e coloro che vorranno una mano. Mi scuso per il post lungo e prolisso ma penso che piu informazioni ci siano e più sia semplice capire. Sono comqune a disposizione per fornire tutte le informazioni di cui necessitate.

buona serata,

 

Antonio

Link al commento
Condividi su altri siti


Marco Fornaciari

Brevemente e in ordine sparso, perchè già senza leggere con attenzione vedo già un po di problemi:

1- 100 impulsi al giro per l'encoder sono pochi, almeno 1000, ovvero in funzione dello sviluppo della routa di traino, quant'è lo sviluppo?

2- dov'è calettato l'encoder? se trasmissione a gioco zero va bene anche su motore, diversamente vuole sulla ruota motrice, ovvero totalmente indipendente

3- perchè fare le rampe con il PLC quando ci pensa l'inverter?

4- c'è il sensore di zero quota? che deve essere più indietro della posizione di partenza, ci vuole e basta

5- per fare la rampa dell'inverter con il PLC ti manca la corrente, sia di traino sia di frenatura, va da se che in questo caso le rampe dell'inverter vanno messe a zero

6- sempre per la rampa con il PLC devi controllare anche la frenatura

7- se il traino non è con cremagliera la precisione del mm scordala

8- quanto pesa il carro da movere e quanto è grande, le leggi della dinamica comandano

9- per fare del motion semplice con un inverter devi collegare l'encoder all'inverter e far fare tutta la gestione a lui, in pratica gli passi solo la quota da raggiungere e lui si arrangia in base alle sue impostazioni, in pratica quello che si fa con brushless

10- tutto quello che stai facendo vale solo in teoria e in laboratorio, su un vero impianto vale meno del 30%

11- quello che tenti di fare, si fa con i PLC specifici di controllo assi, ma sono una cosa ben diversa

12- pretendere curve a S con questo sistema è un po troppo, meglio doppio trapezio, cioè tre velocità fisse, ma con due potrebbe anche bastare, quindi calcorare una quota di arresto in anticipo a quella di fine corsa (dei tempi di risposta bisogna sempre tenerne conto), la quota di anticipo magari deve erre diversa se il carro trasporta solo se stesso o del carico

13- mettere il freno stazionamento e arresto finale comandato dall'inverter

14- all'inverter è stata collegata la resistenza di frenatura, se non c'è l'inverter potrebbe non frenare, anzi

15 per gestire il tutto devi sincerarti che il tempo di scansione del PLC sia inferiore a 5 ms, ovvero utilizzare una task ciclica con clock massimo 5 ms, non usare interupt su evento che crei solo confusione al PLC

16- all'atto pratico l velocità reale del carro non ti serve a nulla, basta solo impostarla e sincerarsi che sia +/- quella, basta controllare i tempi di ciclo totale, cioè verificare che il tempo di ciclo totale carro sia più rapido di quello che serva al cilco di lavorazione, ad occhi si fa senza problemi

 

Prima di acquistere tutta l'elettronica sono state fatte da persona esperta le dovute considerazioni sulla meccanica del sistema? cioè non semplici calcoli teorici

 

 

Modificato: da Marco Fornaciari
Link al commento
Condividi su altri siti

ciao Marco, innanzitutto piacere di conoscerti e grazie mille per il tempo dedicatomi. cercherò di rispondere ordinatamente a tutti i punti da te elencati, e perdonami se ti chiederò delucidazioni riguardo alcune cose che sto sentendo adesso per la prima volta. in grassetto segno le tue domande.

  1. 20 ore fa, Marco Fornaciari scrisse:

    1- 100 impulsi al giro per l'encoder sono pochi, almeno 1000, ovvero in funzione dello sviluppo della routa di traino, quant'è lo sviluppo?

     ho già richiesto un encoder con più impulsi in modo da poter avere un po di precisione in più, con sviluppo cosa intendi?
  2. 20 ore fa, Marco Fornaciari scrisse:

    2- dov'è calettato l'encoder? se trasmissione a gioco zero va bene anche su motore, diversamente vuole sulla ruota motrice, ovvero totalmente indipendente

    l'encoder è collegato sulla ruota che gira sulla cremagliera
  3. 20 ore fa, Marco Fornaciari scrisse:

    perchè fare le rampe con il PLC quando ci pensa l'inverter?

    penso che questo sia diventato un mio capriccio ormai, comunque l' inverter è un nidec unidrive M200, ho provato a leggere un po il manuale ma non ho capito granchè su come gestirle da li.onestamente non ci ho smanettato molto perchè vorrebbero che gli inverter funzionassero come dei teleruttori un po più sofisticati! pero ormai valuto tutte le alternative possibili.
  4. 20 ore fa, Marco Fornaciari scrisse:

    c'è il sensore di zero quota? che deve essere più indietro della posizione di partenza, ci vuole e basta

    affermativo sta un sensore di zero,ma per questioni di spazio è vicinissimo alla posizione di partenza.l ho gestito pero in modo che azzeri solo se avviata la procedura. Ne ho anche  uno che mi fa anche da extracorsa in fondo.

  5. 20 ore fa, Marco Fornaciari scrisse:

    per fare la rampa dell'inverter con il PLC ti manca la corrente, sia di traino sia di frenatura, va da se che in questo caso le rampe dell'inverter vanno messe a zero

    nell' inverter ho lasciato le rampe al valore più piccolo che mi facesse impostare. in che senso mi manca la corrente?

  6. 20 ore fa, Marco Fornaciari scrisse:

    sempre per la rampa con il PLC devi controllare anche la frenatura

    se intendi controllare posizione,velocità,accelerazione e compagnia bella lo faccio già. pero maggiori delucidazioni a riguardo non mi faranno male.

  7. 20 ore fa, Marco Fornaciari scrisse:

    se il traino non è con cremagliera la precisione del mm scordala

    traino a cremagliera

  8. 20 ore fa, Marco Fornaciari scrisse:

    quanto pesa il carro da movere e quanto è grande, le leggi della dinamica comandano

    indicativamente sono sui 300kg 

  9. 20 ore fa, Marco Fornaciari scrisse:

    per fare del motion semplice con un inverter devi collegare l'encoder all'inverter e far fare tutta la gestione a lui, in pratica gli passi solo la quota da raggiungere e lui si arrangia in base alle sue impostazioni, in pratica quello che si fa con brushless

    da quanto ho visto sul manuale mi pare che sul mio inverter non posso collegarci su un encoder. a meno che non interroga un solo canale

  10. 20 ore fa, Marco Fornaciari scrisse:

    tutto quello che stai facendo vale solo in teoria e in laboratorio, su un vero impianto vale meno del 30%

     immaginavo che fosse un' impresa folle...

  11. 20 ore fa, Marco Fornaciari scrisse:

    quello che tenti di fare, si fa con i PLC specifici di controllo assi, ma sono una cosa ben diversa

    intendi dispositivi simili alla serie nj della omron alle cpu T di siemens?

  12. 20 ore fa, Marco Fornaciari scrisse:

    pretendere curve a S con questo sistema è un po troppo, meglio doppio trapezio, cioè tre velocità fisse, ma con due potrebbe anche bastare, quindi calcorare una quota di arresto in anticipo a quella di fine corsa (dei tempi di risposta bisogna sempre tenerne conto), la quota di anticipo magari deve erre diversa se il carro trasporta solo se stesso o del carico

    questa alternativa mi piace,in pratica dovrei generare due rampe, una lentissima ed una lunga quanto la mia rampa e poi far girare quella lenta dallo 0% al 10% e poi dal 90% fino a fine rampa?

  13. 20 ore fa, Marco Fornaciari scrisse:

    mettere il freno stazionamento e arresto finale comandato dall'inverter

    il motore è frenato ed inserisco il freno appena tolgo l abilitazione all' inverter

  14. 20 ore fa, Marco Fornaciari scrisse:

    all'inverter è stata collegata la resistenza di frenatura, se non c'è l'inverter potrebbe non frenare, anzi

    affermativo,resistenza installata

  15. 20 ore fa, Marco Fornaciari scrisse:

    per gestire il tutto devi sincerarti che il tempo di scansione del PLC sia inferiore a 5 ms, ovvero utilizzare una task ciclica con clock massimo 5 ms, non usare interupt su evento che crei solo confusione al PLC

    allora il tempo di esecuzione del task è di 2ms, per quel che riguarda gli interrupt diciamo che preferisco evitarli(ho visto robot fare cose allucinanti in preda a follia da interrupt!!)

  16. 20 ore fa, Marco Fornaciari scrisse:

    all'atto pratico l velocità reale del carro non ti serve a nulla, basta solo impostarla e sincerarsi che sia +/- quella, basta controllare i tempi di ciclo totale, cioè verificare che il tempo di ciclo totale carro sia più rapido di quello che serva al cilco di lavorazione, ad occhi si fa senza problemi

    questo mi rincuora abbastanza!

credo e spero di aver risposto a tutto. Per tutto il resto ho trovato quasi tutto pronto e montato quindi penso che sia difficile poter ribaltare tutto(meccanicamente ed elettronicamente) a meno che non ci siano risultati davvero pessimi.

Ti ringrazio davvero tanto per tutto!

 

antonio

Link al commento
Condividi su altri siti

Marco Fornaciari
54 minuti fa, TonySlash scrisse:

ciao Marco, innanzitutto piacere di conoscerti e grazie mille per il tempo dedicatomi. cercherò di rispondere ordinatamente a tutti i punti da te elencati, e perdonami se ti chiederò delucidazioni riguardo alcune cose che sto sentendo adesso per la prima volta. in grassetto segno le tue domande.

  1.  ho già richiesto un encoder con più impulsi in modo da poter avere un po di precisione in più, con sviluppo cosa intendi? lo sviluppo della routa di traino, cioè la circonferenza primitiva del pignone che ingrana sulla cremagliera
  2. l'encoder è collegato sulla ruota che gira sulla cremagliera vedi sopra
  3. penso che questo sia diventato un mio capriccio ormai, comunque l' inverter è un nidec unidrive M200, marca a me sconosciuta, e da una veloce passata del manuale è un inverter con funzioni di base ho provato a leggere un po il manuale ma non ho capito granchè su come gestirle da li.onestamente non ci ho smanettato molto perchè vorrebbero che gli inverter funzionassero come dei teleruttori un po più sofisticati! ma sanno cos'è un motore comandato da inverter? pero ormai valuto tutte le alternative possibili. stai perdendo tempo perchè l'hardware non è idoneo
  4. affermativo sta un sensore di zero,ma per questioni di spazio è vicinissimo alla posizione di partenza.l ho gestito pero in modo che azzeri solo se avviata la procedura. Ne ho anche  uno che mi fa anche da extracorsa in fondo. OK

  5. nell' inverter ho lasciato le rampe al valore più piccolo che mi facesse impostare. in che senso mi manca la corrente? per gestire le rampe e il mantenimeto della velocità del motore bisogna gestire la corrente con idoneo algoritmo: c'è da impazzire

  6. se intendi controllare posizione,velocità,accelerazione e compagnia bella lo faccio già. pero maggiori delucidazioni a riguardo non mi faranno male. qui la cosa si complica parecchio attraverso un forum, ma torniamo al punto 5

  7. traino a cremagliera

  8. indicativamente sono sui 300kg  inizia ad essere un carico importante

  9. da quanto ho visto sul manuale mi pare che sul mio inverter non posso collegarci su un encoder. a meno che non interroga un solo canale

  10.  immaginavo che fosse un' impresa folle... per collegare un encoder serve un'apposita scheda (sempre se il fabbricante la prevede) quindi nel firmware ci vuole la macro di gestione

  11. intendi dispositivi simili alla serie nj della omron alle cpu T di siemens? No, sono proprio PLC dedicati al motion, se sai usare il NJ Omron ci puoi provare, ma con quell'inverter perdi tempo e non cavi un ragno dal buco, il motion richiede i motori brushless, o minimo passo passo

  12. questa alternativa mi piace,in pratica dovrei generare due rampe, una lentissima ed una lunga quanto la mia rampa e poi far girare quella lenta dallo 0% al 10% e poi dal 90% fino a fine rampa? in tutti i manuali degli inverter ci sono esempi di gestione a trapezio, la rampa è sempre quella impostata sull'inverter, a senda dell posizione cambi la velocità ****

  13. il motore è frenato ed inserisco il freno appena tolgo l abilitazione all' inverter, non è il funzionamento ideale, l'inverter dovrebbe avere un'uscita apposita

  14. affermativo,resistenza installata OK

  15. allora il tempo di esecuzione del task è di 2ms, per quel che riguarda gli interrupt diciamo che preferisco evitarli(ho visto robot fare cose allucinanti in preda a follia da interrupt!!) OK

  16. questo mi rincuora abbastanza! OK

La sequenza dei comandi è:

1- passo velocità max a inverter

2- passo il comando di marcia all'inverter, e verifico arrivi lo stato di marcia

3- l'inverter parte e inizia la rampa di accelerazione

4- l'inverter appena sente il motore in copia comanda la sfrenatura meccanica

5- il motore raggiunge la velocità massima

6- il carro arriva al punto di rallentamento

7- invii la velocità lenta all'inverter

8- inverter fa la rampa di discesa e frena il motore scaricando energia sulla resistenza

9- il motore raggiunge la velocità minimima e subito dopo

10- il carro arriva vicino al punto di arresto

11- invii velocità zero all'inverter

12- l'inverter rifà la rampa di discesa e arresta il motore

13- quando l'inverter sente il motore sotto alla copia minima comanda la frenatura meccanica

14- verifico manco lo stato di marcia dell'inverter

15 il ciclo è terminato.

 

Per sfruttare nel migliore dei modi la frenatura elettrica del motore, è opportuono che il motore sia di una o due taglie in più di quella necessaria a muovere il carro, esempio:

calcolo 1 kW - monto 1,5 - 2,2 kW, calcolo 1,5 kW - monto 2,2 - 3 kW, tipicamente da 5 kW in su non sempre è necessario aumentare la taglia del motore.

 

 

 

Link al commento
Condividi su altri siti

2 ore fa, Marco Fornaciari scrisse:

 

Hai controllato il valore del contatore a fine posizionamento?

 

 

Hai provato a controllare il valore del contatore a fine posizionamento?

Se il valore contato è superiore a quello impostato c'è un errore nel software, al di là della legge impostata.

Link al commento
Condividi su altri siti

Roberto Gioachin
18 ore fa, TonySlash scrisse:
il ‎11‎/‎06‎/‎2019 at 22:12 , Marco Fornaciari scrisse:

tutto quello che stai facendo vale solo in teoria e in laboratorio, su un vero impianto vale meno del 30%

 immaginavo che fosse un' impresa folle...  

 

Non credo proprio sia un impresa folle, io ho creato una FC che fa tutto quello che stai cercando di fare tu tranne le curve ad S, muovo carichi anche molto più grandi e riesco ad avere una buona precisione anche utilizzando inverter ad anello aperto (senza encoder sull'inverter).

Probabilmente non devi cambiare nulla sull'hardware, ma devi cambiare un po' il tipo di processo.

Io ho scelto di creare un asse virtuale utilizzando le formule che hai già menzionato (utilizzo una scansione a tempo di 10ms), e poi con una funzione proporzionale + integrativa faccio inseguire l'asse virtuale dall'asse reale.

Naturalmente valgono tutti i suggerimenti che ti sono stati dati, ad esempio aumentare la risoluzione dell'encoder può rendere più precisi i calcoli.

 

Buon lavoro!

Link al commento
Condividi su altri siti

Marco Fornaciari

Così giusto per semplificare le cose.

Ma perchè scervellarsi in calcoli quando basta fare quello che ho esposto nel precedente post: gestione a trapezio.

Se fosse tutto elettromeccanico si fa così, e anche con il PLC conviene fare così: ci si muove, e ci muovo, tonnellate e grammi da decenni, basta mettersi lì qualche ora a tarare il tutto, se serve si fanno velocità e punti di rallentamento o/e arresto diversi in base al peso trasportato. Per sapere il peso trasportato non c'è bisogno di celle di carico, basta gestire in qualche modo quanto trasportato:

- se non c'è nulla = vuoto = parametri gruppo 1

- se c'è l'oggetto A = parameteri gruppo 2

- se c'è l'oggetto B = parameteri gruppo 3

- ecc.

Da evitare la frenatura in CC, se non all'arresto e quando la velocità è quasi zero: si può danneggiare la cimenematica di trasmissione.

 

Per fare l'anello chiuso sull'inverter, ci vuole un inverter con prestazioni ben diverse da quello installato: già fatti e sembra di avere quasi un brushless, in pratica manca solo lo stazionamento in copia.

Va da se che il motoriduttore deve essere idoneo, e con motore a ventilazione forzata e encoder calettato sul suo asse.

Link al commento
Condividi su altri siti

1 ora fa, Marco Fornaciari scrisse:

quando basta fare quello che ho esposto nel precedente post: gestione a trapezio.

 

perchè la gestione a trapezio non ha una rampa ad "S". Le rampe ad "S" si fanno apposta per evitare i punti di accelerazione violenta in avvio ed in fermata.

Link al commento
Condividi su altri siti

Marco Fornaciari

Si Livio si fanno, se l'hardware installato, meccanica per prima, lo permette (che poi lo fa anche da solo), ma per quel tipo di uso si può fare tranquillamente a meno: non penso proprio si vogliano accelerazioni a 9g.

Nello specifico con l'hardware del nostro collega non ci si riesce, se non in modo altamente approssimativo e più lento del trapezio, certo che se per ogni posizionamento si hanno a dispozione minuti si può fare tutta l'accademia che si vuole.

Basta mettersi lì e tarare il sistema, che comunque vuole fatto.

Converrai che in ogni caso per gestire correttamente una rampa a S bisogna sapere anche la corrente, altrimenti lo hai scritto ma praticamente non funziona: non si può dividere la gestione della rampa tra PLC e inverter, quest'ultimo prevale sempre.

Se ho di questi problemi è ho l'inverter collegato in rete, ad ogni movimento invio velocità e rampe diverse, diversamente trovo il punto di miglior funzionamento ... e tante volte ho dovuto far cambiare il motoriduttore perchè il calcoli del meccanico erano esageratamente ottimistici già per un prodotto qualità, ma poi spesso montano quello che costa meno.

Modificato: da Marco Fornaciari
Link al commento
Condividi su altri siti

13 ore fa, Marco Fornaciari scrisse:

non penso proprio si vogliano accelerazioni a 9g.

 

Anche con accelerazioni da 0.5g può essere necessario accelerare senza strappi. Si possono avere tempi di accelereazione totali di una rampa ad "S" pari a quelli di una rampa lineare, ma con una sollecitazione della meccanica molto inferiore.

 

Io non conosco la meccanica di quella macchina, quindi non posso giudicare se la rampa raccordata sia indispensabile, però parto dal presupposto che chi sta lavorando su quel problema abbia fatto le doverose valutazioni.

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