Main Content

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. Per ulteriori informazioni, vedere Modellazione di macchine a stati finiti.

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.

Stateflow chart with two states.

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 nome rectify.

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.

Default view of the Stateflow Editor.

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

  1. 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 stato y = x.

    Chart with one state, On.

  2. 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 in Off. Fare doppio clic sullo stato e modificare l'azione dello stato in y = 0.

    Chart with two states, On and Off.

  3. 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.

    Chart with the two states joined by transitions.

  4. Fare doppio clic su ogni transizione e digitare la condizione di transizione appropriata x<t0 o x>=t0. Le condizioni sono riportate tra parentesi quadre.

    Chart with transition conditions.

  5. 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.

  1. 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.

  2. 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 e t0 come dati di input e y come dati di output .

    • Se si sta costruendo un grafico autonomo da eseguire in MATLAB, l'editor Stateflow risolve t0, x e y come dati locali .

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. 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 a t0 e selezionare Constant Data.

  4. Impostare il valore della soglia t0. Nella colonna Value, fare clic sulla voce vuota accanto a t0 e inserire un valore pari a 0.

  5. 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.

  1. 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.

  2. 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.

  3. 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.

  4. Salvare il modello Simulink.

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. 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.

  6. 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.

    Scope block showing the input and output of the chart.

    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.

  1. Creare un oggetto grafico r utilizzando il nome del file sfx che contiene la definizione del grafico come funzione. Specificare il valore iniziale dei dati del grafico x come coppia nome-valore.

    r = rectify(x=0);
  2. 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 vettore Y è un accumulatore vuoto.

    T = 0:0.2:10;
    X = sin(T);
    Y = [];
  3. Eseguire l'oggetto grafico chiamando la funzione step più volte. Passare i singoli valori del vettore X come dati del grafico x. Raccogliere i valori risultanti di y nel vettore Y. 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
  4. Eliminare l'oggetto grafico r dall'area di lavoro MATLAB.

    delete(r)
  5. Esaminare i risultati dell'esecuzione del grafico. Ad esempio, è possibile chiamare la funzione stairs per creare un grafico a gradini che confronta i valori di X e Y.

    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")

    MATLAB figure showing the input and output of the chart.

    I risultati dell'esecuzione mostrano che il raddrizzatore filtra i valori negativi in input.

Argomenti complementari