Vai al contenuto
PLC Forum


Spunto Per Algoritmo


aleb2

Messaggi consigliati

Si tratta di collocare e prendere degli oggetti con un sistema automatico (3+1 assi ma ha quote fisse), ci sono 9 caselle (3 file e 3 colonne) spazialmente equidistanti rispettivamente in orizzontale e in verticale ognuna delle quali è una "pila" che può contenere 6 oggetti, gli oggetti si inseriscono sempre nella prima posizione della pila poi c è un braccio che me li spinge indietro fino a che la pila non è piena (6 oggetti), devo pensare al modo di memorizzare la posizione dell'oggetto inserito, in quanto poi per riprenderlo dovrò sapere quanti oggetti togliere dalla pila ed appoggiare in una casella "magazzino" o in caselle che hanno la pila non piena (quindi aggiornare la loro posizione), per prendere quello voluto;

cerco uno spunto e un confronto su come affrontereste la cosa dovendo usare Step7;

hardware S7-300 e HMI (o PC) per richiamare gli oggetti

Link al commento
Condividi su altri siti


C'è qualche cosa da chiarire.

Si tratta di un parallelepipedo a base quadrata 3 x 3 e altezza 6?

Gli oggetti che inserisci sono tutti uguali? Se non come li identifichi?

Ammettiamo, tanto per fare un'ipotesi, che il sistema abbia 54 celle disposte come la matrice tridimensionale ipotizzata; sopponiamo anche che gli oggetti sian tutti differenti. (caso pessimo)

Devi crearti una array di 54 elementi il primo elemento corrisponderà al primo oggetto che carichi. Ad ogni elemento dell'array associ una terna di valori: riga, colonna e progressivo di cella.

Cerco di chiarire con un esempio.

Il primo oggetto lo collochi nella cella 1,1 e, ovviamente, sarà nella prima posizione.

Il secondo lo collochi nella cella 1,2 , 1, il terzo nella 2,1,1, il quarto nella cella 1,1,2......e così via.

avrai un array che sarà:

1 => 1,1,1

2 => 1,2,1

3 => 2,1,1

4 => 1,1,2

.................

36 => 1,1,6

37 => 2,1,5

Se devi riprendere il 36o oggetto immagazzinato ti posizioni alla cella 1,1 posizione 6 che in fase di estrazione sarà la posizioni iniziale, se lavori con logica LIFO.

Link al commento
Condividi su altri siti

Intanto grazie, si, si può vedere come un parallelepipedo con base 3x3 nel senso che ci sono 9 celle; in cm, se serve, le celle sono ugualmente distanziate fra loro in orizzontale e in verticale rispettivamente di 70cm e 80cm.

Gli oggetti sono tutti diversi, infatti anche l identificazione è un'altro problema, l'operatore da un nome (da pannello) al momento che inserisce l'oggetto a cui verrà associata una posizione, quando viene prelevato l'oggetto la posizione si libera e ne verrà data un altra al momento del rientro;

i primi 9 oggetti avranno posizione (riga,colonna,posi.all'interno della cella);

1,1,1 ; 1,2,1; 1,3,1;

2,1,1; 2,2,1; 2,3,1;

3,1,1; 3,2,1; 3;3,1;

il decimo oggetto p.e. avrà posiz. 1,1,2 l'undicesimo 1,1,3 etc.. in pratica si potrebbe associare l 'ordine di inserimento alla posizione e quando viene prelevato far "scorrere" la posizione dei successivi oggetti della stessa cella di una posizione cioè 1,1,3 diventa 1,1,2; 1,1,4 diventa 1,1,3.

Facendo così devo tenere una cella libera che funziona da magazzino temporaneo per depositarvi gli oggetti "davanti" a quello da prelevare ma la cosa peggiore è che dopo li devo rimettere a posto (?);

Link al commento
Condividi su altri siti

Dovresti spiegare meglio la meccanica, in altri termini come avviene l'impilamento ed il prelevamento. Si tratta di una specie di magazzino?

Link al commento
Condividi su altri siti

E` una specie di armadio, quindi inseririsco uno specifico capo e devo poterlo riprendere; ci sono 9 aste (60cm) fissate ortogonalmente ad una parete verticale su cui in ognuna possono venire inserite al max 6 appendiabiti;

un asincrono e trasmissione a cinghia sia per asse x e asse z, trasduttori di posizione tutti microswitch (posizioni fisse): per l`asse y motore in continua e trasmissione a vite; ma ripeto per ora e` tutto solo pensato e aperto a consigli sia per la movimentazione sia per il software

Link al commento
Condividi su altri siti

Allora riepilogando.

Prepari una matrice tridimensionale 3;3;6. Assegni ogni elemento della matrice ad un vettore avente 54 elementi.

Al momento di "appendere" l'oggetto l'operatore assegna un identificativo all'oggetto stesso; l'oggetto sarà appeso su di un piolo corrispndente ad un elemento ben preciso e, nel vettore di 54 elementi, sarà inserito l'identificativo dell'oggetto appeso. Tramite la corrispondenza biunivoca vettore-matrice in qualsiasi istante è possibile risalire dall'identificativo dell'oggetto alla posizione d'immagazinamento.

Sino a qui mi sembra abbastanza chiaro.

Veniamo ora al momento della ripresa del capo appeso.

Se ho ben compreso l'attrezzo può ruotare attorno al perimetro del magazzino; se il magazzino è pieno non sarà possibile riprendere in modo immediato tutti i componenti immagazzinati nella colonna verticale 2;2 perchè mascherati dalle colonne esterne.

Come hai già intuito c'è una sola soluzione: aggiungere un 55.o elemento dove riporre momentaneamente il pezzo mascherante l'elemento da rimuovere.

Alternativa: ridurre la capienza a soli 53 elementi in modo da avere sempre una casella vuota per il magazzino temporaneo.

Link al commento
Condividi su altri siti

Assegno ogni elemento della matrice ad un elemento del vettore, (ho un solo vettore di 54 elementi) altrimenti non mi e` chiara la corrispondenza biunivoca tra matrice e vettore;

momento di appendere: l`operatore da un identificativo all`oggetto es. "oggetto1", a questo punto devo indicare al sistema dove posizionarlo, come faccio la scelta? posso andare in ordine (?) cioe` e` il primo oggetto--> posizione 1,1,1 ---> primo elemento del vettore; secondo oggetto--->posizione 1,1,2--->secondo elemento del vettore etc..

l`attrezzo si comporta come se fosse una persona, (non gli giro intorno per intendersi) ho davanti a me 9 pioli e mi sposto in corrispondenza di ognuno, tutti sono accessibili;

ripresa "oggetto1": il braccio si posiziona su 1,1, e a questo punto deve sapere quanti oggetti ci sono da togliere (0-5) e "parcheggiare" prima di prendere quello voluto

Link al commento
Condividi su altri siti

Prepari una matrice tridimensionale 3;3;6. Assegni ogni elemento della matrice ad un vettore avente 54 elementi.

^ ^ ^ ^

|| || || ||

Assegno [b]ogni[/b] elemento della matrice ad [b]un[/b] elemento del vettore,

Se ti è più chiaro scrivilo così.

a questo punto devo indicare al sistema dove posizionarlo, come faccio la scelta?

Io partirei riempendo il primo piolo della prima fila, poi il secondo e seguitando così in automatico.

la ripresa potrebbe svolgersi i uatomatico in ordine inverso e, in manuale, ricercando oggetto per oggetto.

Link al commento
Condividi su altri siti

ancora diverse cose da chiarire:

1- dovrei associare un testo descrittivo, che l` operatore scrive al momento dell inserimento di un nuovo oggetto, all`oggetto stesso e servira` poi all`operatore per richiamarlo

2-riempo il magazzino in ordine es.piolo 1,1 x 6 poi 1,2 x6 etc..

al momento dell`richiamo di un oggetto il braccio si posiziona sul piolo rigax,colonnay poi deve gestire la pila, come gestirla? attraverso dei calcoli conosco quanti oggetti ci sono su quel piolo e quanti ne devo togliere e parcheggiare prima di prendere quello richiesto oppure se riesco ad avere un identificazzione di tutti gli oggetti inseriti tolgo e parcheggio fino a che non vedo quello richiesto; in entrambi i casi devo rimettere gli oggetti parcheggiati aggiornando la loro posizione (-1)

3-struttura dati con cui gestire (con Step7), identificazioni posizioni e aggiornamenti posizioni

grazie ancora per i preziosi consigli

Link al commento
Condividi su altri siti

  • 2 weeks later...

devi usare una matrice tridimensionale

dati : ARRAY [1 .. 10, 1 .. 10, 1 .. 10 ] OF REAL ;

Poi imparati SCL , il linguaggio strutturato di step 7 .

Da li potrai estrarre o salvare dati in base ad indici con una singla riga di codice , eliminare o azzerare con cicli for annidati fino al terzo grado (tridimensionale)

Diversamente passerai anni della tua vita a progettare puntatori e risolvere bachi .

Io faccio tutto cosi in pochi minuti , calcoli in SCL, controlli di stringhe per disimpilatori , impilatori , magazzini automatici ect

Per quanto riguarda i passi auomatici e le azioni da eseguire utilizza la classica macchina a stati finiti .

Se tutti i passi , che fanno parte di un'area dati DB disposta in numero pari come words , sono azzerati parti dal primo passo , diversamente esntri nel ciclo ed esesui il passo attuale o congelato

Con Set-Reset quando stai cercando la porta e l'hai trovata resetti la ricerca porta e cerchi le chiavi se non le hai gia in mano e se sono quelle giuste ....poi apri la porta ed esci .

Il livello successivo sono i passi sulle azioni , in quanto piu di un passo può eseguire le stesse azioni .

Un passo può eseguire un'azione come bobina , o come Set o come ritardo ect ect ect .

Mettendo questi passi in apposite finestre in wincc avrai la diagnosi completa ed attuale di cosa sta facendo il tuo impianto o macchina .

Suddividi l'impianto in macchine o parti di esse , esegui tanti steps autoamatici quanti te ne servono e quando una macchina deve per esempio scaricare su un'altra verifichi che una sia pronta a scaricare e l'altra a caricare con gli opportuni controlli

di finecorsa , memorie , fotocellule ec .Gli stessi controlli li fai sulle azioni e sulle richieste di comando finali prima di arrivare alle uscite o ai drives , questo ti permette di evitare disastri qualora le condizioni siano state valide per passare ad uno step successivo ma l'operatore abbia mosso in manuale qualcosa .

Lavora cosi che programmi il mondo intero , l'impianto diviso per macchine, ogni macchina i suoi allarmi , i suoi step e tutte le sue cose.

Ogni macchina il suo fc ed il suo db con numeri univoci ....al prossimo impianto individui le caatteristiche , copi ed incolli ed il 70 % del lavoro e' gia fatto

Le matrici possono essere anche piu complesse , ossia matrici di strutture.Quindi puo anche tener conto diversi dati per ogni singolo elemento

Ciao

Walter

p.s. SCL e' un pacchetto a parte che si installa in step 7 come add on , ne vale la pena , lasciali perdere i vecchi programmatori che programmano in awl w puntatori ahahahahahah

Modificato: da walterword
Link al commento
Condividi su altri siti

L`SCL non ho mai avuto l `occasione di usarlo, ma se e` una specie di Pascal o similari non dovrei avere grossi problemi (e` uno dei primi linguaggi studiati anche se ormai piu di 12 anni fa); nel mio caso penso a l`utilita` di un linguaggio del genere potendo sfruttare piu facilmente cicli "if then/ else" o cicli "for " necessari quando dovendo andare a prendere un oggetto, che non e` il primo di una determinata pila, devo prelevare via via tutti quelli "davanti" e "parcheggiarli" da un altra parte

Link al commento
Condividi su altri siti

SCL e' il linguaggio strutturato di casa siemens , molti simile se non uguale a lignuaggi ST di Codesys ed altri .

Si e' tendente al Pascal come sintassi , c'e' il Begin ad inizio programma ect .

E' chiaro che le librerie sono limitate all'uso del plc ma e' molto potente specilamente se devi lavorare su stringhe , array di strutture , matrici , calcoli .

Io lo uso da piu di 10 anni e non ho mai avuto problemi.

Poi in Step 7 c'e' modo di poter creare strutture dati molto complesse .

Non avrai problemi ad impararlo , c'e' una guida valida

ciao

Walter

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