Hauptinhalt

Synchronisieren von Modellkomponenten mithilfe 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

Es gibt keine Begrenzung für die Anzahl der Ereignisse, die ein Stateflow-Diagramm enthalten kann. Für die Codegenerierung erzwingt der zugrunde liegende C-Compiler jedoch eine 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 von einem der folgenden Typen sein.

TypBeschreibung
EingangsereignisEin Ereignis, das von außerhalb des Diagramms auf ein Stateflow-Diagramm übertragen wird. Weitere Informationen finden Sie unter Aktivieren von Stateflow-Diagrammen durch Absenden von Eingangsereignissen und Entwerfen einer Mensch-Maschine-Schnittstellenlogik mithilfe von Stateflow-Diagrammen.
Lokales EreignisEin Ereignis, das an einer beliebigen Stelle in einem Stateflow-Diagramm auftreten kann, aber nur im übergeordneten Objekt und seinen Nachfolgern sichtbar ist. Weitere Informationen finden Sie unter Broadcast Local Events to Synchronize Parallel States.
AusgangsereignisEin Ereignis, das in einem Stateflow-Block stattfindet, aber in einen Simulink-Block übertragen wird. 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:

HierarchieebeneSichtbarkeit
DiagrammDas lokale Ereignis ist für das Diagramm und seine Zustände und Teilzustände sichtbar.
UnterdiagrammDas lokale Ereignis ist für das Unterdiagramm und seine Zustände und Teilzustände sichtbar.
ZustandDas lokale Ereignis ist für den Zustand und seine Teilzustände sichtbar.

Definieren von Ereignissen in einem Diagramm

Sie können einem Stateflow-Diagramm Ereignisse hinzufügen, indem Sie den Symbols-Bereich oder das Stateflow-Editor-Menü verwenden.

Hinzufügen von Ereignissen über den Fensterbereich „Symbols“

  1. Klicken Sie auf der Registerkarte Modeling unter Design Data auf Symbols Pane.

  2. Klicken Sie auf das Symbol „Create Event“ .

  3. 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

  4. Bearbeiten Sie den Namen des Ereignisses.

  5. Klicken Sie für Ein- und Ausgangsereignisse auf das Feld Port und wählen Sie eine Portnummer aus.

  6. 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 Inspect aus. Weitere Informationen finden Sie unter Set Properties for an Event.

Hinzufügen von Ereignissen über das Stateflow-Editor-Menü

  1. 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.

    TypMenüoption
    EingangsereignisKlicken Sie auf der Registerkarte Modeling unter Design Data auf Event Input.
    AusgangsereignisKlicken Sie auf der Registerkarte Modeling unter Design Data auf Event Output.
    Lokales EreignisKlicken Sie auf der Registerkarte Modeling unter Design Data auf Local Event.

  2. Geben Sie im Dialogfeld für Ereignisse die Dateneigenschaften 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 Zustand oder den Übergang, der das 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

Beachten Sie bei der Verwendung von Ereignissen in Diagrammen die folgenden bewährten Praktiken.

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);}

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.

Siehe auch

| |

Themen