Collegamento delle transizioni per creare percorsi e diagrammi di flusso
È possibile collegare più transizioni in un unico percorso, un percorso ramificato o un diagramma di flusso utilizzando i collegamenti.
In Stateflow®, un percorso è costituito da una o più transizioni che collegano una sorgente a una destinazione. È possibile creare un percorso con più transizioni collegando ciascuna transizione a un collegamento. I collegamenti sono oggetti grafici che rappresentano un punto di decisione e appaiono come cerchi nell'area di disegno. Ad esempio, nel grafico sottostante, diverse transizioni e collegamenti formano un unico percorso da uno stato all'altro.

Quando un grafico valuta un percorso, valuta ogni transizione collegata nello stesso passo temporale, nell'ordine da sorgente a destinazione ed esegue tutte le azioni condizionali che incontra. Se il grafico incontra una condizione falsa, interrompe la valutazione del percorso. Se il grafico non incontra alcuna condizione falsa lungo il percorso, si sposta dalla sorgente alla destinazione.
Ad esempio, nel grafico soprastante, un percorso con più transizioni collega uno stato sorgente a uno stato di destinazione. Se tutte le condizioni sul percorso sono vere, il grafico imposta x su 0, 1 e poi su 2. Quindi, nello stesso passo, il grafico esce dallo stato sorgente ed entra nello stato di destinazione.
Tuttavia, se a e c sono maggiori di 0, ma b non lo è, il grafico imposta invece x su 0 e interrompe la valutazione del percorso.
È possibile creare più transizioni da o verso uno stato o un collegamento. Se uno stato o un collegamento presenta più transizioni in uscita, il grafico mostra l'ordine di valutazione. Se il grafico si sposta lungo uno dei percorsi, non valuta i percorsi rimanenti. È possibile modificare l'ordine facendo clic con il tasto destro del mouse sulla transizione, quindi su Execution Order (Ordine di esecuzione) e scegliendo un nuovo ordine.
Ad esempio, il grafico sottostante valuta il percorso dallo stato A allo stato B prima del percorso dallo stato A allo stato C.

In Stateflow, un diagramma di flusso si riferisce a un grafico o stato i cui figli consistono esclusivamente di collegamenti e transizioni. Tutti i percorsi in un diagramma di flusso devono terminare in un unico punto di collegamento condiviso. È possibile creare un diagramma di flusso a qualsiasi livello della gerarchia del grafico.

In questo esempio, si aggiunge un diagramma di flusso a un modello di sistema di batterie ricaricabili. Il diagramma di flusso abbina l'output del sistema di batterie alla richiesta del dispositivo collegato, senza superare i limiti della batteria.
Apertura del modello
Per costruire il modello, seguire le istruzioni riportate nel passaggio precedente del tutorial. In alternativa, utilizzare il pulsante Open Model (Apri modello) in alto e aprire il modello sfGetStartedFlowchart.

Fare doppio clic sul blocco Chart per inserire il grafico Battery.

Gli stati Charge e Discharge rappresentano le modalità operative del sistema di batterie. Ogni stato contiene stati figli che rappresentano le velocità di carica e scarica man mano che la batteria si riempie o si svuota. L'input isCharging determina lo stato attivo. I dati sentPower e charge rappresentano la potenza di output in watt e il livello di carica della batteria.
Creazione di un diagramma di flusso
Attualmente, quando la batteria si sta scaricando e contemporaneamente è alimentata, eroga sempre la stessa potenza in watt. Nello stato Powered, creare un diagramma di flusso che abbini l'output della batteria alla richiesta del dispositivo collegato, senza superare un valore massimo.
Aggiungere un percorso che rappresenti il dispositivo che richiede più potenza di quella che la batteria è in grado di fornire.
Nello stato
Discharge, rimuove l'azioneentry.Nello stato
Powered, rimuove l'azioneduring.Nello stato
Powered, aggiungere il primo collegamento. Nella tavolozza, fare clic sull'icona Collegamento. Posizionare il collegamento nello statoPowered.Aggiungere un secondo collegamento a destra del primo collegamento.
Aggiungere un terzo collegamento sotto il secondo collegamento.
Disegnare una transizione dal primo collegamento al secondo. Aggiungere la condizione
[deviceDemand>maxPower].Disegnare una transizione dal secondo collegamento al terzo. Aggiungere l'azione
{sentPower=maxPower;}.

Aggiungere un percorso che rappresenti la richiesta di potenza entro i limiti della batteria.
Aggiungere un quarto collegamento sotto il primo collegamento.
Disegnare una transizione dal primo collegamento al quarto. Aggiungere l'azione
{sentPower=deviceDemand;}.Creare una transizione dal terzo collegamento al quarto.
I numeri sul primo collegamento indicano l'ordine di valutazione. La transizione contrassegnata con [deviceDemand>maxPower] ha l'etichetta di ordine 1, che indica che viene valutata per prima. La transizione contrassegnata con {sentPower=deviceDemand;} ha l'etichetta di ordine 2, che indica che viene valutata per seconda.

Un collegamento terminale è un collegamento che non presenta transizioni in uscita. Collegare entrambi i percorsi a un collegamento terminale condiviso. Nella transizione al collegamento terminale, ridurre la carica della batteria in proporzione alla potenza di output in watt.
Aggiungere un quinto collegamento sotto il quarto collegamento.
Creare una transizione dal quarto collegamento al quinto. Aggiungere l'azione
{charge=charge-sentPower;}.

Valutazione durante i passi attivi utilizzando le transizioni interne
Le transizioni interne sono l'equivalente grafico di un'azione during. Quando uno stato contiene una transizione interna, la transizione interna viene valutata a ogni passo in cui lo stato è attivo, ma non nei passi in cui lo stato diventa attivo o inattivo. Se uno stato contiene sia transizioni interne che transizioni tra stati figli, le transizioni interne vengono valutate per prime. È possibile creare una transizione interna disegnando una transizione dal fronte di uno stato a un oggetto all'interno di quello stato.
Disegnare una transizione interna dal fronte dello stato Powered al primo collegamento.

Definizione dei dati del grafico
Definire i dati creati nel diagramma di flusso.
Nel riquadro Symbols (Simboli), nella riga
maxPower, sotto Type (Tipo), fare clic sull'icona e selezionareLocal Data. Impostare il valore su3.5.Nella riga
deviceDemand, sotto Type (Tipo), fare clic sull'icona e selezionareInput Data.Nella riga
charge, impostare il valore su100.

Aggiungere un blocco che si collega alla porta di input deviceDemand.
Aprire il modello ad alto livello.
Aggiungere un blocco Sine Wave. Collegare la porta di output alla porta deviceDemand del grafico
Battery.Specificare che l'onda sinusoidale inizia a
0e raggiunge un valore massimo di5. Fare doppio clic sul blocco per aprire la finestra di dialogo del blocco, quindi impostare i parametri amplitudine e bias su2.5. Impostare il parametro fase su-pi/4.Fare clic con il tasto destro del mouse sulla linea del segnale dal blocco Sine Wave al grafico
Battery, quindi fare clic su Log selected signals (Registra i segnali selezionati). Ripetere questo passo per la linea del segnale dal graficoBatteryal blocco Scope.

Simulazione del modello
Simulare il modello e osservare i risultati.
Per simulare il modello, nella scheda Simulation (Simulazione), fare clic su Run (Esegui).
Per aprire il Simulation Data Inspector, nella scheda Simulation (Simulazione), fare clic su Data Inspector.
Nella scheda Inspect (Esamina), selezionare
Battery:1eSine Wave:1.

La potenza di output in watt della batteria corrisponde all'aumento e alla diminuzione del consumo energetico, fino a un massimo di 3.5. Verso la fine della simulazione, la batteria si scarica e la potenza di output in watt scende a 0.
Il sistema di batterie genera potenza come previsto. Tuttavia, se la batteria si scarica, il sistema non può più funzionare.
Nella fase successiva del tutorial, si aggiunge una batteria di emergenza non ricaricabile che mantiene le funzioni essenziali se la batteria principale si scarica. Per modellare il funzionamento simultaneo delle batterie, si utilizzano stati ed eventi paralleli.