01 novembre 2014

Programmazione PLC: il Continuous Function Chart (CFC)

Non ho spesso l'occasione di usare questo "linguaggio" di programmazione, ma ultimamente ho avuto modo di approfondirlo avendoci sviluppato un progetto piuttosto articolato. Ecco le mie considerazioni.

Il CFC, o Continuous Function Chart, è un linguaggi omesso a disposizione dall'ambiente di sviluppo CoDeSys.

Una Function Block descritta in CFC con ABB Control Builder Plus. I numeri in grigio di fianco ai blocchi operatore indicano la sequenza di valutazione impostata; i commenti appaiono come caselle di testo grigio e sono liberamente posizionabili. La function block realizza i controlli per la chiusura di un interruttore motorizzato, la cui struttura dati è passata per indirizzo a un puntatore locale.


Nello specifico caso ho utilizzato ABB ControlBuilder Plus (PS501) per sviluppare una applicazione di controllo e automazione di un sistema di alimentazione elettrica di soccorso per un CED piuttosto esteso, che girerà su una coppia di CPU della serie AC500 in configurazione HA (high availability, ovvero con bus di campo in comune, ma processori e alimentazioni ridondate).

Perché ho deciso di utilizzare il CFC?

Prima di tutto vediamo quali sono le caratteristiche di questo "linguaggio". Le virgolette sono d'obbligo, in quanto il CFC non è un vero e proprio linguaggio, ma una trasposizione grafica evoluta di un più classico SFC (Sequential Function Chart).

La differenza principale si trova nel non essere vincolati a transizioni e step, ma di poter disporre liberamente blocchi funzione, commenti e macro sull'area di lavoro e connettere terminali di ingresso e uscita utilizzando dei comodi connettori con autorouting.

Inoltre uno stesso input può essere connesso a diversi altri blocchi anche senza ripeterne la chiamata. Inoltre l'ambiente di sviluppo assegna autonomamente un ordine di esecuzione (modificabile) ai blocchi funzione e alle assegnazioni, di modo che è possibile avere un validissimo ausilio nella lettura del codice.

Da quanto detto emergono quindi tre caratteristiche che possiamo riassumere come:
1) Sintassi molto aderente al SFC e al FBD (Function Block Diagram);
2) Possibilità di organizzare il codice in modo flessibile;
3) Facilità di lettura.

Normalmente, un progetto esecutivo di un sistema di automazione può ritenersi soddisfatto alla presentazione di una serie di flow chart più o meno dettagliati, lasciando allo sviluppatore il compito di redigere l'analisi di dettaglio dopo l'approvazione. In questo caso, invece, il cliente richiede un progetto molto dettagliato, dal momento che desidera entrare nel merito delle scelte a causa della delicatezza dell'applicazione.

Considerata l'esigenza, il modo più rapido per "disegnare" le logiche è quello di farlo utilizzando un simbolismo logico più specifico del flow chart, dove si possano vedere singoli elementi e operatori. Il CFC soddisfa questa esigenza, ed è sufficientemente flessibile da consentire di aggiungere commenti e testi esplicativi. Inoltre ha il vantaggio che il progetto approvato sarà esattamente quello che verrà realizzato, o meglio, che è già realizzato.

Non è però tutto rose e fiori.

Il design delle logiche con il Continuous Function Chart, per quanto assistito, è una attività che costringe a considerare subito moltissimi dettagli ed è dunque molto dispendiosa in termini di tempo.

Un altro svantaggio di questo linguaggio è il fatto che non è contemplato tra i linguaggi della norma IEC 61131-3, anche se solitamente supportato dai principali ambienti di sviluppo compliant con la norma.

I programmi sviluppati con il CFC sono più "lunghi" di quelli sviluppati in testo strutturato, in quanto i graficismi occupano spazio; anche la traduzione automatica a ST (Structured Text) o a FBD (sempre possibile su CoDeSys) genera programmi più lunghi di un buon 40% e questo impatta necessariamente anche sulla dimensione del compilato, rappresentando un potenziale problema per sistemi con poca memoria a disposizione).

L'applicazione che ho realizzato è descritta utilizzando al massimo una pagina per ciascun POU (Program Organization Unit) e il tutto rientra entro le 60 POU.

Links

CoDeSys by 3S-Smart Software Solutions GmbH (http://www.codesys.com/products/codesys-engineering/development-system.html)

Automation Builder by ABB (http://www.abb.com/product/ap/db0094db009472/b3b84e193a0a9e94c1257c1b004b5266.aspx)