Main Content

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

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:

  • afterafter(n,sec) gibt true zurück, falls n 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 Operator false zurück. Dieser Operator unterstützt ereignisabhängige temporale Logik und temporale Logik der Absolutzeit in Sekunden (sec), Millisekunden (msec) und Mikrosekunden (usec).

  • elapsedelapsed(sec) gibt die Anzahl der Sekunden der Simulationszeit zurück, die seit der Aktivierung des zugeordneten Zustands verstrichen sind.

  • durationduration(C) gibt die Anzahl der Sekunden der Simulationszeit zurück, die verstrichen sind, seit die Boolesche Bedingung C 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 zu Off schaltet die Bedingung after(20,sec) den Boiler aus, nachdem er 20 Sekunden lang eingeschaltet war.

  • Beim Übergang von Off zu On schaltet die Bedingung after(40,sec)[cold()] den Boiler ein, wenn die grafische Funktion cold() anzeigt, dass die Boilertemperatur mindestens 40 Sekunden lang unter dem Sollwert lag.

  • Beim zweiten Übergang von On zu Off schaltet die triviale Bedingung den Boiler aus, wenn die interne Übergangslogik im On-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 $t = 478$ 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 $t = 0$ bis $t = 40$ Sekunden ist der Boiler ausgeschaltet und das LED-Signal wechselt alle 5 Sekunden zwischen 0 und 1.

  • Von $t = 40$ bis $t = 60$ Sekunden ist der Boiler eingeschaltet und das LED-Signal wechselt jede Sekunde zwischen 0 und 2.

  • Von $t = 60$ bis $t = 100$ 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-Zustand Timer1 als Zeitraum fest, in dem der Zustand On aktiv ist:

  en,du,ex: Timer1 = elapsed(sec);
  • Legen Sie im Off-Zustand Timer2 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.

Verwandte Themen