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 indicano 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

Gli operatori seguenti sono quelli più comuni per la logica temporale a tempo assoluto:

  • after: after(n,sec) restituisce true se sono trascorsi n secondi di simulazione da quando lo stato che contiene l'operatore, o lo stato sorgente della transizione che contiene l'operatore, è diventato attivo. Altrimenti, l'operatore restituisce false. Questo operatore supporta la logica temporale basata sull'evento e la logica temporale a tempo assoluto espressa in secondi (sec), millisecondi (msec) e microsecondi (usec).

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

Modellazione di un controller di temperatura bang-bang

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 Bang-Bang Controller confronta la temperatura attuale della caldaia con un punto di riferimento impostato e determina se accenderla o meno. Il sottosistema Boiler Plant Model modella le dinamiche all'interno della caldaia, aumentando o diminuendo la temperatura in base allo stato del controller. Quindi, il grafico utilizza la temperatura della caldaia per la fase successiva della simulazione.

Il grafico Bang-Bang Controller l'operatore logico 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 condizioni sulle transizioni tra gli stati secondari On e Off definiscono il comportamento del controller bang-bang:

  • Nella prima transizione da On a Off, la condizione after(20,sec) spegne la caldaia dopo che la stessa è rimasta accesa per 20 secondi.

  • Nella transizione da Off a On, la condizione after(40,sec)[cold()] accende la caldaia quando la funzione grafica cold() indica che la temperatura della caldaia è inferiore al punto di riferimento impostato per almeno 40 secondi.

  • Nella seconda transizione da On a Off, la condizione elementare spegne la caldaia quando la logica di transizione interna nello stato On determina che la temperatura della caldaia è pari o superiore al punto di riferimento impostato.

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 impostato. Da quel momento, 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 attivata dall'azione after(5,sec). A causa di questa transizione, quando lo stato Off è attivo, lo stato secondario esegue l'azione entry 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 combinata entry, during. Quando lo stato On è attivo, questa azione chiama la funzione a ogni passaggio temporale della simulazione per alternare 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 si alterna tra 0 e 1 ogni 5 secondi.

  • Da $t = 40$ a $t = 60$ secondi, la caldaia è accesa e il segnale LED si alterna tra 0 e 2 ogni secondo.

  • Da $t = 60$ a $t = 100$ secondi, la caldaia è spenta e il segnale LED si alterna tra 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.

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

  • Nello stato On, impostare Timer1 come la durata di tempo in cui lo stato On è attivo:

  en,du,ex: Timer1 = elapsed(sec);
  • Nello stato Off, impostare Timer2 come 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);

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

3. Abilitare la registrazione di Timer1 e Timer2. Nel riquadro Symbols (Simboli), selezione ciascun simbolo. Quindi, nel Property Inspector (Controllo delle proprietà), sotto Logging (Registrazione), selezionare Log signal data (Registra dati segnale).

4. Nella scheda Simulation (Simulazione), fare clic su Run (Esegui).

5. Nella scheda Simulation (Simulazione), sotto Review Results (Revisiona risultati), fare clic su Data Inspector (Controllo dei dati).

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.

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 19 secondi per raffreddarsi, ossia più del doppio del tempo rispetto agli altri cicli.

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ù, comportando che la caldaia sia più calda del normale. Nei cicli successivi, il collegamento cronologico comporta 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 che la caldaia sia più fredda.

Argomenti complementari