Planen von Diagrammaktionen mithilfe temporaler Logik
Um das Verhalten eines Stateflow-Diagramms hinsichtlich der Simulationszeit zu definieren, schließen Sie temporale Logikoperatoren in die Zustands- und Übergangsaktionen des Diagramms ein. Temporale Logikoperatoren sind integrierte Funktionen, die darüber informieren, wie lange ein Zustand aktiv bleibt oder dass eine Boolesche Bedingung wahr bleibt. Mit temporaler Logik können Sie das Timing folgender Elemente regeln:
Übergänge zwischen Zuständen
Funktionsaufrufe
Änderungen variabler Werte
Dies sind die gängigsten Operatoren für temporale Logik der Absolutzeit:
after
—after(n,sec)
gibttrue
zurück, fallsn
Sekunden Simulationszeit verstrichen sind, seit der Zustand, der den Operator enthält, oder der Quellenzustand des Übergangs, der den Operator enthält, aktiv wurde. Anderenfalls gibt der Operatorfalse
zurück. Dieser Operator unterstützt ereignisabhängige temporale Logik und temporale Logik der Absolutzeit in Sekunden (sec
), Millisekunden (msec
) und Mikrosekunden (usec
).elapsed
—elapsed(sec)
gibt die Anzahl der Sekunden der Simulationszeit zurück, die seit der Aktivierung des zugeordneten Zustands verstrichen sind.duration
—duration(C)
gibt die Anzahl der Sekunden der Simulationszeit zurück, die verstrichen sind, seit die Boolesche BedingungC
wahr (true
) geworden ist.
Modellieren eines Zweipunkt-Temperaturreglers
In diesem Beispiel wird mithilfe temporaler Logik ein Zweipunktregler modelliert, der die Innentemperatur eines Boilers regelt.
Das Beispiel besteht aus einem Stateflow-Diagramm und einem Simulink®-Subsystem. Das Bang-Bang Controller
-Diagramm (Zweipunktregler) vergleicht die aktuelle Boilertemperatur mit einem Sollwert und bestimmt, ob der Boiler eingeschaltet wird. Das Boiler Plant Model
-Subsystem (Boileranlagenmodell) modelliert die Dynamik innerhalb des Boilers, indem es seine Temperatur abhängig vom Status des Reglers erhöht bzw. senkt. Die Boilertemperatur wird vom Diagramm dann beim nächsten Schritt in der Simulation verwendet.
Das Bang-Bang Controller
-Diagramm verwendet den temporalen Logikoperator after
, um Folgendes auszuführen:
Regeln des Timings des Zweipunktzyklus, wenn der Boiler zwischen dem eingeschalteten und dem ausgeschalteten Zustand hin- und herwechselt.
Regeln einer Status-LED, die abhängig vom Betriebsmodus des Boilers unterschiedlich schnell blinkt.
Die Timer, die das Verhalten der Boiler- und LED-Subsysteme definieren, arbeiten unabhängig voneinander, ohne die Simulation des Reglers zu blockieren oder zu unterbrechen.
Timing des Zweipunktzyklus
Das Diagramm Bang-Bang Controller
umfasst ein Paar untergeordneter Zustände, die die beiden Betriebsmodi des Boilers darstellen: On
und Off
. Das Diagramm gibt mithilfe der Ausgabedaten zum aktiven Zustand (boiler
) an, welcher untergeordnete Zustand aktiv ist.
Die Bedingungen für die Übergänge zwischen den untergeordneten Zuständen On
und Off
definieren das Verhalten des Zweipunktreglers:
Beim ersten Übergang von
On
zuOff
schaltet die Bedingungafter(20,sec)
den Boiler aus, nachdem er 20 Sekunden lang eingeschaltet war.Beim Übergang von
Off
zuOn
schaltet die Bedingungafter(40,sec)[cold()]
den Boiler ein, wenn die grafische Funktioncold()
anzeigt, dass die Boilertemperatur mindestens 40 Sekunden lang unter dem Sollwert lag.Beim zweiten Übergang von
On
zuOff
schaltet die triviale Bedingung den Boiler aus, wenn die interne Übergangslogik imOn
-Zustand feststellt, dass die Boilertemperatur auf oder über dem Sollwert liegt.
Als Folge dieser Übergangsaktionen hängt das Timing des Zweipunktzyklus von der aktuellen Temperatur des Boilers ab. Zu Beginn der Simulation, wenn der Boiler kalt ist, verweilt der Regler 40 Sekunden im Zustand Off
und 20 Sekunden im Zustand On
. Zum Zeitpunkt Sekunden erreicht die Temperatur des Boilers den Sollwert. Ab diesem Punkt muss der Boiler nur den Wärmeverlust während des Verweilens im Zustand Off
kompensieren. Der Regler verweilt 40 Sekunden im Zustand Off
und 4 Sekunden im Zustand On
.
Timing der Status-LED
Der Zustand Off
umfasst einen untergeordneten Zustand Flash
mit einem Selbstschleifen-Übergang, der von der Aktion after(5,sec)
ausgelöst wird. Aufgrund dieses Übergangs führt der untergeordnete Zustand, sofern der Zustand Off
aktiv ist, seine entry
-Aktion aus und ruft die grafische Funktion flash_LED
alle 5 Sekunden auf. Die Funktion schaltet den Wert des Ausgangssymbols LED
zwischen 0 und 1 um.
Der On
-Zustand ruft die grafische Funktion flash_LED
als kombinierte entry, during
-Aktion auf. Wenn der On
-Zustand aktiv ist, wird die Funktion bei jedem Zeitschritt der Simulation aufgerufen und der Wert des Ausgangssymbols LED
wird zwischen 0 und 2 umgeschaltet.
Daher hängt das Timing der Status-LED vom Betriebsmodus des Boilers ab. Beispiel:
Von bis Sekunden ist der Boiler ausgeschaltet und das LED-Signal wechselt alle 5 Sekunden zwischen 0 und 1.
Von bis Sekunden ist der Boiler eingeschaltet und das LED-Signal wechselt jede Sekunde zwischen 0 und 2.
Von bis Sekunden ist der Boiler ausgeschaltet und das LED-Signal wechselt alle 5 Sekunden zwischen 0 und 1.
Untersuchung des Beispiels
Untersuchen Sie mithilfe zusätzlicher temporaler Logik, wie sich das Timing des Zweipunktzyklus ändert, während sich die Temperatur des Boilers dem Sollwert nähert.
1. Geben Sie neue Zustandsaktionen ein, die die Operatoren elapsed
und duration
aufrufen:
Legen Sie im
On
-ZustandTimer1
als Zeitraum fest, in dem der ZustandOn
aktiv ist:
en,du,ex: Timer1 = elapsed(sec);
Legen Sie im
Off
-ZustandTimer2
als Zeitraum fest, in dem die Boilertemperatur den Sollwert erreicht oder überschritten hat:
en,du,ex: Timer2 = duration(temp>=reference);
2. Wählen Sie im Fensterbereich Symbols die Option Resolve Undefined Symbols aus. Der Stateflow-Editor löst die Symbole Timer1
und Timer2
als Ausgangsdaten auf.
3. Aktivieren Sie die Protokollierung für Timer1
und Timer2
. Wählen Sie im Fensterbereich Symbols jedes der Symbole aus. Wählen Sie anschließend im Property Inspector unter Logging die Option Log signal data aus.
4. Klicken Sie auf der Registerkarte Simulation auf Run.
5. Klicken Sie auf der Registerkarte Simulation unter Review Results auf Data Inspector.
6. Zeigen Sie im Simulation Data Inspector die Signale boiler
und Timer1
entlang desselben Achsensatzes an. Das Diagramm veranschaulicht Folgendes:
Die Phase
On
des Zweipunktzyklus dauert in der Regel bei einem kalten Boiler 20 Sekunden und bei einem warmen Boiler 4 Sekunden.Wenn der Boiler die Solltemperatur zum ersten Mal erreicht, wird der Zyklus vorzeitig unterbrochen und der Regler verweilt nur 18 Sekunden lang im Zustand
On
.Bei einem warmen Boiler ist der erste Zyklus etwas kürzer als die folgenden Zyklen, da der Regler nur 3 Sekunden lang im Zustand
On
verweilt.
7. Zeigen Sie im Simulation Data Inspector die Signale boiler
und Timer2
entlang desselben Achsensatzes an. Das Diagramm veranschaulicht Folgendes:
Sobald der Boiler warm ist, dauert die Abkühlung in der Phase
Off
des Zweipunktzyklus in der Regel 9 Sekunden.Wenn der Boiler die Solltemperatur zum ersten Mal erreicht, dauert die Abkühlung 19 Sekunden, also mehr als doppelt so lange wie die anderen Zyklen.
Der kürzere Zyklus und die längere Abkühlzeit sind eine Folge der Hierarchie der untergeordneten Zustände innerhalb des Zustands On
. Wenn der Boiler die Solltemperatur zum ersten Mal erreicht, bleibt der Regler aufgrund des Übergangs von HIGH
zu NORM
einen zusätzlichen Zeitschritt lang eingeschaltet, wodurch der Boiler wärmer als normal ist. In späteren Zyklen führt die Verlaufsverknüpfung dazu, dass die Phase On
mit einem aktiven untergeordneten Zustand NORM
beginnt. Der Regler wird dann sofort ausgeschaltet, wenn der Boiler die Solltemperatur erreicht hat, was zu einem kühleren Boiler führt.