Sei sulla pagina 1di 9

DIAGRAMMA DI FLUSSO FUNZIONALE 09 Aprile

2019

Come si fa a scrivere in un PLC le istruzioni che, sulla base dei valori letti dai sensori, vanno ad
implementare le azioni sugli attuatori?
Come abbiamo anticipato, i PLC mettono a disposizione dell’utente una serie di linguaggi di
programmazione che possono essere utilizzati per scrivere l’argoritmo di controllo. Molti di questi sono
piuttosto rudimentali, nel senso che sono “linguaggi di basso livello”, con istruzioni molto simili alle
istruzioni macchina e dipendono dal particolare PLC che viene comprato: variano in base alla marca o
all’anno di produzione: i PLC più vecchi hanno a disposizione un minor numero di linguaggi di
programmazione. Per questo motivo, visto che non siamo particolarmente interessati ad imparare un
linguaggio di programmazione di un PLC, quello che faremo sarà semplicemnte andare a vedere come
si può scrivere un algoritmo di controllo di un’applicazione domotica, utilizzando uno pseudo-linguaggio
di alto livello, cioè senza perdere tempo ad imparare comandi particolari.
 Ciò che a noi interessa è capire l’architettura e la filosofia dell’algoritmo domotico.

Il linguaggio che utilizzeremo è ispirato ai così detti SEQUENTIONAL FUNCTIONAL CHART (SFC), che
in italiano si può tradurre diagramma di flusso funzionale.
E’ ispirato nel senso che noi lo semplificheremo notevolmente: quello che ci interessa è capire, a seconda
dell’applicazione domotica:
- quando c’è bisogno di implementarla utilizzando un comando “se-allora”;
- quando c’è bisogno di fare un ciclo;
- quando c’è bisogno di utilizzare i connettori logici “and”, “or”.

Nonostante sia molto semplice come linguaggio di programmazione, ha comunque delle regole.

 Struttura dell’ SFC:


nel diagramma di flusso si alternano:
- una serie di box rettangolari, che vengono chiamati passi (o step);
- i rettangoli sono connessi tra loro da linee verticali, chiamate archi;
- ogni arco ha una linea orizzontale, chiamata transizione.

 L’unica regola fondamentale che regolamenta il funzionamento del diagramma di flusso:


la transizione deve contenere una condizione, che può essere o vera o falsa.
- Se la condizione è falsa: resto al passo precedente.
- Se la condizione diventa vera: passo al passo successico.
(le transizioni sono domande la cui risposta può essere sì o no, perché devo essere in
grado di stabilire se rimanere al passo precendente o andare a quello successivo).
Questa regola impica che: dopo un passo ci deve essere sempre una transizione, dopo
una transizione ci deve essere sempre un passo: se sto all’interno di un passo, per
poter andare a quello successivo devo verificare se una condizione è vera o no,
altrimenti resto a quello precedente.

 Il flusso di esecuzione è solitamente dall’alto verso il basso.


Nel caso in cui si vuole cambiare direzione, è necessario rappresentare il senso tramite una freccia.
 Tutte le sequenze devono avere un passo iniziale Start. Il passo iniziale rimane attivo finoa quando
la
condizione della transizione successiva non diventa vera.
Per esplicitare quale è il passo inziale: nel rettangolo vengono rappresentate due linee
verticali ai lati.

 All’interno di un passo ci possono essere scritte più azioni (es: nello stesso passo ci posso scrivere
accendi termosifoni e spegni finestre).

 Come si scrive la transizione: usando linguaggi informatici definiti dalla norma. Noi non usiamo
questI
linguaggi informatici, ma scriviamo la transizione a parole.

 SEQUENZE ALTERNATIVE:
Costrutto del linguaggio di programmazione che ci permette
di andare ad implementare l’operazione di “or”.
E’ possibile realizzare sequenze alternative tramite percorsi
divergenti e convergenti. Le sequenze sono eseguite in mutua
esclusione (o fai questo o fai quell’altro: non si può verificare
che si fanno entrambe).
Si riconosce la presenza di sequenze alternative perché dopo
un passo ci sono 2 transizioni.

Regole di valutazione delle sequenze alternative:


Le condizioni booleane associate alle transizioni vengono valutate da sinistra verso destra:
- se è verificata la Tr1, vado allo Step 2;
- se è verificata la Tr2, vado allo Step3;
- se non è verificata nessuna delle due, resto allo Step1;
- nel caso in cui sono verificate entrambe le transizioni:
il programma, di defaul, dà la precedenza alla transizione più a
sinistra:
se sia Tr1 che Tr2 hanno condizioni TRUE, viene attivato lo Step2.

E’ possibile modificare la regola della precedenza, attribuendo una


priorità a ciascuna transizione. Precedenze definite dall’utente sono
caratterizzare da un numero vicino alla transizione e da un asterisco
posto al centro dei rami divergenti.

Consiglio: non fare mai una cosa del genere.


 E’ buona norma, per vitare situazioni ambigue, assicurarsi che transizioni associate a percorsi
divergenti abbiano condizioni mutamente esclusive.

 SEQUENZE SIMULTANEE:
Operazione di “and”: faccio sia l’uno che l’altro.
Le sequenze simultanee si indicano con due linee
orizzontali parallele.
Le sequenze simultanee vengono eseguite
indipendentemente (in parallelo) fino a quando non
viene incontrata una convergenza.
 Per passare al passo successivo dopo la
convergenza, è necessario che:
- tutte le sequenze simultanee abbiano raggiunto
l’ultimo passo;
- sia verificata la condizione della transizione posta
dopo la convergenza.

Esempio di errata convergenza di sequenze


simultanee:
sequenza che non potrà mai essere terminata!
Non è possibile che tutte le sequenze raggiungano
l’ultimo passo (prima della convergenza), in quanto
ho 2 passo che sono la conseguenza di una
sequenza alternativa.
Non riuscirò mai ad arrivare al passo finale in quanto
non potrò mai trovarmi nei 4 passo prima della
convergenza contemporaneamente.

 SINCRONIZZAZIONE TRA PIU’ SEQUENZE


Due sequenze che vanno in parallelo, ma una non deve essere
troppo più veloce rispetto all’altra: si possono utilizzare degli “and”
per cercare di sincronizzare le due sequenze.

Nell’esempio: la sequenza di destra, una volta raggiunta la fase


f47 deve attendere che la sequenza di sinistra superi la transizione
T5 prima di procedere oltre.
 PASSI (o Steps)
- Ogni passo in SFC deve avere un nome univoco e apparire solo una volta in un diagramma SFC;
- Ci sono due tip idi passi:
Passi normali: indicati con rettangoli con il nome del passo al centro;
Passi iniziali: indicati con rettangoli con barre verticali. In ogni diagramma SFC può esserci solo un
passo
iniziale che viene attivato quando il PLC è attivato (cold-start).
- Variabili associate allo Step:
Ad ogni passo sono associate due variabili, che tengono conto se il passo è attivo e quanto tempo è
trascorso:
1. Step Active Flag:
è accessibile usando la sintassi <nome_del_passo>.X. Segnala se il passo è attivo.
2. Elapse Time:
è accessibilie usando la sintassi <nome_del_passo>.T. Segnala il tempo
trascorso. Può essere utilizzata per imporre un limite massimo di tempo
sulla durata dello stato attivo.
Queste variabili sono importanti perché in molte applicazioni domotiche la
transizione che fa uscire da un passo dipende da quanto tempo è trascorso:
molte azioni si interrompono una volta che è terminato il tempo.

 TRANSIZIONI
- Una transizione è rappresentata da una barra orizzontale nera.
- A ciascuna transizione è possibile associare almeno uno Step precedente ed almeno uno Step
seguente (Step precedenti e seguenti possono essere maggiori di uno).
- Le transizioni sono delle qualsiasi espressioni che forniscano un risultato booleano (TRUE, FALSE)
- La condizione associata ad una transizione è valutata solo quando tutti gli Step precedenti ad essa
sono attivi.
- Quando tutti gli Step precedenti ad una transizione sono attivi e la condizione ad essa associata è vera,
tutti gli Step precedenti si disattivano e diventano attivi gli Step seguenti.
- Se ad una transizione è associato un nome, esso è unico in tutto il programma.

 AZIONI
- Ad ogni Step è possibile associare una o più azioni.
- Lo Standard IEC 113-3 prevede che qualunque azione associata ad uno step, che viene eseguita
quando lo step è attivo, venga eseguita ancora una sola volta dopo che lo step viene disattivato.

Ogni azione ha un IDENTIFICATORE: parametro (che noi non useremo) che specifica le modalità di
esecuzione dell’azione. Può assumere i valori:
- identificatore “N”: l’azione1
viene eseguita continuamente
mentre lo Step1 è attivo. Quando
lo Step1 è disattivato, l’azione è
eseguita una volta sola.

- Identificatore “S” (Set) e “R”


(Reset): l’azione1 inizia ad essere
eseguita quando lo Step1 diviene
attivo. L’azione viene
memorizzata e continua ad
essere eseguita fino a quando lo
StepN diviene attivo. In tal caso
l’azione1 è eseguita una sola
volta. Nel caso in cui un’azione
non viene mai resettata tramite
l’action qualifiuer “R”, essa viene
eseguita all’infinito.

- Identificatore “P”: quando lo


Step1 è attivato, l’azione1 è
eseguita una volta sola.

-Identificatore “L” (Time Limited):


l’azione1 inizia ad essere eseguita
quando lo Step1 diviene attivo.
L’azione viene eseguita per un
determinato intervallo di tempo T
(associato al qualifier L). Alla fine
di tale intervallo, l’azione viene terminata. Se lo step è disattivato prima che tale tempo T si concluda,
allora l’azione1 viene terminata.
Quando l’azione è terminata, in entrambi i casi, essa viene eseguita per l’ultima volta, una sola volta.
- Identificatore “D” (Time Delayed):
l’azione 1 inizia ad essere eseguita
dopo l’intervallo temporale T
(associato al qualifier D) a partire
dall’istante in cui lo Step1 diviene
attivo. L’azione viene eseguita fino a
quando lo Step1 non viene disattivato.
In tal caso l’azione1 è eseguita una
sola volta.
Se lo Step1 non rimane attivo per un
tempo almeno pari a T, l’azione non
viene mai eseguita.

- Identificatore “DS” (Time Delayed and


Stored): quando lo Step1 viene attivato,
l’azione1 viene ritardata. Dopo
l’intervallo di tempo T, l’azione viene
memorizzata ed eseguita. L’azione
continua ad essere eseguita fino a
quando la stessa azione viene
richiamata con l’action qualifier “R”. Se
lo Step1 viene disattivato prima del
tempo T, allora l’azione non verrà mai
eseguita.
 LOOP
È un ciclo: si parte da Start; si seguono tutti i Passi previsti nella
sequenza;
arrivati alla fine:
- se è verificata la tran6 si smette;
- se è verificata la tran5 continuo a fare la stessa operazione di
continuo.
Il loop si rappresenta con un arco direzionato con la freccia,
che riporta all’inizio.

 Eseguire ciclicamente una sequenza di istruzioni.

 SALTO
Da Start ci sono 2 transizioni:
- se è verificata la tran1 viene eseguita una sequenza di azioni;
- se è verificata la tran2 si conclude subito.

Es: spengo un elettrodomestico: salto così tutti i passi.

 Saltare la sequenza di istruzioni.

ESEMPI DI ERRORI DA NON COMMETTERE:

ESEMPIO 1:
C’è un errore perché:
- All’inizio, dopo lo Step F10 ci sono 2 transizioni:
se è verificata T10 vado in F11 (e poi scendo fino a F15);
se è verificata T2 vado in F21 (e poi scendo fino a F28);
se sono verificate tutte e due, dò la precedenza a sinistra,
quindi vado in F11 (e scendo fino a F15).
- Alla fine, c’è un AND (2 linee orizzontali): non potrò mai
arrivare a valutare la transizione T20 perché posso arrivare a
F15 o a F28, ma NON posso arrivare a tutte e due
contemporaneamente.

 È stata associata una scelta tra sequenze (prima parte) a


una sincronizzazione tra le stesse (seconda parte).
La transizione T20 non diventerà mai superabile.
ESEMPIO 2:
C’è un errore perché:
Abbiamo un AND: questo significa che dopo la transizione
T1, vado ad eseguire in parallelo due sequenze, quella di
sinistra e quella di destra.
Supponiamo che una delle due sequenze sia più veloce
dell’altra: se è più veloce quella di sinistra, verificata T16,
vado in F2 e vado avanti (non c’è un And: se finisce prima
quella di sinistra, può andare avanti indipendentemente
dall’altra).
Quando la sequenza di destra arriva a T28, effettua F2: F2
viene così attivata due volte.

 Se metto un AND davanti e voglio lavorare in parallelo,


alla fine devo mettere nuovamente un AND, per far sì che si
possa andare avanti solo una volta che entrambe hanno
terminato.

ESEMPIO 3:
C’è un errore perché:
Ho un AND: vado ad eseguire in parallelo tutte e due le
sotto sequenze.
Quella di sinistra non ha problemi: non ci sono alternative.
In quella di destra, dopo lo Step6 ci sono due possibilità: o
faccio Step7 o Step9.
Se faccio Step7 va tutto bene, perché significa che
probabilmente arriverò allo Step8.
Se, invece, da Step6 vado Step9: non arriverò mai allo
Step8.  Sequenza che non potrà mai andare avanti.

È invece corretta una sequenza di questo tipo: da Step5


posso andare a Step6 o Step9, ma poi entrambi vanno a
Step7  Le due sequenze di sinistra e di destra si devono
incontrare, così da poter di proseguire con un’unica
sequenza.
NORME PER UNA BUOAN PROGRAMMAZIONE:
- Usare nomi significativi per passi, transizioni e azioni (se possibile)
- Cercare di mantenere il diagramma piccolo e focalizzato sul comportamento principale del livello che
si sta considerando.
- Cercare di ridurre le interazioni tra sequenze simultanee.
- Evitare che sequenze parallele modifichino le medesime variabili.

Potrebbero piacerti anche