Hauptinhalt

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

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.

TypBeschreibung
EingangsereignisEreignis, 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 EreignisEin 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.
AusgangsereignisEin 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.

HierarchieebeneSichtbarkeit
DiagrammDas lokale Ereignis ist für das Diagramm und alle seine Zustände und Teilzustände sichtbar.
UnterdiagrammDas lokale Ereignis ist für das Unterdiagramm und alle seine Zustände und Teilzustände sichtbar.
ZustandLokale 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

  1. Wählen Sie auf der Registerkarte Modeling unter Design Data die Option Symbols Pane aus.

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

Hinzufügen von Ereignissen über den Model Explorer

  1. Wählen Sie auf der Registerkarte Modeling unter Design Data die Option Model Explorer aus.

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

  3. Wählen Sie im Model Explorer-Menü Add > Event aus. Das neue Ereignis mit einer Standarddefinition wird im Bereich Contents des Model Explorer angezeigt.

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

Siehe auch

| |

Themen