Costruzione ed esecuzione di un grafico Stateflow
Un grafico Stateflow® è la rappresentazione grafica di una macchina a stati finiti composta da stati, transizioni e dati. Si può creare un grafico Stateflow per definire in che modo un algoritmo MATLAB® o un modello Simulink® reagisce a segnali di input esterni, eventi e condizioni temporali.
Ad esempio, questo grafico Stateflow presenta la logica alla base di un raddrizzatore a semionda. Il grafico contiene due stati etichettati On
e Off
. Nello stato On
, il segnale di output del grafico y
è uguale all'input x
. Nello stato Off
, il segnale di output è impostato su zero. Quando il segnale di input supera una determinata soglia t0
, il grafico passa da uno stato all'altro. Le azioni in ogni stato aggiornano il valore di y
a ogni passaggio temporale della simulazione.
Questo esempio mostra in che modo creare questo grafico Stateflow per la simulazione in Simulink e l'esecuzione in MATLAB.
Costruzione del grafico Stateflow
Apertura dell'editor Stateflow
L'editor Stateflow è un ambiente grafico per la progettazione di diagrammi di transizione di stato, diagrammi di flusso, tabelle di transizione di stato e tabelle della verità. Prima di aprire l'editor Stateflow, decidere la modalità di esecuzione del grafico che meglio soddisfa le proprie esigenze.
Per modellare la logica condizionale, basata sugli eventi e sul tempo per algoritmi periodici o a tempo continuo Simulink, utilizzare la funzione
sfnew
, così da creare un grafico Stateflow da simulare come blocco in un modello Simulink. Al prompt dei comandi MATLAB, inserire:sfnew rectify % create chart for simulation in a Simulink model
Simulink crea un modello chiamato
rectify
che contiene un blocco vuoto Stateflow Chart. Per aprire l'editor Stateflow, fare doppio clic sul blocco del grafico.Per progettare macchine a stati e logiche di temporizzazione riutilizzabili per applicazioni MATLAB, utilizzare la funzione
edit
, così da creare un grafico Stateflow autonomo che può essere eseguito come oggetto MATLAB. Al prompt dei comandi MATLAB, inserire:edit rectify.sfx % create chart for execution as a MATLAB object
Se il file
rectify.sfx
non esiste, l'editor Stateflow crea un grafico vuoto con il nomerectify
.
I componenti principali dell'editor Stateflow sono l'area di disegno, la tavolozza degli oggetti e il riquadro Symbols.
L'area di disegno del grafico è un'area in cui è possibile creare un grafico combinando stati, transizioni e altri elementi grafici.
Sul lato sinistro dell'area di disegno, la palette degli oggetti mostra una serie di strumenti per aggiungere elementi grafici al grafico.
Sul lato destro dell'area di disegno, nel riquadro Symbols, si aggiungono nuovi dati, eventi e messaggi al grafico e si risolvono eventuali simboli non definiti o non utilizzati.
Suggerimento
Dopo aver costruito il grafico Stateflow, è possibile copiare il suo contenuto in un altro grafico con una modalità di esecuzione diversa. Ad esempio, è possibile costruire un grafico per l'esecuzione in MATLAB e copiare il suo contenuto in un grafico per la simulazione in Simulink.
Aggiunta di stati e transizioni
Dalla tavolozza degli oggetti, fare clic sull'icona State e spostare il puntatore sull'area di disegno del grafico. Viene visualizzato uno stato con la relativa transizione predefinita. Per posizionare lo stato, fare clic su un punto dell'area di disegno. Al prompt di testo, inserire il nome dello stato
On
e l'azione dello statoy = x
.Aggiungere un altro stato. Fare clic con il tasto destro e trascinare lo stato
On
. I segni grafici in blu consentono di allineare gli stati in orizzontale o in verticale. Il nome del nuovo stato cambia inOff
. Fare doppio clic sullo stato e modificare l'azione dello stato iny = 0
.Riallineare i due stati e posizionarsi nello spazio tra i due stati. I segni di transizione blu indicano diversi modi in cui è possibile collegare gli stati. Per aggiungere le transizioni, fare clic sul segno appropriato.
In alternativa, per disegnare una transizione, fare clic e trascinare dal bordo di uno stato al bordo dell'altro stato.
Fare doppio clic su ogni transizione e digitare la condizione di transizione appropriata
x<t0
ox>=t0
. Le condizioni sono riportate tra parentesi quadre.Riordinare il grafico:
Per una maggiore chiarezza, spostare l'etichetta di ogni transizione in una posizione adeguata, sopra o sotto la transizione corrispondente.
Per allineare e ridimensionare gli elementi grafici del grafico, nella scheda Format, fare clic su Auto Arrange o premere Ctrl+Shift+A.
Per ridimensionare il grafico così da adattarlo all'area di disegno, premere la barra spaziatrice o fare clic sull'icona Fit To View .
Risoluzione di simboli non definiti
Prima di poter eseguire il grafico, è necessario definire ogni simbolo utilizzato nel grafico e specificarne l'ambito (ad esempio, dati di input, dati di output o dati locali). Nel riquadro Symbols, i simboli non definiti sono contrassegnati da un simbolo di errore rosso . La colonna Type mostra l'ambito suggerito per ogni simbolo non definito in base al suo utilizzo nel grafico.
Aprire il riquadro Symbols.
Se si sta costruendo un grafico in un modello Simulink, nella scheda Modeling, sotto Design Data, selezionare Symbols Pane.
Se si sta costruendo un grafico autonomo da eseguire in MATLAB, nella scheda State Chart, selezionare Add Data > Symbols Pane.
Nel riquadro Symbols, fare clic su Resolve Undefined Symbols .
Se si sta costruendo un grafico in un modello Simulink, l'editor Stateflow risolve i simboli
x
et0
come dati di input ey
come dati di output .Se si sta costruendo un grafico autonomo da eseguire in MATLAB, l'editor Stateflow risolve
t0
,x
ey
come dati locali .
Poiché la soglia
t0
non cambia durante la simulazione, modificare il suo ambito in dati costanti. Nella colonna Type, fare clic sull'icona del tipo di dati accanto at0
e selezionareConstant Data
.Impostare il valore della soglia
t0
. Nella colonna Value, fare clic sulla voce vuota accanto at0
e inserire un valore pari a 0.Salvare il grafico Stateflow.
Il grafico è ora pronto per la simulazione in Simulink o per l'esecuzione in MATLAB.
Simulazione del grafico come blocco Simulink
Per simulare il grafico all'interno di un modello Simulink, collegare il blocco del grafico ad altri blocchi del modello attraverso porte di input e di output. Se si desidera eseguire il grafico dalla finestra dei comandi MATLAB, vedere Esecuzione del grafico come oggetto MATLAB.
Per tornare all'editor Simulink, nella barra di esplorazione nella parte superiore dell'area di disegno, fare clic sul nome del modello Simulink:
rectify
. Se la barra di esplorazione non è visibile, fare clic sull'icona Hide/Show Explorer Bar nella parte superiore della tavolozza degli oggetti.Aggiungere un’origine al modello:
Dalla Simulink Libreria delle origini, aggiungere un blocco Sine Wave (Simulink).
Fare doppio clic sul blocco Sine Wave e impostare Sample time su 0.2.
Collegare l'output del blocco Sine Wave all'input del grafico Stateflow.
Assegnare al segnale l'etichetta
x
.
Aggiungere un sink al modello:
Dalla Simulink Libreria dei sink, aggiungere un blocco Scope (Simulink) con due porte di input.
Collegare l'output del blocco Sine Wave al primo input del blocco Scope.
Collegare l'output del grafico Stateflow al secondo input del blocco Scope.
Assegnare al segnale l'etichetta
y
.
Salvare il modello Simulink.
Per simulare il modello, fare clic su Run . Durante la simulazione, l'editor Stateflow mette in evidenza gli stati attivi e le transizioni tramite l'animazione del grafico.
Dopo aver simulato il modello, fare doppio clic sul blocco Scope. L'ambito mostra i grafi dei segnali di input e di output sui grafici.
I risultati della simulazione mostrano che il raddrizzatore filtra i valori negativi in input.
Esecuzione del grafico come oggetto MATLAB
Per eseguire il grafico nella finestra dei comandi MATLAB, creare un oggetto grafico e chiamare la sua funzione di step
. Se si desidera simulare il grafico all'interno di un modello Simulink, vedere Simulazione del grafico come blocco Simulink.
Creare un oggetto grafico
r
utilizzando il nome del filesfx
che contiene la definizione del grafico come funzione. Specificare il valore iniziale dei dati del graficox
come coppia nome-valore.r = rectify(x=0);
Inizializzare i dati di input e di output per l'esecuzione del grafico. Il vettore
X
contiene i valori di input di un'onda sinusoidale. Il vettoreY
è un accumulatore vuoto.T = 0:0.2:10; X = sin(T); Y = [];
Eseguire l'oggetto grafico chiamando la funzione
step
più volte. Passare i singoli valori del vettoreX
come dati del graficox
. Raccogliere i valori risultanti diy
nel vettoreY
. Durante l’esecuzione, l'editor Stateflow mette in evidenza gli stati attivi e le transizioni tramite l'animazione del grafico.for i = 1:51 step(r,x=X(i)); Y(i) = r.y; end
Eliminare l'oggetto grafico
r
dall'area di lavoro MATLAB.delete(r)
Esaminare i risultati dell'esecuzione del grafico. Ad esempio, è possibile chiamare la funzione
stairs
per creare un grafico a gradini che confronta i valori diX
eY
.ax1 = subplot(2,1,1); stairs(ax1,T,X,color="#0072BD") title(ax1,"x") ax2 = subplot(2,1,2); stairs(ax2,T,Y,color="#D95319") title(ax2,"y")
I risultati dell'esecuzione mostrano che il raddrizzatore filtra i valori negativi in input.