Vai al contenuto
PLC Forum


controllo uscite con encoder assoluto


mazzinga

Messaggi consigliati


Prendiamo l'asola 7 che rispetto allo zero si trova a 270°,immaginando che l'encoder vale 0 il valore di dell'asola è 270+0=270,ora immaginando che la tavola vale 25° la quota dell'asola 7 vale 270+25=295,quando il valore era 280 attivavo le uscite sulla stazione 4,ora immaginando che la tavola vale 160° la quota dell'asola 7 vale 270+160=430,siccome è maggiore di 360° va normalizzato 430-360=70,questo è il valore che assume l'asola in quel momento che corrisponde esattamente alla posizione della stazione 1.

Credo che il mio ragionamento sia molto simile al tuo,cosa ne pensi,potrebbe creare dei problemi il fatto di avere la quota che si aggiorna di continuo

Come ragionamento è simile al mio. Non capisco cosa voglia dire "la quota che si aggiorna di continuo". Se ruoti la tavola la sua quota è normale che si aggiorni.

 

Link al commento
Condividi su altri siti

Non è per nulla chiaro nonostante i disegni, come lavora la macchina.

Parrebbe, estrapolando le informazioni, che le asole possano essere spostate dall'operatore, ma questo nulla cambia in ordine alla lettura della quota.

 

Link al commento
Condividi su altri siti

Non capisco cosa voglia dire "la quota che si aggiorna di continuo"

Nel tuo caso il per trovarti la quota a cui corrisponde l'asola fai :Encoder=posizione5-OffsetAsola[7]=350-315=35

Sia la posiozne 5 che OffsetAsola[7],sono quote che non vengono aggiornate ma,solo se le cambia l'operatore,quindi il risultato sara sempre 35

 

Nel mio caso il risultato cambia di continuo perche per trovare la quota il mio calcolo è Encoder=OffsetAsola[7]+quota tavola

 

Te li ho già fatti prima, cosa c'è che non è chiaro?

Posto il tuo esempio

 

int angolo;

switch (angolo)
    {
       case 42:
          out1 = 1;
          out3 = 1;
          break;
       case 213:
          out1 = 0;
          out3 = 0;
          out2 = 1;
          break;          
       case 341:
          out4 = 1;
          break;
       case 511:
          out5 = 1;
          break;                    
       case 852:
          out4 = 0;
          out4 = 0;
          break;
    }  

 

Angolo è l'angolo della tavola che vale 0-360,ma case sono costanti fisse,con quale criterio ti calcolo la variabile case ad esempio per l'asola 5,puoi farmi un esempio 

Link al commento
Condividi su altri siti

Nel tuo caso il per trovarti la quota a cui corrisponde l'asola fai :Encoder=posizione5-OffsetAsola[7]=350-315=35

Sia la posiozne 5 che OffsetAsola[7],sono quote che non vengono aggiornate ma,solo se le cambia l'operatore,quindi il risultato sara sempre 35

 

Nel mio caso il risultato cambia di continuo perche per trovare la quota il mio calcolo è Encoder=OffsetAsola[7]+quota tavola

Come ha già detto Livio, non si capisce molto cosa/chi/quando muove la tavola.

Se la tavola viene mossa da te, in base ad un criterio del tipo "devo far raggiungere all'asola 8 la posizione 5", il mio criterio funziona, nel senso che sposto la tavola fino a quando la posizione letta dall'encoder e la posizione che mi sono calcolato coincidono, quindi attivo le uscite.

Se la tavola si muove "in continuo", potrebbe ancora funzionare, dipende ogni quanto tempo leggi la quota encoder e quanto tempo hai per fare il confronto ed eventualmente fermare la tavola ed attivare le uscite.

Altrimenti spiega meglio come avviene il movimento della tavola.

 

Link al commento
Condividi su altri siti

Se la tavola si muove "in continuo", potrebbe ancora funzionare

 Esatto,la tavola si muove in continuo,i tempo sono lunghi la velocita di rotazione della tavola non è molto veloce,ho fatto i calcolo è il plc non dovrebbe avere problemi,l'asola rimane sulla stazione per 100ms circa

Link al commento
Condividi su altri siti

Ammettiamo che le asole le fissi l'operatore rilevandole prima di iniziare la lavorazione.

Porta la tavola sopra la prima asola, visualizza la quota, la introduce e nell'array angolo[1] hai il valore corrispondente, poi ripete l'operazione per l'asola 2 e in angolo[2] hai il valore corrispondente, si ripeterà l'operazione per tutte le quote sino ad angolo[n].

Il codice diventa:

int angolo[30];

switch (angolo[i])
    {
       case angolo[1]:
          out1 = 1;
          out3 = 1;
          break;
       case angolo[2]:
          out1 = 0;
          out3 = 0;
          out2 = 1;
          break;          
       case angolo[3]:
          out4 = 1;
          break;
       case angolo[....]:
          out5 = 1;
          break;                    
       case angolo[30]:
          out4 = 0;
          out4 = 0;
          break;
    } 

gni volta che per un motivo qualsiasi si vasria una posizione si reintroduce il valore.

però a me sembra strano che le asole cambino posizione sulla tavola.

Link al commento
Condividi su altri siti

però a me sembra strano che le asole cambino posizione sulla tavola

 assolutamente no,le asole non possono cambiare semmai sono le stazioni di lavoro che cambiano la posizione,la prima puo stare a 20° rispetto allo zero,la seconda a 25°oppure la prima a 15° a la seconda a 22°,la posizione delle asole è definita da costruttore,è una corona circolare con delle asole definite.

Io ho sempre detto che l'operatore cambia la posizione di lavoro delle stazioni,perche cambiando prodotto le stazioni vengono anticipate o ritardate

 

Porta la tavola sopra la prima asola, visualizza la quota, la introduce e nell'array angolo[1] hai il valore corrispondente, poi ripete l'operazione per l'asola 2 e in angolo[2] hai il valore corrispondente, si ripeterà l'operazione per tutte le quote sino ad angolo[n].

Questo non mi piace molto,l'operatore deve inserire i gradi a cui si trova la stazione riferito allo zero,poi devo calcolarmi le quote a cui deve lavorare le stazioni 2,3,4,ecc il tuo ragionamento è corretto per la stazione numero 1,ma non per la numero 5 ad esempio.Se non è cosi non ho capito il tuo ragionamento.  

Link al commento
Condividi su altri siti

Basta che conosca i gradi e li inserisce.

Ammettiamo che la stazione n° 1 sia a 20° e ka stazione n° 5 a 185° , (Valori assoluti), inserisci questi valori. Se conosci i valori di offset da una stazione all'altra inserisci gli ofsett e poi fai fare al PLC il semplice calcolo per mettere nell'array il valore assoluto.

ammettiamo che la n°1 sia sempre a 20° e le successivie distino 25° una dall'altra tanto per semplificare.

L'operatore inserirà questi valori di ofsett poi nell'array il PLC sommerà alla prima l'offset della seconda ottenendo la posizione della seconda, a questo valore sommerà l'ofset tra 2 e 3, ottenendo la posizione assoluta dellla 3, e così via sino all'ultimo. E' un calcolo banale che il PLC dovrebbe eseguire in meno di 1 ms, e lo esegue solo al momento dell'introduzione di un dato o di tutti i dati.

Proprio non riesco a vedere il problema.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Scusami livio

Non riesco a capire il tuo ragionamento,nel tuo ragionamento non vedo le posizioni delle asole sulla tavola,sicuramente è un calcolo banale che per il plc,a non riesco a capirlo,

Potresti farmi un esempio pratico e completo,anche in C di un'asola nota,ad esempio la 5,riferita allo schizzo allegato.

Il ragionamento di epoch_ita è molto chiaro,mi piacerebbe capire anche il tuo

Link al commento
Condividi su altri siti

Non so come spiegartelo in modo differente.

Non riesco nemmeno a capire quello che non capisci.

Fai una cosa. Metti i dati di una tavola con tre asole e 3 stazioni e spiega che operazioni dovrebbe fare, vediamo se riusciamo a capirci, altrimenti io rinuncio.

Scasa la brutale franchezza, ma che tu lo realizzi seguendo le mie istruzioni o seguendo le istruzioni di un altro, a me interssa poco. Sto solo cercando di darti una mano per realizzare un qualche cosa che funzioni, però non ho nessuna intenzione di forzarti a sposare le mie tesi.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Ora mi sorgono altre domande:

-)Se la posizione delle stazioni la decide l'operatore, il numero delle stazioni è fisso (quanto vale) oppure lo decide l'operatore? Qual'è il numero massimo?

-)Chi decide quali uscite (una o più di una?) attivare nelle varie stazioni?

-)Le stazioni, prevedono di controllare la presenza di un pezzo per funzionare?

-)I pezzi entrano sicuramente uno dopo l'altro o potrebbero esserci delle asole vuote in mezzo a due piene?

Perché a questo punto se vuoi un possibile esempio pratico mi mancano dei parametri...

Anche perché a questo punto mi hai incuriosito. Io non conosco il linguaggio di PLC Simens. Ho lavorato un po' di tempo con dei PLC Matsushita, poi sono passato ad una scheda microprocessore custom con un micro infineon e ambiente di sviluppo in C, ed ora sviluppo firmware su di un'altra architettura custom linux embedded.

In ogni caso quello che importa è il ragionare su come deve lavorare la macchina. La lingua che usi per descriverlo è ininfluente.

 

Modificato: da epoch_ita
Link al commento
Condividi su altri siti

Fai una cosa. Metti i dati di una tavola con tre asole e 3 stazioni e spiega che operazioni dovrebbe fare, vediamo se riusciamo a capirci

Ok 

 

 Sto solo cercando di darti una mano per realizzare un qualche cosa che funzioni, però non ho nessuna intenzione di forzarti a sposare le mie tesi.

Per questo ti ringrazio infinite,non voglio sposare le tue idee,ma sono convinto che la tua idea è sicuramente valida,sono anni che seguo il forum,i tuoi interventi è dal mio punto di vista sei una persona  che stimo tantissimo.Con questo voglio dire che sicuramente il problema è da parte mia che non riesco a capire il tuo concetto,ma per fortuna non tutti siamo uguali.

 

Proviamo a mettere i dati di una tavola molto semplice,

-Tavola con 3 asole porta pezzo,120° è l'interasse (360/3)

-3 stazioni la prima a 0° nastro ingresso pezzi,la seconda a 120° soffio di aria per pulire i pezzi "Esempio" la terza 240° nastro di uscita

-Encoder assoluto monogiro 2048 imp/giro

 

Immagina che questa tavola pulisce dei pezzi dopo che vengono lavorati è per pulirli passa su una tavola rotante,la tavola ruota in senso orario

la tavola lavora nel seguente modo:

La tavola ha una rotazione continua,non lavora a passo.Quando una delle 3 asole è in corrispondenza del nastro di carico attivo una uscita per x tempo che fa entrare il pezzo in tavola,nel frattempo la tavola continua a ruotare,quando una delle 3 asole arriva in corrispondenza della seconda stazione attivo il soffio che pulisce il pezzo,quando una delle tre asole arriva in corrispondenza del nastro di uscita attivo un soffio che espella i pezzi dalla tavola.L'operatore deve impostare 3 quote la quota della prima stazione che nel nostro caso è 0° nastrino ingressi pezzo,la seconda soffio per pulizia pezzo che nel nostro caso sarà 120° e la terza soffio espulsione pezzi che nel nostro caso sara 240°.L'operatore puo variare la posizione del nastro in ingresso quindi puo inserire ad esempio 5° come puo variare la posizione del soffio per la pulizia del pezzo 115°-120°-125°,è l'operatore che lo decide,con dei limiti,ad esempio non potra mai inserire sulla seconda stazione 90°,diciamo che ha un margine di variazione di 15°.

Ora immaginiamo che la tavola è in posizione 0°avro che devo attivare per x tempo le 3 uscite perche ogni asola è in corrispondenza di una stazione di lavoro,se la tavola ruota di 120° avro che la prima asola si trova sulla seconda stazione di lavoro "soffio pulizia" la seconda asola sul nastrino di scarico e la terza asola sul nastrino di carico,in che modo mi calcolo la posizione di lavoro delle asole due e tre,se io facessi una struttura if del tipo:

Encoder"0-360°" 

angolo[0]=0

angolo[1]=120

angolo[2]=0

if encoder=angolo[0]

  out1=1

else if encoder=angolo[1]

  out2=1

else if encoder=angolo[2]

  out3=1

else

  out1=0

  out2=0

  out3=0

endif

questa struttura puo andar bene per la prima asola perche la prima asola non ha ofset,ma non per la seconda o la terza che hanno un ofset di 120° e 240°

Spero di essere stato chiaro con questo esempio

 

Link al commento
Condividi su altri siti

Scusate se mi intrometto ma tu hai detto che hai 3 asole a 120 ° e questa è una costante mentre le 3 postazioni le puoi variare di +- 15 ° ma se le vari non succede che quando l'isola 1 è in linea con il nastro di carico anche la 2 e la 3 siano in posizione di lavoro in quanto sono state spostate !

Mi sfugge qualcosa ?

Link al commento
Condividi su altri siti

 

-)Se la posizione delle stazioni la decide l'operatore, il numero delle stazioni è fisso (quanto vale) oppure lo decide l'operatore? Qual'è il numero massimo?

 

-)Chi decide quali uscite (una o più di una?) attivare nelle varie stazioni?

 

-)Le stazioni, prevedono di controllare la presenza di un pezzo per funzionare?

 

-)I pezzi entrano sicuramente uno dopo l'altro o potrebbero esserci delle asole vuote in mezzo a due piene?

 

Il numero delle stazioni è fisso l'operatore puo decidere solo la posizione

 

Ogni stazione ha una uscita

 

E possibile che ci sia un'asola vuota tra due asole piene ed la stazione deve saperlo non deve attivare l'uscita. Avevo pensato fi fare un shift register partendo sulla stazione di carico dove ho un sensore che mi da la presenza del pezzo sull'asola

 

 

Link al commento
Condividi su altri siti

Scusa ma l'offset è rispetto a che cosa?

E' un offset variabile?

Se si conosce l'origine e l'offset è fisso in pratica tutti i valori sono assoluti.

Vedila come se fosse un asse lineare don quete che si incrementano in modo assoluto, ovvero un classico lavoro da CN. Invece di tornare a zero a missione compiuta si ritorna a zero automaticamente a fine giro.

Che tu faccia uno shift un case o altro nulla cambia. L'asse dovrà effettuare n missioni quante sono le asole e quante sono le stazioni.

Il sensore, come hai ipotizzato, verifica se attivare le uscite o meno.

Prova a mettere giù la tua tavola come se fosse un asse linear e vedrai che è tutto ti sarà più chiaro.

Di queste "giostre" ne ho aurtomatizzate parecchie sempre con il modo che ti ho descritto.

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