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:

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:

L'evoluzione del sistema avviene in questo modo:

Un esempio di SFC è riportato nella figura seguente:

esempio diagramma SFC

Qualche osservazione:

In figura un esempi di scelta/convergenza e di parallelismo/sincronizzazione:

Esempi di scelta/convergenza e 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:

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:

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:

L'esempio seguente mostra una transizione tra due stati:

|------| |------| |------+------(S)
      passo   condiz.    |     passo 
     attuale             |     succ.
                         |
                         +------(R)
                               passo
                              attuale

Il segmento è così interpretabile:

Attivazione delle uscite

L'attivazione delle uscite si realizza scrivendo un solo segmento per uscita dove:

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:

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.

SFC cancello automatico

Traducendo il diagramma SFC nel linguaggio ladder con la tecnica batch si realizza un programma come questo:

Main del programma

che contiene una funzione che imposta il passo iniziale:

impostazione passo iniziale

una che gestire la successione tra i passi dell'automatismo:

evoluzione dell'automatismo

e una che attiva le uscite:

attivazione uscite

Torna all'indice.

1)
standardizzato nella norma IEC 1131-3
2)
Graphe Fonctionnel de Commande des Étapes et Transitions
3)
ad esempio le CPU S7-1500 di Siemens in Tia Portal
4)
fa eccezione il parallelismo, quando più sequenze sono attive contemporaneamente con i relativi passi attivi contemporaneamente
5)
in ogni momento dovrebbe essere attivo un solo passo per volta ma nel caso del parallelismo, quando più processi vengono eseguiti in contemporanea, bisogna immaginare che il token venda diviso in più parti e poi ricomposto