Vai al contenuto
PLC Forum


Tecniche gestione sequenza macchina


gabribe84

Messaggi consigliati

Buona sera a tutti gli utenti del forum,

Sono un programmatore PLC e quando sviluppo il programma che gestisce una macchina lo strutturo in base ai moviment semplici che essa deve svolgere in manuale ed in automatico. in manuale ovviamete vedo se c'è la richiesta di movimento per esempio data da un selettore o da un pulsante; in automatico invece ho un bit di richiesta di movimento . Questi bit di richiesta li salvo in sequenza in un DB cosicchè posso "accenderli" scrivendo dei numeri sul DB con un MOVE.

Per esempio se devo eccitare un elettrovalvola, chiudere la valvola pilota e tenere spenta una lampada allora sarà un 110 quindi scrivo nel DB nella zona di memoria dove setto i bit un 6, se devo diseccitare l elettorvalvola mantenedo chisa la valvola pilota e accendendo la lampadine allora sarà 011 quindi andro a scrivere un 3.

Ora, dopo aver descritto il mio metodo, ( che mi rendo conto non molto intuitivo) volevo saper se ci fossero altre tecniche di gestione delle sequenze macchina o se qualcuno è disposto a condividere le sue.

Grazie mille.

Link al commento
Condividi su altri siti


L'istruzione CASE è molto utilizzata per la gestione delle sequenze, così come una catena di flags consecutivi che vengono settati/resettati in modo da avere sempre solo un flag attivo (a meno che non ci siano sequenze parallele). La condizione iniziale è bloccata da un flag di antiripetizione che viene resettato solamente alla fine (flag di working sequence).

Quanto alle uscite a me piace l'attribuzione dei flag con indirizzo uguale all'uscita (M 10.7 pilota l'uscita A 10.7) con il suo set/reset nel corso della sequenza, in modo tale da evitare il festival degli OR che si trova in certi software e che fa perdere giornate intere per fare modifiche da mezz'ora test compreso.

In manuale ovviamente I flag accoppiati alle uscite NON eccitano le uscite in quanto messi in AND con il flag di automatico.

Nel caso di indirizzamento simbolico (es. Simotion) il tutto viene più intuitivo a patto di non lasciarsi prendere da nomi interminabili o esotici.

Link al commento
Condividi su altri siti

Io di solito mi riservo un byte (o word o quel che mi conviene in base all'entità del lavoro, se grosso o meno) per i comandi manuali ed un byte per gli automatici.

Nel programmare poi alzo i bit che mi servono, in modo da non dover creare un bloccone con 200 or per una multipla attivazione di una singola utenza (è più intuitivo da "elaborare" ai miei occhi)

Alla fine, che sia di provenienza manuale oppure automatica, faccio un semplice confronto sul byte (o word o dword in base a quanti n bit utilizzati). Se dovesse essere diversa da 0, attivo l'uscita.

Un metodo giusto o sbagliato non credo ci sia, ognuno programma come meglio ritiene per raggiungere l'obiettivo finale, ovviamente tenendo un occhio di riguardo alla sicurezza.

Ciao!

Link al commento
Condividi su altri siti

Roberto Gioachin

Condivido i metodi descritti da pigroplc, naturalmente l'utilizzo del "CASE" è riservato normalmente alla programmazione in testo strutturato, entrambi i metodi che propone sono oramai ben collaudati.

Io uso SFC, sequenze molto articolate anche di 200 300 passi senza corre rischio di errori, il tutto rappresentato in maniera grafica sul  pc.

 

Roberto

Link al commento
Condividi su altri siti

Ne ho visti tanti di metodi, ma quello del post iniziale giuro che non l'avevo mai visto...

 

Moltissime persone usano il CASE (io lo paragono a un timer elettromeccanico di una lavatrice :P) è semplice e facilmente comprensibile, qualche volta lo uso ma con lo strutturato, perchè è più leggibile.

 

Quando non lo uso (cioè spesso), forse anche per mia abitudine, preferisco  dividere il ciclo in "macro-fasi" che io chiamo sequenze, ad ogni sequenza assegno 2 bit, uno di attivazione e uno di sequenza eseguita, la sequenza può attivare vari movimenti oppure altre sotto-sequenze, ma non faccio mai un bit per ogni singolo passo altrimenti avrei il problema degli OR infiniti che avete citato.

Non è una struttura sequenziale pura dove ogni bit è un cambio di stato, nella mia mente bacata la immagino più o meno come un organigramma aziendale, al direttore (il bit CICLO) non interessa sapere più di tanto come si fa ogni singola operazione, al massimo gli interessa che tutto sia stato eseguito (bit di fine ciclo), lui impartisce gli ordini ai capi-reparto (i bit di sequenza) e loro fanno in modo che gli operai  (i bit dei singoli movimenti) eseguano le operazioni adeguate al momento giusto... scusate questa mia bizzarra divagazione :P

 

Per esempio, la SeqPrePez(sequenza prelievo pezzo) può:

- Aprire la pinza se non è aperta e non è a sinistra

- Alzare la pinza se è aperta e non alta e non a sinistra

- Spostare la pinza verso sinistra

- Abbassare la pinza se questa è a sinistra e c'è il pezzo

- Chiudere la pinza se questa è a sinistra in basso.

A questo punto va a 1 il bit PezPre (pezzo prelevato) che mi azzera SeqPrePez e mi attiva la sequenza successiva... e così via.

 

Nel caso qui sopra con ogni bit di sequenza attivo svariati movimenti, ma posso anche fare diversamente, per esempio:

La SeqPrePez(sequenza prelievo pezzo) può:

- Attivare il bit MovPinVerPez (Movimento pinza verso pezzo)

--- Il bit MovPinVerPez apre-alza e sposta la pinza a sinistra dopodichè attiva il bit PinInPosPre (Pinza in posizione di prelievo)

--- Quando la pinza è in posizione di prelievo ed arriva il nuovo pezzo attivo il bit PrePez(prelievo pezzo) che mi fa abbassare e poi chiudere la pinza.

- A questo punto va a 1 il bit PezPre (pezzo prelevato) che mi azzera SeqPrePez e mi attiva la sequenza successiva... e così via.

 

Scusate se vi ho tediato, magari sono l'unico che usa questo sistema, mi piacerebbe sapere cosa ne pensate :)

 

Link al commento
Condividi su altri siti

Quote

Scusate se vi ho tediato, magari sono l'unico che usa questo sistema, mi piacerebbe sapere cosa ne pensate :)

se hai a che fare con linee di lavorazione dove l'attuatore pinza viene chiuso e aperto in almeno 10 condizioni differenti il metodo da te descritto mi sembra che possa diventare una catena logica poco intuitiva.

Io applico alla EV di apertura pinza un flag corrispondente all'uscita, che setto e resetto nel corso del CASE.

Voglio cambiare l'apertura della pinza (per esempio per guadagnare tempo): nessun problema; sposto il set del flag nella condizione di case precedente.

A suo tempo feci una specifica di struttura del codice alla quale uniformare l'intero reparto di progettazione.... chissà che fine ha fatto.

 

Segnalo inoltre una metodologia utilizzata a suo tempo quando lavorai in una "famosa" software house:

erano I tempi dell'S5.

Per ogni sequenza c'era una SB (blocco sequenziale, per le nuove leve un equivalente della FC)

alla verifica della condizione di cambio passo si cambiava il valore del puntatore, questo puntatore faceva ciclare la SB dello stesso numero. Il vantaggio era che avendo delle CPU veloci come un pedalò a Rimini, si riusciva ad avere delle performance "brillanti" pure con applicazioni complesse.

Non ci crederete .... ma poi hanno inventato il Graph 5........:smile:

 

 

 

 

Link al commento
Condividi su altri siti

Quote

Moltissime persone usano il CASE (io lo paragono a un timer elettromeccanico di una lavatrice :P) è semplice e facilmente comprensibile, qualche volta lo uso ma con lo strutturato, perchè è più leggibile.

 

E' la versione moderna della funzione "Drum controller" (controllo a tamburo) dei vecchi PLC tipo Numalogic e altri. Anzi io torvo che questa funzione era anche più pratica del "case", che è mutuato dal "do case" dei linguaggi strutturati.

 

Quote

preferisco  dividere il ciclo in "macro-fasi"

 

Condivido molto quaesta impostazione.

Personalemnte avevo anche delle funzioni standard perchè per certe tipologie di macchine quesste macro fasi sono sempre praticamente uguali, basta parametrizzare la funzione.

Ho sempre creduto molto in questo approccio, tanto che all'inizio degli anni '90 avevo sviluppato con i miei collaboratori una specie di linguaggio che denemoinai "breaks" (mattoni) che trasformava la programamzione della scheda tecnologica dei nostri azionamenti in una specie di lego.

Link al commento
Condividi su altri siti

Quote

se hai a che fare con linee di lavorazione dove l'attuatore pinza viene chiuso e aperto in almeno 10 condizioni differenti il metodo da te descritto mi sembra che possa diventare una catena logica poco intuitiva.

Non è vero, ci sono 2 FC, uno gestisce le macro-sequenze e uno gestisce i bit di movimento (i merker corrispondenti alle uscite).

 

Il merker di movimento Apertura Pinza può semplicemente essere attivato da 10 merker di sequenza che di volta in volta vengono attivati in altrettante fasi del ciclo, quindi il segmento che attiva l'apertura della pinza è leggibilissimo, ci sono 10 or del ciclo e 1 or del comando manuale.

Ovviamente non uso i set/reset (che tra l'altro non mi stanno molto simpatici) ma il coil!

 

Altrettanto leggibile in stato è l'FC con le macro-sequenze.

 

Perchè non amo i Set / Reset?

Perchè in caso di errore di programmazione fai fatica a trovare qual'è stato il Set che ti ha impostato il tal bit, preferisco avere tutto sott'occhio in un unico segmento.


 

 

 

 

Link al commento
Condividi su altri siti

Quote

....ci sono 10 or del ciclo e 1 or del comando manuale

Pensa che è una cosa che mi da ai nervi .... :lol:

Se devo fare la modifica su un programma fatto così divento matto a controllare tutti I flags interessati, ma è bello vedere I diversi punti di vista delle persone, tutti discutibili e tutti validi. Quanto alla difficoltà di capire dove il flag è stato settato io so esattamente a quale passo del CASE sono, quindi se il flag è nello stato errato basta guardare il passo attivo.

Dovrei ancora avere nella cantina di mia madre le fotocopie della logica a passi fatti e insegnati da mamma Siemens, se li dovessi trovare li posto e faccio felice qualche nostalgico come me.......

Link al commento
Condividi su altri siti

 

Quote

 

Pensa che è una cosa che mi da ai nervi .... :lol:

Se devo fare la modifica su un programma fatto così divento matto a controllare tutti I flags interessati,

 

Forse non mi sono spiegato bene, di solito i miei flags di sequenza non sono tanti quanto le singole transizioni della macchina, fai conto che se tu usi 200 passi di CASE io per fare lo stesso programma userò 20 flags di macro-sequenza, questi definiscono a grandi linee le fasi del ciclo, la loro sequenza temporale è sempre quella, salvo diramazioni (posso saltare una fase completa o attivarne un altra al suo posto), questi flags sono inossidabili.

Non mi capita quasi mai che un movimento venga attivato ben 10 volte nello stesso ciclo, la famosa apertura pinza sarà attivata solo 2 volte, prima del prelievo e dopo lo scarico.

Quando scrivo un programma la parte che gestisce le fasi del ciclo è davvero quella in cui impiego meno tempo.

Poi è molto importante dare il nome giusto ad ogni flag, "Fase_1" non mi dice niente ma "Seq_PrelievoPezzo" mi fa già capire cosa fa quel flag. Ho visto programmi dove il simbolo è uguale all'assoluto, o dove al posto del flag di sequenza c'è un confronto di un index con una costante, questo a me fa venire il mal di testa.

 

Ho visto programmi dove la condizione di abilitazione per un movimento viene valutata solo all'inizio della transizione di fase, questo potrebbe creare dei problemi, immagina un manipolatore azionato da motoriduttori, o idraulico, che durante il tragitto "cala", nel mio caso l'attivazione del flag di avanzamento è data dall'and del flag di sequenza con il contatto del finecorsa di salita,  la stessa condizione di partenza è valutata lungo tutto il tragitto quindi se la pinza dovesse abbassarsi l'avanzamento si fermerebbe e verrebbe attivata automaticamente la salita (anche qui c'è lo stesso flag di sequenza che attiva la salita se non è su) Il programma non si pianta mai, al limite è brutto vedere i tentennamenti del manipolatore ma questo che o scritto è solo un esempio. 

 

Comunque le macro-sequenze (o macro-fasi o cicli indicizzati come le vuoi chiamare) le puoi benissimo fare anche con i CASE e all'interno di ogni macro-sequenza volendo si possono costruire altri sotto-cicli. Ho usato questo sistema su una macchina transfer dove ogni unità aveva il suo ciclo indipendente, il CASE principale gestiva la traslazione e i bloccaggi e poi avviava i 6 CASE delle 6 unità che erano indipendenti, quando tutti e 6 terminavano, il CASE principale proseguiva...

 

Il grafcet (che ora si chiama SFC) l'ho usato solo una volta, è bello da vedere ma mi ha dato parecchie rogne in fase di stesura, forse perchè aveva qualche baco o perchè non ero esperto io, ma invece di farmi guadagnar tempo me lo faceva perdere... Una cosa che ricordo è che era abbastanza laborioso abortire il ciclo o modificare le diramazioni...

 

Scusate per il papiro...

 

 

 

Link al commento
Condividi su altri siti

Quote

Poi è molto importante dare il nome giusto ad ogni flag, "Fase_1" non mi dice niente ma "Seq_PrelievoPezzo" mi fa già capire cosa fa quel flag.

Parole sante ....... già sei a metà dell'opera.

Link al commento
Condividi su altri siti

  • Giuseppe Signorella featured this discussione
  • 8 years later...
Livio Orsini
1 ora fa, Mat Teo ha scritto:

Buongiorno, avete degli esempi "grafici"?

grazie

buon lavoro

 

  1. Leggi il regolamento! Non è mai possiible accodarsi ad altre discussioni. Bisogna sempre aprire una nuova discussione.
  2. Questa discussione, inoltre, è inattiva da 8 anni!!
Link al commento
Condividi su altri siti

  • Livio Orsini locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...