Synchronisieren von Modellkomponenten durch Übertragung von Ereignissen
Ein Ereignis ist ein Stateflow®-Objekt, das Aktionen in einem dieser Objekte auslösen kann:
Ein Parallelzustand in einem Stateflow-Diagramm
Ein weiteres Stateflow-Diagramm
Ein Simulink®-ausgelöstes oder Funktionsaufruf-Subsystem
Zu Simulationszwecken gibt es keine Begrenzung für die Anzahl der Ereignisse in einem Stateflow-Diagramm. Für die Codegenerierung erzwingt der zugrunde liegende C-Compiler jedoch eine theoretische Begrenzung auf 231-1 Ereignisse.
Arten von Ereignissen
Ein implizites Ereignis ist ein integriertes Ereignis, das während der Ausführung des Diagramms übertragen wird. Diese Ereignisse sind implizit, weil Sie sie nicht explizit definieren oder auslösen. Weitere Informationen finden Sie unter Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse.
Ein explizites Ereignis ist ein Ereignis, das Sie explizit definieren. Explizite Ereignisse können einen dieser Typen haben.
Typ | Beschreibung |
---|---|
Eingangsereignis | Ereignis, das von außerhalb des Diagramms auf ein Stateflow-Diagramm übertragen wird. Weitere Informationen finden Sie unter Aktivieren eines Stateflow-Diagramms durch Absenden von Eingangsereignissen und Entwerfen einer Mensch-Maschine-Schnittstellenlogik mithilfe von Stateflow-Diagrammen. |
Lokales Ereignis | Ein Ereignis, das an einer beliebigen Stelle in einem Stateflow-Diagramm auftreten kann, aber nur im übergeordneten Objekt und seinen Nachfolgern sichtbar ist. Lokale Ereignisse werden nicht in eigenständigen Stateflow-Diagrammen in MATLAB® unterstützt. Weitere Informationen finden Sie unter Broadcast Local Events to Synchronize Parallel States. |
Ausgangsereignis | Ein Ereignis, das in einem Stateflow-Block stattfindet, aber in einen Simulink-Block übertragen wird. Ausgangsereignisse werden in eigenständigen Stateflow-Diagrammen in MATLAB nicht unterstützt. Weitere Informationen finden Sie unter Activate a Simulink Block by Sending Output Events. |
Sie können lokale Ereignisse auf diesen Ebenen der Stateflow-Hierarchie definieren.
Hierarchieebene | Sichtbarkeit |
---|---|
Diagramm | Das lokale Ereignis ist für das Diagramm und alle seine Zustände und Teilzustände sichtbar. |
Unterdiagramm | Das lokale Ereignis ist für das Unterdiagramm und alle seine Zustände und Teilzustände sichtbar. |
Zustand | Lokale Ereignisse sind für den Zustand und alle seine Teilzustände sichtbar. |
Definieren von Ereignissen in einem Diagramm
Sie können einem Stateflow-Diagramm Ereignisse hinzufügen, indem Sie den Symbols-Bereich, das Stateflow-Editor-Menü oder den Model Explorer verwenden.
Hinzufügen von Ereignissen über den Symbolbereich
Wählen Sie auf der Registerkarte Modeling unter Design Data die Option Symbols Pane aus.
Klicken Sie auf das Symbol Create Event
.
Klicken Sie in der Zeile für das neue Ereignis unter Type auf das Symbol und wählen Sie:
Input Event
Local Event
Output Event
Bearbeiten Sie den Namen des Ereignisses.
Klicken Sie für Ein- und Ausgangsereignisse auf das Feld Port und wählen Sie eine Portnummer aus.
Um Eigenschaften für das Ereignis festzulegen, öffnen Sie den Property Inspector. Rechtsklicken Sie im Symbols-Bereich auf die Zeile für das Ereignis und wählen Sie Explore aus. Weitere Informationen finden Sie unter Set Properties for an Event.
Hinzufügen von Ereignissen über das Stateflow-Editor-Menü
Wählen Sie in einem Stateflow-Diagramm in einem Simulink-Modell die Menüoption aus, die dem Typ des Ereignisses entspricht, das Sie hinzufügen möchten.
Typ Menüoption Eingangsereignis Klicken Sie auf der Registerkarte Modeling unter Design Data auf Event Input. Ausgangsereignis Klicken Sie auf der Registerkarte Modeling unter Design Data auf Event Output. Lokales Ereignis Klicken Sie auf der Registerkarte Modeling unter Design Data auf Local Event. Geben Sie im Dialogfeld für Ereignisse die Dateneigenschaften an. Weitere Informationen finden Sie unter Set Properties for an Event.
Hinzufügen von Ereignissen über den Model Explorer
Wählen Sie auf der Registerkarte Modeling unter Design Data die Option Model Explorer aus.
Wählen Sie im Model Hierarchy-Bereich das Objekt in der Stateflow-Hierarchie aus, in dem Sie das neue Ereignis sichtbar machen möchten. Das Objekt, das Sie auswählen, wird zum übergeordneten Objekt des neuen Ereignisses.
Wählen Sie im Model Explorer-Menü Add > Event aus. Das neue Ereignis mit einer Standarddefinition wird im Bereich Contents des Model Explorer angezeigt.
Geben Sie im Event-Bereich die Eigenschaften des Ereignisses an. Weitere Informationen finden Sie unter Set Properties for an Event.
Zugriff auf Ereignisinformationen aus einem Stateflow-Diagramm
Sie können die Eigenschaften eines Eingangs- oder lokalen Ereignisses anzeigen oder das Ziel eines Ausgangsereignisses direkt aus einem Stateflow-Diagramm öffnen. Rechtsklicken Sie auf den Status oder den Übergang, der das gewünschte Ereignis enthält, und wählen Sie Explore aus. Im dadurch aufgeklappten Kontextmenü sind die Namen und Bereiche aller aufgelösten Symbole in dem Zustand oder Übergang aufgeführt. Wenn Sie eine Eingabe oder ein lokales Ereignis aus dem Kontextmenü auswählen, werden dessen Eigenschaften im Model Explorer angezeigt. Durch Auswahl eines Ausgangsereignisses aus dem Kontextmenü wird das Simulink-Subsystem oder das zudem Ereignis verbundene Stateflow-Diagramm geöffnet.
Bewährte Verfahren für die Verwendung von Ereignissen in Stateflow-Diagrammen
Verwenden des Befehls send
zur Übertragung expliziter Ereignisse in Aktionen
Um lokale oder Ausgangsereignisse in Zustands- oder Übergangsaktionen zu übertragen, verwenden Sie den Operator send
. Um beispielsweise ein Ausgangsereignis zu senden, wenn ein Übergang gültig ist, vermeiden Sie es, den Namen des Ereignisses als Bedingungsaktion zu verwenden.
{output_event;}
Rufen Sie stattdessen den Operator send
auf.
{send(output_event);}
Obwohl beide Vorgehensweisen zulässig sind, verbessert die Verwendung des Operators send
die Lesbarkeit eines Diagramms und stellt sicher, dass explizite Ereignisse nicht mit Daten verwechselt werden.
Vermeiden der Verwendung expliziter Ereignisse zum Auslösen bedingter Aktionen
Verwenden Sie Bedingungen für Übergänge anstelle von Ereignissen, wenn Sie Folgendes möchten:
Repräsentieren bedingter Anweisungen, z. B.
[x < 1]
oder[x == 0]
.Repräsentieren einer Änderung des Datenwerts, z. B.
[hasChanged(x)]
.
Vermeiden der Verwendung des impliziten Ereignisses enter
zur Überprüfung der Zustandsaktivität
Um die Zustandsaktivität zu überprüfen, verwenden Sie den Operator in
anstelle des impliziten Ereignisses enter
. Weitere Informationen finden Sie unter Check State Activity by Using the in Operator.
Vermeiden der Vermischung von kanten- und funktionsgesteuerten Ereignissen in einem Diagramm
Das Mischen von Eingangsereignissen, die Kantenauslöser und Funktionsaufrufe verwenden, führt zu einem Fehler beim Kompilieren.