Hauptinhalt

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

Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse

Implizite Ereignisse sind integrierte Ereignisse, die während der Ausführung des Diagramms auftreten, wenn:

  • Das Diagramm wird aktiviert.

  • Das Diagramm wechselt in einen Zustand und der Zustand wird aktiv.

  • Das Diagramm verlässt einen Zustand und der Zustand wird inaktiv.

  • Das Diagramm weist einem internen Datenobjekt einen Wert zu.

Diese Ereignisse sind implizit, weil Sie sie nicht explizit definieren oder auslösen. Implizite Ereignisse sind untergeordnete Elemente des Diagramms, in dem sie auftreten, und sind nur im übergeordneten Diagramm sichtbar.

Auf der Diagrammausführung basierende implizite Ereignisse

Das Schlüsselwort tick gibt das implizite Ereignis an, das generiert wird, wenn ein Diagramm in einer zeitdiskreten Simulation aktiviert wird.

In diesem Diagramm sind beispielsweise Fan und Heater parallele (UND-)Zustände. Jeder Zustand hat ein Paar Teilzustände, On und Off. Zunächst sind die Teilzustände Fan.Off und Heater.Off aktiv. Jedes Mal, wenn das Diagramm aktiviert wird, wird ein tick-Ereignis generiert. Das dritte tick löst den Übergang von Heater.Off zu Heater.On aus. Ebenso löst das vierte tick den Übergang von Fan.Off zu Fan.On aus. Beim achten tick wechselt das Diagramm wieder zu Fan.Off und Heater.Off.

Stateflow chart that uses the implicit event tick.

Informationen über den temporalen Logikoperator after finden Sie unter Ausführung von Steuerungsdiagrammen mithilfe der zeitlichen Logik.

Hinweis

Das Ereignis tick bezieht sich auf das Diagramm, das die zu evaluierende Aktion enthält. Das Ereignis kann sich nicht auf ein anderes Diagramm beziehen.

Auf Daten und Zuständen basierende implizite Ereignisse

In Stateflow®-Diagrammen in Simulink®-Modellen erzeugen diese Operatoren implizite Ereignisse, wenn ein Diagramm den Wert einer Variablen festlegt oder wenn ein Diagramm in einen Zustand eintritt oder diesen verlässt.

OperatorSyntaxBeschreibungBeispiel
change

change(data_name)

chg(data_name)

Erzeugt ein implizites lokales Ereignis, wenn das Diagramm den Wert der Variablen data_name festlegt.

Definieren Sie ein implizites lokales Ereignis, wenn eine Zustands- oder Übergangsaktion einen Wert in die Variable Engine.rpm schreibt.

change(Engine.rpm)

enter

enter(state_name)

en(state_name)

Erzeugt ein implizites lokales Ereignis, wenn der angegebene Zustand state_name aktiv wird.

Definieren eines impliziten lokalen Ereignisses, wenn die Diagrammausführung in den Zustand Fan.On eintritt.

enter(Fan.On)

exit

exit(state_name)

ex(state_name)

Erzeugt ein implizites lokales Ereignis, wenn der angegebene Zustand state_name inaktiv wird.

Definiert ein implizites lokales Ereignis, wenn die Diagrammausführung den Zustand Fan.Off verlässt.

exit(Fan.Off)

Wenn mehr als ein Zustand oder Datenobjekt denselben Namen hat, qualifizieren Sie mit der Punktnotation den Namen des Zustands. Weitere Informationen finden Sie unter Identify Data by Using Dot Notation.

In diesem Diagramm sind beispielsweise Fan und Heater parallele (UND-)Zustände. Jeder Zustand hat ein Paar Teilzustände, On und Off. Zunächst sind die Teilzustände Fan.Off und Heater.Off aktiv. Wenn das Diagramm aktiviert wird, generiert es ein tick-Ereignis, das den Übergang von Fan.Off zu Fan.On auslöst. Wenn Fan.Off inaktiv wird, generiert das Diagramm ein weiteres implizites Ereignis, das den Übergang von Heater.Off zu Heater.On auslöst. Wenn die Ausführung des Diagramms endet, sind die Teilzustände Fan.On und Heater.On aktiv.

Stateflow chart that uses the implicit event exit.

Hinweis

Wenn dasselbe implizite Ereignis mehrere Übergänge in parallelen Zuständen auslöst, entspricht die Reihenfolge, in der die Übergänge ausgeführt werden, nicht unbedingt der Ausführungsreihenfolge der parallelen Zustände. Um unerwartetes Verhalten zu vermeiden und sicherzustellen, dass die Übergänge in der für die parallelen Zustände angegebenen Reihenfolge ausgeführt werden, verwenden Sie keine impliziten Ereignisse. Verwenden Sie stattdessen Übergangsbedingungen, die Operatoren wie in oder hasChanged aufrufen. Weitere Informationen finden Sie unter Check State Activity by Using the in Operator und Detect Changes in Data and Expression Values.

Siehe auch

| | | | |

Themen