vuoi
o PayPal
tutte le volte che vuoi
SINCRONIZZAZIONE DI SEQUENZE INDIPENDENTI: ESEMPIO
Un altro esempio in cui viene utilizzato il semaforo è quando si vogliono sincronizzare due sequenze indipendenti.
Suppongo di avere un impianto chimico dove ci sono da fare delle operazioni: inserisco il liquido1 e il liquido2 in maniera contemporanea per un tot di unità; appena è terminato l'inserimento del liquido1 siccome la sostanza clinica in questione è problematica, occorre pulire la tubazione. Dopo che ho finito di pulire la tubazione e ho finito di inserire entrambi liquidi, posso inserire il liquido3. Il problema è che ho due oggetti che fanno i comodi loro (inserimento liquido1 e 2), ma l'altro stato successivo ha bisogno che entrambi siano finiti. Questo vuol dire che devo sincronizzare queste due sequenze che vanno ognuna per i fatti propri. Questo si fa tramite un semaforo.
SINCRONIZZAZIONE DI SEQUENZE INDIPENDENTI: PROBLEMATICA
Quello che voglio imporre è per...
esempio che posso passare da 4 a 5 e da 12 a 13 solo quando entrambe le due sequenze sono arrivate nello stato che voglio sincronizzare. Quindi 12 non va in 13 se 4 non è diventato attivo, viceversa 4 non va in 5 se 12 non è diventato attivo (4 e 12 vuol dire che ho finito di versare i due liquidi). Le condizioni non sono sufficienti per imporre una forma di sincronizzazione perché sono dei meccanismi slegati, cioè la verità o la falsità di una condizione non è strettamente legata al fatto che lo stato precedente sia attivo o meno, che è la cosa che interessa per fare la sincronizzazione, per gestire per esempio anche le zone condivise. Sono in 3 ma la condizione T4-5 può diventare vera indipendentemente dal fatto che io stia andando in 4, ma T4-5 in realtà non serve per gestire il passaggio; quindi T 4-5 è vera e T12-13 è vera non avviene nessuna transizione ma quando T4-5 diventa falsa e io sono ancora in 3, non
è vero che devo sincronizzarli ma in realtà questa condizione diventa vera perché T4-5 è falso, T12-13 è vera e questo implicherebbe il passaggio da 12 a 13.
SINCRONIZZAZIONE DI SEQUENZE INDIPENDENTI: SOLUZIONE CON SEMAFORO SLIDE26
Questo problema si risolve forzando la struttura semaforica che per via della presenza dello stato del semaforo, imponendo il passaggio da un ulteriore stato dell’SFC, impone la sincronizzazione. Abbiamo quindi un parallelismo e una sincronizzazione che sono i nostri due blocchi di una struttura di interconnessione di tipo parallelismo. Supponiamo di essere in una situazione di prima, ho lo stato 3 e 12 attivi e vorrei fare in modo che le sequenze si sincronizzassero. Posso passare da 12 in 13 con la condizione T12,13 attiva. Con una struttura di questo tipo, la transizione da 12 a 13 è legata al fatto di questa qua sia vera, ma anche che lo stato S sia vero. Lo stato S è attivo solo quando ho eseguito lo stato 4. Quando 4
diventa attivo succede cheda 4, per parallelismo, ho abilitato latransizione e quindi posso passare in 5e in S. La cosa interessa è che questo semaforo implica che 4 è arrivato dovedeve arrivare; quindi, a questo punto posso fare la transizione da 12 a 13perché sono sicuro che sono arrivato in 4 e quindi mi permetto di fare unoscorrimento verso 13. A differenza della struttura del semaforo per la mutuaesclusione delle sequenze, qui lo stato semaforico non deve essere mai unostato iniziale, altrimenti vanifico il meccanismo di sincronizzazione. Prima c'eraun'unica struttura parallelismo-sincronizzazione qua ce ne sono due, questo inqualche modo mi obbliga ad avere la stato iniziale attivo con il semaforo.
GERARCHIE TRA SFC: ESEMPIOSLIDE27
L'ultima problematica che guardiamo per SFC è quello legata alla gerarchia. In tutti i sistemi operativi, qualsiasi programma si lanci, il sistema operativogenera un clone di un programma di esecuzione e
SLIDE28
Per modellare questo tipo di situazione con un SFC vediamo una soluzione che chiameremo "senza strutturazione". Abbiamo lo stato iniziale 1 (doppio quadrato), per cui all'inizio si parte da lì e viene lanciato chiamando Nastro. Il comando Nastro è di tipo Non-store, quindi va ad oltranza. Avviene una scelta che è data da due rami che hanno delle condizioni mutuamente esclusive; avviene la scelta in funzione del segnale scatolaP che dice "pacco presente": se il pacco non è presente non ci si muove e il nastro continua ad andare; se il pacco è presente faccio qualcosa. Affianco a questo,molti di più, dal punto di vista tecnico se per qualche motivo devo alterare la procedura delle luci d'emergenza e anziché farne due anziché e devo anche mettere un segnale acustico, capite che se io anziché avere due pezzi nell'SFC ne ho molti di più devo andare a toccare 100 pezzi e naturalmente suggerisce che forse una soluzione più smart potrebbe aiutarmi. SLIDE29 Vediamo come si possono complicare le cose. Nella versione base semplicemente non verifico nulla, nella versione più sofisticata introduco un'ulteriore complicazione al modello, cioè aggiungo una specifica al comportamento di quello che sta facendo la mia macchina automatica. Gestisco il sensore di misura che testa gli oggetti con qualche criterio. Per esempio, una telecamera capace di identificare la forma e le dimensioni dell'oggetto stesso. Questo sensore di misura restituisce un segnale "ok" che è vero o falso in funzione del fatto cheprevedo la possibilità che possa essere acceso un allarme (situazione iniziale), se l’allarme è vero devo andare nella sezione di destra, per cui accendere una luce di emergenza finchè non viene disattivato l’allarme.
Se invece c’è la scatola e non c’è l’allarme attivo faccio qualcosa (stato2) fino a quando non c’è più la scatola o scatta l’allarme.
scatolaP notscatolaP
Anche in questo caso le condizioni e sono mutuamente esclusive. Se scatta l’allarme e c’è una scatola allora viene accesa una luce di emergenza finché non viene spento l’allarme.
Il problema di questo SFC è legato al fatto che si dovrebbe evidenziare una certa non strutturazione perché c'è un pezzo di codice ripetuto, cioè vuol dire che ci sono una serie di operazioni che potrei evitare di replicare nella rappresentazione. Supponiamo che anziché ne abbia 2 io ne abbia
Il pezzo viene controllato per verificare se è conforme alle specifiche imposte. Se non è conforme, il pezzo viene evacuato attivando un altro attuatore che lo elimina. L'attuatore viene azionato tramite l'azione "elimina". Risulta complicato modificare la soluzione precedente perché sarebbe una versione legata a quella precedente in cui ho aggiunto dei pezzi.
Nella slide 30, in alto è rimasto uguale, 1, 2 e 3 sono identici. Sono nello stato 1 nominale che è attivo, poi in presenza dell'allarme o non allarme faccio due cose se la scatola è presente; quando la scatola è presente non c'è l'allarme situazione nominale, se invece scatta l'allarme emergenza. Invece quando la scatola c'è, ho chiesto di misurare la e mi restituisce il valore della condizione ok o non ok; accendo la telecamera, misuro le dimensioni dell'oggetto, le confronto con lo standard imposto ecc: se il pezzo è conforme allora
continuo ad andare e finire finché l'ascatola non va via dal sensore e non c'è l'allarme; se mentre sto cacciando viascatta l'allarme, allora accendo la luce d'emergenza; se invece il pezzo non era conforme e non c'era l'allarme, deve fare l'eliminazione perché il pacco non è conforme quindi devo accendere l'attuatore che prende il pacco e lo butta via (comando elimina). Dal punto di vista del sensore, l'informazione che viene rilevata è che non c'è più il pacco davanti alla fotocellula, almeno che non scatti l'allarme perché l'operatore ha fatto scattare l'allarme. C'è molta ridondanza perché tutte le volte che devo introdurre la gestione dell'allarme, devo aggiungere delle condizioni mutuamente esclusive e questo in qualche modo dovrebbe far presagire che c'è un minimo di inefficienza in questo disegno. Fa esattamente il lavoro che ciQuello che stiamo proponendo permette di agevolare lo sviluppo e la manutenzione del codice in maniera più sistematica, nonché per evitare errori perché se esiste un'unica procedura replicata via software 50 volte è diverso che programmare 50 volte in maniera uguale. Quindi si utilizza la gerarchia SFC. L'SFC padre può generare e controllare SFC figli. L'SFC figlio tecnicamente è un altro SFC, è un programma a sé stante che in maniera completamente autonoma una volta che viene attivato. È autonomo nel senso che le operazioni possono essere completamente sganciate da quello che sta facendo l'SFC padre, ma è sotto la potestà del padre che in qualsiasi momento può.