Soluzione degli esercizi del Capitolo 7 - Ateneonline
Soluzione degli esercizi del Capitolo 7 - Ateneonline
Soluzione degli esercizi del Capitolo 7 - Ateneonline
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