pineto Inserito: 13 febbraio 2008 Segnala Inserito: 13 febbraio 2008 Buonasera.Dovrei gestire il posizionamento di una tavola rotante,la tavola fa una rotazione di 360°,la lettura della posizione viene fatta tramite un encoder a 360 Impulsi.Il posizionamento e di tipo 0n/off nel senzo che parte ad una velocità alta e qualche grado prima di arrivare in quota rallenta per finire ad arrestarsi sulla quota impostata.Il problema si viene a manifestare proprio sulla quota di rallento perche l'encoder si azzera ogni volta che percorre una rotazione intera,in pratica quando arriva a 359° allo scattare del prossimo impulso anzichè pasare a 360 ricomincia da 0.Il problema che si viene a manifestare e che oltrepassato i 360° non riesco a calcolare la quota di rallento,nel senso che per calcolarmi la quota di rallento di solito sottraggo il rallento alla mia quota target (quella a cui devo arrivare).Solo che,se mi trovo a 300° a devo andare a 3° e il mio rallento e impostato a 5° gradi prima come faccio a calcolarmi la quota di rallento che corrisponde a quota 350°,se eseguo il calcolo di rallento secondo il mio principio avrei un risultato pari a -2,cosi facendo non riuscirei a rallentare maiQualcuno saprebbe indicarmi se c'è un modo per calcolare il rallento oltrepassati i 359°Spero di essere stato chiaroGrazie
pineto Inserita: 13 febbraio 2008 Autore Segnala Inserita: 13 febbraio 2008 Scusate dell'errore,riformulo da domandauonasera.Dovrei gestire il posizionamento di una tavola rotante,la tavola fa una rotazione di 360°,la lettura della posizione viene fatta tramite un encoder a 360 Impulsi.Il posizionamento e di tipo 0n/off nel senzo che parte ad una velocità alta e qualche grado prima di arrivare in quota rallenta per finire ad arrestarsi sulla quota impostata.Il problema si viene a manifestare proprio sulla quota di rallento perche l'encoder si azzera ogni volta che percorre una rotazione intera,in pratica quando arriva a 359° allo scattare del prossimo impulso anzichè pasare a 360 ricomincia da 0.Il problema che si viene a manifestare e che oltrepassato i 360° non riesco a calcolare la quota di rallento,nel senso che per calcolarmi la quota di rallento di solito sottraggo il rallento alla mia quota target (quella a cui devo arrivare).Solo che,se mi trovo a 300° a devo andare a 3° e il mio rallento e impostato a 5° gradi prima come faccio a calcolarmi la quota di rallento che corrisponde a quota 358°,se eseguo il calcolo di rallento secondo il mio principio avrei un risultato pari a -2,cosi facendo non riuscirei a rallentare maiQualcuno saprebbe indicarmi se c'è un modo per calcolare il rallento oltrepassati i 359°Spero di essere stato chiaroGrazie
emanuele.croci Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 Forse non ho capito bene,ma una cosa del tipoSE IL RISULTATO DELL'OPERAZIONE E' <0, ALLORA SOMMA 360....Potrebbe andare?Ciao, Emanuele
Luca Bab Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 Prova a farti delle camme SW del tipo da 358 a 10 gradi mi faccio una Mse c'e' la M devo rallentareovviamente il codice che genera le camme deve controllare se inizio camma e' maggiore di fine cammaLuca
pineto Inserita: 13 febbraio 2008 Autore Segnala Inserita: 13 febbraio 2008 Scusami Luca Bad non ho capito bene il tuo concetto,me lo potresti esporre in modo più chiaroGrazie
pineto Inserita: 13 febbraio 2008 Autore Segnala Inserita: 13 febbraio 2008 Emanuele ho provato la soluzione da te indicata ,ho constatato che funziona in parte.Se ad esempio mi trovo a 1° e devo andate a 3° gradi e ho un rallento di 5° gradi,succede che l'asse parte con la velocita alta al posto della lenta perche dovrei rallentare a 34° ma in realta io mi trovo ad una quota superiore a 34° quindi succede che io per la quota di rallento durante l'arco del mio posizionamento non ci passo.Spero di essere stato chiaro Grazie
Livio Orsini Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 (modificato) Spero di essere stato chiaroNon tanto, anzi poco.Quando si esegue un posizionamento, in modo semplificato come il tuo, per prima cosa si verifica che la quota di partenza più la quota di rallentamento sia minore o uguale al valore della quota da raggiungere. Se la candizione è verificata si aprte in veloce, se no si aprte direttamente in lento.Quindi se tu hai un rallentamento pari a 5o e parti da 1o per raggiungere 3o, esegui 5o + 1o > 3o, quindi parti inlento.Questo vale anche per se la partenza fosse a 359o per raggiungere 3o359o + 5o = 364o - 360o = 4o > 3o Modificato: 13 febbraio 2008 da Livio Orsini
Luca Bab Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 Non e' chiaro come effettui il posizionamento ,solitamente hai 2 possibilita' che possiamo chiamare PROPORZIONALE o A SCALINIin PROPORZIONALE gestisci un segnale di velocita' ed in basa alla differenza dalla quota attuale a quella di arrivo , diminuisci questo segnale in modo quasi proporzionalea SCALINI invece fai dei gradini di velocita' , del tipo vado nel SET1 ( 50Hz ) , quando mancano da 50 a 30 gradi all'arrivo vado nel SET2 ( 30Hz ) quando mancano da 30 a 0 gradi all'arrivo vado nel SET3 (10HZ)Il mio suggerimento era valido per il funzionamento a scaliniSe la posizione di arrivo e' a 40 gradi ( esempio ) fai 2 camme elettriche1) da 340 a 102) da 11 a 40con la cam ( o fase ) 1 attivi un SET all'inverter che decrementa la velocita' , con la fase 2 altro set che la riduce ancoraCiaoLuca
Livio Orsini Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 solitamente hai 2 possibilita'...Il più antico e semplice metodo di posizionamento consiste nel posizionare con due velocità: lenta e veloce. Se la posizione attuale è < della quota dir allentamento si va in veloce, altrimenti in lento sino al raggiungimento della quota. E' il classico posizionamento con 2 prozimities: rallentamento e posizione.
Beatrice_Ru Inserita: 13 febbraio 2008 Segnala Inserita: 13 febbraio 2008 Non so se e' corretto pero' si potrebbe pensare di eseguire un posizionamento differenziato nel caso di passaggio per lo Zero.Io ho pensato di isolare 4 distinti casi, che in realta' sono solo 2.Considero i seguenti 4 casi : Case 1 (Final_Pos - Start_Pos) < 180 then Action := Forward; // Normal Forward Case 2 (Final_Pos - Start_Pos) >= 180 then Action := Reverse; // Reverse turn Case 3 (Final_Pos - Start_Pos) < 0 then Action := Reverse; // Normal Reverse Case 4 (Final_Pos - Start_Pos) < -180 then Action := Forward; // Forward turn come considerare il Posizionamento : Case 1 then // Normal Forward Pos_Rel := Pos_Actual; Target_Pos:= Final_Pos; Velocity := (Target_Pos-Pos_Rel)*Gain_Vel; end_if; Case 2 then // Reverse Turn if Pos_Actual > 180 then Pos_Rel := Pos_Actual; if Pos_Actual <= 180 then Pos_Rel := Pos_Actual -360; if Final_Pos >180 then Target_Pos := Final_Pos -360; if Final_Pos <=180 then Target_Pos := 0 - Final_Pos; Velocity := (Target_Pos-Pos_Rel)*Gain_Vel; end_if; Case 3 then // Normal Reverse Pos_Rel := Pos_Actual; Target_Pos:= Final_Pos; Velocity := (Final_Pos-Pos_Rel)*Gain_Vel; end_if; Case 4 then // Forward Turn if Pos_Actual > 180 then Pos_Rel := Pos_Actual; if Pos_Actual <= 180 then Pos_Rel := Pos_Actual -360; if Final_Pos >180 then Target_Pos := Final_Pos -360; if Final_Pos <=180 then Target_Pos := 0- Final_Pos; Velocity := (Final_Pos-Pos_Rel)*Gain_Vel; end_if; se osservi bene il Caso 1 e 3 e' un posizionamento normale in avanti oppure indietro. Case 1,3 se -180 < (Final_Pos - Start_Pos) > 180 mentre invece i casi 2 e 4 implicano il passaggio per i 0 gradi o 360 gradi in questi due casi si spostano le posizioni sia attuale che di traguardo in maniera tale di avere una valore Positivo da 0 a 180, e negativa da 360 a 180. In questo modo attiene un posizionamento corretto anche passando per lo Zero. piu' semplicemente i casi 1 e 3 si fondono in un solo caso,cosi' pure i casi 2 e 4. if -180 < (Final_Pos - Start_Pos) < 180 then Case 1,3 // Nessun Passaggio sullo Zero else Case 2,4 // Passaggio sullo Zero Case 1,3 then // Normal Forward Pos_Rel := Pos_Actual; Target_Pos:= Final_Pos; end_if; Case 2,4 then // Reverse Turn if Pos_Actual > 180 then Pos_Rel := Pos_Actual; if Pos_Actual <= 180 then Pos_Rel := Pos_Actual -360; if Final_Pos >180 then Target_Pos := Final_Pos -360; if Final_Pos <=180 then Target_Pos := 0- Final_Pos; end_if; Velocity := (Target_Pos-Pos_Rel)*Gain_Vel;
pineto Inserita: 14 febbraio 2008 Autore Segnala Inserita: 14 febbraio 2008 Scusate ma leggendo il post inserito mi sono reso conto che non ho spiegato molto bene l'aplicazione,cerchero di rispiegarla in modo piu chiara e precisa.Dovrei gestire il posizionamento di una tavola rotante,la tavola fa una rotazione di 360°,la lettura della posizione viene fatta tramite un encoder a 360 Impulsi che si riazzera ad gni giro,la tavola può girare sono in un verso "Avanti"Il posizionamento e di tipo 0n/off nel senzo che parte ad una velocità alta e qualche grado prima di arrivare in quota rallenta per finire ad arrestarsi sulla quota impostata.Di solito il posizionamento io lo gestisco cosi: Quota_Target - Quota_Rallento = Quota_RallentoPer attivare il rallento di solito facio così : Non appena la Posizione_Tavola è maggiore della Quota_Rallento attivo il rallento e cambio velocitàI problemi che si vengono a minifetare sono:-Se per esempio mi trovo ad una quota di 3° e deo andare a 5° e ho una quota di rallento pari a 7° la tavola va sempre con la velocità lenta.-Se ad esempio mi trovo ad una quota di 352° e devo andare a 4° è ho una quota di rallento pari a 7° l'asse parte con la velocita lenta -Se ad esempio mi trovo a 10° e devo andare a 2° e devofare una rotazione intera per arrivare a 2° e succede che la tavola parte con la velocita lentaSpero che questa volta sono stato molto più chiaro ad esporre il problemaGrazie
Luca Bab Inserita: 14 febbraio 2008 Segnala Inserita: 14 febbraio 2008 Allora il mio primo post e' quello che ti serveovviamente puoi fare gli scalini che ti pare , a volte ne faccio 2 e a volte ne faccio 3a te ti serve con 2 scaliniCome ti dicevo , fatti delle camme , magari che si generano impostando solo la posizione di arrivo , del tipo :la posizione di partenza e' ininfluentePosizione di arrivo 100 con 10 gradi di bassa velocita'ti fai una camma che = 100 come fine e ( 100-10 ) come inizio , quindi hai una camma che va' da 90 a 100 gradi con questa camma , se e' =1 attivi la velocita' bassa.Luca
pineto Inserita: 14 febbraio 2008 Autore Segnala Inserita: 14 febbraio 2008 Luca Bab se ho capito bene tu mi consigli di gestire il posizionamento in qursto modo:In pratica se mi trovo a X quota e devo andare a Y ed ho una rallento di 10°, vedo quanti impulsi mi mancano per andare in lento.Avvio un contatore in parallello alla posizione della tavola,una volta che il contatore a incrementato di un tot di impulsi che mancavano per andare in lento alzo l'uscita fino ad arrivare in quota.Spero di aver apito il tuo concettoGrazie
Luca Bab Inserita: 14 febbraio 2008 Segnala Inserita: 14 febbraio 2008 No , in quel modo ricorri di nuovo al problema che haiil mio suggerimento era di crearti delle camme elettrichenon so' che PLC usi , con siemens ti fai una M ( e' come ricreare in maniera elettronica gli induttivi che leggono delle camme su un albero )Ti leggi la quota encoder e tramite confronti con valore inizio e valore fine , questa M e' a 0 o 1ovviemmente queste camme devono poter essere programmate anche con inizio 350 e fine 10in questo modo la tua M andra' ad 1 a 350 gradi e andra' a 0 quando arriva a 10 gradiprova a cercare ( anche nel forum ) come lavora un programmatore di camme per chiarirti le ideeLuca
Beatrice_Ru Inserita: 14 febbraio 2008 Segnala Inserita: 14 febbraio 2008 (modificato) Scusa ma hai letto l'algoritmo che ti ho delucidato, oppure no.Questa procedura risolve il tuo problema.Infatti questa procedura trova il tragitto piu' corto per raggiungere la posizione ed inoltre ti seleziona la corretta velocita' sia in segno che in ampiezza.Se devi fare due gradini (veloce e lenta), prendi il risultato della variabile "Velocity" se questo valore e' maggiore di una determinata velocita' commuti in veloce altrimenti in lenta.Lenta if (abs(Velocity) < Soglia)Veloce if (abs(Velocity) > Soglia)Questa procedura ti evita errori di posizionamento usando il tuo procedimento "Quota_Target - Quota_Rallento = Quota_Rallento".Altrimenti se tu dalla posizione iniziale di 330gradi devi andare a 10gradi,e' chiaro che devi avanzare e non retrocedere come i gamberi. (ma il tuo procedimento va in Tilt)Cosi pure se da 25 gradi devi andare a 350 gradi devi retrocedere. Modificato: 14 febbraio 2008 da Beatrice_Ru
kamikaze Inserita: 14 febbraio 2008 Segnala Inserita: 14 febbraio 2008 Beatrice_Ru ,Il tuo algoritmo e' ineccepibile, :clap:La difficolta' per Pineto credo stia nel tradurlo in linguaggio Ladder o lista istruzioni IEC.Ivan
Beatrice_Ru Inserita: 14 febbraio 2008 Segnala Inserita: 14 febbraio 2008 Ma Scusa Pineto che tipo di PLC hai ?Cosi posso mandarti una sorgente adeguata al tuo PLC.Comunque kamikase ti ringrazio, ma questa procedura non l' ho testata, e solo frutto di un mio raggionamento, probobilmente ha forse qualche bacco, pero' speravo fosse utile il concetto.Ciao Pineto e grazie Kamikaze.
pineto Inserita: 15 febbraio 2008 Autore Segnala Inserita: 15 febbraio 2008 Ma Scusa Pineto che tipo di PLC hai ?Cosi posso mandarti una sorgente adeguata al tuo PLC.Per questo Lavoro devo utilizzare Panasonic "Nais" ma ho anche il tul di sviluppo pdella Siemens S7-200La difficoltà' per Pineto credo stia nel tradurlo in linguaggio Ladder o lista istruzioni IEC.Purtroppo la mia difficoltà è proprio quella preferisco il LaderGrazie
cisio Inserita: 16 febbraio 2008 Segnala Inserita: 16 febbraio 2008 come ha detto emanuele.croci basta aggiungere 360 quando il calcolo della distanza è negativoovvero, durante il movimento (e non solo alla partenza) calcoli:- Pos_target - Pos_attuale = Distanza_dal_target- se Distanza_dal_target<0 allora sommi 360- quello che hai ottenuto è la distanza che deve ancora percorrere la tavola girando sempre nello stesso sensoquando questo valore scende al di sotto della soglia di rallentamento, attivi la velocità di lentociao
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora