6
complessi, due comuni strutture: scelta su sincronizzazione (errata) e divergenza su
convergenza (ambigua). Per la realizzazione di tali funzionalità è stata fondamentale
l’implementazione di una libreria di oggetti per l’SFC che consentisse, mediante l’istanza
dinamica degli oggetti fase e transizione, di ricrearne una rappresentazione utile per una sua
analisi e una successiva traduzione.
una serie di moduli, ovvero di librerie a collegamento dinamico (DLL), demandate alla
generazione automatica di linguaggio eseguibile per specifiche piattaforme. In particolare, si
sono implementati due “driver” per PLC (Allen Bradley SLC 500 e Siemens Simatec S5) e
un driver di compilazione in sorgente C ANSI per la generazione automatica di codice
eseguibile.
L’utilizzo dell’approccio dinamico, nell’implementazione dei driver, consente l’aggiunta di
ulteriori moduli di compilazione per nuove piattaforme. La realizzazione degli stessi, è
inoltre indipendente dall’ambiente di sviluppo utilizzato in questo lavoro di tesi, potendo
essere ottenuti con qualunque strumento software in grado di generare DLL. Il linguaggio di
programmazione utilizzato è il C++ e in particolare l’ambiente di sviluppo è il Borland C++
Builder Professional 4.0.
Fig.2 – L’ SFC Metalanguage WorkTool
Nella seconda parte della tesi si è affrontata la ricerca di un metodo di specifica formale e
successiva implementazione di sistemi di controllo basato sulla teoria CPS (Communicating
Sequential Processes); lo scopo è mostrare come, a partire da una descrizione informale delle
specifiche funzionali del sistema complessivo, si possa ottenere un modello del sistema di
controllo in termini di metalinguaggio. La descrizione informale del sistema di controllo consiste
nella lista dei suoi componenti e per ogni componente: della lista di eventi possibili in cui è
coinvolto e delle relative specifiche temporali; della lista di tutti i possibili stati; della lista di
assunzioni sugli stati. Il comportamento di ogni componente è sequenziale: se un processo
7
realizza azioni in parallelo, ciò significa che il relativo componente deve essere ulteriormente
decomposto in sottosistemi più elementari. A partire dalla descrizione informale si deriva una
specifica basata sulle tracce - una sequenza di eventi - in cui il singolo componente il sistema di
controllo è coinvolto. Dall’insieme delle tracce base (che descrive l’insieme dei comportamenti
fattibili di un processo dal suo evento iniziale all’evento finale) si ricava l’SFC in
metalinguaggio. L’insieme degli SFC concorrenti così ottenuti rappresenta il sistema di
controllo. Si è infine mostrato la possibilità di impiego di un supervisore, per soddisfare la
specifica di assunzioni esterne tra i processi componenti il sistema di controllo.
Infatti, la disponibilità di diversi componenti il sistema di controllo, come risultato del metodo
illustrato, si presta all’applicazione del concetto di controllo supervisionato che consente di
separare chiaramente il controllore del processo e il supervisore. Con quest’approccio il
supervisore può forzare l’occorrenza di alcuni eventi nel processo.
8
1 Una versione "accademica'' del Sequential Functional Chart
In questo capitolo è presentato il linguaggio SFC così come trattato nel corso di Ingegneria e
Tecnologia dei Sistemi di Controllo. La sintassi è leggermente diversa da quella della Norma
1
anche se le regole di evoluzione sono le stesse. In ambito accademico tale linguaggio, insieme
alla rappresentazione con reti di Petri, si presta bene a descrivere ed analizzare i sistemi ad
eventi.
1.1 Gli elementi di base
Per quanto riguarda gli aspetti grafici come pure le regole di evoluzione, essi sono pienamente
rispondenti alla Norma.
1.1.1 Passi
Ad ogni passo o fase, è associato un numero ‘n’ per identificarla e un marker di fase
contraddistinto con ‘Xn’. La Norma prevede un identificativo alfanumerico con il marker
associato del tipo xxx.X (dove ‘xxx’ rappresenta il nome della fase).
La variabile temporale associata al passo, che la norma indica con xxx.T e che contiene il tempo
trascorso dall'attivazione della fase xxx, non è esplicitamente implementata ma viene associata
alla condizione di superamento della transizione attraverso una variabile booleana indicata con
t/Xn/d inizialmente nulla; diventa 1 (TRUE) quando il tempo trascorso dall'ultima attivazione
continuata del passo 'Xn' supera il valore ‘d’, e vale 0 (FALSE) quando il passo viene disattivato.
Può tra l’altro, essere utilizzata per implementare manualmente il comportamento delle azioni
che richiedono i qualificatori temporali nel blocco Action Block descritto dalla Norma e qui non
implementato.
1.1.2 Transizioni
Le transizioni sono indicate con Tn dove ‘n’ è il numero della transizione.
Notiamo esplicitamente che, in alcuni linguaggi proposti da alcuni costruttori di PLC, se più
transizioni di una scelta sono superabili contemporaneamente, è superata solo quella con priorità
più elevata. Il linguaggio proposto dal testo [1] rispetta invece le regole fissate dalla Norma,
prevedendo il superamento contemporaneo di tutte le transizioni.
1
Si veda la norma IEC 1131-3
9
1.1.3 Tipi di Azioni
La azioni sono descritte in linguaggio naturale, al fine di rendere comprensibile il funzionamento
e facilitare la successiva codifica in uno dei linguaggi supportati dai PLC.
Le azioni possono essere caratterizzate da qualificatori cui sono associati particolari simboli
grafici e che rappresentano un sottoinsieme dei qualificatori descritti dalla Norma:
1.1.3.1 Azione Continuata
E’ il tipo di azione normale (di default) che viene attivata e disattivata in corrispondenza
dell'attivazione e della disattivazione della fase alla quale è associata. Non è previsto alcun
simbolo grafico particolare per rappresentarla ed equivale al qualificatore ‘N’.
1.1.3.2 Azione Condizionata
Rappresenta una novità rispetto alla Norma e consiste nel fatto che l’azione viene eseguita se il
passo cui è associata è attivo ed è vera una condizione booleana generica. E' indicata
graficamente con una freccia rivolta verso il blocco della fase sulla quale è esplicitamente
indicata la condizione di attivazione.
1.1.3.3 Azione Limitata nel Tempo
E' un caso particolare di azione condizionata nella quale però la condizione è espressa dalla
variabile temporale (booleana - vedi sopra) associata al passo e negata. Simula il qualificatore
‘L’ della Norma.
1.1.3.4 Azione impulsiva
E’ l’implementazione del qualificatore ‘P’ della norma e graficamente si indica facendo seguire
al nome dell'azione un asterisco (‘NomeAzione’*).
1.1.3.5 Azione Ritardata
Analoga all’azione Limitata nel Tempo, è implementata ponendo come condizione nell’azione
Condizionata la variabile temporale associata al passo, in modo che l’azione venga eseguita dopo
un certo intervallo di tempo. Simula il qualificatore ‘D’ della Norma.
10
1.1.3.6 Azione Memorizzata
E’ indicata con SET ‘NomeAzione’ e simula il comportamento del qualificatore ‘S’. La keyword
RESET simula invece il qualificatore ‘R’. Combinando tale azione con un condizionamento di
quelli appena elencati è possibile implementare il comportamento di uno qualsiasi dei
qualificatori descritti dalla Norma.
1.1.4 Le Strutture Classiche
Si tratta delle strutture di scelta, convergenza, parallelismo e sincronizzazione pienamente
compatibili con le stesse descritte dalla Norma.
La struttura “Semaforo”' e “Sincronizzazione Locale”, sono delle particolari implementazioni
delle strutture precedenti. Servono, la prima per realizzare una mutua esclusione tra due segmenti
di SFC che non devono funzionare contemporaneamente (perché magari agiscono sulla stessa
risorsa) e la seconda a sincronizzare appunto due sequenze differenti che stanno operando in
parallelo.
1.1.5 Macrofase e Macroazione
La macrofase è introdotta per raggruppare un intero segmento di SFC in un unico passo. Il
segmento di SFC deve essere costituito da un’unica fase d’ingresso ed un’unica fase d’uscita.
Dal punto di vista della compatibilità con la Norma, può essere considerata a tutti gli effetti
come una fase a cui è associato un blocco di azioni descritte a loro volta in linguaggio SFC.
La macroazione è un’azione che ha effetti sulla condizione e lo stato di un altro SFC, ed è
introdotta per realizzare gerarchie tra SFC. Le macroazioni definite sono: forzatura, sospensione
e bloccaggio. Diciamo esplicitamente che, siccome la macroazione comporta un cambiamento
dello stato di un SFC e quindi una assegnazione indiretta del marker booleano di fase (xxx.X =
TRUE/FALSE), tale azione è considerata per la norma un errore e quindi assolutamente non
compatibile con essa.
1.1.6 Forzatura:
Permette ad un SFC di livello gerarchico superiore di forzare quelli di livello inferiore ad
assumere un certo stato (fasi attive). Viene indicata con “FORZARE X:{Y}” dove X è l’SFC da
forzare mentre Y è l'insieme dei passi attivi. L’effetto è equivalente all’aggiunta di una
transizione superabile in uscita da tutte le fasi che non devono diventare attive, e di una in
ingresso a quelle che lo devono diventare. Osserviamo che una tale tipologia, con transizioni
11
“appese” però è puramente esplicativa e non rispetta le regole di sintassi di un SFC. E’ comodo
immaginarla così per rendere il lavoro di traduzione in Ladder più semplice.
1.1.7 Sospensione:
Analoga alla forzatura ma con l'attivazione di nessuna fase. E' indicata con ''FORZARE X:{ }''.
1.1.8 Bloccaggio:
L’effetto è di arrestare l’evoluzione dell’SFC controllato e quindi bloccarne il superamento di
tutte le transizioni. Viene indicato con “FORZARE X:{*}” ed equivale ad inserire una “AND
Xn” a tutte le transizioni dell'SFC controllato, con Xn = “fase abbinata alla azione di
bloccaggio”.
12
2 Il MetaLinguaggio
La necessità di poter integrare vari tool per l’SFC ha portato all’utilizzo in un linguaggio testuale
semplice e in corrispondenza ‘uno a uno’ con l'SFC originale. Il metalinguaggio, per
convenzione risiede in file con estensione .mlf editabili con qualsiasi editor di testo. La
possibilità di importare un file del genere consente anche di poter scrivere in via testuale l'SFC.
2.1 Sintassi
La sintassi del metalinguaggio è stata ‘presa in prestito’, con alcune piccole modifiche, dalla
Norma IEC1131-3.
Segue una descrizione delle parole chiave che identificano un progetto:
Per l'intero progetto:
BEGIN_PROJECT;
………
………
END_PROJECT;
Per ogni SFC:
SFC <sfc_num> : <sfc_name>;
………
………
END_SFC;
dove: <sfc_num > identifica il numero dell'SFC;
<sfc_name > identifica il nome dell'SFC;
Per ogni passo:
STEP <step_name > : <action_name>(<qualifier,[time]>) :
END_STEP;
dove:
13
<step_name> identifica il nome del passo;
<action_name> identifica il nome dell'azione associata al passo;
<qualifier> identifica il qualificatore d'azione tra:
Qualificatore
azione
Tipo di azione
N Azione Continua
S Azione Memorizzata
R Azione Memorizzata
L, T#xd_xh_xm_xs_xms Azione Limitata nel
tempo
D, T#xd_xh_xm_xs_xms Azione Ritardata
C, Condizione Booleana; Azione Condizionata
[time] identifica il valore della variabile di tipo tempo legata ai qualificatori temporali
secondo la specifica T#xd_xh_xm_xs_xms: (d:giorni, h:ore, m:minuti, s:secondi,
ms:millisecondi);
Per ogni Transizione la sintassi è:
TRANSITION <trans_name> FROM (<step_name[,step_name,[...]]>) TO
(<step_name[,step_name,[...]]>) := <boolean_condition>;
dove:
<trans_name> identifica il nome della transizione;
<boolean_condition> identifica la condizione booleana di superamento della transizione
(Default = TRUE);
Di seguito si riporta un esempio di SFC e del relativo metalinguaggio:
BEGIN_PROJECT;
SFC 1 : NoName;
INITIAL_STEP S101 : No Action(N) : END_STEP;
TRANSITION T101 FROM S101 TO S102 := TRUE;
TRANSITION T102 FROM S101 TO S103 := TRUE;
TRANSITION T103 FROM S101 TO (S104,S105) := TRUE;
STEP S102 : No Action(N) : END_STEP;
STEP S103 : No Action(N) : END_STEP;
TRANSITION T107 FROM S103 TO S109 := TRUE;
Tabella 2.1 – Azioni della norma
14
STEP S104 : No Action(N) : END_STEP;
STEP S105 : No Action(N) : END_STEP;
STEP S106 : No Action(N) : END_STEP;
STEP S107 : No Action(N) : END_STEP;
STEP S108 : No Action(N) : END_STEP;
TRANSITION T108 FROM (S106,S107,S108) TO S109 := TRUE;
STEP S109 : No Action(N) : END_STEP;
TRANSITION T109 FROM S109 TO (S110,S111) := TRUE;
STEP S110 : No Action(N) : END_STEP;
STEP S111 : No Action(N) : END_STEP;
TRANSITION T110 FROM (S110,S111) TO S112 := TRUE;
STEP S112 : No Action(N) : END_STEP;
TRANSITION T113 FROM (S104,S105) TO S101 := TRUE;
TRANSITION T117 FROM S112 TO S101 := TRUE;
TRANSITION T118 FROM S102 TO (S106,S107,S108) := TRUE;
END_SFC;
END_PROJECT;
3 Sviluppo software di un CAD per la realizzazione di SFC su
macchine per l’elaborazione
Figura 2.1 – Esempio di SFC e
relativo metalinguaggio
15
3.1 Motivazione Generale
Le aziende costruttrici di PLC realizzano software specifico per la programmazione e la
supervisione delle loro macchine offrendo kit di sviluppo (i cosiddetti S.D.K. – Software
Development Kit) specifici per la macchina sulla quale devono essere installati. Di solito
inglobano nei loro linguaggi le funzionalità tipiche di un ben determinato PLC.
Ci sono poi altre aziende produttrici di software di sviluppo, come ISaGRAF della CJ
International, che tentano di offrire all'utente una piattaforma standard di programmazione con la
possibilità di acquistare pacchetti di interfacce per adattare il software standard alla macchina
“target” specifica.
La norma IEC 1131-3 fornisce uno standard di riferimento per i linguaggi di programmazione
dei controllori programmabili e a tale norma fanno più o meno riferimento le aziende produttrici
di software, cercando di uniformare il loro prodotto allo standard pur senza riuscirci.
E’ evidente come avere a disposizione un'unica sintassi e un'unica organizzazione dei programmi
e delle risorse per qualunque modello di macchina programmabile, nell'ambito dell'automazione,
industriale porti a notevoli vantaggi, quali ad esempio far lavorare insieme macchine diverse o
programmare un’unica volta il software per qualsiasi controllore, che faccia parte di un unico
progetto di controllo, anche molto complesso.
L’SFC MetaLanguage WorkTool nasce sull’idea di realizzare una serie di tool software in
ambito accademico, “aperti”, semplici e versatili, che contemplino i contenuti della Norma
riguardanti il Sequential Functional Chart e che possano interfacciarsi col mondo esterno
attraverso un semplice file di testo (MetaLanguage File - MLF) che descrive “testualmente”
l'intero SFC o più SFC (un progetto). Lo scopo di questo tool è la traduzione automatica degli
SFC in linguaggio specifico per una certa marca di PLC, come il Ladder, visto che anche per
questo linguaggio non esiste standard di fatto.
Il punto di partenza del software è la possibilità di importare un progetto in metalinguaggio,
generato da un editor grafico di SFC o da un compilatore di tracce, allo scopo di integrarsi
nell’ambito del progetto più generale prima citato.
3.2 Documentazione esterna dell’SFC MetaLanguage WorkTool
16
L’ambiente di sviluppo scelto, per la realizzazione del software, è il Borland C++ Builder
Professional 4.0 e il linguaggio di programmazione utilizzato è il C++. La scelta è ricaduta su
tale prodotto per la potenza offerta dal linguaggio C++, congiuntamente alla versatilità e relativa
semplicità della libreria di progettazione visuale, Visual Component Library, distribuita con
l’ambiente di sviluppo.
Il software è stato scritto realizzando uno sforzo di progetto che consentisse la massima
versatilità possibile, soprattutto in termini di successive implementazioni di driver per diverse
macchine di elaborazione. La struttura del programma è infatti modulare e composta di due parti.
Una prima parte autonoma, l’SFC MetaLanguage WorkTool, è l’ambiente di sviluppo, per
l’importazione, l’editing, l’analisi sintattica del metalinguaggio e degli SFC ed inoltre per
l’analisi comportamentale degli stessi, allo scopo di individuare, in SFC comunque complessi,
due comuni strutture: scelta su sincronizzazione (errata) e divergenza su convergenza (ambigua).
La seconda parte è un insieme di librerie a collegamento dinamico, “driver (DLL)”, per la
generazione automatica di linguaggio eseguibile per specifiche piattaforme. Informazioni
dettagliate sulla realizzazione delle varie funzionalità sono riportate nel paragrafo 3.3).
3.2.1 Utilizzo del programma
Il programma si presenta come mostrato in figura 3.2 in cui sono evidenti:
• Un Menu di scelta;
• Una Tool Bar;
• Quattro barre di stato;
• Un campo di editing testuale;
mediante cui è possibile accedere a tutte le funzionalità disponibili.
Menu
Tool Bar
Campo per
l’editing
Figura 3.1 – Logo
17
3.2.1.1 Configurazione driver di compilazione
A questa opzione si può accedere:
a) mediante menu alla voce PLC -> Driver PLC
b) mediante il pulsante Configura della ToolButton
Barra di Stato: Suggerimenti
Barra di Stato: Messaggi
Barra di Stato: Driver di compilazione attivo
Barra di Stato: File di Progetto
Figura 3.2 – La Finestra Principale
Figura 3.3 – Il menu Driver PLC e il relativo pulsante
18
In ogni caso si accede alla dialog box di configurazione dei driver di compilazione:
in cui sono evidenti:
• una sezione per la aggiunta di driver di compilazione, in cui sono evidenziati, un campo
testuale per la descrizione del PLC (min 3 caratteri) ed un pulsante Sfoglia per la selezione
del driver dinamico di compilazione. La pressione del pulsante Sfoglia conduce alla dialog
box di selezione del driver di compilazione come mostrato in figura.
Il pulsante Aggiungi, diviene attivo solo se il file selezionato è stato riconosciuto come driver
di compilazione valido (maggiori informazioni sono fornite nel paragrafo 3.3).
In tale ipotesi la pressione del pulsante aggiunge il driver di compilazione alla lista corrente.
Figura 3.4 – Finestra di dialogo di gestione driver
Figura 3.5 – Finestra di selezione dei driver
19
• una sezione per la eliminazione di un driver di compilazione. La selezione di un driver dalla
lista dell’elenco dei driver installati rende attivo il pulsante Elimina per l’eliminazione del
driver dalla lista. Il driver rimane comunque disponibile su disco.
• il pulsante Continua consente di chiudere la dialog box di configurazione dei driver di
compilazione.
3.2.1.2 Apri/Crea file di metalinguaggio
A questa opzione si può accedere:
a) mediante menu alla voce File -> Apri / Nuovo
b) mediante i pulsanti Apri / Nuovo della Tool Bar
In ogni caso la scelta Apri conduce alla dialog box di importazione di un file di metalinguaggio:
Figura 3.6 – Il menu Apri/Crea file di metalinguaggio e
relativi pulsanti
Figura 3.7 – Finestra di selezione di un file di metalinguaggio