Interaktion von Stateflow-Objekten während der Ausführung
Dieses Beispiel zeigt, wie Stateflow®-Objekte während der Ausführung miteinander interagieren und so das Verhalten in der realen Welt simulieren. In diesem Beispiel wird anhand des Check-in-Prozesses eines Hotels gezeigt, wie gemeinsame grafische und nicht-grafische Objekte in einem Stateflow-Diagramm während der Ausführung interagieren.
Modell des Check-in-Prozesses in einem Hotel
Dieses Modell enthält ein Stateflow-Diagramm mit der Bezeichnung Hotel
. Das Diagramm erhält Eingangsereignisse von vier Manual Switch (Simulink) Blöcken, zwischen denen Sie umschalten können:
Check-in im Hotel
Zimmerservice rufen
Einen Feueralarm auslösen
Nach einem Feueralarm Entwarnung geben
Ein Mux (Simulink)-Block kombiniert diese Eingangsereignisse zu einem Eingangsvektor, der mit dem Trigger-Port auf der Oberseite des Diagramms verbunden ist.
Das Diagramm erhält auch ein Eingangssignal namens room_type
von einem Multiport Switch (Simulink) Block. Der Wert dieses Signals entspricht der Art des Raums, in dem Sie sich aufhalten möchten. Die möglichen Optionen sind "Executive"
für eine Executive Suite, "Family"
für eine Familiensuite und "Single"
für ein Einzelzimmer.
Während der Simulation erscheint der fällige Gesamtbetrag, einschließlich der Gebühren für den Zimmerservice, im Display (Simulink) Block.
Das Hotel
-Diagramm enthält grafische Objekte, wie z. B. Zustände und Verlaufsverbindungen, und nicht-grafische Objekte, wie z. B. Daten und Ereignisse. Informationen zum Anzeigen eines Bilds, das die Objekte in dieser Tabelle kennzeichnet, finden Sie unter Stateflow Objects.
Wenn Sie die Simulation starten, wird das Diagramm erst aktiviert, wenn es eine steigende oder fallende Kante in einem seiner Eingangsereignisse erkennt.
Wenn Sie einen manuellen Switch-Block umschalten, lösen Sie ein Eingangsereignis aus, das das Diagramm aktiviert. Während das Diagramm aktiv ist, liest es einen Wert für den Diagramm-Input room_type
aus dem Multiport-Switch-Block, führt alle gültigen Status- oder Übergangsaktionen aus und gibt den neuen Wert für fee
an den Display-Block aus.
Nach Abschluss aller möglichen Ausführungsphasen kehrt das Diagramm in den Ruhezustand zurück und wartet auf das nächste Eingangsereignis.
Diagramminitialisierung
Starten Sie die Simulation und lösen Sie eines der Eingangsereignisse aus. Diese Aktion entspricht dem Betreten des Hotels und dem Anhalten an der Rezeption.
Da die Diagrammeigenschaft Execute (enter) chart at initialization (Diagramm bei Initialisierung ausführen (Enter)) deaktiviert ist, bleibt das Diagramm inaktiv, bis es eine steigende oder fallende Kante in einem seiner Eingangsereignisse erkennt. Dann wird das Diagramm aktiviert und führt seine Standardübergänge aus. Der Standardübergang zum Zustand Check_in
erfolgt, wodurch dieser Zustand aktiviert wird. Dann erfolgt der Standardübergang zum Teilzustand Front_desk
, wodurch dieser Zustand aktiviert wird. Dann wird das Diagramm deaktiviert. Weitere Informationen finden Sie unter Execution of a Chart at Initialization und Eintreten in Diagramme oder Zustände.
Übergang zwischen Zuständen
Während der Teilzustand Front_desk
aktiv ist, lösen Sie das Eingangsereignis check_in
aus. Diese Aktion entspricht dem Check-in im Hotel. Sie nehmen Ihr Gepäck, gehen von der Rezeption zu Ihrem Zimmer und stellen Ihr Gepäck ab.
Im Diagramm bewacht das Ereignis check_in
den ausgehenden Übergang vom Teilzustand Front_desk
zum Teilzustand Checked_in
. Wenn Sie das Ereignis auslösen, wird der Übergang gültig. Die Ausgabeaktion von Front_desk
setzt den Wert des lokalen Datenobjekts move_bags
auf 1 und der Teilzustand wird inaktiv. Dann wird Checked_in
aktiv und die Eingabeaktion setzt move_bags
auf 0. Weitere Informationen finden Sie unter How Stateflow Charts Respond to Events, Verlassen eines Zustands und Eintreten in Diagramme oder Zustände.
Bewertung von Standard-Übergangspfaden
Nachdem das Diagramm die entry
-Aktionen im Zustand Checked_in
ausgeführt hat, wird der Standardübergangspfad zu einem der Teilzustände ausgewertet. Der aktivierte Teilzustand entspricht dem Raumtyp. Wenn Sie sich für eine Executive Suite entscheiden, beträgt die Grundgebühr 1500 USD. Wenn Sie sich für eine Familiensuite entscheiden, beträgt die Grundgebühr 1000 USD. Wenn Sie sich für ein Einzelzimmer entscheiden, beträgt die Grundgebühr 500 USD.
Das Diagramm testet die Zweige des Standardübergangspfads in folgender Reihenfolge:
Wenn die Eingabe in das Diagramm
room_type
gleich"Executive"
ist, ist der obere Übergang gültig. Die Bedingungsaktion setzt die Diagrammausgabe vonfee
auf 1500 und der TeilzustandExecutive_suite
wird aktiv.Wenn die Eingabe in das Diagramm
room_type
gleich"Family"
ist, ist der mittlere Übergang gültig. Die Bedingungsaktion setzt die Gebühr auf 1000 und der TeilzustandFamily_suite
wird aktiv.Andernfalls ist die Eingabe im Diagramm
room_type
gleich"Single"
und der untere Übergang ist gültig. Die Bedingungsaktion setzt die Gebühr auf 500 und der TeilzustandSingle_room
wird aktiv.
Weitere Informationen finden Sie unter Order of Execution for a Set of Flow Charts.
Ausführung von Zuständen mit exklusiven Teilzuständen
Wenn Sie das Eingangsereignis check_in
auslösen, während der Wert der Diagrammeingabe room_type
"Executive"
ist, wird der Teilzustand Executive_suite
aktiv. Dieser Teilzustand entspricht einem Aufenthalt in der Executive Suite. Diese Suite verfügt über separate Schlaf- und Essbereiche, sodass Sie sich immer nur in einem Bereich der Suite aufhalten können. Sobald Sie die Executive Suite betreten, gelangen Sie zuerst in das Schlafzimmer. Sobald Sie beim Zimmerservice bestellt haben, betreten Sie den Essbereich, um zu essen. Sollten Sie wünschen, dass das Essen aus dem Essbereich entfernt wird, rufen Sie erneut den Zimmerservice und begeben Sie sich wieder in Ihr Schlafzimmer.
Der Zustand Executive_suite
hat eine exklusive (ODER-)Zerlegung. Der Zustand hat zwei Teilzustände, Bedroom
und Dining_area
. Wenn Executive_suite
zum ersten Mal aktiv wird, erfolgt standardmäßig der Übergang zu Bedroom
, wodurch dieser Teilzustand aktiviert wird. Eine Übertragung des Eingangsereignisses room_service
löst den Übergang von Bedroom
zu Dining_area
aus, wodurch Bedroom
inaktiv und Dining_area
aktiv wird. Eine nachfolgende Übertragung von room_service
löst den Übergang von Dining_area
zurück zu Bedroom
aus, wodurch Bedroom
aktiv und Dining_area
inaktiv wird. Weitere Informationen finden Sie unter Eintreten in Diagramme oder Zustände.
Ausführen des Zustands mit parallelen Teilzuständen
Wenn Sie das Eingangsereignis check_in
auslösen, während der Wert der Diagrammeingabe room_type
"Family"
ist, wird der Teilzustand Family_suite
aktiv. Dieser Teilzustand entspricht einem Aufenthalt in der Familiensuite. In der Suite können die Familienmitglieder in zwei Schlafzimmern Zeit verbringen. Zum Beispiel können die Eltern im ersten Schlafzimmer einen Film schauen, während die Kinder im zweiten Schlafzimmer schlafen.
Der Zustand Family_suite
hat eine parallele (UND-)Zerlegung. Der Zustand hat zwei Teilzustände, First_bedroom
und Second_bedroom
. Wenn Family_suite
aktiv wird, werden die parallelen Zustände gemäß ihrer Ausführungsreihenfolge aktiviert, wie durch die Zahl in der oberen rechten Ecke jedes Zustands angegeben. Die Teilzustände bleiben gleichzeitig aktiv. Weitere Informationen finden Sie unter Ausführungsreihenfolge für parallele Zustände und Eintreten in Diagramme oder Zustände.
Funktionsaufruf aus einer Zustandsaktion
Während der Teilzustand Checked_in
aktiv ist, lösen Sie das Eingangsereignis room_service
aus. Diese Aktion entspricht dem Rufen des Zimmerservice. Ihre Hotelrechnung hängt von der Zimmerkategorie und der Anzahl der Zimmerserviceanfragen ab.
Wenn das Diagramm eine steigende oder fallende Kante im Eingangsereignis room_service
erkennt, führt der Zustand Checked_In
die Aktion on
für dieses Ereignis aus. Der Zustand erhöht das lokale Datenobjekt service
und ruft die MATLAB®-Funktion expenses
auf. Diese Funktion nimmt die Gesamtzahl der Zimmerserviceanfragen als Eingabe und gibt die aktuelle Hotelrechnung als Ausgabe zurück. Weitere Informationen finden Sie unter Control Chart Execution by Using Event Actions in a Superstate.
Ausführen von Zuständen mit Verlaufsverbindungen
Während der Teilzustand Checked_in
aktiv ist, lösen Sie das Eingangsereignis fire_alarm
aus, das dem Auslösen eines Feueralarms entspricht. Sie verlassen das Gebäude und warten draußen im ausgewiesenen Wartebereich. Lösen Sie dann das Eingangsereignis all_clear
aus, das dem Senden eines Entwarnungssignals entspricht, das Ihnen die Rückkehr zu Ihrem vorherigen Aufenthaltsort im Hotel ermöglicht.
Wenn das Diagramm eine Ereignisübertragung für fire_alarm
empfängt, erfolgt der Übergang von Check_in
zu Waiting_area
. Die Verlaufsverbindungen in Check_in
, Checked_in
und Executive_suite
verzeichnen die letzten aktiven Teilzustände in jedem dieser Zustände. Die aktiven Zustände werden in aufsteigender Reihenfolge der Hierarchie inaktiv, beginnend mit den innersten Teilzuständen. Nachdem Check_in
inaktiv wird, wird Waiting_area
aktiv.
Wenn das Diagramm eine Ereignisübertragung für all_clear
empfängt, erfolgt der Übergang von Waiting_area
zum zuvor aktiven Teilzustand von Check_in
. Waiting_area
wird inaktiv, bevor die Teilzustände von Check_in
in absteigender Reihenfolge der Hierarchie aktiv werden, beginnend mit Check_in
.
Weitere Informationen finden Sie unter How Stateflow Charts Respond to Events, Verlassen eines Zustands und Eintreten in Diagramme oder Zustände.
Siehe auch
Manual Switch (Simulink) | Mux (Simulink) | Multiport Switch (Simulink) | Display (Simulink)
Themen
- Stateflow Semantics
- How Stateflow Charts Respond to Events
- Execution of a Chart at Initialization
- Eintreten in Diagramme oder Zustände
- Verlassen eines Zustands
- Order of Execution for a Set of Flow Charts
- Ausführungsreihenfolge für parallele Zustände
- Control Chart Execution by Using Event Actions in a Superstate