Benvenuto nella sezione del sito dedicata alla programmazione dei PLC Omron, oggi lavoriamo in uno dei cinque linguaggio IEC 61131-3, in particolare quello chiamato SFC (Blocchi di funzione sequenziali). Questo linguaggio è molto adatto per costruire sequenze di azioni, infatti la sua rappresentazione rende più intuitivo capire cosa il programma fa in ogni step (passo).
Il linguaggio SFC (sequential function chart).
Il linguaggio a grafico sequenziale di blocchi funzionali è indicato per creare direttamente delle sequenze nel plc, così come le descriveremmo a voce.
Se osserviamo l’immagine in testa a questa pagina troviamo un esempio di piccolissima sequenza di avviamento e spegnimento di un motore.
Notiamo subito che all’inizio ci troviamo con il motore spento, e che premendo un ipotetico pulsante di start il motore si accenderà; dallo “Stato” di motore acceso, premendo il pulsante di stop il motore tornerà allo stato di spento.
La potenza del linguaggio SFC sta proprio nel farci riconoscere facilmente cosa avviene in ogni punto del programma, e quali azioni o condizioni fanno passare il programma da uno stato all’altro della sequenza.
Il programma di esempio di oggi è un sequencer di 4 passi, dove ogni passo dura un certo numero di secondi impostabile, e al suo interno vengono movimentate delle uscite digitali per mezzo di parole (words); l’utilizzo delle words per il sequencer permette di elaborare in ogni passo 16 uscite contemporaneamente.
Nella prossima immagine troviamo la sequenza di 4 steps.
Nella parte sinistra della schermata di CX-Programmer abbiamo il programma SFC. Dal passo iniziale, attraverso la transizione “iniziare_sequenza” il programma va allo Step1.
La transizione avviene quando il bit “iniziare_sequenza” è a 1, e nel primo passo ci sono due azioni: la prima è semplicemente alzare il bit “passo1_richiesta”, la seconda invece è un’azione complessa; troviamo le istruzioni di questa azione nel programma ladder che vediamo sulla destra della schermata.
L’azione “Azione1” è un programma che attiva un temporizzatore per il passo e contemporaneamente copia il contenuto di una word (uscite_passo1) all’interno di quella di destinazione (uscite_utenze); la durata del passo è impostata nella variabile “tempo_passo1”.
Nell’ultima linea di programma ladder notiamo che con il bit di richiesta del passo attiviamo una bobina chiamata “passo1_ok”, questa serve a fare iniziare il conteggio del tempo nella prima riga. In questo passo non ci sono altre condizioni per avanzare con il tempo, ma come vedremo nel prossimo paragrafo, possiamo inserire delle condizioni di attesa.
Una volta che il timer ha finito di contare, la sequenza SFC va allo step successivo, infatti la condizione per la transizione è proprio il bit di “passo1_eseguito”, che viene attivato quando il tempo è terminato (seconda linea del programma ladder dell’azione).
Nella prossima figura troviamo l’azione del passo 2 della sequenza.
Come accennato in precedenza, all’interno di ogni passo possiamo utilizzare delle condizioni per bloccare l’avanzamento del temporizzatore, nel passo due abbiamo un bit chiamato “condizione_da_programma”, che taglia la bobina “passo2_ok”, e di conseguenza blocca il timer.
Questa condizione sarà il risultato di qualche altra elaborazione nel programma, per esempio un controllo di temperatura, una conferma da parte dell’operatore, o qualsiasi altra verifica necessaria. Naturalmente questo ramo nell’azione può anche contenere diversi bit di condizionamento in serie e/o in parallelo.
Il passo 3 della sequenza è simile al passo 1, mentre nell’immagine che segue vediamo cosa accade nel passo 4: l’azione “Fine_Sequenza” è scritta in linguaggio di testo strutturato ST, e azzera sia il bit di inizio sequenza (per non farla ricominciare daccapo da sola), che la parola di uscita per spegnere le utenze. Il bit di inizio sequenza può essere attivato manualmente per esempio da pannello da parte dell’operatore, o attraverso il programma in maniera automatica al verificarsi di certe condizioni.