Vai al contenuto
PLC Forum


Magazzino Automatizzato


mattiar88

Messaggi consigliati

Ciao! sono uno studente del quinto anno ITI. Devo creare un carroponte che abbia la funzione di magazzino automatizzato e devo creare il programma per PLC.

il progetto dovrà essere in grado di immagazzinare automaticamente i pezzi in entrata, inoltre, quando richiesto, deve prelevare il pezzo da più tempo immagazzinato e portarlo in uscita dal magazzino.

il magazzino è costituito da nove posizioni di immagazzinamento più una posizione di arrivo del pezzo e una di uscita, per un totale di undici posizioni. Su ogni posizione è presente un microcontatto che viene chiuso quando il pezzo si trova sopra. Ogni microcontatto è collegato agli ingressi del PLC, inoltre per richiedere il prelievo del pezzo si utilizza un pulsante collegato sempre in ingresso al PLC.

il mio preblema è il prelievo del pezzo da più tempo immagazzinato, infatti non riesco a creare un programma per il PLC in grado di memorizzare la sequenza di immagazzinamento del pezzo, in modo tale da poter prelevare il pezzo più "vecchio".

Volevo sapere se quanlcuno poteva darmi una mano nel programmare il PLC. Il mio PLC è un omron sysmac CPM2A e utilizzo un liguaggio di programmazione ladder. Grazie!

Link al commento
Condividi su altri siti


Ciao Mattiar88

Potresti usare una semplicissima FIFO. Visto che le posizioni sono 9 crei una FIFO di 9 posizioni...diciamo dalla DM 1 (uscita FIFO) alla DM9 (ingresso FIFO). Quando uno degli ingressi a cui sono collegati i microswitch passa da OFF ad ON copi il n° della posizione nella DM9. Essendo una FIFO il valore che hai scritto nella DM9 viene spostato verso la posizione di uscita finchè ci sono posizioni libere. Quando devi prelevare utilizzi il valore che trovi nella DM1.

Se vai nella sezione Up/Dowload file / PLC / Programmi_PLC / OMRON trovi il file del programma

Se lo provi vedrai che quando un ingresso passa da OFF ad ON il n° della posizione di immagazzinamento viene scritto in DM9 e viene spostato verso DM1 finchè ci sono posizioni libere. Se poi scrivi 0 in DM1 vedrai che tutti i valori da DM2 a DM9 vengono spostati in su di una posizione.

Se ti servono chiarimenti scrivi pure.

Ciao

Gianluca

P.S. Io l'ho fatto con CX Programmer 7, se hai problemi ad aprirlo te lo stampo in PDF

Link al commento
Condividi su altri siti

Ciao Giangy84

Grazie per la risposta e il file, ma purtroppo la mia conoscenza nel campo della programmazione di PLC non è elevata, non ho capito molto bene come funziona una FIFO. Non riesco a capire quale dato devo utilizzare per riconoscere il pezzo che è stato immagazzinato prima degli altri. Non potresti spiegarmi meglio come funziona una FIFO e che dati utilizzare? Grazie.

Link al commento
Condividi su altri siti

Come funziona la FIFO è spiegato benissimo su Wikipedia...

Il dato che devi utilizzare è il valore che trovi nella DM1.

Ti faccio un'sempio:

Porti nelle posizioni di immagazzinamento del materiale con il seguente ordine: 2, 5, 7.

Nelle word troverai questi valori: DM1=2, DM2=5, DM3=7.

Quando dovrai prelevare qualcosa guarderai il valore della DM1...in questo caso dovresti andare a prelevare il materiale contenuto nella posizione 2.

Quando il prellievo è terminato cancelli il valore della DM1 e automaticamente la FIFO si aggiorna...in questo caso risulterebbe DM1=5, DM2=7.

Spero di essere stato chiaro...è quasi più facile fare il programma che spiegarlo...

Se vuoi altri chiarimenti chiedi pure

Ciao

Gianluca

Link al commento
Condividi su altri siti

Il funzionamento di una FIFO l'ho capito. Quello che non riesco a fare è utilizzare una FIFO, cioè non riesco a utilizzare il dato che mi servirebbe. Come faccio, ad esempio, ad attivare l'uscita 10.03 del PLC quando il pezzo più vecchio si trova nella posizione 3?

Ciao Mattia

Link al commento
Condividi su altri siti

Se usi la funzione ASFT (che ti crea un fifo) con la parola di controllo impostata a 6000 il pezzo più vecchio sarà sempre nel DM più basso.

Se il tuo fifo va dal DM1 al DM9 devi inserire il valore entrante lo devi scrivere nel DM9.

La funzione ASFT (eseguita in ogni ciclo di scansione del PLC) compatta verso l'alto (verso il DM1) i valori diversi da 0.

Quindi come ti ha spiegato Giangy84, quando devi prelevare il codice più vecchio lo trovi sempre nel DM1, quando lo devi usare dovresti scrivere 0 in questo DM, a questo punto la funzione ASFT scrive nel DM1 il valore del DM2 (se in questo DM c'è un valore diverso da 0) e fa la stessa cosa con tutti gli altri codici (ed i DM che li contengono) contenuti nel FIFO.

A questo punto nel DM1 ti trovi nuovamente il valore più vecchio.

Link al commento
Condividi su altri siti

Per alzare l'uscita 10.0x utilizzando i valori da 1 a 9 che trovi nella DM1 dovresti fare dei compare.

Siccome con il CPM2 è un po' una rottura di scatole si portebbe scrivere nella DM9 il valore a bit della posizione di immagazzinamento.

Mi spiego meglio...

Per la posizione 1 potresti scrivere 0000 0000 0000 0001 che in esadecimale = #1

Per la posizione 2 potresti scrivere 0000 0000 0000 0010 che in esadecimale = #2

Per la posizione 3 potresti scrivere 0000 0000 0000 0100 che in esadecimale = #4

....

Per la posizione 8 potresti scrivere 0000 0000 1000 0000 che in esadecimale = #80

Per la posizione 9 potresti scrivere 0000 0001 0000 0000 che in esadecimale = #100

Usando questi valori puoi alzare l'uscita 10.0x copiando la DM1 in una word d'appoggio indirizzabile a bit (ad esempio HR1) e, per ogni bit di HR1, alzare l'uscita corrispondente.

Se vuoi ho aggiornato anche il programma...(è nella stessa cartella del primo)

Link al commento
Condividi su altri siti

Grazie del programma, adesso ho capito abbastanza come funziona. Ma non si potrebbe fare in modo che il programma aggiorni automaticamente, alla fine del prelievo, quale sia il pezzo più vecchio senza che ci sia il bisogno di impostare manualmente a 0 la D1?

Ciao Mattia

Link al commento
Condividi su altri siti

Non credo sia possibile...devi sempre cancellare la D1 perchè la FIFO si aggiorni. Comunque non devi cancellarla manualmente, o meglio, nel programma che ho fatto io come esempio si, ma in quello che farai tu la cancellerai quando hai finito l'operazione di prellievo dal magazzino (basta fare un MOV #0 D1)

Ciao

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