Erstellen und Ausführen eines Stateflow-Diagramms
Ein Stateflow®-Diagramm ist die grafische Darstellung einer endlichen Zustandsmaschine, die aus Zuständen, Übergängen und Daten besteht. Sie können ein Stateflow-Diagramm erstellen, um zu definieren, wie ein MATLAB®-Algorithmus oder ein Simulink®-Modell auf externe Eingangssignale, Ereignisse und zeitabhängige Bedingungen reagiert.
Beispielsweise stellt dieses Stateflow-Diagramm die Logik dar, die einem Halbwellengleichrichter zugrunde liegt. Das Diagramm enthält zwei Zustände, die als On
und Off
gekennzeichnet sind. Im Zustand On
ist das Diagrammausgangssignal y
gleich dem Eingang x
. Im Zustand Off
ist das Ausgangssignal auf null gesetzt. Wenn das Eingangssignal einen Schwellenwert t0
über- oder unterschreitet, wechselt das Diagramm zwischen diesen Zuständen. Die Aktionen in jedem Zustand aktualisieren den Wert von y
bei jedem Zeitschritt der Simulation.
Dieses Beispiel veranschaulicht, wie dieses Stateflow-Diagramm für die Simulation in Simulink und die Ausführung in MATLAB erstellt wird.
Erstellen des Stateflow-Diagramms
Öffnen des Stateflow-Editors
Der Stateflow-Editor bietet eine grafische Umgebung zum Entwerfen von Zustandsübergangsdiagrammen, Flussdiagrammen, Zustandsübergangstabellen und Wahrheitstabellen. Entscheiden Sie vor dem Öffnen des Stateflow-Editors, welcher Diagrammausführungsmodus Ihren Anforderungen am ehesten entspricht.
Zum Modellieren bedingter, ereignisabhängiger und zeitabhängiger Logik für periodische und zeitkontinuierliche Simulink-Algorithmen verwenden Sie die Funktion
sfnew
, um ein Stateflow-Diagramm zu erstellen, das Sie als Block in einem Simulink-Modell simulieren können. Geben Sie an der MATLAB-Eingabeaufforderung Folgendes ein:sfnew rectify % create chart for simulation in a Simulink model
Simulink erstellt ein Modell mit dem Namen
rectify
, das einen leeren Stateflow-Block mit der Bezeichnung Chart enthält. Zum Öffnen des Stateflow-Editors doppelklicken Sie auf den Diagrammblock.Zum Entwerfen wiederverwendbarer Zustandsmaschinen- und Timing-Logik für MATLAB-Anwendungen verwenden Sie die Funktion
edit
, um ein eigenständiges Stateflow-Diagramm zu erstellen, das Sie als MATLAB-Objekt ausführen können. Geben Sie an der MATLAB-Eingabeaufforderung Folgendes ein:edit rectify.sfx % create chart for execution as a MATLAB object
Wenn die Datei
rectify.sfx
nicht vorhanden ist, erstellt der Stateflow-Editor ein leeres Diagramm mit dem Namenrectify
.
Die Hauptkomponenten des Stateflow-Editors sind der Diagrammzeichenbereich, die Objektpalette und der Fensterbereich Symbols.
Der Diagrammzeichenbereich (Canvas) ist eine Zeichenfläche, in der Sie ein Diagramm durch Kombination von Zuständen, Übergängen und anderen grafischen Elementen erstellen können.
Links von der Zeichenfläche werden in der Objektpalette verschiedene Tools angezeigt, mit denen Sie Ihrem Diagramm grafische Elemente hinzufügen können.
Auf der rechten Seite des Zeichenbereichs fügen Sie im Fensterbereich Symbols neue Daten, Ereignisse und Nachrichten in das Diagramm ein und lösen nicht definierte oder nicht verwendete Symbole auf.
Tipp
Wenn Sie Ihr Stateflow-Diagramm erstellt haben, können Sie seine Inhalte in ein anderes Diagramm mit einem anderen Ausführungsmodus kopieren. Beispielsweise können Sie ein Diagramm für die Ausführung in MATLAB erstellen und seine Inhalte in ein Diagramm für die Simulation in Simulink kopieren.
Hinzufügen von Zuständen und Übergängen
Klicken Sie in der Objektpalette auf das Symbol State und bewegen Sie den Mauszeiger in die Zeichenfläche. Es wird ein Zustand mit seinem Standardübergang angezeigt. Zum Platzieren des Zustands klicken Sie auf eine Position im Zeichenbereich. Geben Sie an der Texteingabeaufforderung den Zustandsnamen
On
und die Zustandsaktiony = x
ein.Fügen Sie einen weiteren Zustand hinzu. Klicken Sie mit der rechten Maustaste und verschieben Sie den Zustand
On
. Blaue grafische Marker helfen Ihnen, Ihre Zustände horizontal oder vertikal auszurichten. Der Name des neuen Zustands wird inOff
geändert. Doppelklicken Sie auf den Zustand und ändern Sie die Zustandsaktion iny = 0
.Ordnen Sie die beiden Zustände neu an und zeigen Sie mit der Maus auf den Bereich zwischen den beiden Zuständen. Blaue Übergangsmarker geben verschiedene Möglichkeiten zum Verbinden der Zustände an. Zum Hinzufügen von Übergängen klicken Sie auf den entsprechenden Marker.
Alternativ können Sie zum Zeichnen eines Übergangs auf die Kante eines Zustands klicken und den Übergang zur Kante des anderen Zustands ziehen.
Doppelklicken Sie auf jeden Übergang und geben Sie die entsprechende Übergangsbedingung ein:
x<t0
oderx>=t0
. Die Bedingungen werden in eckigen Klammern angezeigt.Bereinigen Sie das Diagramm:
Verschieben Sie zur Verbesserung der Übersichtlichkeit die einzelnen Übergangskennzeichnungen an eine geeignete Position über oder unter dem entsprechenden Übergang.
Zum Ausrichten und Ändern der Größe der grafischen Elemente Ihres Diagramms klicken Sie auf der Registerkarte Format auf Auto Arrange oder verwenden Sie die Tastenkombination Strg+Umschalttaste+A.
Um die Größe des Diagramms an den Zeichenbereich anzupassen, drücken Sie die Leertaste oder klicken Sie auf das Symbol Fit To View .
Auflösen nicht definierter Symbole
Bevor Sie Ihr Diagramm ausführen können, müssen Sie jedes im Diagramm verwendete Symbol definieren und seinen Bereich angeben (z. B. Eingangsdaten, Ausgangsdaten oder lokale Daten). Im Fensterbereich Symbols sind nicht definierte Symbole mit einem roten Fehler-Badge gekennzeichnet. In der Spalte Type wird der vorgeschlagene Geltungsbereich für jedes nicht definierte Symbol basierend auf seiner Verwendung im Diagramm angezeigt.
Öffnen Sie den Fensterbereich Symbols.
Wenn Sie ein Diagramm in einem Simulink-Modell erstellen, wählen Sie auf der Registerkarte Modeling unter Design Data die Option Symbols Pane aus.
Wenn Sie ein eigenständiges Diagramm für die Ausführung in MATLAB erstellen, wählen Sie auf der Registerkarte State Chart die Optionen Add Data > Symbols Pane aus.
Klicken Sie im Fensterbereich Symbols auf Resolve Undefined Symbols .
Wenn Sie ein Diagramm in einem Simulink-Modell erstellen, löst der Stateflow-Editor die Symbole
x
undt0
als Eingabedaten undy
als Ausgabedaten auf.Wenn Sie ein eigenständiges Diagramm für die Ausführung in MATLAB erstellen, löst der Stateflow-Editor
t0
,x
undy
als lokale Daten auf.
Da sich der Schwellenwert
t0
während der Simulation nicht ändert, ändern Sie seinen Geltungsbereich in konstante Daten. Klicken Sie in der Spalte Type auf das Datentyp-Symbol nebent0
und wählen SieConstant Data
aus.Legen Sie den Wert für den Schwellenwert
t0
fest. Klicken Sie in der Spalte Value auf den leeren Eintrag nebent0
und geben Sie den Wert 0 ein.Speichern Sie Ihr Stateflow-Diagramm.
Ihr Diagramm ist jetzt für die Simulation in Simulink oder die Ausführung in MATLAB bereit.
Simulieren des Diagramms als Simulink-Block
Zum Simulieren des Diagramms innerhalb eines Simulink-Modells verbinden Sie den Diagrammblock über Eingangs- und Ausgangsports mit anderen Blöcken im Modell. Informationen zum Ausführen des Diagramms aus dem MATLAB-Befehlsfenster finden Sie unter Ausführen des Diagramms als MATLAB-Objekt.
Um zum Simulink-Editor zurückzukehren, klicken Sie in der Explorer-Leiste am oberen Rand des Zeichenbereichs auf den Namen des Simulink-Modells:
rectify
. Wenn die Explorer-Leiste nicht sichtbar ist, klicken Sie auf das Symbol Hide/Show Explorer Bar am oberen Rand der Objektpalette.Fügen Sie dem Modell eine Quelle hinzu:
Fügen Sie aus der Bibliothek „Simulink Sources“ einen Sine Wave (Simulink)-Block hinzu.
Doppelklicken Sie auf den Sine Wave-Block und legen Sie Sample time auf 0,2 fest.
Verbinden Sie den Ausgang des Sine Wave-Blocks mit dem Eingang des Stateflow-Diagramms.
Kennzeichnen Sie das Signal als
x
.
Fügen Sie dem Modell eine Senke hinzu:
Fügen Sie aus der Bibliothek „Simulink Sinks“ einen Scope (Simulink)-Block mit zwei Eingangsports hinzu.
Verbinden Sie den Ausgang des Sine Wave-Blocks mit dem ersten Eingang des Scope-Blocks.
Verbinden Sie den Ausgang des Stateflow-Diagramms mit dem zweiten Eingang des Scope-Blocks.
Kennzeichnen Sie das Signal als
y
.
Speichern Sie das Simulink-Modell.
Klicken Sie zum Simulieren des Modells auf Run . Während der Simulation hebt der Stateflow-Editor aktive Zustände und Übergänge durch Diagrammanimation hervor.
Nachdem Sie das Modell simuliert haben, doppelklicken Sie auf den Scope-Block. Der Bereich zeigt die Kurvenbilder der Eingangs- und Ausgangssignale zu den Diagrammen an.
Die Simulationsergebnisse zeigen, dass der Gleichrichter negative Eingangswerte herausfiltert.
Ausführen des Diagramms als MATLAB-Objekt
Zum Ausführen des Diagramms im MATLAB-Befehlsfenster erstellen Sie ein Diagrammobjekt und rufen dessen Funktion step
auf. Informationen zum Simulieren des Diagramms innerhalb eines Simulink-Modells finden Sie unter Simulieren des Diagramms als Simulink-Block.
Erstellen Sie ein Diagrammobjekt
r
, indem Sie den Namen der Dateisfx
, die die Diagrammdefinition enthält, als Funktion verwenden. Geben Sie den Anfangswert für die Diagrammdatenx
als Name-Wert-Paar an.r = rectify(x=0);
Initialisieren Sie Eingangs- und Ausgangsdaten für die Diagrammausführung. Der Vektor
X
enthält Eingangswerte aus einer Sinuskurve. Der VektorY
ist ein leerer Akkumulator.T = 0:0.2:10; X = sin(T); Y = [];
Führen Sie das Diagrammobjekt durch mehrmaliges Aufrufen der Funktion
step
aus. Leiten Sie einzelne Werte vom VektorX
als Diagrammdatenx
weiter. Erfassen Sie die resultierenden Werte vony
im VektorY
. Während der Ausführung hebt der Stateflow-Editor aktive Zustände und Übergänge durch Diagrammanimation hervor.for i = 1:51 step(r,x=X(i)); Y(i) = r.y; end
Löschen Sie das Diagrammobjekt
r
aus dem MATLAB-Workspace.delete(r)
Untersuchen Sie die Ergebnisse der Diagrammausführung. Beispielsweise können Sie die Funktion
stairs
aufrufen, um ein Stufendiagramm zu erstellen, das die Werte vonX
undY
vergleicht.ax1 = subplot(2,1,1); stairs(ax1,T,X,color="#0072BD") title(ax1,"x") ax2 = subplot(2,1,2); stairs(ax2,T,Y,color="#D95319") title(ax2,"y")
Die Ausführungsergebnisse zeigen, dass der Gleichrichter negative Eingangswerte herausfiltert.