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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!