Hauptinhalt

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

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 von fee auf 1500 und der Teilzustand Executive_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 Teilzustand Family_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 Teilzustand Single_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

(Simulink) | (Simulink) | (Simulink) | (Simulink)

Themen