Jump to content
PLC Forum


Sign in to follow this  
stefano_PLC

Azionamento S210

Recommended Posts

stefano_PLC

Buongiorno vorrei chiedere se qualcuno sa come effettuare l' homing su azionamento S210(penso non centri nulla il tipo di azionamento) , S210 in questione è dotato di encoder multiturn rotatorio e assoluto, con risoluzione 2048 e come protocollo assoluto avente risoluzione di 4096 per giro.

COSA SIGNIFICANO QUESTE VOCI?

Su TIA ho trovato l' istruzione MC_HOME che penso sia quella faccia al mio caso, ma non so come impostarli l'home (credo intenda lo 0° per home, ovvero il punto in cui deve posizionarsi ogni volta che riparte per cause X).

Sapreste aiutarmi fornendomi manuali che spiegano questi concetti, oppure se qualcuno di voi gli conosce e vuole spiegarmeli, va bene anche una stesura di codice basta che diciamo venga spiegata dato che non voglio copiare o qualcuno che mi faccia il lavoro al posto mio ma solamente capire come funziona. Grazie.

Share this post


Link to post
Share on other sites

ken

con un encoder assoluto non dovrebbe servire l'homing. l'encoder assoluto restituisce una posizione assoluta.

 

Share this post


Link to post
Share on other sites
stefano_PLC

ma se per un motivo  X come la caduta di tensione mi si ferma l'azionamento, io poi come faccio a farlo ripatire da un punto che io voglio impostarli?

Share this post


Link to post
Share on other sites
Livio Orsini
12 minuti fa, stefano_PLC scrisse:

ma se per un motivo  X come la caduta di tensione mi si ferma l'azionamento, io poi come faccio a farlo ripatire da un punto che io voglio impostarli?

 

L'enccoder assoluto ti darà la posizione vera e attuale al momento del ripristino della tensione, se vuoi che la macchina riparta da un punto preciso ce la devi portare con un ciclo manuale.

 

Se invece hai un encoder incrementale, nella medesima situazione, non sai dove si trova il tuo asse, quindi devi necessariamente eseguire un ciclo di ricerca di zero, poi porti la macchina al punto di ripartenza.

Il così detto "homing" (ritono a dimora) di un encoder incrementale prevede, appunto, la ricerca dello zero asse e, eventualmente, riposizionamento sullo zero pezzo.

Nel caso di ciclo di homing con encoder assoluto si effettua solo il riposizionamento sullo zero pezzo.

Edited by Livio Orsini

Share this post


Link to post
Share on other sites
ken

conosci la posizione e fai un posizionamento assoluto a x, dove x è la posizione dove vorresti essere.

 

Share this post


Link to post
Share on other sites
stefano_PLC

scusate l' ignoranza ma non vi sto capendo potreste gentilmente parlare più basilare (terra terra) dato che in questo campo sono tutte cose nuove per me

17 minuti fa, Livio Orsini scrisse:

Nel caso di ciclo di homing con encoder assoluto si effettua solo il riposizionamento sullo zero pezzo.

come  faccio ad effettuare il riposizionamento?

Share this post


Link to post
Share on other sites
Livio Orsini
4 minuti fa, stefano_PLC scrisse:

come  faccio ad effettuare il riposizionamento?

 

O lo porti in manuale o, come ha scritto Ken,

21 minuti fa, ken scrisse:

conosci la posizione e fai un posizionamento assoluto a x, dove x è la posizione dove vorresti essere.

 

Ci deve essere qualcuno o qualche cosa che comanda all'asse di portarsi in determinata posizione.

Share this post


Link to post
Share on other sites
stefano_PLC

Posto direttamente il codice così forse riesco a capire meglio e farvi capire meglio.

Ho impostato il mode 0, perchè leggendo il manuale mi sembrava quello più corretto.

● Ricerca diretta assoluta del punto di riferimento (Mode = 0)
La posizione attuale dell'asse viene impostata sul valore del parametro "Position".

 

Cattura.PNG

Share this post


Link to post
Share on other sites
ken

come fai a fare un posizionamento?

nello stesso modo. imposti la quota dove vuoi portare il tuo asse e fai partire il posizionamento. con tia non li ho mai fatti. ho sempre usato quelli integrati in G e S120.

ci sarà un blocco posizionamento

 

Share this post


Link to post
Share on other sites
stefano_PLC

per muoverlo utilizzo MC_power_relative, dove ho impostato che deve ruotarmi di 168°.

Forse non sto capendo io, allora suppongo che durante la mia rotazione il sinamic s210 si blocci 158°, al successivo riavvia deve andarmi a compensare quei 10° mancanti o 178* questo non riesco a capire come fare. Scusatemi ma non sono abile e ne studiato quindi più basilare parlate prima riuscirò a recepire ciò che state dicendo.

 

Share this post


Link to post
Share on other sites
batta
49 minuti fa, ken scrisse:

con un encoder assoluto non dovrebbe servire l'homing. l'encoder assoluto restituisce una posizione assoluta.

Questo è vero a metà. Quando metti in funzione la macchina la prima volta, devi referenziare l'asse. Se intervieni sulla meccanica, poi devi referenziare nuovamente l'asse.

 

1 ora fa, stefano_PLC scrisse:

Su TIA ho trovato l' istruzione MC_HOME che penso sia quella faccia al mio caso, ma non so come impostarli l'home

Una cosa è referenziare l'asse, altra portare l'asse in una determinata posizione.
Con un encoder incrementale è indispensabile referenziare l'asse ogni volta che si riaccende la macchina. Con un encoder assoluto questa operazione si fa solo alla prima messa in funzione, o quando per qualche motivo la posizione non è più valida (es. sostituzione dell'encoder, smontaggio e rimontaggio in posizione diversa, ecc.)
Per referenziare l'asse si lancia MC_Home. Con un encoder incrementale si imposta nella configurazione dell'asse come si desidera venga effettuata l'operazione. Si decide direzione e velocità della ricerca del riscontro di Home, si imposta se si deve tenere conto o meno della tacca di zero dell'encoder, si imposta se si deve entrare e uscire dal riscontro di home, e da che lato, si imposta dove si deve posizionare l'asse a fine operazione. Lanciando MC_Home con la giusta modalità, senza scrivere una riga di programma l'asse esegue tutte le operazioni.
Con un encoder assoluto invece, non è possibile fare in automatico tutti i movimenti. Si dovrà quindi posizionare l'asse nella posizione stabilita (per esempio, con i comandi Jog) e lanciare MC_Home con la modalità corretta per un encoder assoluto (mi pare 7).
Poi, fino a quando non verranno effettuate operazioni che vadano a modificare tutta la catena tra encoder e posizione asse, non serve più lanciare MC_Home.

 

Come riposizionare l'asse ad una determinata quota a seguito di interruzioni del ciclo, non c'entra nulla con l'homing. Se l'asse è referenziato, usa le istruzioni di posizionamento.

Share this post


Link to post
Share on other sites
Livio Orsini

Se nel blocco di posizionamento hai una quota di 168°, dopo una fermata per mancanza rete,dop aver riavviato il sistema, fatti i debiti controlli previsti all'avvio e dato il comando di start l'asse si porterà a 168°

Share this post


Link to post
Share on other sites
batta
29 minuti fa, stefano_PLC scrisse:

Ricerca diretta assoluta del punto di riferimento (Mode = 0)

Per encoder assoluto, usa Mode = 7.

 

15 minuti fa, stefano_PLC scrisse:

per muoverlo utilizzo MC_power_relative, dove ho impostato che deve ruotarmi di 168°.

Mi sa che stai facendo un po' di confusione. MC_Power serve per abilitare l'asse, e deve essere mantenuta l'abilitazione.

Per il posizionamento, se vuoi andare alla posizione di 168°, utilizzerai MC_MoveAbsolute, e serve un fronte di salita su Execute per lanciare il comando.
Essendo un asse rotante (quindi avrai attivato "Modulo" nell'oggetto tecnologico), puoi decidere se effettuare il posizionamento in direzione positiva (Direction = 1), negativa (Direction = 2), o col percorso più breve (Direction = 3).

MC_MoveAbsolute funziona solo se l'asse è referenziato.

Se, invece, vuoi fare una rotazione di 168° a partire da dove ti trovi, utilizzerai MC_MoveRelative, sempre con fronte di salita su Execute.
MC_MoveRelative funziona anche se l'asse non è referenziato.

Share this post


Link to post
Share on other sites
stefano_PLC

ok diciamo che qualcosa in più l'ho capita ma per venire a conoscenza del valore reale che ha l' encoder come faccio?

 

si era errore di battitura utilizzo un MC_MoveRelative. 

Share this post


Link to post
Share on other sites
batta

"MioAsse".ActualPosition

È una LReal (64 bit).

 

Quando inserisci un oggetto tecnologico, lo ritrovi poi come DB nella cartella "Oggetti tecnologici". Puoi fare doppio clic su "Configurazione" "Messa in servizio" o "Diagnostica" per aprire le rispettive maschere. Oppure fai clic col tasto destro sul DB e dal menù contestuale scegli "Apri editor DB". Così facendo, vedi tutte le variabili dell'oggetto tecnologico.

 

 

Share this post


Link to post
Share on other sites
stefano_PLC

ok, grazie mille veramente per la disponibilità. 

 

Share this post


Link to post
Share on other sites
stefano_PLC

batta ho seguito il tuo metodo e guardando un pò nelle variabili ho trovato la voce "MioAsse".StatusPositioning.Distance che mi dice la distanza attuale dell'asse dalla posizione di destinazione.

Volendo se il azionamento doveva compiere una rotazione di 168° e mi si ferma prima ipotizzo a 100° tramite il comando mc_moverelative posso passarli il parametro distance, così da ritornarmi nella giusta posizione?

Se ho capito bene il valore contenuto in distance dovrebbe essere di 68°, dato che l' azionamento si è fermato a 100°.

 

 

<nome dell'asse>.StatusPositioning.Distance
Distanza attuale dell'asse dalla posizione di destinazione
(indicazione nell'unità di misura configurata)
Il valore della variabile è valido solo durante l'esecuzione di un ordine di posizionamento con "MC_MoveAbsolute",
"MC_MoveRelative" o del quadro di comando dell'asse.

 

Edited by stefano_PLC

Share this post


Link to post
Share on other sites
stefano_PLC

La cosa che proprio non sto capendo è dove venga impostato il valore della posizione di destinazione. Come si imposta questo valore?

io utilizzo un altro MC_moverelative per un motivo X la rotazione viene interrotta e si stoppa a 100° sui 168° che doveva fare, il 168° sommato alla posizione di partenza esempio 100° è il valore della posizione di destinazione(Partenza = 100 + movimentazione =168 = 268°)?

Edited by stefano_PLC

Share this post


Link to post
Share on other sites
batta
2 ore fa, stefano_PLC scrisse:

Volendo se il azionamento doveva compiere una rotazione di 168° e mi si ferma prima ipotizzo a 100° tramite il comando mc_moverelative posso passarli il parametro distance, così da ritornarmi nella giusta posizione?

 

59 minuti fa, stefano_PLC scrisse:

io utilizzo un altro MC_moverelative per un motivo X la rotazione viene interrotta e si stoppa a 100° sui 168° che doveva fare, il 168° sommato alla posizione di partenza esempio 100° è il valore della posizione di destinazione(Partenza = 100 + movimentazione =168 = 268°)?

Ma perché ti vuoi complicare la vita inutilmente?

Se ti devi fermare a 100°, prima fai un MC_MoveAbsolute con destinazione 100° e, una volta eseguite le operazioni da fare in questa posizione, lanci ancora MC_MoveAbsolute con destinazione 168°.
Al limite, anche se non so per quale recondito motivo, se proprio vuoi usare un posizionamento relativo, dopo MC_MoveAbsolute a 100° puoi lanciare un MC_MoveRelative di 68°.

 

1 ora fa, stefano_PLC scrisse:

La cosa che proprio non sto capendo è dove venga impostato il valore della posizione di destinazione. Come si imposta questo valore?

È perché ti stai, inspiegabilmente, ostinando a voler usare MC_MoveRelative. Con questo comando imposti la distanza da percorrere dalla posizione attuale.
Usa MC_MoveAbsolute! In MC_MoveAbsolute imposti la posizione di destinazione e, nel caso di un asse "modulo", la direzione (1=avanti; 2=indietro; 3=percorso più breve).

Share this post


Link to post
Share on other sites
stefano_PLC

No forse sono io che mio sono spiegando male. Il mio azionamento deve compiere una rotazione fissa di 168° ogni volta che la condizione in ingresso sia vera. utilizzo il relative perchè la taratura della posizione di partenza è effettuata manualmente in quanto sia ha una corona dentata di X denti tutti uguali fra loro, quindi dalla posizione di partenza data manualmente deve effettuare rotazioni di 168°, il mio dubbio nasce qual'ora si ha un problema e il mio azionamento si stoppi prima di aver completato tutta la rotazione dei 168° andando a bloccare il pallet in uscita e entrata, onde evitare che quindi poi prosegui a lavorare starato ho visto questa variabile "MioAsse".StatusPositioning.Distance che calcola direttamente i gradi mancati al completamento della rotazione.

 

Quindi mi salvo dalla mia movimentazione mc_moverelative PRINCIPALE il suo error -> "1mc_moverelative".error (che da quanto ho capito mi dice se ha avuto errori nella movimentazione) e in base a quello effettuo un altro mc_moverelative solamente che in distance gli passo "MioAsse".StatusPositioning.Distance e lo faccio fare solamente se la condizione in excute è vera.

 

Volevo capire se la cosa fosse corretta, perchè ho bisogno di evitare che ogni volta la taratura si faccia manualmente o se nessuno se ne accorga di far lavorare in maniera starata l'azionamento andando incontro a soli problemi.

Edited by stefano_PLC

Share this post


Link to post
Share on other sites
batta

Penso non ti rimanga che provare.

Altre possibilità sono:

- reimpostare ogni volta la posizione dell'asse (MC_Home con Mode=7) prima del posizionamento e poi fare sempre un posizionamento assoluto.

- calcolare la destinazione sommando lo spostamento alla posizione attuale. Se il risultato supera 360, si sottrae 360. Poi si fa sempre un posizionamento assoluto, specificando Direction=1.

 

Share this post


Link to post
Share on other sites
stefano_PLC

ora per mi è venuto un dubbio sulla seconda movimentazione gli passo mc_moverelativa.error ma non è corretto perchè se ha avuto un errore non dovuto al completamento della movimentazione di 168° è inutile entrare in questo blocco scritto apposta per completare la movimentazione, siccome ho visto che in uscita il primo mc_moverelative passa mc_moverelative.done(ordine concluso) sto pensando di utilizzare questo bit come abilitazione del secondo mc_power. Secondo te è più corretto?

Perchè almeno secondo la mia logica se l'azionamento non completa la movimentazione dovrei trovarmi un segnale basso, quindi come abilitazione per il secondo mc_power sto pensando di scrivere -l/l- *.done che mi sembra più corretto.

Edited by stefano_PLC

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.

Sign in to follow this  

×
×
  • Create New...