Main Content

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

Definieren des Verhaltens von Diagrammen mithilfe von Zustandsaktionen und Übergangskennzeichnungen

Zustandsaktionen und Übergangsaktionen sind Befehle, die Sie in einen Zustand bzw. Übergang schreiben, um zu definieren, wie sich ein Stateflow®-Diagramm während der Simulation verhält. Die Aktionen in diesem Diagramm beispielsweise definieren eine Zustandsmaschine, die eine Instanz der Collatz-Vermutung empirisch verifiziert. Für einen bestimmten numerischen Eingang $u$ berechnet das Diagramm die Hagelschlag-Zahlenfolge $n_0 = u,$ $n_1,$ $n_2,$ $n_3,$… durch Iteration dieser Regel:

  • Wenn $n_i$ gerade ist, dann ist $n_{i+1} = n_i / 2$.

  • Wenn $n_i$ ungerade ist, dann ist $n_{i+1} = 3n_i+1$.

Die Collatz-Vermutung besagt, dass es für jede positive Ganzzahl eine Hagelschlag-Zahlenfolge gibt, die schließlich eins erreicht.

Das Diagramm besteht aus drei Zuständen. Zu Beginn der Simulation werden die Diagrammdaten durch den Zustand Init initialisiert, indem:

  • Die lokalen Daten n auf den Wert des Eingangs u gesetzt werden.

  • Die lokalen Daten n2 auf den Rest gesetzt werden, wenn n durch zwei dividiert wird.

  • Die Ausgangsdaten y auf false gesetzt werden.

Abhängig von der Parität des Eingangs geht das Diagramm entweder in den Zustand Even oder Odd über. Während die Aktivität zwischen den Zuständen Even und Odd wechselt, berechnet das Diagramm die Zahlen in der Hagelschlag-Zahlenfolge. Wenn die Sequenz einen Wert von eins erreicht, werden die Ausgangsdaten y auf true gesetzt und triggern einen Stop Simulation (Simulink)-Block im Simulink®-Modell.

Zustandsaktionstypen

Zustandsaktionen definieren, wie sich ein Stateflow-Diagramm verhält, während ein Zustand aktiv ist. Die gängigsten Zustandsaktionstypen sind entry, during und exit:

  • Aktionen des Typs entry finden statt, wenn der Zustand aktiv wird.

  • Aktionen des Typs during finden bei einem Zeitschritt statt, wenn der Zustand bereits aktiv ist und das Diagramm diesen Zustand nicht durch einen Übergang verlässt.

  • Aktionen des Typs exit finden bei einem Zeitschritt statt, wenn das Diagramm diesen Zustand durch einen Übergang verlässt.

Sie können den Typ einer Zustandsaktion in Form eines vollständigen Schlüsselworts (entry, during, exit) oder der entsprechenden Abkürzung (en, du, ex) angeben. Sie können Zustandsaktionstypen auch mithilfe von Kommas kombinieren. Beispielsweise erfolgt eine Aktion mit dem kombinierten Typ entry, during bei dem Zeitschritt, bei dem der Zustand aktiv wird, und bei jedem nachfolgenden Zeitschritt, solange der Zustand aktiv bleibt.

Das Hagelschlag-Diagramm enthält Aktionen in den folgenden Zuständen:

  • Init: Wenn dieser Zustand zu Beginn der Simulation aktiv wird, bestimmt die Aktion des Typs entry die Parität von n und y wird auf false gesetzt. Beim Übergang des Diagramms aus dem Zustand Init nach einem Zeitschritt bestimmt die Aktion des Typs exit, ob n gleich eins ist.

  • Even: Wenn dieser Zustand aktiv wird, und bei jedem nachfolgenden Zeitschritt, bei dem der Zustand aktiv ist, berechnet die Aktion mit dem kombinierten Typ entry, during den Wert und die Parität der nächsten Zahl der Hagelschlag-Zahlenfolge, n/2.

  • Odd: Wenn dieser Zustand aktiv wird, und bei jedem nachfolgenden Zeitschritt, bei dem der Zustand aktiv ist, prüft die Aktion mit dem kombinierten Typ entry, during, ob n größer als eins ist und wenn dies zutrifft, berechnet sie den Wert und die Parität der nächsten Zahl der Hagelschlag-Zahlenfolge, 3*n+1.

Typen von Übergangskennzeichnungen

Übergangskennzeichnungen definieren, wie sich ein Stateflow-Diagramm verhält, wenn sich der aktive Zustand ändert. Die gängigsten Typen von Übergangskennzeichnungen sind Bedingungen und Bedingungsaktionen.

  [Condition]{ConditionAction}

Dabei ist Condition ein Boolescher Ausdruck, der bestimmt, ob der Übergang erfolgt. Wenn Sie keine Bedingung angeben, erfolgt der Übergang einen Zeitschritt nachdem der Quellenzustand aktiv geworden ist.

ConditionAction ist ein Befehl, der ausgeführt wird, wenn die Bedingung, die den Übergang schützt, wahr ist. Die Bedingungsaktion findet nach der Bedingung statt, allerdings vor allen Zustandsaktionen des Typs exit oder entry.

Das Hagelschlag-Diagramm enthält Aktionen bei den folgenden Übergängen:

  • Standardübergang zu Init: Zu Beginn der Simulation wird durch die Bedingungsaktion n = u der Eingangswert u den lokalen Daten n zugewiesen.

  • Übergang von Init zu Even: Die Bedingung n2 == 0 legt fest, dass der Übergang erfolgt, wenn n gerade ist. Die Zahl 1 an der Quelle dieses Übergangs weist darauf hin, dass dieser Übergang vor dem Übergang von Init zu Odd ausgewertet wird.

  • Übergang von Odd zu Even: Die Bedingung n2 == 0 legt fest, dass der Übergang erfolgt, wenn n gerade ist.

  • Übergang von Even zu Odd: Die Bedingung n2 ~= 0 legt fest, dass der Übergang erfolgt, wenn n ungerade ist. In diesem Fall bestimmt die Bedingungsaktion y = isequal(n,1), ob n gleich eins ist.

Untersuchen des Diagrammverhaltens

Zum Berechnen der Hagelschlag-Zahlenfolge mit einem Wert von neun beginnend:

1. Geben Sie in den Block „Constant“ den Wert 9 ein.

2. Klicken Sie auf der Registerkarte Simulation auf Run. Das Diagramm reagiert mit folgenden Aktionen:

  • Zum Zeitpunkt $t = 0$ erfolgt der Standardübergang zu Init. Die Übergangsaktion setzt den Wert von n auf 9. Der Zustand Init wird aktiv. Die Aktionen des Typs entry in Init setzen n2 auf 1 und y auf false.

  • Zum Zeitpunkt $t = 1$ ist die Bedingung n2 == 0 falsch, sodass das Diagramm den Übergang zu Odd vorbereitet. Die Aktion exit in Init setzt y auf false. Der Zustand Init wird inaktiv und der Zustand Odd wird aktiv. Die Aktion des Typs entry in Odd setzt n auf 28 und n2 auf 0.

  • Zum Zeitpunkt $t = 2$ ist die Bedingung n2 == 0 wahr, sodass das Diagramm den Übergang zu Even vorbereitet. Der Zustand Odd wird inaktiv und der Zustand Even wird aktiv. Die Eingangsaktion („entry“) in Even setzt n auf 14 und n2 auf 0.

  • Zum Zeitpunkt $t = 3$ ist die Bedingung n2 ~= 0 falsch, sodass das Diagramm keinen Übergang vornimmt. Der Zustand Even bleibt aktiv. Die Aktion des Typs during in Even setzt n auf 7 und n2 auf 1.

  • Zum Zeitpunkt $t = 4$ ist die Bedingung n2 ~= 0 wahr, sodass das Diagramm den Übergang zu Odd vorbereitet. Die Übergangsaktion setzt den Wert y auf „false“. Der Zustand Even wird inaktiv und der Zustand Odd wird aktiv. Die Aktionen des Typs entry in Odd setzen n auf 22 und n2 auf 0.

  • Das Diagramm berechnet die Hagelschlag-Zahlenfolge weiter, bis ein Wert von n $= 1$ zum Zeitpunkt $t = 19$ erreicht ist.

  • Zum Zeitpunkt $t = 20$ bereitet das Diagramm den Übergang von Even zu Odd vor. Die Übergangsaktion setzt den Wert y auf true. Der Zustand Even wird inaktiv und der Zustand Odd wird aktiv. Die Aktionen des Typs entry in Odd ändern weder n noch n2. Der Block „Stop Simulation“, der mit dem Ausgangssignal y verbunden ist, stoppt die Simulation.

3. Klicken Sie auf der Registerkarte Simulation unter Review Results auf Data Inspector.

4. Zum Anzeigen der Werte der Hagelschlag-Zahlenfolge wählen Sie im Simulation Data Inspector das protokollierte Signal n aus.

Die Hagelschlag-Zahlenfolge erreicht nach 19 Iterationen einen Wert von eins.

Verwandte Themen