Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Modellazione di macchine a stati finiti

Stateflow® è un ambiente di programmazione grafica basato su macchine a stati finiti. Grazie a Stateflow, è possibile testare e fare il debug del proprio progetto, considerare diversi scenari di simulazione e generare codice dalla propria macchina a stati.

Le macchine a stati finiti sono rappresentazioni di sistemi dinamici che passano da una modalità di funzionamento (stato) all'altra. Le macchine a stati:

  • Servono come punto di partenza di alto livello per un processo complesso di progettazione di software.

  • Consentono di concentrarsi sulle modalità operative e sulle condizioni necessarie per passare da una modalità all'altra.

  • Consentono di progettare modelli che rimangono chiari e concisi anche quando il livello di complessità dei modelli aumenta.

Per gestire una logica complessa, la progettazione dei sistemi di controllo si basa molto sulle macchine a stati. Le applicazioni di tali macchine includono la progettazione di aerei, automobili e sistemi di controllo robotici.

Esempio di un grafico Stateflow

In un grafico Stateflow si combinano stati, transizioni e dati per implementare una macchina a stati finiti. Il seguente grafico Stateflow presenta un modello semplificato della logica di cambio delle marce di un'automobile, in un sistema di trasmissione automatica a quattro velocità. Il grafico rappresenta ogni posizione di marcia con uno stato, mostrato come un rettangolo etichettato con first, second, third o fourth. Come le marce che rappresentano, questi stati sono esclusivi, quindi è attivo un solo stato alla volta.

Stateflow chart with states labeled first, second, third, and fourth. The chart transitions between the states when the speed is higher or lower than a specified amount.

La freccia a sinistra del grafico rappresenta la transizione predefinita e indica il primo stato che diventa attivo. Quando si esegue il grafico, questo stato viene evidenziato sull'area di disegno. Le altre frecce indicano le possibili transizioni tra gli stati. Per definire le dinamiche della macchina a stati, si associa ogni transizione a una condizione booleana o a un evento di attivazione. Ad esempio, questo grafico monitora la velocità dell'automobile e passa a una marcia diversa quando la velocità supera una soglia fissa. Durante la simulazione, le parti evidenziate del grafico cambiano quando i diversi stati diventano attivi.

Chart animation showing states and transitions activating.

Questo grafico presenta un progetto semplice che non tiene conto di fattori importanti come la velocità del motore e la coppia motrice. Si può creare un modello più completo e realistico collegando questo grafico Stateflow ad altri componenti in MATLAB® o Simulink®. I seguenti esempi descrivono tre approcci possibili.

Esecuzione del grafico come oggetto MATLAB

Questo esempio presenta la versione modificata di un sistema di trasmissione automatica che integra una gerarchia di stati, una logica temporale ed eventi di input.

  • Gerarchia: il grafico consiste in uno stato aggregato gear_logic che circonda il grafico del cambio automatico a quattro velocità dell'esempio precedente. Questo stato aggregato gestisce la velocità e l'accelerazione dell'automobile. Durante l'esecuzione, gear_logic è sempre attivo.

  • Logica temporale: nello stato gear_logic, l'azione on every(0.25,sec) determina la velocità dell'automobile. L'operatore every crea un timer MATLAB che esegue il grafico e aggiorna i dati del grafico speed ogni 0.25 secondi.

  • Eventi di input: gli eventi di input SpeedUp, Cruise e SlowDown azzerano il valore dei dati del grafico delta. Questi dati determinano se l'automobile accelera o mantiene la velocità in ogni fase di esecuzione.

Si può eseguire questo grafico come oggetto in MATLAB direttamente attraverso la finestra dei comandi o utilizzando uno script. Si può anche programmare un'applicazione MATLAB che controlla lo stato del grafico attraverso un'interfaccia grafica. Ad esempio, questa interfaccia utente invia un evento di input al grafico quando si fa clic su un pulsante. Nel grafico, la funzione MATLAB widgets controlla i valori degli indicatori e delle spie sull'interfaccia. Per avviare l'esempio, nella barra degli strumenti dell’app di progettazione fare clic su Eseguire. L'esempio continua a essere eseguito finché non viene chiusa la finestra dell'interfaccia utente.

In alternativa, nell'editor Stateflow, nella scheda Grafico dello stato, fare clic su Eseguire. Per controllare la velocità dell'automobile, nel riquadro Simboli, utilizzare i pulsanti Accelerazione, Rallentamento e Crociera. Per interrompere l'esempio, fare clic su Arrestare.

Per maggiori informazioni sull'esecuzione dei grafici Stateflow come oggetti MATLAB, vedere Esecuzione in MATLAB.

Simulazione del grafico come blocco Simulink con eventi locali

Questo esempio fornisce un progetto più complesso per un sistema di trasmissione automatica. Il grafico Stateflow appare come un blocco in un modello Simulink. Gli altri blocchi del modello rappresentano i componenti automobilistici correlati. Il grafico si interfaccia con gli altri blocchi condividendo i dati attraverso connessioni di input e output. Per aprire il grafico, fare clic sulla freccia nell'angolo in basso a sinistra del blocco shift_logic.

Questo grafico combina gerarchia di stati, parallelismo, dati di stato attivi, eventi locali e logica temporale.

  • Gerarchia: lo stato gear_state contiene una versione modificata del grafico del cambio automatico a quattro velocità. Lo stato selection_state contiene stati secondari che rappresentano lo stato di stazionamento e le modalità di funzionamento in salita e in discesa. Quando le circostanze richiedono un passaggio a una marcia superiore o inferiore, questi stati si attivano.

  • Parallelismo: gli stati paralleli gear_state e selection_state sono rappresentati da rettangoli con un bordo tratteggiato. Questi stati operano simultaneamente, anche se i gli stati secondari al loro interno si accendono e si spengono.

  • Dati sullo stato attivo: il valore di output gear riflette la scelta delle marce durante la simulazione. Il grafico genera questo valore dallo stato secondario attivo in gear_state.

  • Eventi locali: al posto delle condizioni booleane, questo grafico utilizza gli eventi locali UP e DOWN per attivare le transizioni tra le marce. Questi eventi hanno origine dai comandi send in selection_state quando la velocità dell'automobile esce dal range di funzionamento della marcia selezionata. La funzione di Simulink calc_th determina i valori limite per il range di funzionamento in base alla marcia selezionata e alla velocità del motore.

  • Logica temporale: per evitare una rapida successione di cambi di marcia, selection_state utilizzare l'operatore logico temporale after così da ritardare la trasmissione degli eventi UP e DOWN. Lo stato trasmette uno di questi eventi solo se è necessario un cambio di marcia per un periodo superiore a un tempo predeterminato TWAIT.

Per eseguire una simulazione del modello:

  1. Fare doppio clic sul blocco User Inputs. Nella finestra di dialogo dell’editor Signal, selezionare un profilo freno-acceleratore predefinito dall'elenco Scenario attivo. Il profilo predefinito è Passing Maneuver.

  2. Fare clic su Eseguire. Nell'editor Stateflow, l'animazione del grafico mette in evidenza gli stati attivi durante la simulazione. Per rallentare l'animazione, nella scheda Debug, selezionare Slow dall'elenco a discesa Velocità di animazione.

  3. Nei blocchi Scope, esaminare i risultati della simulazione. Ogni ambito mostra un grafico dei segnali di input durante la simulazione.

Simulazione del grafico come blocco Simulink con condizioni temporali

Questo esempio fornisce un'altra alternativa per modellare il sistema di trasmissione di un'automobile. Il grafico Stateflow appare come un blocco in un modello Simulink. Gli altri blocchi del modello rappresentano i componenti automobilistici correlati. Il grafico si interfaccia con gli altri blocchi condividendo i dati attraverso connessioni di input e output. Per aprire il grafico, fare clic sulla freccia nell'angolo in basso a sinistra del blocco Gear_logic.

Questo grafico combina la gerarchia degli stati, i dati sullo stato attivo e la logica temporale.

  • Gerarchia: questo modello colloca il grafico del cambio automatico a quattro velocità all'interno di uno stato aggregato gear. Lo stato aggregato monitora le velocità del veicolo e del motore e attiva i cambi di marcia. Le azioni elencate nell'angolo in alto a sinistra dello stato della marcia determinano le soglie di funzionamento per la marcia selezionata e i valori delle condizioni booleane up e down. L'etichetta en,du indica che le azioni dello stato vengono eseguite quando lo stato diventa attivo per la prima volta (en = entry) e a ogni passaggio temporale successivo mentre lo stato è attivo (du = during).

  • Dati sullo stato attivo: il valore di output gear riflette la scelta delle marce durante la simulazione. Il grafico genera questo valore dallo stato secondario attivo in gear.

  • Logica temporale: per evitare una rapida successione di cambi di marcia, le condizioni booleane up e down utilizzano l'operatore logico temporale duration così da controllare la transizione tra le marce. Le condizioni sono valide quando la velocità dell'automobile rimane al di fuori dell'intervallo di funzionamento della marcia selezionata per un periodo di tempo predeterminato TWAIT (misurato in secondi).

Per eseguire una simulazione del modello:

  1. Fare doppio clic sul blocco User Inputs. Nella finestra di dialogo dell’editor Signal, selezionare un profilo freno-acceleratore predefinito dall'elenco Scenario attivo. Il profilo predefinito è Passing Maneuver.

  2. Fare clic su Eseguire. Nell'editor Stateflow, l'animazione del grafico mette in evidenza gli stati attivi durante la simulazione. Per rallentare l'animazione, nella scheda Debug, selezionare Slow dall'elenco a discesa Velocità di animazione.

  3. Esaminare i risultati della simulazione nel blocco Scope. L'ambito mostra un grafico della marcia selezionata durante la simulazione.

Passaggi successivi