Main Content

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

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.

OperatoreSintassiDescrizione

after

after(n,sec)

Restituisce true se sono trascorsi n secondi di simulazione dall'attivazione dello stato associato. Altrimenti, l'operatore restituisce false.

elapsed

elapsed(sec)

Restituisce il numero di secondi di simulazione trascorsi dall'attivazione dello stato associato.

duration

duration(C)

Restituisce il numero di secondi di simulazione trascorsi da quando la condizione booleana C diventa true.

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 diventa false.

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.

Chart modeling a bang-bang controller. Subcharts appear as opaque boxes to hide the low-level details of the chart.

Le etichette sulle transizioni tra gli stati secondari On e Off definiscono il comportamento del controller bang-bang.

TransizioneEtichettaDescrizione
Da On a Offafter(20,sec)Transizione allo stato Off dopo aver trascorso 20 secondi nello stato On.
Da Off a Onafter(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 OffturnOffQuando 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.

Simulation Data Inspector showing the output of the chart.

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.

The Off substate.

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.

The On substate.

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.

Simulation Data Inspector showing the output of the chart.

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.

  1. Inserire nuove azioni di stato che chiamano gli operatori elapsed e duration.

    • Nello stato On, lasciare che Timer1 sia la durata di tempo in cui lo stato On è attivo:

      en,du,ex: Timer1 = elapsed(sec)

    • Nello stato Off, lasciare che Timer2 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.

  2. Nel riquadro Symbols, fare clic su Resolve Undefined Symbols . L'editor Stateflow risolve i simboli Timer1 e Timer2 come dati di output .

  3. Abilitare la registrazione di Timer1 e Timer2. Nel riquadro Symbols, selezionare ciascun simbolo. Quindi, nella sezione Property Inspector, sotto Logging, selezionare Log signal data.

  4. Nella scheda Simulation, fare clic su Run .

  5. Nella scheda Simulation, sotto Review Results, fare clic su Data Inspector .

  6. In Simulation Data Inspector (Controllo dei dati di simulazione), visualizzare i segnali boiler e Timer1 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.

    Simulation Data Inspector showing the output of the chart.

  7. In Simulation Data Inspector (Controllo dei dati di simulazione), visualizzare i segnali boiler e Timer2 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).

    Simulation Data Inspector showing the output of the chart.

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.

Argomenti complementari