Programmazione delle azioni del grafico tramite l'utilizzo della logica temporale
Per definire il comportamento di un grafico Stateflow® in termini di tempo di simulazione, occorre includere nelle azioni di stato e di transizione del grafico degli operatori logici temporali. Gli operatori logici temporali sono funzioni integrate che possono indicare il periodo di tempo in cui uno stato rimane attivo o una condizione booleana rimane vera. Grazie alla logica temporale, è possibile controllare la tempistica di:
Transizioni tra stati
Chiamate di funzione
Cambiamenti nei valori delle variabili
Per ulteriori informazioni, vedere Definizione del comportamento del grafico tramite l’utilizzo delle azioni.
Operatori di logica temporale
Gli operatori più comuni della logica temporale in tempo assoluto sono after
, elapsed
e duration
.
Operatore | Sintassi | Descrizione |
---|---|---|
| Restituisce | |
| Restituisce il numero di secondi di simulazione trascorsi dall'attivazione dello stato associato. | |
| Restituisce il numero di secondi di simulazione trascorsi da quando la condizione booleana |
Ciascun operatore azzera il timer ad esso associato ogni volta che:
Lo stato che contiene l'operatore si riattiva.
Lo stato sorgente della transizione che contiene l'operatore si riattiva.
La condizione booleana in un operatore
duration
diventafalse
.
Nota
Alcuni operatori, come ad esempio after
, supportano la logica temporale basata sugli eventi e la logica temporale in tempo assoluto in secondi (sec
), millisecondi (msec
) e microsecondi (usec
). Per ulteriori informazioni, vedere Control Chart Execution by Using Temporal Logic.
Esempio di logica temporale
Questo esempio utilizza la logica temporale per modellare un controller bang-bang, che regola la temperatura interna di una caldaia.
L'esempio consiste in un diagramma Stateflow e in un sottosistema Simulink®. Il grafico del controller bang-bang confronta la temperatura della caldaia con un punto di riferimento impostato e determina se accendere o meno la caldaia. Il sottosistema Modello impianto caldaia modella le dinamiche all'interno della caldaia, aumentando o diminuendo la sua temperatura in base allo stato del controller. La temperatura della caldaia viene quindi reinserita nel grafico del controller per la fase successiva della simulazione.
Il grafico del controller bang-bang utilizza l'operatore di logica temporale after
per:
Regolare la tempistica del ciclo di bang-bang in cui la caldaia si alterna tra accensione e spegnimento.
Controllare un LED di stato che lampeggia a velocità diverse a seconda della modalità di funzionamento della caldaia.
I timer che definiscono il comportamento dei sottosistemi caldaia e LED funzionano indipendentemente l'uno dall'altro e non bloccano o interrompono la simulazione del controller.
Tempistica del ciclo di bang-bang
Il grafico Bang-Bang Controller contiene una coppia di stati secondari che rappresentano le due modalità di funzionamento della caldaia, On
e Off
. Il grafico utilizza i dati di output dello stato attivo boiler
per indicare quale stato secondario è attivo.
Le etichette sulle transizioni tra gli stati secondari On
e Off
definiscono il comportamento del controller bang-bang.
Transizione | Etichetta | Descrizione |
---|---|---|
Da On a Off | after(20,sec) | Transizione allo stato Off dopo aver trascorso 20 secondi nello stato On . |
Da Off a On | after(40,sec)[cold()] | Quando la temperatura della caldaia è inferiore al punto di riferimento impostato e determinato dalla funzione grafica cold() , passa allo stato On dopo aver trascorso almeno 40 secondi nello stato Off . |
Da On a Off | turnOff | Quando la logica di transizione interna nello stato On richiede lo spegnimento della caldaia perché la temperatura della caldaia è pari o superiore al punto di riferimento impostato, passa allo stato Off . |
Per effetto di queste azioni di transizione, la tempistica del ciclo di bang-bang dipende dalla temperatura della caldaia. All'inizio della simulazione, quando la caldaia è fredda, il controller passa 40 secondi nello stato Off
e 20 secondi nello stato On
. Al tempo t = 478 secondi, la temperatura della caldaia raggiunge il punto di riferimento. Da quel momento in poi, la caldaia deve compensare solo il calore perso mentre si trova nello stato Off
. Il controller passa quindi 40 secondi nello stato Off
e 4 secondi nello stato On
.
Tempistica del LED di stato
Lo stato Off
contiene uno stato secondario Flash
con una transizione self-loop protetta dall'azione after(5,sec)
. A causa di questa transizione, quando lo stato Off
è attivo, lo stato secondario esegue la sua azione di ingresso e chiama la funzione grafica flash_LED
ogni 5 secondi. Questa funzione alterna il valore del simbolo di output LED
tra 0 e 1.
Lo stato On
chiama la funzione grafica flash_LED
come azione di stato di tipo en,du
. Quando lo stato On
è attivo, richiama la funzione a ogni passaggio temporale della simulazione (in questo caso, ogni secondo), facendo variare il valore del simbolo di output LED
tra 0 e 2.
Di conseguenza, la tempistica del LED di stato dipende dalla modalità di funzionamento della caldaia. Ad esempio:
Da t = 0 a t = 40 secondi, la caldaia è spenta e il segnale
LED
alterna 0 e 1 ogni 5 secondi.Da t = 40 a t = 60 secondi, la caldaia è accesa e il segnale
LED
alterna 0 e 2 ogni secondo.Da t = 60 a t = 100 secondi, la caldaia è di nuovo spenta e il segnale
LED
alterna 0 e 1 ogni 5 secondi.
Analisi dell'esempio
Utilizzare una logica temporale aggiuntiva per studiare in che modo la tempistica del ciclo di bang-bang varia man mano che la temperatura della caldaia si avvicina al punto di riferimento impostato.
Inserire nuove azioni di stato che chiamano gli operatori
elapsed
eduration
.Nello stato
On
, lasciare cheTimer1
sia la durata di tempo in cui lo statoOn
è attivo:en,du,ex: Timer1 = elapsed(sec)
Nello stato
Off
, lasciare cheTimer2
sia la durata di tempo in cui la temperatura della caldaia è pari o superiore al punto di riferimento impostato:en,du,ex: Timer2 = duration(temp>=reference)
L'etichetta
en,du,ex
indica che queste azioni si verificano ogni volta che lo stato corrispondente è attivo.Nel riquadro Symbols, fare clic su Resolve Undefined Symbols
. L'editor Stateflow risolve i simboli
Timer1
eTimer2
come dati di output.
Abilitare la registrazione di
Timer1
eTimer2
. Nel riquadro Symbols, selezionare ciascun simbolo. Quindi, nella sezione Property Inspector, sotto Logging, selezionare Log signal data.Nella scheda Simulation, fare clic su Run
.
Nella scheda Simulation, sotto Review Results, fare clic su Data Inspector
.
In Simulation Data Inspector (Controllo dei dati di simulazione), visualizzare i segnali
boiler
eTimer1
nella stessa serie di assi. Il grafico mostra che:La fase
On
del ciclo di bang-bang dura in genere 20 secondi quando la caldaia è fredda e 4 secondi quando la caldaia è calda.La prima volta che la caldaia raggiunge la temperatura di riferimento, il ciclo viene interrotto in anticipo e il controller rimane nello stato
On
per soli 18 secondi.Quando la caldaia è calda, il primo ciclo è leggermente più breve dei cicli successivi, poiché il controller rimane nello stato
On
per soli 3 secondi.
In Simulation Data Inspector (Controllo dei dati di simulazione), visualizzare i segnali
boiler
eTimer2
nella stessa serie di assi. Il grafico mostra che:Una volta che la caldaia è calda, in genere impiega 9 secondi per raffreddarsi nella fase
Off
del ciclo di bang-bang.La prima volta che la caldaia raggiunge la temperatura di riferimento, impiega più del doppio del tempo per raffreddarsi (19 secondi).
Il ciclo più breve e il tempo di raffreddamento più lungo sono una conseguenza della gerarchia di stati secondari presenti all'interno dello stato On
. Quando la caldaia raggiunge la temperatura di riferimento per la prima volta, la transizione da HIGH
a NORM
mantiene il controller attivo per un passaggio temporale in più, determinando una caldaia più calda del normale. Nei cicli successivi, il collegamento cronologico fa sì che la fase
On
inizi con uno stato secondario attivo NORM
. A quel punto il controller si spegne subito dopo che la caldaia ha raggiunto la temperatura di riferimento, determinando una caldaia più fredda.