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 berechnet das Diagramm die Hagelschlag-Zahlenfolge … durch Iteration dieser Regel:
Wenn gerade ist, dann ist .
Wenn ungerade ist, dann ist .
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 Eingangsu
gesetzt werden.Die lokalen Daten
n2
auf den Rest gesetzt werden, wennn
durch zwei dividiert wird.Die Ausgangsdaten
y
auffalse
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 Typsentry
die Parität vonn
undy
wird auffalse
gesetzt. Beim Übergang des Diagramms aus dem ZustandInit
nach einem Zeitschritt bestimmt die Aktion des Typsexit
, obn
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 Typentry, 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 Typentry, during
, obn
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 Bedingungsaktionn = u
der Eingangswertu
den lokalen Datenn
zugewiesen.Übergang von
Init
zuEven
: Die Bedingungn2 == 0
legt fest, dass der Übergang erfolgt, wennn
gerade ist. Die Zahl 1 an der Quelle dieses Übergangs weist darauf hin, dass dieser Übergang vor dem Übergang vonInit
zuOdd
ausgewertet wird.Übergang von
Odd
zuEven
: Die Bedingungn2 == 0
legt fest, dass der Übergang erfolgt, wennn
gerade ist.Übergang von
Even
zuOdd
: Die Bedingungn2 ~= 0
legt fest, dass der Übergang erfolgt, wennn
ungerade ist. In diesem Fall bestimmt die Bedingungsaktiony = isequal(n,1)
, obn
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 erfolgt der Standardübergang zu
Init
. Die Übergangsaktion setzt den Wert vonn
auf 9. Der ZustandInit
wird aktiv. Die Aktionen des Typsentry
inInit
setzenn2
auf 1 undy
auffalse
.Zum Zeitpunkt ist die Bedingung
n2 == 0
falsch, sodass das Diagramm den Übergang zuOdd
vorbereitet. Die Aktionexit
inInit
setzty
auffalse
. Der ZustandInit
wird inaktiv und der ZustandOdd
wird aktiv. Die Aktion des Typsentry
inOdd
setztn
auf 28 undn2
auf 0.Zum Zeitpunkt ist die Bedingung
n2 == 0
wahr, sodass das Diagramm den Übergang zuEven
vorbereitet. Der ZustandOdd
wird inaktiv und der ZustandEven
wird aktiv. Die Eingangsaktion („entry“) inEven
setztn
auf 14 undn2
auf 0.Zum Zeitpunkt ist die Bedingung
n2 ~= 0
falsch, sodass das Diagramm keinen Übergang vornimmt. Der ZustandEven
bleibt aktiv. Die Aktion des Typsduring
inEven
setztn
auf 7 undn2
auf 1.Zum Zeitpunkt ist die Bedingung
n2 ~= 0
wahr, sodass das Diagramm den Übergang zuOdd
vorbereitet. Die Übergangsaktion setzt den Werty
auf „false“. Der ZustandEven
wird inaktiv und der ZustandOdd
wird aktiv. Die Aktionen des Typsentry
inOdd
setzenn
auf 22 undn2
auf 0.Das Diagramm berechnet die Hagelschlag-Zahlenfolge weiter, bis ein Wert von
n
zum Zeitpunkt erreicht ist.Zum Zeitpunkt bereitet das Diagramm den Übergang von
Even
zuOdd
vor. Die Übergangsaktion setzt den Werty
auftrue
. Der ZustandEven
wird inaktiv und der ZustandOdd
wird aktiv. Die Aktionen des Typsentry
inOdd
ändern wedern
nochn2
. Der Block „Stop Simulation“, der mit dem Ausgangssignaly
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.