Hauptinhalt

Paralleles Ausführen von Zuständen

Mithilfe von paralleler Dekomposition können Sie ein Stateflow®-Diagramm so einrichten, dass jeder Zustand auf einer Hierarchieebene im selben Schritt aktiviert wird. Sie können Ereignisse verwenden, damit ein Zustand ein Verhalten in einem anderen Zustand auslösen kann.

Wenn ein Diagramm oder Zustand mit paralleler Dekomposition aktiv wird, werden auch alle direkten untergeordneten Elemente des Diagramms oder Zustands aktiv. Die untergeordneten Elemente, die als Parallelzustände bezeichnet werden, sind im Zeichenbereich mit einer gestrichelten Linie umrandet.

In diesem Diagramm wird beispielsweise für die Zustände ParentA und ParentB parallele Dekomposition verwendet. Sobald ein übergeordneter Zustand aktiv wird, werden auch beide untergeordneten Zustände aktiv.

In jedem Zeitschritt führt das Diagramm Aktionen aus und wertet Übergänge für jeden parallelen Zustand in einer Hierarchieebene in sequentieller Reihenfolge aus, was durch die Nummer in der oberen rechten Ecke jedes Zustands angezeigt wird. Wenn beispielsweise ParentB aktiv wird, tritt das Diagramm sowohl in ChildC als auch ChildD ein. Da ChildC in der Ausführungsreihenfolge den Wert 1 hat, setzt es y auf 3. Im selben Zeitschritt überschreibt ChildD dann y auf 4.

Sie können die Ausführungsreihenfolge ändern, indem Sie auf einen Zustand rechtsklicken, auf Execution Order (Ausführungsreihenfolge) klicken und eine neue Reihenfolge auswählen.

In diesem Beispiel verwenden Sie parallele Zustände, um ein unvollständiges Modell eines Batteriesystems fertigzustellen. Dann verwenden Sie Ereignisse, um Interaktionen zwischen den Zuständen zu erzeugen. Das Batteriesystem besteht aus zwei unabhängigen Komponenten:

  • Einer wiederaufladbaren Hauptbatterie

  • Einer nicht wiederaufladbaren Reservebatterie, die die wichtigsten Funktionen aufrechterhält, wenn die Hauptbatterie leer wird

Modell öffnen

Das sfGetStartedParallel-Modell stellt die Steuerlogik eines wiederaufladbaren Batteriesystems dar. Um das Modell zu erstellen, befolgen Sie die Anweisungen in den vorherigen Schritten des Tutorials.

Doppelklicken Sie auf den Diagramm-Block, um das Batteriediagramm zu öffnen.

Das Diagramm enthält zwei nicht parallele Zustände, die die Haupt- und die Reservebatterie darstellen. Jede Batterie enthält verschachtelte untergeordnete Zustände, die Betriebsmodi für Laden, Entladen oder Bereitschaft darstellen. Außerdem verwenden die Batterien Eingangs-, Ausgangs- und lokale Daten:

  • isCharging: Eine Eingangsgröße, die angibt, ob das Batteriesystem an eine Stromquelle angeschlossen ist. Sie bestimmt den aktiven Zustand der Hauptbatterie.

  • deviceDemand: Eine Eingangsgröße, die den Strombedarf des angeschlossenen Geräts darstellt.

  • maxWatts: Ein lokaler Wert, der die maximale Leistungsabgabe der Hauptbatterie darstellt.

  • sentPower: Ein lokaler Wert, der die Leistungsabgabe der Hauptbatterie in Watt darstellt. Wenn deviceDemand kleiner als maxWatts ist, ist es gleich deviceDemand. Anderenfalls ist es gleich maxWatts.

  • mainCharge und emergencyCharge: Lokale Daten, die den Ladezustand der einzelnen Batterien in Prozent darstellen.

Einzelheiten zum Betrieb der Hauptbatterie finden Sie in den vorherigen Schritten des Tutorials.

Aktivieren der parallelen Dekomposition

Sie können die parallele Ausführung untergeordneter Zustände aktivieren, indem Sie auf die übergeordnete Komponente rechtsklicken und Decomposition > Parallel wählen.

Da die Zustände MainBattery und EmergencyBattery über keinen übergeordneten Zustand verfügen, wird das Diagramm als übergeordneter Zustand betrachtet. Aktivieren Sie die parallele Dekomposition für das Diagramm, indem Sie auf eine leere Fläche des Zeichenbereichs rechtsklicken und Decomposition > Parallel wählen. Die Randlinien der beiden Diagramme sind nun gestrichelt, was bedeutet, dass es sich um parallele Zustände handelt.

Übertragen und Empfangen von Ereignissen

Sie können es einer Diagrammkomponente ermöglichen, ein Verhalten in anderen Komponenten des Diagramms oder Modells auszulösen, indem Sie Ereignisse übertragen. In einem Diagramm mit zwei parallelen Zuständen können Sie z. B. ein Ereignis aus dem einem Zustand übertragen, um einen Übergang im anderen auszulösen.

Um ein Ereignis aus einem Zustand oder Übergang zu übertragen, verwenden Sie den send-Operator und das folgende Format:

send(event_name,receiving_state)

Um die Ereignisübertragung in einem Übergang zu empfangen, geben Sie den Namen des Ereignisses in die Übergangskennzeichnung ein. Für das Ereignis sind keine eckigen oder geschweiften Klammern erforderlich. Der Übergang muss ein direkt oder indirekt untergeordnetes Element des empfangenden Zustands sein.

Die Projektanforderungen für das Batteriesystem sehen vor, dass die Reservebatterie entladen wird, wenn die Hauptbatterie leer wird, und in den Bereitschaftsmodus wechselt, wenn die Hauptbatterie zu laden beginnt. Schalten Sie den Betriebsmodus der Reservebatterie um, indem Sie Ereignisse von der Hauptbatterie übertragen.

1. Übertragen Sie im Zustand MainBattery in der Eingabeaktion des untergeordneten Zustands Empty ein Ereignis namens toggleOn an den Zustand EmergencyBattery:

entry:
sentPower=0;
send(toggleOn,EmergencyBattery);

2. Übertragen Sie im Zustand MainBattery in der Eingabeaktion des untergeordneten Zustands Charge ein Ereignis namens toggleOff an den Zustand EmergencyBattery:

entry:
sentPower=3.5;
send(toggleOff,EmergencyBattery);

3. Doppelklicken Sie im Zustand EmergencyBattery auf den Übergang von Standby zu Discharge und geben Sie die Kennzeichnung toggleOn ein.

4. Doppelklicken Sie auf den Übergang von Discharge zu Standby und geben Sie die Kennzeichnung toggleOff ein.

5. Wählen Sie im Fensterbereich Symbols die Option Resolve Undefined Symbols aus, um die toggleOn und toggleOff als lokale Ereignisse zu definieren. Bei Eingabeaktionen und Übergängen werden toggleOn und toggleOff orange, was auf ein Ereignis hinweist.

Simulieren des Modells

Das Modell protokolliert zwei Werte im Simulation Data Inspector:

  • Die Aktivität des Zustands Empty in MainBattery, wobei 1 aktiv und 0 inaktiv ist.

  • Der Name des aktiven untergeordneten Zustands von EmergencyBattery.

Simulieren Sie das Modell und beobachten Sie diese Werte.

  1. Kehren Sie zum höchsten Simulink-Modell zurück. Der Block „Manual Switch“ ändert den Betriebsmodus der Hauptbatterie. Wenn der Wert 1 beträgt, wird die Batterie geladen. Wenn der Wert 0 beträgt, wird die Batterie entladen.

  2. Klicken Sie auf der Registerkarte Simulation auf Run, um das Modell zu simulieren. Der Diagramm-Block zeigt die Ausführung des Diagramms an.

  3. Doppelklicken Sie auf den Block „Manual Switch“, um die Batterie zu entladen. Wenn die Hauptbatterie nach ein paar Sekunden auf Empty wechselt, doppelklicken Sie auf den Block „Manual Switch“, um die Batterie zu laden. Wiederholen Sie diesen Vorgang mehrmals.

  4. Klicken Sie zum Beenden der Simulation auf der Registerkarte Simulation auf Stop.

  5. Um den Simulation Data Inspector zu öffnen, klicken Sie auf der Registerkarte Simulation auf Data Inspector.

  6. Um die Aktivität des Zustands Empty anzuzeigen, klicken Sie auf der Registerkarte Inspect auf MainBattery.Discharge.Empty:IsActive.

  7. Um den aktiven untergeordneten Zustand des Zustands EmergencyBattery anzuzeigen, klicken Sie auf der Registerkarte Inspect auf EmergencyBattery:ActiveChild.

Wenn die Hauptbatterie leer ist, entlädt sich die Reservebatterie. Wenn die Hauptbatterie den Zustand Empty verlässt und mit dem Laden beginnt, wechselt die Reservebatterie in den Bereitschaftsmodus.

Siehe auch

Themen