Vai al contenuto
PLC Forum


Richiesta Suggerimento Su Logica Pick And Place


Messaggi consigliati

Inserito:

Ciao a tutti!

Da neofita mi sto cimentando con la programmazione (solo simulata) di un braccio che preleva da 3 posizioni diverse e deposita in una posizione comune. Ho programmato tutti i passi e sul passo che porta il braccio indietro, verso il prelievo, incremento di 1 una variabile. Quando, sempre nel ritorno, questa variabile diventa maggiore di 3 ricarico il valore 1 nella stessa variabile. In questo modo il braccio esegue prima il prelievo 1 poi il 2 poi il 3 e quindi ricomincia.

Ora ho pensato di aggiungere un controllo su ogni prelievo, come se ad un certo punto, per ogni posizione non ci sia più niente da prelevare. In quel caso vorrei che il corrispondente prelievo venga disabilitato mentre gli altri continuano. Ad es. sto facendo il prelievo 2 e lo trovo vuoto. Vorrei continuare con il 3 e poi ricominciare dall'1 ma poi il successivo dovrà essere il 3 e così via.

Qui mi sono bloccato e non mi viene in mente nessuna soluzione... volevo chiedervi se mi date un suggerimento per risolvere questo problema. Naturalmente anche cambiando totalmente approccio...

Grazie...


Inserita:

L'unica cosa che mi è venuta in mente è quella di scrivere la logica per ciascun caso. Nel senso se 2 è vuoto faccio 1 e poi 3 e così via. Con tre possibilità è ancora fattibile ma a me intereserebbe di più come risolvere questo problema usando la strada più breve. Il che mi fa pensare che il mio approccio sia sbagliato dall'inizio. Ossia vada bene per fare la mera successione 1, 2, 3.

Inserita:

Dipende molto da come vuoi strutturare la tua logica. Cosa vuol dire "scrivere la logica per ciascun caso"?

Nel tuo caso non basta un semplice flag che ti dica se c'è qualcosa da prelevare o no?

In senso lato, se le fasi del robot si assomigliano per tutte le stazioni (se cambiano solo quote o poco altro) io farei una funzione parametrica unica da richiamare con parametri diversi per ogni stazione con, come input, anche il suddetto flag di abilitazione al prelievo.

Ciao

Inserita:

Cerco di spiegare meglio. La variabile che vado ad incrementare indica in quale punto deve scendere l'asse. Ad esempio se è 1 tornando verso il prelievo si fermerà su un sensore piuttosto che un'altro e idem per i casi 2 e 3. Il mio problema è che la successione funziona però ora non riesco a fare il passo successivo. Ossia non potendo prevedere quale cassa si svuoterà per prima vorrei scrivere qualcosa del tipo se 1 è vuota prelevo 2, vado avanti a depositare, tornando indietro mi fermo in 3 e prelevo 3 finché tutte e tre le casse si svuotano. Non riesco cioè a scrivere una funzione generale che svuotata una cassa prosegua con le altre due in successione fino a fermarsi su una, quella da svuotare finché è finita. A quel punto il ciclo si ferma. Allego qualche segmento del codice al limite anche tutto se necessario.

post-106185-0-85250500-1390223947_thumb.

post-106185-0-73689600-1390223959_thumb.

post-106185-0-31318600-1390223980_thumb.

Inserita:

Non sapendo esattamente come è fatto il tuo impianto faccio un po' fatica a capire il tuo ladder, comunque: fai una o più funzioni esecutive che fanno i movimenti. Il richiamo di queste funzioni lo fai con un merker che viene incrementato alla fine di ogni funzione. Questo merker deve funzionare come switch di fasi e cioè:

Se merker =1 esegui movimento cassa1 e incrementa merker.

Se merker=2 esegui movimento cassa 2 e incrementa merker.

Ecc.

Naturalmente potresti eseguire il controllo se ci sono pezzi da movimentare all'interno di ogni funzione e saltare subito alla fine (incremento merker) se non ce ne sono.

Cerca cioè di strutturare il software a fasi più elementari comandate da uno switch e non cercare di fare reti di ladder complesse che debbano tenere conto di tutte le condizioni.

È più facile così.

Inserita:

Ho capito e ti ringrazio del suggerimento. La cosa che non mi riesce però è ricreare la successione al mancare di un prelievo... provo a spiegare. Supponiamo che il ciclo normale della macchina sia questo:

Prelievo 1 -> Deposito

Prelievo 2 -> Deposito

Prelievo 3 -> Deposito

e poi da capo

Durante il ciclo si svuota 1 e quindi dovrò fare 2 e 3... però potrebbe svuotarsi 2 e quindi dovrei fare 1 e 3, ecc. Ma anche potrebbe svuotarsi 2 e 3 e dovrei fare 1

A questo punto l'unica soluzione che conosco è scrivere tutte le possibilità 1 no 2, 3 sì oppure 2 no 1, 3 sì e così via. Mi interessava sapere se c'era qualche altra via che non conosco... proprio perché sono alle prime armi. Anche perchè se i casi aumentano diventa molto complessa come cosa in questo modo.

Inserita:

Durante il ciclo si svuota 1 e quindi dovrò fare 2 e 3... però potrebbe svuotarsi 2 e quindi dovrei fare 1 e 3, ecc. Ma anche potrebbe svuotarsi 2 e 3 e dovrei fare 1

Appunto! Tu usi uno switch che va a scandire tutte le fasi. Se c'è qualcosa da fare la fai ed incrementi lo switch, altrimenti lo incrementi direttamente. Così al prossimo giro di logica verrà analizzata la seconda fase, e così via...

In pseudo-ladder inventato:

----|>|--------------------|/|-------(ciclo1)----

switch==1 | ciclo1

| terminato

|

|---------| |-------(switch=switch+1)----

ciclo1

terminato

----|>|--------------------|/|-------(ciclo2)----

switch==2 | ciclo2

| terminato

|

|---------| |-------(switch=switch+1)----

ciclo2

terminato

ecc. ecc.

Inserita:

In pratica per fare il mio ciclo ho ragionato così. Ho scritto l'intera sequenza dei passi del ciclo. Poi ho usato questa variabile che vado ad incrementare come guida per fare il prelievo 1 o 2 o 3. Quindi per dire comincio con 1 e farò il primo prelievo (la variabile mi pilota il prelievo che devo fare). Quando torno indietro (primo prelievo terminato) incremento la variabile e quindi farò il 2 e poi il 3. Finito il 3 ricarico il valore 1 nella variabile e tutto ricomincia. Funziona... ma da qui non riesco più a districarmi allargando la cosa ella gestione delle casse svuotate. Sicuramente le mie conoscenze sono molto scarse quindi mi interessava capire un'altra possibile tecnica per una cosa simile. Per dire una cosa che assomigli allo shift dei bit che ho visto nelle tavole rotanti... ma non saprei proprio come.


Ciao! Grazie Lucios forse comincio a capire. Ora devo fare un po' di prove con plcsim... grazie ancora...

Inserita:

Per dire una cosa che assomigli allo shift dei bit che ho visto nelle tavole rotanti..

???!!!

Grazie Lucios forse comincio a capire. Ora devo fare un po' di prove con plcsim... grazie ancora...

Non c'è di che, comunque abituati a ragionare dividendo le operazioni complesse in blocchi più semplici da richiamare quando servono, semplifica notevolmente la vita!

Inserita:

OK Funziona! Però anche qui c'è un piccolo problema che fino ad ora non sono riuscito a superare. Per far ricominciare il ciclo il terzo segmento deve contenere un MOVE. Però quando le casse 2 e 3 sono entrambe vuote fin tanto che M0.2 è alto mi ricarica il valore 1 come pilotaggio del mio ciclo e quando scende può andare a 3 facendomi eseguire, giustamente, il ciclo 3. C'è qualcosa che non capisco ancora....

post-106185-0-61375700-1390480044_thumb.

Inserita:

OK penso di aver capito anche l'ultima cosa che non riuscivo a fare. In pratica basta andare a controllare quella memoria in un'altro punto del programma e tutto va a posto. Grazie... ho imparato veramente tante cose. Non ultima che di strada ne manca da fare...

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