Function Block Diagram Marco Mauri Politecnico di Milano P.zza Leonardo da Vinci, 32 22-23 Maggio 2001 1
Sommario Struttura del linguaggio e notazioni grafiche Come esprimere espressioni semplici e complesse Come mostrare il flusso di segnale tra funzioni e function block Come assegnare valori alle variabili Come gestire il feedback di un segnale Regole per la valutazione di un diagramma FBD Restrizioni sulla portabilità di codice tra ST e FBD 22-23 Maggio 2001 2
Introduzione Il linguaggio FBD è un linguaggio grafico bidimensionale che si configura con una struttura simila a quella di un circuito hardware E prevista anche una notazione basata solo su caratteri ASCII FBD era stato introdotto come sistema di specifica nella norma IEC 167 La norma IEC 1131-3 ha formalizzato la sua definizione come linguaggio di programmazione 22-23 Maggio 2001 3
Elementi grafici Link orizzontale ---------- Connessione ------+------ Incrocio tra segnali orizzontali e verticali Angoli ---------+ ---------+ Connettori --------> LOAD_JOB > > LOAD_JOB>-------- >LOAD_JOB> >LOAD_JOB> 22-23 Maggio 2001 4
Elementi grafici Blocco con connessioni +---------+ ---- --- ---- --- +---------+ La rappresentazione completamente grafica non è specificata completamente nella norma. Vengono definiti solo alcuni elementi fondamentali. La rappresentazione può quindi dipendere dall implementazione 22-23 Maggio 2001 5
Metodologia FBD può essere utilizzato per descrivere programmi, funzioni o Function Blocks Può anche essere utilizzato per descrivere azioni e transizioni per il linguaggio SFC La sua caratteristica principale è la rappresentazione di flussi di dati e ciò fa sì che sia applicato soprattutto per la definizione del loop di controllo e per le sezioni di logica Come molti linguaggi grafici, FBD si basa sulla connessione di blocchi che presentano gli ingressi sulla sinistra e uscite sulla destra 22-23 Maggio 2001 6
Convenzioni grafiche Alcune convenzioni grafiche devono essere usate : Un function block è rappresentato come un blocco rettangolare con gli ingressi a sinistra e le uscite a destra Il nome del function block deve essere sempre indicato con il blocco, mentre il nome dell istanza deve essere indicato sopra il blocco. Devono essere indicati anche i nomi degli input e degli output. Questi possono essere omessi nella rappresentazione grafica ma devono essere comunque possibile accedervi (ad es. si possono usare delle label con dei numeri, ma deve essere comunque possibile visualizzare il nome completo) 22-23 Maggio 2001 7
Convenzioni grafiche Label identificativa della funzione Label istanza Label ingresso PlantControl1 Label tipo FB Label uscita And in1 in2 PlantControl out1 out2 Esempio di function Esempio di function block 22-23 Maggio 2001 8
Gli archi Gli archi connettono i blocchi rappresentano i flussi di dati Attraverso gli archi possono transitare date appartenente a qualunque tipo di variabile riconosciuto dalla norma Il propagarsi dell informazione avviene da sinistra verso destra in maniera tale che l esecuzione di un blocco determina il contemporaneo aggiornamento delle sue uscite La negazione di un segnale può avvenire mettendo un piccolo cerchietto in corrispondenza di un ingresso. Se questa funzione non è supportata la negazione di un segnale avviene semplicemente utilizzando la funzione NOT 22-23 Maggio 2001 9
Gli archi var1 var2 + in1 PlantControl1 PlantControl out1 var1 in2 out2 var6 var3 var4 and nor var5 or NOT 22-23 Maggio 2001 10
Feedback loop La norma ammette che un diagramma FBD presenti loop chiusi interni Questi loop possono essere espliciti o impliciti: Espliciti se esiste un arco che connette un output con un input Impliciti se il loop è creato utilizzando un connettore Non è però specificato dallo standard la modalità di apertura dell anello, la soluzione dipende quindi dall implementazione Alcuni tool permettono la definizione dell ordine di esecuzione 22-23 Maggio 2001 11
Feedback loop Fb1 Fb2 Loop esplicito Fb3 Loop implicito >label> Fb1 Fb2 >label> Fb3 22-23 Maggio 2001 12
Controllo dell esecuzione Per controllare il flusso di esecuzione un function block o una function hanno a disposizione degli input e output addizionali : EN e ENO EN è un ingresso booleano che permette di controllare l esecuzione di una funzione. Se EN è TRUE la funzione è calcolata, altrimenti le sue uscite non vengono calcolate ENO è una variabile booleana di uscita che commuta da FALSE a TRUE quando la funzione ha completato la sua esecuzione Si possono così creare condizioni di trigger legate a precisi valori di variabili 22-23 Maggio 2001 13
Controllo dell esecuzione Fb3 EN Fb1 ENO EN Fb2 22-23 Maggio 2001 14
Salti e label E possibile modificare l ordine di esecuzione della rete FBD utilizzando l opzione grafica di Salto (Jump) La sezione della rete a cui si salta viene specificata attraverso una label I segnali che determinano la condizione di jump sono normalmente identificati con una doppia freccia ( --->>) 22-23 Maggio 2001 15
Salti e label Fb3 >> Section_name Fb4 Section_name: Fb1 Fb2 Fb5 22-23 Maggio 2001 16
Salti e label La norma non specifica cosa succede al resto della rete quando viene incontrato un salto. Una interpretazione è che tutti i blocchi della rete siano valutati dopo che il salto è stato fatto. Una interpretazione alternativa è che l esecuzione della rete sia bloccata e la rete identificata dalla label cominci ad essere eseguita E consigliabile non utilizzare i salti in una rete FBD non essendo chiare le regole di evoluzione 22-23 Maggio 2001 17
Regole di esecuzione La norma non presenta regole precise per determinare l ordine di esecuzione dei blocchi all interno di una rete FBD Questo aspetto fa sì che in questo caso si trovino soluzioni diverse passando da uno strumento commerciale ad un altro La norma fissa comunque alcuni principi generali che devono essere rispettati 22-23 Maggio 2001 18
Regole di esecuzione Nessun elemento può essere valutato se non sono stati aggiornati tutti gli ingressi L esecuzione di un elemento di una rete non può considerarsi completata fino a quando tutte le sue uscite non sono state aggiornate L esecuzione di un intera rete non è completa fino a quando tutte le sue uscite non sono state aggiornate Quando i dati sono trasferiti da un blocco ad un altro si devono riferire alla medesima esecuzione 22-23 Maggio 2001 19
Portabilità tra ST e FBD La maggior parte dei costrutti FBD può essere tradotta in ST. Ci sono problemi nel rappresentare in ST il flusso di esecuzione. Non esiste in ST una esplicita notazione per accedere a EN e ENO. Nella traduzione da ST a FBD è difficoltosa la rappresentazione dei cicli e non esistono funzioni esplicite per accedere agli elementi di un dato strutturato. 22-23 Maggio 2001 20
Regole di buona programmazione L uso di jump dovrebbe essere evitato Il programma dovrebbe essere decomposto in Function Blocks che limitano il numero di archi di connessione al fine di non rendere troppo complessa la lettura del grafico La precedente affermazione va poi bilanciata con l esigenza di limitare i livelli di annidamento dei Function Blocks Tutte le variabili interne della rete dovrebbe essere inizializzate durante la fase di start del sistema 22-23 Maggio 2001 21
Regole di buona programmazione Fanno eccezione le variabili direttamente legate ad un input dal campo Un valore di default deve anche essere assegnato alle variabili direttamente legate ad uscite sul campo Minimizzare il numero di conversioni di tipo ed eliminare le conversioni implicite Evitare l uso di operazioni in cui gli operandi appartengono a tipi diversi L affermazione precedente è particolarmente importante nel caso di confronti 22-23 Maggio 2001 22
Regole di buona programmazione Evitare in particolare l uso misto di variabili signed e unsigned Nel caso di gestione di variabili a virgola mobile preferire il tipo LREAL (64 bit) rispetto al REAL (32 bit) Evitare l uso di variabili in virgola mobile nel caso di operazioni di confronto 22-23 Maggio 2001 23
Consigli grafici Ingressi nascosti 22-23 Maggio 2001 24
Consigli grafici Percorso confuso Intersezione di archi 22-23 Maggio 2001 25
Continuous function chart Resource T#50ms 1 Task Interval Priority PROGRAM Fb3_1 Fb3 END_PROGRAM 22-23 Maggio 2001 26
Conclusioni FBD è un linguaggio che può essere usato per un ampio spettro di applicazioni compresi i problemi di logica booleana e controlli in anello chiuso Nonostante è disponibile il costrutto di salto, FBD è adatto principalmente a descrivere sistemi il cui comportamento è continuo. Per problemi diversi è preferibile strutturare il programma FBD utilizzando SFC. Non c è una corrispondenza univoca tra FBD e gli altri linguaggi E possibile specificare la struttura ad alto livello di un sistema grazie ad una estensione del programma FBD chiamata Continous function charts 22-23 Maggio 2001 27