Meccatronica 2008 – Carlo Alberto Avizzano
NOZIONI INTRODUTTIVE
ALL’USO DI STATEFLOW
Motivazioni
Non tutti i problemi dinamici si possono risolvere con rappresentazioni ISO corrispondenti a
sistemi lineari. Molto spesso sia i sistemi che i relativi controllori devono venir realizzati tramite
sistemi non lineari. Basti pensare al funzionamento di oggetti di uso comune come televisori,
frigoriferi, forni a microonde, ventilatori, lavatrici,…
L’elemento distintivo di questi sistemi e’ il fatto che il loro funziomento agisce secondo una
logica chiara e comprensibile in risposta a situazioni od eventi che si presentano dall’esterno, ad
esempio la pressione di pulsanti, il raggiungimento di situazioni a regime, il verificarsi di
condizioni di errore…
Esistono diversi meccanismi automatici per l’implementazione di questi sistemi. tra questi la
categoria piu’ diffusa e’ quella delle macchine a stati finiti. Una macchina a stati finiti e’ un
automa, il cui vettore di stato puo’ assumere solo un numero limitato di configurazioni e le cui
uscite e funzione di transizione dello stato sono combinazioni non lineari dello stato corrente.
Un macchina a stati finiti e’ particolarmente comoda per la sua semplicita’ di implementazione
sia tramite meccanismi automatici (es. Stateflow) che mediante procedure manuali di
generazione del codice. Esistono diverse metodologie per rappresentare le macchine a stati finiti
(Es. Reti di Petri) Noi utilizzeremo quella introdotta in matlab
Osservazioni
Non seguiremo un approccio formale alla definizione delle proprieta’ di
una macchina a stati finiti. Piuttosto un approccio pratico inteso a
comprendere come impiegarle per la risoluzione di problemi tipici
Vedremo un approccio incrementale introducendo passo per passo le
caratteristiche delle componenti di una macchina a stati finiti
Quindi approfondiremo alcuni aspetti di modellazione e sintassi
impliciti del linguaggio.
Definizione del problema
Si consideri di dover affrontare lo sviluppo di un sistema di controllo per
un cancello automatico.
Avremo a nostra disposizione una uscita da controllare (la velocita’ del
motore) e 4 differenti intressi (due fotocellule, un comando di apertura
e la posizione del cancello)
Supporremo a questo livello che tutti I controlli di basso livello per
asservire in posizione e velocita’ siano noti (in quanto demandabili alla
logica di controllo esterna) e ci concentreremo sul problema di
implementare la logica di movimentazione
Stateflow
Stateflow (SF) e’ una componente integrata dell’ambiente di sviluppo
Matlab/Simulink. Stateflow utilizza una notazione particolare di macchina a
stati proposta da Harel e basata sul concetto di stati e transizioni.
All’ambiente di sviluppo, vi si accede trascinando sugli schemi di simulink il
blocco relativo ad una macchina SF. Per regolarne le proprieta’ sara’ quindi
necessario effettuare una operazione di doppio click sulla relativa macchina.
Come vedremo il simbolismo adottato consentira’ di definire oggetti complessi
dalla logica sequenziale, parallela, gerarchica e funzionale, consentendo in
questo modo al linguaggio di programmazione grafico la stessa potenzialita’
espressiva di un linguaggio di programmazione funzionale.
Ambiente di sviluppo
L’ambiente di sviluppo di stateflow, e’ anche esso grafico
come quello di simulink. Data la maggior linearita’ del
funzionamento vi sono tuttavia molto meno tipologie di
blocchi da conoscere
Cio’ non rispecchia una minore flessibilita’ di
comportamento in quanto ogni blocco risulta poi essere
programmabile in maniera indipendente, consentendo in
questo modo una “infinita” potenzialita’ espressiva
L’ambiente di sviluppo e’ quindi completamente integrato
con quello di simulink con il quale puo’ scambiarsi dati e
valori delle costanti in tempo reale, durante la simulazione
o il controllo di applicazioni embedded
Schema semplice
Al cuore del funzionamento vi sono
due elementi: gli stati e le transizioni
L’esempio piu’ semplice che si puo’
fornire e’ quello di una lampadina che
puo’ assumere due stadi
Acceso e spento.
Ad ogni stato e’ possibile associare
quindi la transizione che conduce
nell’altro stato
Elements di un diagramma
Gli stati
Gli stati sono delle posizioni stabili in cui il sistema persiste fino all’accadere di
un nuovo evento esterno. Ogni stato deve essere definito tramine una etichetta
univoca per tutta la macchina.
La funzione di evoluzione, determinata dalle transizioni puo’ procedere ad
eventi, ovvero a condizioni logiche determinate da variabili estern (input) o di
stato
Condizioni ed operazioni possono essere effettuate su un set arbitrario di
variabili che e’ possibile definire come asservite alla macchina a stati tramite un
opportuno pannello di controllo.
Ogni stato ha tre fasi principali: ingresso (entry), durata (during) ed uscita (exiti).
Per ogni fase e’ possibile determinare in simil codice C eventuali riassegnazioni
delle variabili interne e/o di uscita
Una transizione aggiuntiva (denominata history) determina lo stato di ingresso
di una macchina.
Gerarchie di stati
Gli stati possono essere organizzati in
maniera gerarchica
• Ad esempio in una automobile lo stato delle spie
sul cruscotto puo` dipendere dal macrostato
acceso/spento
• Per definire l’organizzazione gerarchica degli stati
basta una inclusione grafica (nel diagramma)
• Ogni macrostato contiene tutti gli stati
completamente definiti
Quando sono presenti delle gerarchie di
stati, in ogni istante il sistema
considerera’ attivi lo stato piu’ interno e
la gerarchia diretta dello stesso.
• Essendo attivi tutti questi stati saranno valutate
tutte le rispettive transizioni e le rispettive azioni
Esempio di integrazione:
Uno stabilizzatore di temperatura per ambienti
Implementazione
Le transizioni
Le transizioni sono dei rami orientati che definiscono le condizioni per cui si
puo` verificare una transizione di stato. Ogni transizione viene definita da
una sintassi condizionale oppure basata su eventi come segue:
• Sintassi: evento[condizione]{azione su condizione;}/ azione su transizione;
La sintassi delle transizioni e’ divisa in quattro parti:
• Gli eventi che possono essere generati esternamente o sollevati tramite la stessa sintassi;
• Le condizioni, simili al codice di un “if” identificano una condizione logica che se vera
determina la transizione
• Le azioni su condizione vengono eseguite ogni qual volta il test sulla condizione risulta
essere vero
• Le azioni su transizione vengono invece eseguite ogni volta che il SF decide di effettuare la
transizione (puo’ differire in caso di presenza di giunzioni)
La transizione di Default
 Le transizioni di default rimuovono
ambiguita` di esecuzione;
 In una macchina a stati la transizione di
default illustra quale stato sara’ il primo ad
essere eseguito;
 Quando posta in uno stato composto una
transizione di default indica il sottostato di
partenza (se le transizioni arrivano allo stato
superiore)
Le transizioni su gerarchie
Le transizioni i di uno stesso livello che stati di livello
gerarchico differente.
Quando puntano ad un sottolivello le transizioni attivano
simultaneamente piu` stati (quello interno e la sua gerarchia).
Quando passano ad un livello piu’ alto esse determinano le
condizioni di uscita da tutti gli stati attivi
Se si verifica una condizione di transizione da un macrostato
verranno valutate le azioni di uscita da tutti i sottostati
Le giunzioni storiche
 Le giunzioni storiche offrono un meccanismo
per ricordare quale stato era attivo nel
momento di disattivazione di un macrostato e
di reimpostarlo in caso di riattivazione
 In un certo senso esse offrono un meccanismo
per “sospendere” le attivita` di valutazione di
un macrostato e
riprendere alla
riattivazione come
avviene nel
multitasking di processi
Disambiguamento
E’ opportuno che le transizioni di uscita non siano ambigue
• Valide cioe` simultaneamente per le medesime condizioni
In tal caso sempre una sola transizione risulta valida
In caso di ambiguita` il sistema preferenzia la transizione
vincente secondo la regola dell’orologio analogico
• Vince l’ora piu’ piccola
E’ possibile chiedere al sistema di illustrare la priorita tra le
condizioni ambigue
Le Giunzioni
Le giunzioni somigliano per certi versi agli stati, nel senso che esse
possono ospitare transizioni in ingresso ed in uscita:
• Una giunzione puo` sia raggruppare che diramare i flussi
di controllo
A differenza degli stati, tuttavia esse introducono invece il concetto di
flusso di controlli ed azioni che devono essere effettuate tutte
all’interno di un passo di campionamento (non vi si soggiorna)
Le giunzioni possono richiamarsi ricorsivamente.
• In questo caso spettera’ alle azioni su condizione garantire una evoluzione tale per cui
vi sia uscita
• Utili ad e esempio nella realizzazione di un ciclo for
Nel caso che un ramo di uscita di uno stato abbia delle giunzioni, esso
verra’ selezionato se e solo se esiste una catena di controlli ed
operazioni che conduce ad un altro stato
• In tal caso tali controlli/operazioni verranno tutti effettuati in un unico passo di
valutazione
• Le giunzioni trovano pertanto particolare valore rispetto agli stati quando si vuole
implementare una procedura che deve essere eseguita “a corpo” e non divisa su
diversi istanti di campionamento
Decomposizione
 Il parallelismo tra piu’ operazioni puo’ essere
ottenuto ricorrendo alle operazioni di
decomposizione (tasto destro del mouse in
un determinato livello gerarchico)
 Quando due stati procedono in parallelo sono
rappresentati da un contorno tratteggiato.
 Anche se paralleli le variabili sono condivise
tra tutti gli stati della macchina.
Variabili e I/O
Come fa lo Stateflow a comunicare verso l’esterno la
propria evoluzione e a prendere informazioni
dall’esterno.
All’interno dei menu’ e’ possibile dichiarare un
insieme di variabili che possono essere associati
rispettivamente a:
•
•
•
•
Ingressi prelevati dall’ambiente simulink
Uscite da riportare a simulink
Variabili interne (locali o globali a qualisiasi livello di gerarchia)
Costanti
Variabili e I/O
 La variabile t e’ predefinita ed indica il tempo
di simulazione
 Le variabili interne e di IO possono essere
scalari e vettori
Explorer
 Eventi e variabili
possono essere definiti
all’interno dell’explorer
(CTRL+R, ALT+T+E)
 Gli eventi possono
essere sia espliciti
(chiamati dalle azioni)
oppure impliciti:
entra(stato),
Cambio(stato),
uscita(stato), oppure
ancora esterni (come
segnali associati ad
inputs)
Gestione del parallelismo
Le macchine a stati possono anche
eseguire conti in parallelo tra
sottostati (a qualsiasi livello di
gerarchia).
Tale possibilita’ e` segnalata su uno
stesso livello di gerarchia (e di
incapsulamento) da un tratteggio
sui bordi dello stato
Macchine in esecuzione parallela
possono andare in competizione
sulle risorse!!!
Esempi di esecuzione parallela
 In generale il conflitto
di risorse in una
esecuzione parallela
non dovrebbe essere
prodotto;
 Componenti parallele
devono servire a
calcolare aspetti
complementari di una
comune evoluzione
dinamica
 In una automobile
molti componenti
possono essere
parallelizzati:
 Monitor di benzina
 Monitor di velocita e
statistiche di viaggio
 Per poi essere riuniti
nel sottosistema che
stima il consumo
medio
Esempio (Da Barbarisi)
Esempio (Da Barbarisi)
Modello
Serbatoio
A
Modello
Serbatoio
C
Esempio (FSM)
Esempio (schema)
Scarica

Meccatronica 2008