Indice
SFC/Grafcet
Qui un template per disegnare un diagramma SFC usando la web application draw.io (ora app.diagrams.net).
Il linguaggio SFC e il Grafcet
L'SFC (Sequential Function Chart) è un linguaggio di programmazione grafico per PLC1) derivato dal Grafcet2), un formalismo utilizzato per descrivere processi sequenziali nella progettazione e analisi di automatismi.
L'SFC/Grafcet - useremo i due termini come sinonimi - non è solo un linguaggio di programmazione ma anche un modo per rappresentare il funzionamento di un sistema automatico mettendone in evidenza il comportamento sequenziale. Molti automatismi infatti si prestano ad essere scomposti in una serie di fasi (passi, stati, ecc.) che si susseguono secondo una determinata logica. Con i diagrammi SFC è possibile descrivere l'evoluzione del sistema che, al verificarsi di determinati eventi, passa da una fase a quella successiva attivando le uscite corrispondenti.
La progettazione di un automatismo tramite SFC è detta programmazione per passi ed è particolarmente efficace perché, consentendo l'attivazione di un passo solo per volta, garantisce che il PLC esegua solo le azioni associate al passo attivo evitando conflitti e anomalie che si possono verificare utilizzando altre tecniche. Inoltre con la programmazione per passi è sempre possibile sapere in quale stato si trova il sistema e seguire l'evoluzione dell'automatismo.
I vantaggi principali dell'SFC sono:
- espressività e leggibilità: è un linguaggio grafico quindi sintetico e non ambiguo
- portabilità: progettazione e implementazione sono slegate tra loro e possono essere realizzate da persone diverse, in tempi diversi, con linguaggi diversi su PLC di produttori diversi
- manutenibilità: è possibile modificare i passi singolarmente senza alterare il resto dell'automatismo
Con alcuni modelli di PLC si puà usare l'SFC direttamente nell'ambiente di programmazione3) ma con le CPU S7-1200 questo non è possibile ed occorre tradurre l'SFC in ladder con la tecnica batch.
Elementi di un diagramma SFC
Gli elementi di un diagramma SFC sono:
- i quadrati, che rappresentano i passi (fasi, stati, tappe) del sistema; quello con due cornici è il passo iniziale
- il pallino nero - detto token o marcatore - che individua il passo attivo (non lo disegneremo mai)
- i rettangoli, collegati con una linea ai quadrati, che rappresentano le azioni associate ad un passo
- le linee, che indicano la successione tra un passo e quello successivo
- i trattini, che rappresentano le transizioni che abilitano il passaggio da un passo a quello successivo
L'evoluzione del sistema avviene in questo modo:
- in ogni momento c'è un solo passo attivo4) e l'evoluzione avviene secondo il percorso delle linee (dall'alto verso il basso, la freccia si mette solo nel caso in cui si vada dal basso all'alto)
- il sistema parte sempre da un passo iniziale
- quando un passo è attivo vengono abilitate
- le azioni associate al passo
- le transizioni a valle (immediatamente sotto il passo)
- ad ogni transizione è associata una condizione che, se verificata, attiva la transizione permettendo il passaggio al passo successivo
Un esempio di SFC è riportato nella figura seguente:
Qualche osservazione:
- passi e transizioni sono identificati con una sigla (ad esempio
P0
per il passo iniziale,T2
per la seconda transizione) - un passo può avere più azioni associate (eseguite contemporaneamente) o nessuna; le azioni possono avere un qualificatore che indichi particolare caratteristiche (ad esempio azione impulsiva, intermittente, ritardata)
- le condizioni che attivano le transizioni sono espressioni logico-combinatorie (si esprimono utilizzando operatori logici AND, OR, NOT) che possono essere vere o false (0 o 1)
- l'evoluzione del sistema avviene disabilitando tutti i passi a monte e attivando tutti quelli a valle5)
- eventuali situazioni di emergenza (pulsante STOP, protezioni termiche, ecc.) che alterano la normale evoluzione dell'automatismo si indicano mettendo una freccia a sinistra dello stato in cui deve essere posto il sistema in caso di emergenza e specificando le condizioni che abilitano questa particolare transizione che è abilitata, e quindi possibile, qualunque sia il passo attivo nell'automatismo
- il Grafcet, come ogni linguaggio di programmazione, dispone di strutture di controllo per:
- la realizzazione di cicli
- la scelte tra più opzioni (scelta e convergenza): in questo caso si ha una diramazione tra transizioni con condizioni mutuamente esclusive
- l'esecuzione simultanea di più processi (parallelismo e sincronizzazione): in questo caso si usano i nodi diramatori e i nodi di concorrenza, indicati con due linee orizzontali parallele
In figura un esempi di scelta/convergenza e di parallelismo/sincronizzazione:
Si noti come nella scelta e convergenza si abilitano due transizioni contemporaneamente con un solo passo mentre nel parllelismo si attivano più passi contemporaneamente in seguito ad una transizione (notare anche il simbolo con la doppia linea).
Altre regole
La specifica dell'SFC è definita nella normativa IEC 61131-3 (l'ultima versione è del 2013). Accenniamo brevemente a qualche ulteriore elemento che si può trovare nei diagrammi.
I qualificatori possono essere usati per caratterizzare un'azione. I più comuni sono:
- N (non stored), l'uscita è attiva finché il passo è attivo (è il qualificatore predefinito quindi si può omettere)
- D (time delayed), l'azione è ritardata di un tempo prestabilito rispetto all'attivazione del passo
- L (time limited), l'azione si interrompe dopo un tempo prestabilito
- P (pulse), l'azione si attiva una sola volta in modo impulsivo quando il passo è attivo
- S (set/stored), l'uscita resta attiva anche quando il passo si disattiva
- R (reset), l'uscita viene resettata quando il passo è attivo
- C (condizionato), l'uscita è attiva solo ma condizionata da altri segnali (ad esempio solo se il segnale di un finecorsa è anch'esso attivo)
L'uso dei qualificatori può semplificare la scrittura del diagramma SFC (ad esempio sostituendo la funzione svolta dai temporizzatori).
Al posto delle frecce che riportano a un passo precedente è possibili utilizzare il segno di salto, indicato con una freccia rivolta verso il basso, a monte di una transizione, con indicato il nome del passo a cui saltare.
Nelle condizioni associate alle transizioni si può usare l'espressione 'PASSO.X', dove la X va interpretata come 1 se il passo indicato alla sua sinistra è attivo o 0 se non è attivo. Questo tipo di condizione permette di attivare una transizione in una sequenza se è attivo un determinato passo in un'altra sequenza. Sempre secondo le norme IEC 61131-3, che definiscono i linguaggi di programmazione standard per i PLC, si può usare l'espressione 'PASSO.T' per indicare implicitamente un timer che si attiva contestualmente al passo (vedi documento dello standard 61131-3).
Dal Grafcet al Ladder: tecnica batch
La tecnica batch (“a lotti” in italiano) serve ad implementare un automatismo descritto da un diagramma SFC nel linguaggio KOP/ladder. Quando la si usa è buona pratica ricorrere anche alla programmazione strutturata, creando diverse funzioni/sottoprogrammi per gestire:
- inizializzazione del sistema, dove si imposta il passo iniziale
- evoluzione dell'automatismo da un passo all'altro (chiamato anche motore del Grafcet, ciclo macchina, sequenza stati, ecc.)
- attivazione delle uscite in base al passo attivo
- emergenze, anomalie e allarmi
La tecnica batch prevede di associare ad ogni passo della sequenza un merker di passo e gestire l'evoluzione del sistema settando il merker successivo e resettando quello attuale ad ogni transizione. In questo modo, in ogni momento, sarà attivo un solo merker e lo stato del sistema sarà sempre definito. L'evoluzione del sistema e l'attivazione delle uscite vengono gestiti separatamente; le uscite vengono attivate solo in base al merker di passo attivo in un determinato momento. Il programma, così strutturato, è più affidabile, più semplice da gestire e da modificare. Anche il debugging è facilitato perché quando il programma si blocca il passo che contiene l'errore viene messo in evidenza.
Inizializzazione del sistema
Per l'inizializzazione dell'automatismo si può usare il merker di sistema First Scan (attivo solo nel primo ciclo di scansione quando la CPU passa da STOP a RUN) o un blocco organizzativo di avvio (OB100 viene eseguito una sola volta all'avvio prima ancora di passare in RUN). Nel primo caso basterà scrivere una funzione che setti il merker corrispondente al passo iniziale, resettando tutti gli altri merker di passo. Di solito questa funzione si occupa anche di resettare contatori e temporizzatori e mettere la macchina in una condizione nota (di riposo o di sicurezza).
Evoluzione del sistema
L'evoluzione del sistema si realizza in maniera molto semplice:
- ogni merker di passo ha il suo segmento
- quando un merker di passo è attivo se risulta verifica la condizione che attiva le transizioni si setta il merker successivo e si resetta quello attuale
L'esempio seguente mostra una transizione tra due stati:
|------| |------| |------+------(S) passo condiz. | passo attuale | succ. | +------(R) passo attuale
Il segmento è così interpretabile:
- se un passo è attivo (passo attuale) la transizione è abilitata
- se la condizione che attiva la transizione è verificata
- si resetta il passo attuale e si setta quello successivo
Attivazione delle uscite
L'attivazione delle uscite si realizza scrivendo un solo segmento per uscita dove:
- le uscite vanno attivate con delle bobine semplici
- le uscite si attivano mettendo in OR (parallelo) tanti contatti comandati dai merker di passo che prevedono l'attivazione dell'uscita
NB: nella tecnica batch timer e contatori vengono trattati come uscite.
Questa soluzione comanda ogni uscita in un solo punto del programma e mette in evidenzi gli stati che ne prevedono l'attivazione.
Diagnostica e allarmi
Nel funzionamento di un automatismo bisogna considerare come gestire eventuali emergenze o anomalie come:
- tempo di ciclo massimo superato
- finecorsa avanti e indietro attivi contemporaneamente o non attivi quando il movimento dovrebbe essere terminato
- pressione del pulsante emergenza
- rimozione di protezioni di sicurezza, ecc.
In questo caso si prevederanno una serie di misure quali l'arresto della macchina (o il riposizionamento in uno stato di riposo/sicurezza) e la segnalazione dell'errore/anomalia/guasto. Nell'SFC si indica con una freccia (o un trattino) a sinistra il passo che deve essere abilitato in caso di emergenza. Questo segno corrisponde ad una transizione che è sempre abilitata qualunque sia il passo attivo in quel momento (cfr. Pirraglia, Programmare con i nuovi PLC S7-1200 e S7-1500, pag. 235). Per implementare questo tipo di logica si può scrivere una funzione che controlla le varie anomalie ad ogni ciclo e in caso di guasto setti il merker di passo in cui portare il sistema in caso di guasto ed eventualmente usare usa un merker di abilitazione posto in serie a tutte le uscite che si resetta in caso di emergenza.
Un esempio
Per un esempio concreto di un automatismo complesso realizzato con SFC e la relativa implementazione in ladder si veda la pagina sul manipolatore.
Cancello automatico in SFC
La soluzione del problema del cancello automatico con il Grafcet è riportata sotto.
Traducendo il diagramma SFC nel linguaggio ladder con la tecnica batch si realizza un programma come questo:
che contiene una funzione che imposta il passo iniziale:
una che gestire la successione tra i passi dell'automatismo:
e una che attiva le uscite:
Navigazione
Torna all'indice.