20.06.2013 Views

Soluzione degli esercizi del Capitolo 7 - Ateneonline

Soluzione degli esercizi del Capitolo 7 - Ateneonline

Soluzione degli esercizi del Capitolo 7 - Ateneonline

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 1<br />

<strong>Soluzione</strong> <strong>degli</strong> <strong>esercizi</strong> <strong>del</strong> <strong>Capitolo</strong> 7<br />

<strong>Soluzione</strong> <strong>del</strong>l’Esercizio E7.1<br />

Il sistema deve controllare il ciclo di carico e scarico dei carrelli A, B e C. Come<br />

si evince dal testo, i carrelli A e B condividono una parte <strong>del</strong> binario e pertanto il<br />

controllo <strong>del</strong> loro moto deve essere progettato in modo da evitare le collisioni tra<br />

i due. Nella seconda parte <strong>del</strong> percorso il carrello che impegna il binario (carrello<br />

A o B) lo condivide con il carrello C, quindi anche in questo caso la movimentazione<br />

deve essere controllata in modo da evitare collisioni. Queste considerazioni<br />

suggeriscono l’utilizzo di due strutture semaforiche per la mutua esclusione una<br />

innestata dentro l’altra. Come sarà maggiormente chiaro in seguito, la più esterna<br />

regolerà le precedenze tra i carrelli A e B, quella più interna regolerà il passaggio<br />

di uno tra i carrelli A o B e il carrello C.<br />

Le specifiche funzionali di massima che devono essere eseguite dal codice<br />

SFC sono pertanto le seguenti:<br />

1. avvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando Start;<br />

2. gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione<br />

<strong>del</strong> comando emergenza;<br />

3. gestione <strong>del</strong>l’emergenza in seguito al malfunzionamento di entrambi gli attuatori<br />

scarA e scarB;<br />

4. controllo <strong>del</strong> ciclo di carico e scarico dei carrelli A, B e C;<br />

5. diagnostica automatica dei guasti <strong>degli</strong> attuatori scarA e scarB;<br />

6. gestione <strong>del</strong>la lavorazione a prestazioni ridotte a seguito <strong>del</strong>la rottura di uno<br />

<strong>degli</strong> attuatori scarA o scarB.<br />

È immediato intuire che le specifiche 1-3 sono specifiche di alto livello, mentre le<br />

specifiche 4-6 sono specifiche di basso livello; pertanto le prime saranno realizzate<br />

mediante un diagramma SFC di alto livello (Main), mentre le restanti saranno<br />

gestite da un diagramma di livello gerarchico inferiore (Controllo) secondo la<br />

struttura padre/figlio. La struttura <strong>del</strong> codice è indicata in Figura 1.<br />

Il diagramma padre Main è riportato in Figura 2. Tale diagramma, non dovendo<br />

eseguire nessuna operazione di inizializzazione o di messa in opera <strong>del</strong><br />

sistema, avvia immediatamente il processo figlio Controllo e, in seguito, attende<br />

una <strong>del</strong>le due situazioni da gestire: attivazione <strong>del</strong> comando emergenza o, in maniera<br />

mutuamente esclusiva, diagnosi <strong>del</strong>la rottura di entrambi gli attuatori scarA<br />

e scarB (condizione guastoA*guastoB). Nel caso di messa in pausa <strong>del</strong> processo<br />

si utilizza il comando Gfreeze per congelare il diagramma SFC Controllo e, solo<br />

in seguito alla disattivazione <strong>del</strong> comando emergenza, si riavvia il processo figlio<br />

mediante il comando GRST; si noti come in questo caso il codice rimandi allo<br />

stato dummy 2 evitando in questo modo la generazione di un’ulteriore istanza<br />

<strong>del</strong> figlio Controllo in seguito al transito nello stato 1. La situazione di guasto<br />

<strong>degli</strong> attuatori scarA e scarB viene segnalata al Main mediante le variabili interne<br />

booleane guastoA e guastoB che, in accordo alla struttura mostrata in Figura 1,<br />

Copyright © 2010 - The McGraw-Hill Companies srl


2 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Main:<br />

avvio <strong>del</strong> processo (Start);<br />

gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo (emergenza);<br />

gestione <strong>del</strong>l'emergenza in seguito al malfunzionamento di (scarA) e (scarB);<br />

Controllo:<br />

controllo <strong>del</strong> ciclo di carico e scarico dei tre carrelli;<br />

diagnostica automatica dei guasti di (scarA) o (scarB);<br />

gestione <strong>del</strong>la lavorazione in di caso di guasto di (scarA) o (scarB);<br />

Figura 1 Strutturazione <strong>del</strong> codice SFC relativo all’Esercizio E7.1.<br />

Main<br />

3<br />

4<br />

1<br />

guastoA*guastoB<br />

1<br />

2<br />

Action(P):<br />

Gkill(Controllo);<br />

end_action;<br />

AllarmeGuasto;<br />

GuastoRisolto<br />

true<br />

guastoA(R);<br />

guastoB(R);<br />

true<br />

Action(P):<br />

num:=0;<br />

Gstart(Controllo);<br />

end_action;<br />

5<br />

2<br />

Emergenza*not(guastoA*guastoB)<br />

Action(P):<br />

Gfreeze(Controllo);<br />

end_action;<br />

not(emergenza)<br />

Action(P):<br />

GRST(Controllo);<br />

end_action;<br />

Figura 2 Diagramma SFC relativo all’Esercizio E7.1: diagramma principale<br />

main.<br />

saranno gestite nel diagramma SFC Controllo. In seguito al verificarsi <strong>del</strong>la condizione<br />

guastoA*guastoB, il diagramma figlio Controllo viene terminato mediante<br />

il comando Gkill e, successivamente all’avvenuta riparazione <strong>degli</strong> attuatori guasti<br />

(segnalata dalla variabile GuastoRisolto), il processo riparte da capo mediante<br />

il rimando allo stato 1. Si noti come nello stato 1 viene definita e inizializzata la<br />

variabile interna intera Num che servirà nel figlio Controllo per contare i pacchi<br />

trasportati dai carrelli A e B (è infatti necessario attivare il carrello C ogni volta<br />

che i carrelli A e B hanno trasportato quattro prodotti).<br />

Il diagramma SFC Controllo, mostrato in Figura 3, si occupa <strong>del</strong> controllo <strong>del</strong><br />

6<br />

true<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 3<br />

101<br />

102<br />

103<br />

104<br />

true<br />

S1<br />

105<br />

scambio1(S);<br />

avantiA;<br />

posA>=40<br />

106<br />

macro1<br />

Start<br />

carA;<br />

pienoA<br />

avantiA;<br />

posA>=20<br />

Num


4 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

ciclo di carico e scarico dei tre carrelli gestendo le situazioni di possibile collisione.<br />

Come detto precedentemente dal testo si evince la necessità di una doppia<br />

struttura semaforica di mutua esclusione. Questo è possibile utilizzando opportunamente<br />

i due stati semaforici S1 e S2. Lo stato S1, mediante la struttura semaforica<br />

a due vie, permette di gestire in maniera mutuamente esclusiva l’accesso<br />

al binario condiviso dai carrelli A e B. Entrambi i carrelli attendono l’accesso<br />

alla zona condivisa in una zona di attesa sicura caratterizzata dalla condizione posX≥20<br />

(X= {A;B}). Il carrello A è considerato maggiormente prioritario come<br />

indicato dalla condizione true tra gli stati 104 e S1 e lo stato 105 e dalla condizione<br />

not(GS104.X) tra gli stati 204 e S1 e lo stato 205. Appena uno dei due carrelli<br />

occupa il semaforo (disattivando lo stato S1) imposta il valore corretto per l’attuatore<br />

scambio (true per il carrello A e false per il carrello B) e, successivamente,<br />

impegna il binario condiviso. Lo stato S2 permette di gestire in maniera mutuamente<br />

esclusiva l’accesso al binario condiviso dai carrelli A o B con il carrello C.<br />

Dato che a priori è impossibile stabilire chi tra i carrelli A e B sia passato al semaforo<br />

S1, il secondo semaforo è un semaforo a tre vie. I carrelli A e B attendono<br />

l’accesso alla zona condivisa in una zona di attesa sicura caratterizzata dalla condizione<br />

posX≥40 (X= {A;B}); il carrello C attende l’accesso alla zona condivisa<br />

in una zona di attesa sicura caratterizzata dalla condizione posC≥40. La priorità<br />

è a questo punto indifferente dato che è impossibile che entrambi i carrelli A e B<br />

siano nella zona di attesa, il carrello A e B deve entrare nella zona condivisa solo<br />

se sono presenti meno di quattro prodotti (Num


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 5<br />

not(vuotoA)*<br />

(GS108.T>t#120s)<br />

114 guastoA(S);<br />

dietroA;<br />

posA=60<br />

S1<br />

116 avantiA;<br />

posrip<br />

S2<br />

117 AllarmeGuasto;<br />

GuastoRisolto<br />

118 dietroA;<br />

119<br />

120<br />

121<br />

112<br />

posA=100+num*10<br />

108 scarA;<br />

109<br />

vuotoA<br />

Action(P):<br />

num:=num+1;<br />

end_action;<br />

not(GS104.X)*not(GS204.X)*(num


6 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

In Figura 4 è presentato il macrostato macro1; in tale macrostato sono descritte<br />

le operazioni che il carrello A deve eseguire una volta che ha avuto accesso<br />

all’ultima zona <strong>del</strong> percorso. Il carrello A, una volta impostati i valori corretti<br />

per gli attuatori di scambio scambio2 e scambiodead, viene portato nella zona<br />

di scarico, la cui posizione dipende dal numero <strong>del</strong> prodotto trasportato (posA≥140+Num*10),<br />

il prodotto viene scaricato e il contatore dei prodotti viene<br />

incrementato mediante l’azione di tipo P Num:=Num+1. Dato che durante tali<br />

operazioni si utilizza l’attuatore scarA (soggetto a guasto), nel caso in cui il<br />

carrello non risulti vuoto entro 120 secondi, si segnala il guasto mediante l’attivazione<br />

<strong>del</strong>la variabili interna booleana guastoA. A questo punto, dato che in caso di<br />

guasto singolo occorre continuare a prestazioni ridotte la lavorazione, il carrello<br />

A viene portato nella zona di manutenzione grazie all’attuatore scambiodead e,<br />

appena la zona condivisa è superata (posA≥60), vengono liberati entrambi i semafori<br />

S1 e S2 per permettere al carrello sano di continuare il proprio ciclo. Una<br />

volta raggiunta la posizione di manutenzione posrip, si segnala il guasto mediante<br />

l’attuatore AllarmeGuasto e, quando la riparazione è avvenuta, si riporta il carrello<br />

in zona di carico. Dato che durante questa operazione occorre passare per<br />

le zone condivise, bisogna occupare entrambi i semafori S1 e S2 nel momento in<br />

cui si è sicuri che nè il carrello B nè il carrello C stanno transitando (condizione<br />

not(GS104.X)*not(GS204.X)*(num¡4)*not(GS106.X)*not(GS206.X)).<br />

Il macrostato macro2, mostrato in Figura 5, presenta le operazioni che il carrello<br />

B deve eseguire una volta che ha avuto accesso all’ultima zona <strong>del</strong> percorso.<br />

Queste sono <strong>del</strong> tutto simili a quelle <strong>del</strong> carrello A e, pertanto, non saranno qui<br />

descritte.<br />

Infine in Figura 5 è riportato il macrostato macro3 che descrive le operazioni<br />

<strong>del</strong> carrello C. Il carrello C, una volta impostati i valori corretti per gli attuatori<br />

di scambio scambio2 e scambiodead, viene portato nella zona a lui dedicata (posC≥140),<br />

viene caricato con i quattro prodotti trasportati dai carrelli A e B, viene<br />

movimentato fino a che posC≥200 e viene nuovamente scaricato. A questo punto<br />

il carrello C, avendo terminato il proprio compito, può tornare nella posizione<br />

iniziale non prima di aver azzerato il contatore (Num:= 0) in modo da iniziare il<br />

trasporto di altri quattro prodotti.<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 7<br />

not(vuotoB)*<br />

(GS208.T>t#120s)<br />

214 guastoB(S);<br />

dietroB;<br />

posB=60<br />

S1<br />

216 avantiB;<br />

posrip<br />

S2<br />

217 AllarmeGuasto;<br />

GuastoRisolto<br />

218 dietroB;<br />

219<br />

220<br />

221<br />

212<br />

posB=100+num*10<br />

208 scarB;<br />

209<br />

vuotoB<br />

Action(P):<br />

num:=num+1;<br />

end_action;<br />

not(GS104.X)*not(GS204.X)*(num


8 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

macro3<br />

Figura 6 Macrostato macro3.<br />

304 scambio2(R);<br />

scambiodead(R);<br />

avantiC;<br />

posC>=140<br />

305 carC;<br />

308<br />

pienoC<br />

306 avantiC;<br />

posC>=200<br />

307 scarC;<br />

vuotoC<br />

Action(P):<br />

num:=0;<br />

end_action;<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 9<br />

<strong>Soluzione</strong> <strong>del</strong>l’Esercizio E7.2<br />

Il sistema da controllare è composto da tre stazioni di lavorazione che possono<br />

operare in parallelo; le tre stazioni sono collegate da una linea di trasporto che<br />

provvede alla movimentazione dei blister da una stazione all’altra. Appare chiara<br />

quindi la necessità di sincronizzare l’inizio e la fine <strong>del</strong>le lavorazioni <strong>del</strong>le tre stazioni<br />

con il movimento <strong>del</strong> nastro: le tre macchine devono iniziare a lavorare solo<br />

quando il nastro trasportatore ha movimentato i blister, le lavorazioni possono a<br />

questo punto procedere in maniera indipendente e, solo quando tutte le stazioni<br />

hanno terminato il loro lavoro, è possibile nuovamente azionare il nastro trasportatore<br />

per movimentare opportunamente i blister. Queste considerazioni suggeriscono<br />

l’utilizzo di una struttura di parallelismo e sincronizzazione che permetta il<br />

coordinamento <strong>del</strong>le tre stazioni di lavorazione con il nastro trasportatore.<br />

Le specifiche funzionali di massima che devono essere eseguite dal codice<br />

SFC sono pertanto le seguenti:<br />

1. avvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando start;<br />

2. gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione<br />

<strong>del</strong> comando Allarme;<br />

3. gestione <strong>del</strong>l’emergenza in seguito al malfunzionamento <strong>del</strong>l’attuatore salda;<br />

4. controllo <strong>del</strong>le operazioni <strong>del</strong>le tre stazioni e <strong>del</strong> nastro di trasporto blister;<br />

5. diagnostica automatica dei guasti <strong>del</strong>l’attuatore salda;<br />

6. gestione <strong>del</strong>la lavorazione a prestazioni ridotte di 10 blister a seguito <strong>del</strong>la<br />

rottura <strong>del</strong>l’attuatore salda;<br />

7. controllo <strong>del</strong> nastro di trasporto <strong>del</strong>le pasticche.<br />

È immediato intuire che le specifiche 1-3 sono specifiche di alto livello, mentre<br />

le specifiche 4-7 sono specifiche di basso livello; inoltre la specifica 7 è indipendente<br />

dalle specifiche 4-6. Pertanto le specifiche 1-3 saranno realizzate mediante<br />

un diagramma SFC di alto livello (Main), le specifiche 4-6 saranno gestite da<br />

un diagramma di livello gerarchico inferiore (Lavorazione) e la specifica 7 sarà<br />

implementata da un secondo diagramma SFC di livello gerarchico inferiore NastroPillola.<br />

Per organizzare tali diagrammi si sfrutterà la struttura padre/figlio: il<br />

diagramma Main genererà i due programmi figlio Lavorazione e NastroPillola.<br />

La struttura <strong>del</strong> codice è indicata in Figura 7.<br />

Il diagramma padre Main è riportato in Figura 8. Tale diagramma, non dovendo<br />

eseguire nessuna operazione di inizializzazione o di messa in opera <strong>del</strong><br />

sistema, a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando start, avvia immediatamente i processi<br />

figlio Lavorazione e NastroPillola. In seguito il Main attende una <strong>del</strong>le due<br />

situazioni da gestire: attivazione <strong>del</strong> comando Allarme o, in maniera mutuamente<br />

esclusiva, diagnosi <strong>del</strong>la rottura <strong>del</strong>l’attuatore salda e lavorazione a prestazioni<br />

ridotte di 10 blister (condizione guasto*(npezzi=10)). Nel caso di messa in pausa<br />

<strong>del</strong> processo si utilizza il comando Gfreeze per congelare i diagrammi SFC Lavorazione<br />

e NastroPillola e, solo in seguito alla disattivazione <strong>del</strong> comando Allarme,<br />

si riavviano entrambi i processi figlio mediante il comando GRST; si noti come<br />

in questo caso il codice rimandi allo stato dummy 3 evitando in questo modo la<br />

generazione di un’ulteriore istanza dei processi Lavorazione e NastroPillola in<br />

Copyright © 2010 - The McGraw-Hill Companies srl


10 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Main:<br />

avvio <strong>del</strong> processo (start);<br />

gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo (Alalrme);<br />

gestione <strong>del</strong>l'emergenza in seguito al malfunzionamento di (salda);<br />

Lavorazione:<br />

controllo <strong>del</strong>le operazioni <strong>del</strong>le stazioni e <strong>del</strong> nastro di trasporto blister;<br />

diagnostica automatica dei guasti di (salda);<br />

gestione <strong>del</strong>la lavorazione a prestazioni ridotte in caso di guasto di (salda);<br />

NastroPillola:<br />

controllo <strong>del</strong> nastro di trasporto <strong>del</strong>le pasticche;<br />

Figura 7 Strutturazione <strong>del</strong> codice SFC relativo all’Esercizio E7.2.<br />

seguito al transito nello stato 2. La situazione di guasto <strong>del</strong>l’attuatore salda viene<br />

segnalata al Main mediante la variabile interna booleana guasto che, in accordo<br />

alla struttura mostrata in Figura 7, sarà gestita nel diagramma SFC Lavorazione.<br />

In seguito al verificarsi <strong>del</strong>la condizione guastoA*(npezzi=10), i diagrammi figlio<br />

Lavorazione e NastroPillola vengono terminati mediante il comando Gkill, gli attuatori<br />

che potrebbero essere rimasti settati vengono resettati e, successivamente<br />

all’avvenuta riparazione <strong>del</strong>l’attuatore guasto (segnalata dalla variabile GuastoRisolto),<br />

il processo riparte da capo mediante il rimando allo stato 1. Si noti come<br />

nello stato 2 vengono definite e inizializzate le variabili interne intere npezzi, nx,<br />

ny e n che vengono utilizzate nel figlio Lavorazione rispettivamente per contare i<br />

pezzi prodotti a prestazione ridotte in seguito a un guasto sull’attuatore salda, per<br />

gestire le coordinate lungo gli assi x e y al fine <strong>del</strong> posizionamento <strong>del</strong>le pasticche<br />

nel blister e per contare le pillole posizionate nel blister (un blister è completato<br />

dopo aver posizionato opportunamente quattro pasticche).<br />

In Figura 9 sono mostrati i diagrammi SFC Lavorazione e NastroPillola. Il<br />

processo figlio NastroPillola si occupa <strong>del</strong> controllo <strong>del</strong> nastro di trasporto <strong>del</strong>le<br />

pasticche. Molto semplicemente si movimenta il nastro fino a che una pasticca<br />

non è posizionata nella zona di presa <strong>del</strong>la stazione di posizionamento (condizione<br />

pillpres); a questo punto si arresta il nastro fino a che la pasticca è stata prelevata<br />

(condizione not(pillpres)).<br />

Il diagramma SFC Lavorazione si occupa <strong>del</strong> controllo <strong>del</strong> ciclo operativo<br />

<strong>del</strong>le tre stazioni di lavorazione e <strong>del</strong>la sincronizzazione di queste con il movimento<br />

<strong>del</strong> nastro di trasporto dei blister. Questo avviene grazie alle strutture di<br />

parallelismo e sincronizzazione: quando lo stato 10 è attivo il nastro di trasporto<br />

dei blister è fermo e i blister da lavorare sono nelle posizioni corrette; le tre stazioni<br />

di lavorazione possono pertanto iniziare in parallelo le sequenze operative.<br />

Quando tutte e tre le stazioni hanno terminato il proprio lavoro (gli stati 105, 218<br />

e 407 sono contemporaneamente attivi), la struttura di sincronizzazione riattiva<br />

il movimento <strong>del</strong> nastro (stato 20) portando un nuovo blister e movimentando i<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 11<br />

Main<br />

4<br />

5<br />

3<br />

Allarme<br />

Action(P):<br />

Gfreeze(Lavorazione);<br />

Gfreeze(NastroPillola);<br />

end_action;<br />

LuceAllarme;<br />

not(Allarme)<br />

true<br />

1<br />

2<br />

3<br />

Start<br />

Action(P)<br />

GRST(Lavorazione);<br />

GRST(NastroPillola);<br />

end_action;<br />

Action(P):<br />

npezzi:=0;<br />

n:=0;<br />

nx:=70;<br />

ny:=50;<br />

Gstart(Lavorazione);<br />

Gstart(NastroPillola);<br />

end_action;<br />

true<br />

6<br />

7<br />

1<br />

(npezzi=10)*guasto*not(allarme)<br />

Action(P):<br />

Gkill(Lavorazione);<br />

Gkill(NastroPillola);<br />

end_action;<br />

pinza(R);<br />

LuceAllarme;<br />

GuastoRisolto<br />

true<br />

guasto(R);<br />

Figura 8 Diagramma SFC relativo all’Esercizio E7.2: diagramma principale<br />

main.<br />

blister semilavorati tra le stazioni (condizione PosLav). Si noti come tutti i dettagli<br />

operativi siano a questo livello mascherati all’interno dei macrostati Carico,<br />

Posizionamento e Rifinitura e Scarico dedicati al controllo <strong>del</strong>le tre stazioni. Si<br />

noti in ultimo come la condizione di partenza <strong>del</strong> diagramma SFC Lavorazione<br />

sia data dalla condizione start; in questo modo, nel caso il comando start venga<br />

disattivato durante una lavorazione, le operazioni avviate possono essere portate<br />

a termine e, solo al momento di iniziare un nuovo ciclo di lavoro (stato 10), il<br />

processo si ferma in attesa di una nuova attivazione <strong>del</strong> comando start.<br />

Il macrostato Carico, mostrato in Figura 10, si occupa <strong>del</strong> controllo <strong>del</strong>la<br />

stazione di carico blister. Dato che non è sempre assicurata la presenza di un<br />

blister in tale stazione, si utilizza una struttura di scelta a due vie per evitare, nel<br />

caso di assenza <strong>del</strong> blister (condizione not(blisterCar)), di bloccare la struttura di<br />

sincronizzazione finale. In caso di assenza di blister si segnala immediatamente il<br />

termine <strong>del</strong>le operazioni mediante l’attivazione <strong>del</strong>lo stato 104. Nel caso in cui il<br />

Copyright © 2010 - The McGraw-Hill Companies srl


12 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Lavorazione<br />

10<br />

NastroPillola<br />

start<br />

Carico Posizionamento Rifinitura e Scarico<br />

true true true<br />

105 218 407<br />

20<br />

10<br />

true<br />

Nastro;<br />

PosLav<br />

Figura 9 Diagrammi figlio Lavorazione e NastroPillola.<br />

501<br />

502<br />

501<br />

nastropill;<br />

pillpres<br />

not(pillpres)<br />

blister sia presente lo si carica nel sistema mediante l’attuatore carica.<br />

In Figura 10 è riportato il diagramma SFC <strong>del</strong> macrostato Posizionamento che<br />

si occupa <strong>del</strong> controllo <strong>del</strong>la stazione di posizionamento <strong>del</strong>le pasticche nel blister.<br />

Anche in questo caso, visto che non è sempre assicurata la presenza di un<br />

blister in tale stazione, si utilizza una struttura di scelta a due vie per evitare, nel<br />

caso di assenza <strong>del</strong> blister (condizione not(blisterPos)), di bloccare la struttura di<br />

sincronizzazione finale. In caso di assenza di blister si segnala immediatamente<br />

il termine <strong>del</strong>le operazioni mediante l’attivazione <strong>del</strong>lo stato 217. Nel caso in cui<br />

il blister sia presente, si movimenta il manipolatore fino alla zona di presa (Finegiu,<br />

x≤0, y≤0) e si attende la presenza di una pasticca da afferrare (condizione<br />

PillPres). A questo punto si afferra la pasticca mediante l’attuatore pinza (si noti<br />

che il comando è di tipo set per continuare l’afferraggio anche durante la movimentazione<br />

<strong>del</strong>la pasticca) e la si trasporta nella posizione desiderata <strong>del</strong> blister<br />

(Finegiu, x≥nx, y≥ny). Si noti che la posizione <strong>del</strong>la pasticca è parametrizzata<br />

dalle variabili nx e ny che dipendono dal numero di pillola che si sta posizionando<br />

(memorizzato nella variabile n). Quindi, appena la pasticca è stata posizionata, si<br />

incrementa il contatore <strong>del</strong>le pillole mediante l’azione di tipo P n:=n+1 e si aggiornano<br />

opportunamente gli indici nx e ny in modo da stabilire dove si posizionerà<br />

la pillola successiva. Questo è possibile mediante la struttura di scelta a quattro<br />

vie dipendente da n: nel caso in cui n


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 13<br />

Carico<br />

101<br />

blisterCar not(blisterCar)<br />

102 carica;<br />

103<br />

FCCA<br />

FCCI<br />

104<br />

406<br />

401<br />

blisterScar not(blisterScar)<br />

guasto not(guasto)<br />

402<br />

salda;<br />

(GS402.t>t#10s)*<br />

not(saldaOK)<br />

405 guasto(S);<br />

not(guasto)<br />

400<br />

406 scarica;<br />

Action(P):<br />

npezzi:=npezzi+1;<br />

end_action;<br />

FCS<br />

Figura 10 Macrostati Carico e Rifinitura e Scarico.<br />

Rifinitura e Scarico<br />

404<br />

saldaOK<br />

403 scarica;<br />

segnala il completamento <strong>del</strong> blister mediante l’attivazione <strong>del</strong>lo stato 217.<br />

Infine in Figura 9 è riportato il diagramma SFC <strong>del</strong> macrostato Rifinitura e<br />

Scarico che gestisce le operazioni <strong>del</strong>la stazione di saldatura e scarico blister finiti.<br />

Similmente agli altri macrostati, visto che non è sempre assicurata la presenza di<br />

un blister in tale stazione, si utilizza una struttura di scelta a due vie per evitare, nel<br />

caso di assenza <strong>del</strong> blister (condizione not(blisterScar)), di bloccare la struttura di<br />

sincronizzazione finale. In caso di assenza di blister si segnala immediatamente il<br />

termine <strong>del</strong>le operazioni mediante l’attivazione <strong>del</strong>lo stato 404. Nel caso in cui il<br />

blister sia presente, si provvede a saldarlo (attuatore salda) e a scaricarlo (attuatore<br />

scarica). Dato che durante tali operazioni si utilizza l’attuatore salda (soggetto<br />

a guasto), nel caso in cui la saldatura non risulti eseguita entro 10 secondi, si<br />

segnala il guasto mediante l’attivazione <strong>del</strong>la variabili interna booleana guasto.<br />

Da questo istante occorrerà scaricare i blister senza averli saldati ed aggiornare<br />

ad ogni blister scaricato il contatore npezzi in modo da permettere al diagramma<br />

main di interrompere la lavorazione dopo aver lavorato dieci blister non saldati.<br />

FCS<br />

Copyright © 2010 - The McGraw-Hill Companies srl


14 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

202<br />

202<br />

A;<br />

Finesu<br />

203 dietroX;<br />

xt#3ms<br />

208 A;<br />

Finesu<br />

209 avantiX;<br />

210<br />

n=1<br />

x>=nx<br />

y>=ny<br />

212 Action(P):<br />

n:=n+1;<br />

End_action;<br />

Pinza(R);<br />

213 Action(P):<br />

nx:=80;<br />

ny:=50;<br />

End_action;<br />

true<br />

202<br />

n=2<br />

214 Action(P):<br />

nx:=80;<br />

ny:=30;<br />

End_action;<br />

true<br />

201<br />

blisterPos not(blisterPos)<br />

204 dietroY;<br />

y


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 15<br />

Si noti che in ogni ciclo operativo, nel caso in cui si sia già diagnosticato il guasto,<br />

la struttura di scelta a due vie a valle <strong>del</strong>lo stato 401, permette di velocizzare le<br />

operazioni senza attendere ogni volta i 10 secondi necessari per la diagnosi <strong>del</strong><br />

guasto (rimando allo stato 406).<br />

Copyright © 2010 - The McGraw-Hill Companies srl


16 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

<strong>Soluzione</strong> <strong>del</strong>l’Esercizio E7.3<br />

La maggior difficoltà <strong>del</strong>l’<strong>esercizi</strong>o consiste nel dover gestire allo stesso tempo<br />

molti componenti: i due nastri di arrivo materiali, i due robot, il nastro centrale e<br />

la macchina per la stampa con buffer per i pezzi in ingresso. Leggendo attentamente<br />

il testo, si evince tuttavia che il comportamento di tali entità sono indipendenti<br />

l’uno con l’altro e il loro coordinamento avviene semplicemente utilizzando<br />

i sensori che monitorano le posizioni di interferenza tra questi. Strutturando opportunamente<br />

il codice SFC è possibile risolvere il problema mediante una serie di<br />

diagrammi molto semplici. L’unica struttura degna di nota è il semaforo di mutua<br />

esclusione necessario per controllare i due manipolatori evitando collisioni.<br />

Le specifiche funzionali di massima che devono essere eseguite dal codice<br />

SFC sono pertanto le seguenti:<br />

1. avvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando Start;<br />

2. inizializzazione <strong>del</strong> sistema;<br />

3. arresto <strong>del</strong> processo a seguito di comando <strong>del</strong>l’operatore (segnale off attivo per<br />

più di due secondi);<br />

4. gestione <strong>del</strong>l’emergenza in seguito al malfunzionamento di entrambi i nastri di<br />

arrivo materiali;<br />

5. controllo dei nastri di ingresso;<br />

6. diagnostica automatica dei guasti <strong>degli</strong> attuatori nastro1 e nastro2;<br />

7. controllo manipolatori in concorrenza evitando le collisioni;<br />

8. controllo <strong>del</strong> nastro centrale;<br />

9. controllo <strong>del</strong> ribaltatore a ventosa;<br />

10. controllo <strong>del</strong>la macchina di stampa con nastro di ingresso;<br />

11. filtraggio <strong>del</strong> segnale off per registrare solo permanenze al livello logico alto<br />

che durano più di due secondi.<br />

Le specifiche 1-4 sono gestite dal diagramma di alto livello main. Le specifiche<br />

5-6 saranno gestite dai due diagrammi figlio ctrl-nastro1 e ctrl-nastro2. La necessità<br />

di coordinamento tra i due manipolatori e il nastro centrale suggerisce di<br />

considerare le specifiche 7-8 in un unico processo figlio Robot. Le specifiche 9-<br />

10 saranno gestite rispettivamente da due processi figli denominati ctrl-Ventosa e<br />

Buffer. Infine si è deciso di considerare la specifica 11 in un ulteriore processo<br />

figlio off filter dedito a monitorare e filtrare il segnale off. La struttura <strong>del</strong> codice<br />

è indicata in Figura 12<br />

Il diagramma padre main è riportato in Figura 13. Tale diagramma attende<br />

l’attivazione da parte <strong>del</strong>l’operatore <strong>del</strong> comando Start e, in seguito a questo<br />

evento, gestisce le operazioni di inizializzazione <strong>del</strong> sistema, ovvero la movimentazione<br />

dei manipolatori verso i nastri di ingresso e <strong>del</strong> ribaltatore verso l’ingresso<br />

<strong>del</strong>la macchina di espulsione. Terminata la fase di inizializzazione, vengono<br />

avviati tutti i processi figlio e si attende una <strong>del</strong>le due situazioni da gestire: attivazione<br />

<strong>del</strong> comando off per almeno due secondi o, in maniera mutuamente<br />

esclusiva, diagnosi <strong>del</strong>la rottura di entrambi gli attuatori nastro1 e nastro2 (condizione<br />

guasto1*guasto2). La situazione di guasto di entrambi i nastri di ingresso<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 17<br />

Main:<br />

avvio <strong>del</strong> processo (Start);<br />

inizializzazione <strong>del</strong> processo;<br />

arresto <strong>del</strong> processo (stop);<br />

gestione <strong>del</strong>l'emergenza in seguito al malfunzionamento di entrambi i nastri;<br />

ctrl-astro1:<br />

gestione <strong>del</strong> controllo <strong>del</strong> nastro 1;<br />

diagnostica automatica dei guasti <strong>del</strong> nastro 1;<br />

ctrl-nastro2:<br />

gestione <strong>del</strong> controllo <strong>del</strong> nastro 2;<br />

diagnostica automatica dei guasti <strong>del</strong> nastro 2;<br />

ctrl-Ventosa:<br />

controllo <strong>del</strong> ribaltatore a ventosa;<br />

Buffer:<br />

controllo <strong>del</strong>la macchina di stampa con buffer di ingresso;<br />

Robot:<br />

controllo dei due robot con sequenze mutuamente esclusive;<br />

controllo <strong>del</strong> nastro centrale;<br />

off_filter:<br />

filtraggio <strong>del</strong> segnale (off) e generazione <strong>del</strong> segnale (stop);<br />

Figura 12 Strutturazione <strong>del</strong> codice SFC relativo all’Esercizio E7.3.<br />

viene segnalata al main mediante le variabili interne booleane guasto1 e guasto2<br />

che, in accordo alla struttura mostrata in Figura 12, vengono gestite nei diagrammi<br />

SFC ctrl-nastro1 e ctrl-nastro2. In seguito al verificarsi <strong>del</strong>la condizione<br />

guasto1*guasto2, tutti i diagrammi figli vengono terminati mediante il comando<br />

Gkill, gli attuatori che potrebbero essere rimasti settati vengono resettati e,<br />

successivamente all’avvenuta riparazione (segnalata dalle variabili oktecnico1 e<br />

oktecnico2), il processo riparte da capo mediante il rimando allo stato 1. Dato<br />

che si è deciso di realizzare il filtraggio <strong>del</strong>la variabile off in un processo figlio, la<br />

situazione di richiesta di arresto <strong>del</strong>la macchina verrà segnalata al main tramite la<br />

variabile interna booleana stop. Anche nel caso di spegnimento <strong>del</strong> sistema (condizione<br />

stop) tutti i diagrammi figli vengono terminati e il codice SFC rimandato<br />

allo stato 1. Si noti come nello stato 8 vengono inizializzate a zero le variabili<br />

interne intere n e nbuff utilizzate nei processi figlio rispettivamente per contare<br />

il numero dei semilavorati trasportati dai manipolatori (ogni due semilavorati si<br />

ottiene un prodotto finito) e per gestire il conteggio dei pezzi contenuti nel buffer<br />

Copyright © 2010 - The McGraw-Hill Companies srl


18 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

true<br />

main<br />

2<br />

3<br />

FCD1<br />

Dietro1;<br />

stop<br />

true<br />

8<br />

9<br />

1<br />

4<br />

5<br />

Start<br />

FCD2<br />

Dietro2;<br />

true<br />

Action(P):<br />

n:=0;<br />

nbuff:=0;<br />

Gstart(ctrl-nastro1);<br />

Gstart(ctrl-nastro2);<br />

Gstart(Robot);<br />

Gstart(ctrl-Ventosa);<br />

Gstart(Buffer);<br />

Gstart(off_filter);<br />

end_action;<br />

10 ventosa(R); afferra1(R);<br />

afferra2(R);<br />

guasto1(R); guasto2(R);<br />

Action(P):<br />

Gkill(ctrl-nastro1);<br />

Gkill(ctrl-nastro2);<br />

1<br />

Gkill(Robot); Gkill(ctrl-Ventosa);<br />

Gkill(Buffer); Gkill(off_filter);<br />

end_action;<br />

6<br />

7<br />

FWD;<br />

FCFWD<br />

11<br />

1<br />

501<br />

501<br />

not(off)<br />

pres1<br />

guasto1*guasto2*not(stop)<br />

ventosa(R); afferra1(R);<br />

afferra2(R);<br />

guasto1(R); guasto2(R);<br />

Action(P):<br />

Gkill(ctrl-nastro1);<br />

Gkill(ctrl-nastro2);<br />

Gkill(Robot); Gkill(ctrl-Ventosa);<br />

Gkill(Buffer); Gkill(off_filter);<br />

end_action;<br />

luceallarme1;<br />

luceallarme2;<br />

oktecnico1*oktecnico2<br />

off_filter<br />

(GS502.t>=t#2s)*<br />

off<br />

503 stop;<br />

Figura 13 Diagramma SFC relativo all’Esercizio E7.3: diagramma principale<br />

main.<br />

di ingresso <strong>del</strong>la macchina di espulsione.<br />

Sempre in Figura 13 è riportato il diagramma SFC <strong>del</strong> processo off filter dedicato<br />

a registrare le richieste di spegnimento <strong>del</strong>la macchina da parte <strong>del</strong>l’operatore.<br />

Tale diagramma esce dallo stato iniziale appena rileva il comando off ; dallo<br />

stato 502 il codice può evolvere se il comando off si disattiva prima di due secondi<br />

(in questo caso la richiesta è abortita e il diagramma torna nello stato iniziale 501)<br />

o se dopo due secondi il comando off è ancora attivo. In questo secondo caso<br />

si transita nello stato 503, si memorizza la richiesta di spegnimento attivando la<br />

variabile interna booleana stop e si attende indefinitamente che il main prenda il<br />

502<br />

501<br />

false<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 19<br />

302<br />

301<br />

pres1<br />

ctrl-nastro1<br />

301<br />

not(pres1)<br />

nastro1;<br />

(GS301.t>=t#60s)*<br />

not(pres1)<br />

303 guasto1(S);<br />

luceallarme1;<br />

oktecnico1<br />

304 guasto1(R);<br />

301<br />

true<br />

402<br />

401<br />

pres2<br />

ctrl-nastro2<br />

401<br />

not(pres2)<br />

Figura 14 Diagrammi figlio ctrl-nastro1 e ctrl-nastro2.<br />

nastro2;<br />

(GS401.t>=t#60s)*<br />

not(pres2)<br />

403 guasto2(S);<br />

luceallarme2;<br />

oktecnico2<br />

404 guasto2(R);<br />

controllo (condizione false).<br />

In Figura 14 sono mostrati i diagrammi SFC ctrl-nastro1 e ctrl-nastro2 che si<br />

occupano <strong>del</strong> controllo dei nastri di trasporto dei semilavorati. Molto semplicemente<br />

si movimenta il nastro fino a che un semilavorato non è posizionato nella<br />

zona di presa <strong>del</strong> corrispondente manipolatore (condizioni pres1 e pres2); a questo<br />

punto si arresta il nastro fino a che il materiale è stata prelevato (condizioni<br />

not(pres1) e not(pres1)). Dato che gli attuatori nastro1 e nastro2 sono soggetti a<br />

guasti, nel caso in cui, movimentando un nastro, non arrivi un semilavorato entro<br />

un minuto, si segnala il malfunzionamento mediante le variabili interne booleane<br />

guasto1 e guasto2 rispettivamente per gli attuatori nastro1 e nastro2. Una volta<br />

rilevato il guasto, il processo figlio si posiziona nello stato 303 o 403 e attende la<br />

riparazione (condizioni oktecnico1 e oktecnico2) per ripartire con il funzionamento<br />

nominale. Nel caso in cui entrambi i nastri siano rotti (entrambe le condizioni<br />

guasto1 e guasto2 sono verificate) il main prende il controllo come descritto in<br />

precedenza.<br />

Il diagramma SFC Robot, mostrato in Figura 15, si occupa <strong>del</strong> controllo dei<br />

due manipolatori e <strong>del</strong> nastro centrale. La presenza di una zona di lavoro condivisa<br />

dai robot (la zona di deposito dei semilavorati sul nastro centrale) e, dunque, la<br />

possibilità di collisione, suggerisce l’utilizzo <strong>del</strong>la struttura semaforica di mutua<br />

esclusione con stato semaforo S (si rammenti che lo stato semaforo deve essere<br />

stato iniziale). Il manipolatore 1 attende un semilavorato nella zona sicura rappresentata<br />

dal finecorsa indietro FCD1; in presenza di un semilavorato sul nastro<br />

di ingresso 1 (condizione pres1) impegna immediatamente il semaforo disattivando<br />

lo stato S (impedendo in questo modo l’accesso al manipolatore 2), afferra il<br />

semilavorato e lo trasporta aggiornando il contatore dei pezzi presenti sul nastro<br />

centrale (azione P n:=n+1). A questo punto può tornare in posizione di sicurezza<br />

(condizione FCD1 e attendere un nuovo prodotto); si noti tuttavia che il<br />

semaforo non viene liberato immediatamente, ma solo all’uscita <strong>del</strong> macrostato<br />

401<br />

true<br />

Copyright © 2010 - The McGraw-Hill Companies srl


20 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

101<br />

102<br />

103<br />

104<br />

true<br />

afferra1(S);<br />

GS103.t>=t#3ms<br />

FCA1<br />

105 afferra1(R);<br />

106<br />

101<br />

pres1<br />

Avanti1;<br />

GS105.t>=t#3ms<br />

Action(P):<br />

n:=n+1;<br />

end_action;<br />

Dietro1;<br />

FCD1<br />

Robot<br />

S<br />

salda<br />

true<br />

203<br />

204<br />

201<br />

202<br />

pres1<br />

not(GS102.x)<br />

afferra2(S);<br />

GS203.t>=t#3ms<br />

FCA2<br />

205 afferra2(R);<br />

206<br />

Avanti2;<br />

GS205.t>=t#3ms<br />

Action(P):<br />

n:=n+1;<br />

end_action;<br />

Dietro2;<br />

FCD2<br />

Figura 15 Diagramma figlio Robot e macrostato salda.<br />

201<br />

salda<br />

107<br />

(n=2)*<br />

not(PresCentro)<br />

108 salda;<br />

109<br />

GS108.t>=t#1s<br />

NastroCentro;<br />

Action(P):<br />

n:=0;<br />

end_action;<br />

PresCentro<br />

salda che si occupa <strong>del</strong> controllo <strong>del</strong> nastro centrale (se sul nastro centrale c’è un<br />

solo semilavorato occorre trasportarne un altro, se ce ne sono due occorre movimentare<br />

il nastro centrale per permettere l’espulsione <strong>del</strong> prodotto terminato). Il<br />

manipolatore 2 viene controllato allo stesso modo; la priorità in caso di ingresso<br />

contemporaneo dei manipolatori è data al manipolatore 1 (si notino la condizione<br />

true tra gli stati 102 e S e lo stato 103 e la condizione not(GS102.x) tra gli stati 202<br />

e S e lo stato 203). Sempre in Figura 15 è mostrato il macrostato salda. Appena<br />

un manipolatore ha trasportato un semilavorato sul nastro centrale occorre testare<br />

il valore di n: se sul nastro centrale c’è un solo semilavorato (condizione n=1) si<br />

sblocca subito il semaforo per permettere ai manipolatori di portare il secondo;<br />

se sul nastro centrale ci sono due semilavorati (condizione n=2) e nella posizione<br />

di prelievo <strong>del</strong> ribaltatore non è già presente un ulteriore prodotto (condizione<br />

not(PresCentro)), si salda il prodotto, lo si movimenta verso la posizione di prelievo<br />

(attuatore NastroCentro) e si azzera la variabile interna n per poter contare<br />

altri due semilavorati. A questo punto è possibile sbloccare il semaforo S.<br />

Il controllo <strong>del</strong> ribaltatore a ventosa è gestito dal processo figlio ctrl-Ventosa<br />

riportato in Figura 16. Se nella zona di prelievo è presente un prodotto (condizione<br />

PresCentro) si movimenta il ribaltatore per andare a prenderlo (attuatore BACK<br />

fino all’attivazione di FCBACK). A questo punto, se nel buffer di ingresso c’è<br />

109<br />

S<br />

n=1<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 21<br />

ctrl-Ventosa 600 Buffer 700<br />

true<br />

PresCentro<br />

601 BACK;<br />

602<br />

FCBACK<br />

nbuff=t#3ms<br />

603 FWD;<br />

FCFWD<br />

604 Ventosa(R);<br />

Action(P):<br />

nbuff:=nbuff+1;<br />

end_action;<br />

600<br />

Figura 16 Diagrammi figlio Ventosa e Buffer.<br />

true<br />

nbuff>=1<br />

701 Stampa;<br />

GS701.T>=t#120s<br />

702 Espelli;<br />

GS702.T>=t#1s<br />

704 Action(P):<br />

nbuff:=nbuff-1;<br />

end_action;<br />

posto (condizione nbuff


22 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

<strong>Soluzione</strong> <strong>del</strong>l’Esercizio E7.4<br />

L’<strong>esercizi</strong>o richiede di controllare un lettore cd multiplo con sei dischi; la principale<br />

difficoltà <strong>del</strong>l’<strong>esercizi</strong>o risiede nel fatto che, una volta che l’utente richiede<br />

quale cd suonare (mediante la variabile nuovo), non è possibile associare la posizione<br />

<strong>del</strong> carrello <strong>del</strong>la lente (e quindi il disco che si sta suonando) ad un sensore<br />

dedicato. Il sistema è invece equipaggiato con un unico sensore di posizione sens<br />

che si attiva ogni volta che il carrello <strong>del</strong>la lente passa in corrispondenza di un disco,<br />

generando in questo modo un’onda quadra; nel codice SFC occorrerà contare<br />

dunque il numero di attivazioni e disattivazioni <strong>del</strong> segnale sens per memorizzare<br />

in una variabile interna intera corr la posizione attuale <strong>del</strong> carrello. Confrontando<br />

il valore di corr con il valore desiderato nuovo è possibile controllare il movimento<br />

<strong>del</strong> carrello.<br />

Le specifiche funzionali di massima che devono essere eseguite dal codice<br />

SFC sono pertanto le seguenti:<br />

1. avvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando on;<br />

2. gestione <strong>del</strong>lo spegnimento immediato a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando<br />

off ;<br />

3. gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione<br />

<strong>del</strong> comando pausa;<br />

4. gestione <strong>del</strong>l’emergenza in seguito al malfunzionamento <strong>del</strong> motore <strong>del</strong> carrello;<br />

5. inizializzazione e messa in opera <strong>del</strong> sistema;<br />

6. gestione <strong>del</strong> controllo <strong>del</strong> carrello <strong>del</strong>la lente;<br />

7. diagnostica automatica dei guasti <strong>del</strong> motore <strong>del</strong> carrello.<br />

Le specifiche 1-4 sono specifiche di alto livello, mentre le specifiche 5-7 sono specifiche<br />

di basso livello; pertanto le prime saranno realizzate mediante un diagramma<br />

SFC di alto livello (main), mentre le restanti saranno gestite da un diagramma<br />

di livello gerarchico inferiore (controllo) secondo la struttura padre/figlio. La<br />

struttura <strong>del</strong> codice è indicata in Figura 17.<br />

Main:<br />

avvio <strong>del</strong> processo (on);<br />

arresto <strong>del</strong> processo (off);<br />

gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo (pausa);<br />

gestione <strong>del</strong>l'emergenza in seguito al malfunzionamento <strong>del</strong> motore <strong>del</strong> carrello;<br />

Controllo:<br />

inizializzazione e messa in opera <strong>del</strong> sistema;<br />

gestione <strong>del</strong> controllo <strong>del</strong> carrello <strong>del</strong>la lente;<br />

diagnostica automatica dei guasti <strong>del</strong> motore <strong>del</strong> carrello;<br />

Figura 17 Strutturazione <strong>del</strong> codice SFC relativo all’Esercizio E7.4.<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 23<br />

main<br />

4 lente(R);<br />

spin(R);<br />

Action(P):<br />

Gkill(controllo);<br />

End_action;<br />

1<br />

off<br />

true<br />

1<br />

2<br />

3<br />

on<br />

Action(P):<br />

Gstart(controllo);<br />

nuovo:=0;<br />

corr:=0;<br />

end_action;<br />

true<br />

5 lente(R);<br />

spin(R);<br />

Action(P):<br />

Gkill(controllo);<br />

End_action;<br />

LuceAllarme;<br />

oktecnico<br />

1<br />

guasto*not(off )<br />

6<br />

7<br />

3<br />

pausa*not(guasto)*not(off)<br />

lente(R);<br />

Action(P):<br />

Gfreeze(controllo);<br />

end_action;<br />

not(pausa)<br />

true<br />

lente(S);<br />

Action(P):<br />

GRST(controllo);<br />

end_action;<br />

Figura 18 Diagramma SFC relativo all’Esercizio E7.4: diagramma principale<br />

main.<br />

Il diagramma padre main è riportato in Figura 18. Tale diagramma attende l’attivazione<br />

da parte <strong>del</strong>l’operatore <strong>del</strong> comando on e, in seguito a questo evento,<br />

avvia il processo figlio controllo; successivamente il main attende, in maniera<br />

mutuamente esclusiva, una <strong>del</strong>le tre situazioni da gestire: attivazione <strong>del</strong> comando<br />

off, attivazione <strong>del</strong> comando pausa, diagnosi <strong>del</strong>la rottura <strong>del</strong> motore <strong>del</strong> carrello<br />

(condizione guasto). Nel caso di messa in pausa <strong>del</strong> processo si utilizza il comando<br />

Gfreeze per congelare il diagramma SFC Controllo e si resetta l’attuatore lente<br />

(al fine di evitare che il cd continui a suonare il disco). Solo in seguito alla disattivazione<br />

<strong>del</strong> comando pausa, si riavvia il processo figlio mediante il comando<br />

GRST; si noti come in questo caso il codice rimandi allo stato dummy 3 evitando<br />

in questo modo la generazione di un’ulteriore istanza <strong>del</strong> figlio controllo in seguito<br />

al transito nello stato 2. La situazione di guasto <strong>del</strong> motore <strong>del</strong> carrello viene<br />

segnalata al Main mediante la variabile interna booleana guasto che, in accordo<br />

alla struttura mostrata in Figura 17, viene gestita nel diagramma SFC controllo. In<br />

seguito al verificarsi <strong>del</strong>la condizione guasto, il diagramma figlio controllo viene<br />

terminato mediante il comando Gkill, gli attuatori che potrebbero essere rimasti<br />

settati vengono resettati e, successivamente all’avvenuta riparazione (segnalata<br />

dalla variabile oktecnico), il processo riparte da capo mediante il rimando allo<br />

stato 1. Anche nel caso di spegnimento <strong>del</strong> sistema mediante il comando off il<br />

Copyright © 2010 - The McGraw-Hill Companies srl


24 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

112<br />

controllo<br />

nuovot#5s<br />

115 S;<br />

114 guasto;<br />

sens<br />

117 Action(P):<br />

corr:=corr-1;<br />

end_action;<br />

nuovocorr<br />

101<br />

false<br />

101<br />

true<br />

iniz<br />

112<br />

not(sens)*<br />

GS115.t>t#5s<br />

116 guasto;<br />

101<br />

false<br />

nuovo=corr<br />

118 spin(S);<br />

119<br />

112<br />

GS118.t>t#10ms<br />

true<br />

lente(S);<br />

Figura 19 Diagramma figlio controllo.<br />

true<br />

112<br />

nuovo>corr<br />

120 spin(R);<br />

lente(R);<br />

D;<br />

sens*<br />

not(sens)<br />

GS120.t>t#5s<br />

122 D;<br />

121 guasto;<br />

sens<br />

124 Action(P):<br />

corr:=corr+1;<br />

end_action;<br />

nuovocorr<br />

101<br />

false<br />

not(sens)*<br />

GS122.t>t#5s<br />

123 guasto;<br />

101<br />

false<br />

nuovo=corr<br />

125 spin(S);<br />

126<br />

112<br />

GS125.t>t#10ms<br />

true<br />

lente(S);<br />

diagramma figlio controllo viene terminato e il codice SFC rimandato allo stato 1.<br />

Si noti come nello stato 2 vengono inizializzate a zero le variabili intere nuovo e<br />

corr utilizzate nel figlio controllo per la movimentazione <strong>del</strong> carrello <strong>del</strong>la lente.<br />

In Figura 19 è riportato il codice SFC per il processo figlio controllo; questo,<br />

in accordo allo schema di Figura 17, si occupa <strong>del</strong>la fase di messa in opera <strong>del</strong><br />

sistema (macrostato iniz) e <strong>del</strong> controllo <strong>del</strong> moto <strong>del</strong> carrello. Dopo la fase di<br />

inizalizzazione e messa in opera il codice attende che l’utente faccia una richiesta<br />

diversa da quella che si sta attualmente servendo (nuovo̸=corr); questa situazione<br />

è divisa nelle due condizioni esclusive nuovocorr necessarie per<br />

decidere la direzione <strong>del</strong> moto <strong>del</strong> carrello (verso sinistra nel primo caso e verso<br />

destra nel secondo caso). Appena si verifica una di queste due condizioni si ferma<br />

la lettura <strong>del</strong> cd attuale (resettando gli attuatori lente e spin) e si movimenta<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 25<br />

iniz<br />

FCD<br />

105 S;<br />

not(FCS)*sens not(FCS)*not(sens)* FCS<br />

106 S;<br />

GS105.t>t#5s<br />

108<br />

Action(P):<br />

nums:=nums+1;<br />

end_action;<br />

sens*<br />

not(sens)<br />

GS106.t>t#5s<br />

107 guasto;<br />

false<br />

101<br />

nums=6<br />

110<br />

105<br />

111 guasto;<br />

101<br />

false<br />

Figura 20 Macrostato iniz.<br />

102<br />

Action(P):<br />

nums:=0;<br />

end_action;<br />

true<br />

103 D;<br />

not(FCD)*GS103.t>t#30s<br />

104 guasto;<br />

101<br />

false<br />

nums6<br />

109 guasto;<br />

opportunamente il carrello nella direzione opportuna. Ogni volta che durante il<br />

moto <strong>del</strong> carrello si rileva una nuova attivazione <strong>del</strong> segnale sens si aggiorna il<br />

valore di corr (azione P corr:=corr-1 nel caso di moto verso sinistra, azione P<br />

corr:=corr+1 nel caso di moto verso destra). Si noti che si rileva il fronte di salita<br />

<strong>del</strong> segnale sens solo in caso di una sua disattivazione (condizione not(sens))<br />

seguita da una successiva riattivazione; questo è necessario per evitare che l’esecuzione<br />

ciclica real time time-driven <strong>del</strong> codice causi la rilevazione successiva<br />

<strong>del</strong>la stessa posizione (a causa <strong>del</strong>le dimensioni fisiche <strong>del</strong> sensore magnetico)<br />

falsando il conteggio. Il moto <strong>del</strong> carrello si arresta quando si raggiunge la posizione<br />

desiderata (condizione nuovo=corr); in questo caso si inizia a suonare il<br />

cd (settando gli attuatori lente e spin) e si rimanda il codice SFC allo stato 112 in<br />

attesa di una nuova richiesta <strong>del</strong>l’utente. Dato che il carrello <strong>del</strong> motore è soggetto<br />

a guasto, ogni volta che il carrello è in movimento, si sfrutta l’informazione che<br />

due posizioni devono sempre essere raggiunte entro 5 secondi per diagnosticare<br />

un eventuale guasto: se il motore <strong>del</strong> carrello è attivo e il segnale sens rimane allo<br />

stesso valore per più di 5 secondi, si attiva la variabile interna booleana guasto per<br />

segnalare al main la rilevazione di un malfunzionamento.<br />

In Figura 19 è mostrato il codice SFC relativo al macrostato iniz dedicato alla<br />

101<br />

false<br />

Copyright © 2010 - The McGraw-Hill Companies srl


26 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

messa in opera <strong>del</strong> sistema. Dato che non è nota la posizione iniziale <strong>del</strong> carrello,<br />

è inizialmente necessario portare questo in uno dei due punti di ancoraggio (finecorsa<br />

sinistro FCS o destro FCD); in questo caso si è scelto di portare il carrello<br />

al finecorsa destro. Nel caso in cui non si raggiunga tale posizione in 30 secondi<br />

si segnala un guasto al motore <strong>del</strong> carrello. Una volta raggiunto il finecorsa destro<br />

si porta il carrello al finecorsa sinistro e si utilizza la variabile interna intera nums<br />

per contare il numero di attivazioni successive di sens che si incontrano. Durante<br />

tale movimentazione se il motore <strong>del</strong> carrello è attivo e il segnale sens rimane allo<br />

stesso valore per più di 5 secondi, si attiva la variabile interna booleana guasto per<br />

segnalare al main la rilevazione di un malfunzionamento. Una volta raggiunto il<br />

finecorsa destro, se si sono contate meno di sei attivazioni di sens si segnala un<br />

guasto al sensore di posizione; se invece nums è pari a sei, l’inizializzazione è<br />

andata a buon fine e si può continuare con il funzionamento nominale.<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 27<br />

Main:<br />

avvio <strong>del</strong> processo (Start);<br />

inizializzazione e messa in opera <strong>del</strong> sistema;<br />

gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo (Pause);<br />

gestione <strong>del</strong>l'emergenza in seguito al malfunzionamento di (riempiA) e (riempiB);<br />

Controllo:<br />

produzione ed imbottigliamento <strong>del</strong> composto (Ricetta);<br />

diagnostica automatica dei guasti di (riempiA) o (riempiB);<br />

gestione <strong>del</strong>la lavorazione in di caso di guasto di (riempiA) o (riempiB);<br />

Figura 21 Strutturazione <strong>del</strong> codice SFC relativo all’Esercizio E7.5.<br />

<strong>Soluzione</strong> <strong>del</strong>l’Esercizio E7.5<br />

Il sistema deve produrre ed imbottigliare un composto chimico seguendo una <strong>del</strong>le<br />

quattro ricette possibili secondo le indicazioni <strong>del</strong>l’operatore. Leggendo il testo<br />

si evince che, indipendentemente dalla ricetta da seguire, le operazioni da eseguire,<br />

e quindi la struttura <strong>del</strong> codice, è la medesima; quello che cambia a seconda<br />

<strong>del</strong>la ricetta sono solo gli attuatori usati per le varie operazioni. Pertanto la struttura<br />

<strong>del</strong> processo SFC che si occupa <strong>del</strong>la produzione e <strong>del</strong>l’imbottigliamento <strong>del</strong><br />

composto sarà caratterizzato da una struttura a macrostati fissa in cui le operazioni<br />

in ogni macrostato dipendono dalla ricetta richiesta dall’operatore (e quindi dal<br />

comando Ricetta).<br />

Le specifiche funzionali di massima che devono essere eseguite dal codice<br />

SFC sono pertanto le seguenti:<br />

1. avvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione <strong>del</strong> comando Start;<br />

2. inizializzazione e messa in opera <strong>del</strong> sistema;<br />

3. gestione <strong>del</strong>la messa in pausa e <strong>del</strong> riavvio <strong>del</strong> processo a seguito <strong>del</strong>l’attivazione<br />

<strong>del</strong> comando Pause;<br />

4. gestione <strong>del</strong>l’emergenza in seguito al malfunzionamento di entrambi gli attuatori<br />

riempiA e riempiB;<br />

5. produzione ed imbottigliamento <strong>del</strong> composto secondo la ricetta desiderata;<br />

6. diagnostica automatica dei guasti <strong>degli</strong> attuatori riempiA e riempiB;<br />

7. gestione <strong>del</strong>la lavorazione a prestazioni ridotte a seguito <strong>del</strong>la rottura di uno<br />

<strong>degli</strong> attuatori riempiA o riempiB.<br />

È immediato intuire che le specifiche 1-4 sono specifiche di alto livello, mentre le<br />

specifiche 5-7 sono specifiche di basso livello; pertanto le prime saranno realizzate<br />

mediante un diagramma SFC di alto livello (Main), mentre le restanti saranno<br />

gestite da un diagramma di livello gerarchico inferiore (Controllo) secondo la<br />

struttura padre/figlio. La struttura <strong>del</strong> codice è indicata in Figura 21.<br />

Il diagramma padre Main è riportato in Figura 22. Tale diagramma attende<br />

l’attivazione da parte <strong>del</strong>l’operatore <strong>del</strong> comando Start e, in seguito a questo<br />

Copyright © 2010 - The McGraw-Hill Companies srl


28 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

main<br />

2<br />

3<br />

livA<br />

true<br />

6<br />

1<br />

riempiA;<br />

palaA;<br />

7<br />

Start<br />

8 Action(P):<br />

Gkill(Controllo);<br />

end_action;<br />

NiDX(R); NiSX(R);<br />

palaX(R); riempiX(R);<br />

ApriX(R); VX(R);<br />

pulisciX(R);<br />

Nastro(R);<br />

4<br />

5<br />

livB<br />

riempiB;<br />

palaB;<br />

true<br />

Action(P):<br />

Gstart(Controllo);<br />

end_action;<br />

guastoA*guastoB Pause*not(guastoA*guastoB)<br />

OK<br />

9 guastoA(R); guastoB(R);<br />

luceA(R); luceB(R);<br />

true<br />

1<br />

true<br />

10 Action(P):<br />

Gfreeze(Controllo);<br />

End_action;<br />

not(Pause)<br />

11 Action(P):<br />

GRST(Controllo);<br />

End_action;<br />

Figura 22 Diagramma SFC relativo all’Esercizio E7.5: diagramma principale<br />

main.<br />

evento, gestisce le operazioni di inizializzazione <strong>del</strong> sistema, ovvero il riempimento<br />

in parallelo <strong>del</strong>le cisterne A e B mantenendo le pale in movimento. Terminata<br />

la fase di inizializzazione, viene avviato il processo figlio Controllo e si attende<br />

una <strong>del</strong>le due situazioni da gestire: attivazione <strong>del</strong> comando Pause o, in maniera<br />

mutuamente esclusiva, diagnosi <strong>del</strong>la rottura di entrambi gli attuatori riempiA e<br />

riempiB (condizione guastoA*guastoB). Nel caso di messa in pausa <strong>del</strong> processo<br />

si utilizza il comando Gfreeze per congelare il diagramma SFC Controllo e, solo<br />

in seguito alla disattivazione <strong>del</strong> comando Pause, si riavvia il processo figlio mediante<br />

il comando GRST; si noti come in questo caso il codice rimandi allo stato<br />

dummy 7 evitando in questo modo la generazione di un’ulteriore istanza <strong>del</strong> figlio<br />

Controllo in seguito al transito nello stato 6. La situazione di guasto <strong>degli</strong> attuatori<br />

riempiA e riempiB viene segnalata al Main mediante le variabili interne booleane<br />

guastoA e guastoB che, in accordo alla struttura mostrata in Figura 21, saranno<br />

7<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 29<br />

Controllo<br />

VersaA<br />

PuliscieriempiA<br />

true<br />

S1<br />

Figura 23 Diagramma figlio Controllo.<br />

101<br />

Start*(Ricetta0)<br />

102 Action(P):<br />

Aux:=Ricetta;<br />

Ricetta:=0;<br />

end_action;<br />

true<br />

Moto<br />

true<br />

true<br />

Imbottiglia<br />

101<br />

S2<br />

true<br />

VersaB<br />

true<br />

PuliscieriempiB<br />

gestite nel diagramma SFC Controllo. In seguito al verificarsi <strong>del</strong>la condizione<br />

guastoA*guastoB, il diagramma figlio Controllo viene terminato mediante il comando<br />

Gkill, gli attuatori che potrebbero essere rimasti settati vengono resettati<br />

e, successivamente all’avvenuta riparazione <strong>degli</strong> attuatori guasti (segnalata dalla<br />

variabile OK), il processo riparte da capo mediante il rimando allo stato 1.<br />

Il diagramma SFC Controllo, mostrato in Figura 23, si occupa principalmente<br />

<strong>del</strong>la produzione e <strong>del</strong>l’imbottigliamento <strong>del</strong> composto desiderato. Dal testo<br />

si evince la necessità di una struttura di sincronizzazione, infatti le operazioni di<br />

preparazione e trasporto dei reagenti A e B devono avvenire in parallelo e, appena<br />

queste sono terminate, le operazioni di aggiunta <strong>del</strong>l’additivo corretto e di imbottigliamento<br />

<strong>del</strong> composto devono immediatamente partire. Contemporaneamente<br />

a queste ultime, le operazioni di pulitura e successivo riempimento <strong>del</strong>le cisterne<br />

A e B devono essere eseguite non appena le fasi di preparazione <strong>del</strong> reagente A<br />

o B sono terminate. Questo è possibile utilizzando opportunamente i due stati di<br />

sincronizzazione S1 e S2. Il diagramma SFC Controllo attende che la variabile<br />

Copyright © 2010 - The McGraw-Hill Companies srl


30 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Aux=1<br />

104 N1DX(S);<br />

N1SX(R);<br />

N2DX(R);<br />

N2SX(S);<br />

N3DX(R);<br />

N3SX(S);<br />

N4DX(R);<br />

N4SX(S);<br />

N5DX(R);<br />

N5SX(R);<br />

true<br />

Figura 24 Macrostato Moto.<br />

Aux=2<br />

Moto<br />

103<br />

105 N1DX(S);<br />

N1SX(R);<br />

N2DX(R);<br />

N2SX(S);<br />

N3DX(R);<br />

N3SX(S);<br />

N4DX(S);<br />

N4SX(R);<br />

N5DX(R);<br />

N5SX(R);<br />

true<br />

108<br />

Aux=3<br />

106 N1DX(S);<br />

N1SX(R);<br />

N2DX(R);<br />

N2SX(S);<br />

N3DX(S);<br />

N3SX(R);<br />

N4DX(R);<br />

N4SX(R);<br />

N5DX(R);<br />

N5SX(S);<br />

true<br />

Aux=4<br />

107 N1DX(S);<br />

N1SX(R);<br />

N2DX(R);<br />

N2SX(S);<br />

N3DX(S);<br />

N3SX(R);<br />

N4DX(R);<br />

N4SX(R);<br />

N5DX(S);<br />

N5SX(R);<br />

Ricetta sia diversa da 0 per iniziare la produzione <strong>del</strong> composto desiderato; l’ultima<br />

variazione di Ricetta viene memorizzata nella variabile interna Aux in modo<br />

da evitare che ulteriori variazioni nel segnale Ricetta portino ad una variazione in<br />

corso <strong>del</strong> composto da preparare. La variabile Ricetta viene inoltre resettata in<br />

modo da evitare che, una volta terminato il composto desiderato, si riparta con<br />

la produzione <strong>del</strong>lo stesso composto anche senza un’ulteriore richiesta <strong>del</strong>l’operatore.<br />

Si noti come tutti i dettagli operativi siano a questo livello mascherati<br />

all’interno dei macrostati Moto (che si occupa <strong>del</strong>la movimentazione dei cinque<br />

nastri per il trasporto dei reagenti), VersaA e VersaB (che gestiscono le operazioni<br />

di introduzione dei reagenti A e B), PuliscieriempiA e PuliscieriempiB (dedicati<br />

alle operazioni di pulitura e riempimento <strong>del</strong>le cisterne A e B) e Imbottiglia<br />

(che gestisce l’imbottigliamento <strong>del</strong> composto). Si noti come anche l’informazione<br />

sulla ricetta che si desidera preparare (dipendente dal segnale Ricetta) è<br />

anche essa nascosta all’interno dei macrostati. Una volta terminate le operazioni<br />

di imbottigliamento, il ciclo di lavoro riparte dall’inizio con l’attesa di una nuova<br />

richiesta da parte <strong>del</strong>l’operatore (rimando allo stato 101). Si noti in ultimo come<br />

la condizione di partenza Ricetta̸=0 sia arricchita anche dalla condizione Start; in<br />

questo modo, nel caso il comando Start venga disattivato durante la preparazione<br />

di un composto, le operazioni avviate possono terminare e, solo nel momento di<br />

valutazione di una ulteriore ricetta da produrre (stato 101), il processo si ferma in<br />

attesa di una nuova attivazione <strong>del</strong> comando Start.<br />

In Figura 24 è presentato il macrostato Moto; in tale macrostato, grazie alla<br />

struttura di scelta a quattro vie, l’ultimo valore utile di Ricetta, memorizzato nella<br />

true<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 31<br />

VersaA<br />

109<br />

not(guastoA)<br />

110 palaA(S);<br />

apriA;<br />

GS110.t>=t#120s<br />

111 palaA(R);<br />

true<br />

112<br />

guastoA<br />

Figura 25 Macrostati VersaA e VersaB.<br />

VersaB<br />

113<br />

not(guastoB)<br />

114 palaB(S);<br />

apriB;<br />

GS114.t>=t#120s<br />

115 palaB(R);<br />

true<br />

116<br />

guastoB<br />

variabile interna Aux, viene utilizzato per attivare i nastri corretti a seconda <strong>del</strong>la<br />

richiesta <strong>del</strong>l’operatore.<br />

I macrostati VersaA e VersaB, mostrati in Figura 25, comandano le operazioni<br />

di introduzione dei reagenti; è importante notare che tali operazioni sono eseguite<br />

solo nel caso in cui non si sia precedentemente diagnosticato un guasto <strong>del</strong> singolo<br />

attuatore riempiA o riempiB; infatti, in quest’ultimo caso, la produzione deve<br />

continuare a prestazioni ridotte utilizzando un solo reagente. Questa struttura è<br />

necessaria al fine di evitare che un guasto in un attuatore possa bloccare l’intero<br />

processo (occorre attivare entrambi gli stati di sincronizzazione S1 e S2 per<br />

proseguire con le operazioni di preparazione e imbottigliamento).<br />

In Figura 26 sono riportati i macrostati PuliscieriempiA e PuliscieriempiB<br />

che controllano le operazioni di pulizia e successivo riempimento <strong>del</strong>le cisterne<br />

A e B. Dato che durante tali operazioni si utilizzano gli attuatori riempiA e riempiB<br />

(soggetti a guasti), nel caso in cui il riempimento di una cisterna non termini<br />

entro 180 secondi, si segnala il guasto mediante l’attivazione <strong>del</strong>le variabili interne<br />

booleane guastoA e guastoB. Anche in questo caso, se il guasto è già stato<br />

segnalato in un ciclo di produzione precedente, le operazioni non vengono eseguite<br />

e si sblocca immediatamente la struttura di sincronizzazione finale mediante<br />

l’attivazione <strong>degli</strong> stati dummy 121 o 126.<br />

Il macrostato Imbottiglia, presentato in Figura 27, è dedicato alle operazioni<br />

di imbottigliamento. Dato che questo stato è attivato al termine di entrambe<br />

le operazioni di versamento dei reagenti, inizialmente si attendono ulteriori 30<br />

secondi prima di arrestare tutti i nastri in modo da terminare il trasporto <strong>del</strong>la<br />

corretta quantità di reagenti. Successivamente, mediante una struttura di scelta<br />

a quattro vie, a seconda <strong>del</strong>l’ultimo valore utile di Ricetta memorizzato nella<br />

variabile interna Aux, si procede con l’aggiunta <strong>del</strong>l’additivo corretto e con l’im-<br />

Copyright © 2010 - The McGraw-Hill Companies srl


32 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

PuliscieriempiA<br />

117<br />

not(guastoA)<br />

118 pulisciA;<br />

not(LivA)*<br />

GS119.t>=t#180s<br />

120 guastoA(S);<br />

luceA(S);<br />

true<br />

119 riempiA(S);<br />

121<br />

GS118.t>=t#60s<br />

LivA<br />

guastoA<br />

PuliscieriempiB<br />

122<br />

not(guastoB)<br />

123 pulisciB;<br />

not(LivB)*<br />

GS124.t>=t#180s<br />

125 guastoB(S);<br />

luceB(S);<br />

true<br />

Figura 26 Macrostati PuliscieriempiA e PuliscieriempiB.<br />

124 riempiB(S);<br />

126<br />

GS123.t>=t#60s<br />

LivB<br />

guastoB<br />

bottigliamento. Queste operazioni sono a questo livello mascherate all’interno<br />

dei macrostati NastroX, X= {1, 2, 3, 4}, raffigurati in Figura 28. Nei macrostati<br />

NastroX (X= {1, 2, 3, 4}), si procede con l’aggiunta <strong>del</strong>l’additivo X concorde<br />

con la ricetta che si sta producendo e si imbottiglia il composto ottenuto fino allo<br />

svuotamento <strong>del</strong> reattore X (condizione LivX≤5). Per l’imbottigliamento è necessario<br />

portare sotto l’elettrovalvola X una bottiglia, riempire la bottiglia versando<br />

il composto per 10 secondi e, in seguito, rimuovere la bottiglia dalla posizione di<br />

riempimento in modo da far spazio alla successiva bottiglia. Dato che il posizionamento<br />

<strong>del</strong>la bottiglia avviene mediante la fotocellula FX che è sensibile anche<br />

alle paratie di contenimento, occorre distinguere le due situazioni (si rammenti<br />

che non è detto che lo spazio tra due paratie contenga sempre una bottiglia). Per<br />

fare ciò utilizziamo l’informazione che le paratie sono distanti 30 cm e che il nastro<br />

procede ad una velocità costante di 1 m/sec; quindi nel caso due attivazioni<br />

consecutive <strong>del</strong>la fotocellula FX distino meno di 0.3 sec siamo in presenza di una<br />

bottiglia, mentre, nel caso in cui trascorrano almeno 0.3 sec tra due attivazioni<br />

consecutive <strong>del</strong>la fotocellula FX, siamo in presenza di una paratia.<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 33<br />

Imbottiglia<br />

Aux=1<br />

Figura 27 Macrostato Imbottiglia.<br />

127<br />

Aux=2<br />

130<br />

GS127.t>=t#30s<br />

128 N1DX(R); N1SX(R);<br />

N2DX(R); N2SX(R);<br />

N3DX(R); N3SX(R);<br />

N4DX(R); N4SX(R);<br />

N5DX(R); N5SX(R);<br />

129<br />

true<br />

Aux=3 Aux=4<br />

Nastro1 Nastro2 Nastro3 Nastro4<br />

true true true true<br />

Copyright © 2010 - The McGraw-Hill Companies srl


34 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

NastroX<br />

2X3<br />

2X1<br />

LivX>=100<br />

2X2 Nastro(S);<br />

2X4<br />

FX<br />

ApriX;<br />

2X3 Nastro(S);<br />

not(FX)<br />

FX*(GS2X4.t>=t#0.3s)<br />

2X2<br />

Figura 28 Macrostato NastroX.<br />

2X5<br />

not(FX)*LivX>5<br />

FX*(GS2X4.t=t#10s<br />

2X7 Nastro;<br />

2X7<br />

not(FX)*LivX


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 35<br />

Esercizi risolti<br />

Esercizio E7.6<br />

Si consideri la macchina di foratura a giostra descritta nel Paragrafo 7.4.1; si supponga<br />

che la presenza di un pezzo in una <strong>del</strong>le quattro stazioni di lavorazione sia<br />

da dedurre da solo sensore pezzoC (i sensori pezzoF, pezzoSB e pezzoSD sono<br />

assenti e la loro informazione deve essere ricostruita). Modificare in maniera opportuna<br />

il codice di controllo SFC.<br />

<strong>Soluzione</strong><br />

Al fine di colmare la mancanza dei sensori pezzoF, pezzoSB e pezzoSD, vengono<br />

definite le variabili interne booleane virtF, virtSB e virtSD; quando la giostra<br />

viene movimentata, spostando di conseguenza i pezzi da una stazione all’altra,<br />

le variabili interne devono essere opportunamente aggiornate: viene attivato il<br />

segnale relativo alla postazione successiva se il pezzo è presente in quella attuale.<br />

Dato che nella stazione di carico i pezzi arrivano con cadenza irregolare, un<br />

pezzo da caricare potrebbe arrivare dopo il time out previsto: il sensore pezzoC<br />

segnalerebbe in questo caso un pezzo da caricare e non un pezzo già caricato.<br />

Occorre dunque definire una ulteriore variabile interna booleana (incarico) per<br />

memorizzare la presenza di un pezzo caricato nella prima stazione.<br />

In Figura 1 è riportato il diagramma SFC principale: è possibile notare che<br />

inizialmente le variabili interne vengono inizializzate al valore false per indicare<br />

che nessun pezzo è presente nella macchina. Ad ogni giro di giostra le variabili<br />

interne vengono aggiornate in ordine inverso rispetto alla locazione <strong>del</strong>la stazione<br />

(partendo quindi da scarico pezzi difettosi e arrivando alla stazione di foratura) in<br />

modo da non corrompere l’informazione relativa alla presenza dei pezzi. Si noti<br />

inoltre come ad ogni ciclo si rimandi allo stato dummy 2 per evitare di inizializzare<br />

le variabili ad ogni ciclo di lavoro.<br />

Nelle Figure 2 e 3 sono raffigurati i macrostati Lavorazione Misura e scarico<br />

buoni, Carico e Scarico difettosi e il diagramma SFC figlio Riscalda: si noti come<br />

vengano utilizzate le variabili interne virtF, virtSB e virtSD per segnalare la presenza<br />

di un pezzo nella stazione corrispondente. Inoltre, in seguito al caricamento<br />

di un pezzo, viene settata la variabile ausiliaria incarico altrimenti resettata.<br />

Copyright © 2010 - The McGraw-Hill Companies srl


36 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Carico<br />

1<br />

2<br />

3<br />

2<br />

true<br />

start<br />

Lavorazione<br />

Action(P):<br />

incarica(R);<br />

virtF(R);<br />

virtSB(R);<br />

virtSD(R);<br />

end_action;<br />

Misura e<br />

scarico<br />

buoni<br />

true<br />

Action(P):<br />

virtSD:=virtSB;<br />

virtSB:=virtF;<br />

virtF:=incarico;<br />

end_action;<br />

RotG;<br />

PosLav<br />

Figura 1 Diagramma SFC relativo all’Esercizio E7.6.<br />

Scarico<br />

difettosi<br />

Copyright © 2010 - The McGraw-Hill Companies srl


Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli 37<br />

201<br />

virtF not virtF<br />

202 Action(P):<br />

Gstart(Riscalda);<br />

end_action;<br />

temp>=200<br />

203<br />

Macrostato<br />

Lavorazione Misura e scarico buoni<br />

204<br />

virtF not virtF<br />

205 ROT(S);<br />

FORA(S);<br />

206<br />

207<br />

208<br />

FCTGIU<br />

true<br />

GS206.T>=t#2s<br />

FORA(R);<br />

FCTSU<br />

true<br />

ROT(R);<br />

Action(P):<br />

Gkill(Riscalda);<br />

end_action;<br />

209<br />

300<br />

true<br />

S<br />

210<br />

301<br />

virtSB not virtSB<br />

302 Mis;<br />

GS302.T>=t#20s<br />

true<br />

303<br />

true<br />

304<br />

not virtSB virtSB<br />

Figura 2 Macrostato Lavorazione Misura e scarico buoni.<br />

307<br />

305<br />

not Ris Ris<br />

306 EVB(P);<br />

SCB<br />

Copyright © 2010 - The McGraw-Hill Companies srl


38 Sistemi di automazione industriale - C. Bonivento, L. Gentili, A. Paoli<br />

Macrostato Carico<br />

101<br />

pezzoC (not pezzoC)*<br />

(GS101.T>=t#25s)<br />

102 pistoC;<br />

incarico(S); 104 incarico(R);<br />

103<br />

FCCA<br />

FCCI<br />

105<br />

Child: Riscalda<br />

501<br />

502<br />

501<br />

heat;<br />

temp>=202<br />

temp

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!