Main Content

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

Modellieren endlicher Zustandsmaschinen

Stateflow® ist eine grafische Programmierumgebung, die auf endlichen Zustandsmaschinen basiert. Mit Stateflow können Sie Ihren Entwurf testen und debuggen, verschiedene Szenarien ausprobieren und Code aus Ihrer Zustandsmaschine generieren.

Endliche Zustandsmaschinen sind Darstellungen dynamischer Systeme, die von einem Betriebsmodus (Zustand) in einen anderen übergehen. Zustandsmaschinen:

  • Sind ein Ausgangspunkt auf hoher Abstraktionsebene für die Entwicklung komplexer Software.

  • Ermöglichen es Ihnen, sich auf die Betriebsmodi und Bedingungen zu konzentrieren, die erforderlich sind, um von einem Betriebsmodus zum nächsten überzugehen.

  • Unterstützen Sie beim Entwickeln von Modellen, die auch bei zunehmender Komplexität des Modells eindeutig und präzise bleiben.

Die Entwicklung von Regelungssystemen hängt in hohem Maße von Zustandsmaschinen ab, die komplexe Logik verwalten. Zu den Anwendungen zählen die Entwicklung von Luftfahrzeugen, Automobilen und Regelungssystemen für Roboter.

Beispiel eines Stateflow-Diagramms

In einem Stateflow-Diagramm kombinieren Sie Zustände, Übergänge und Daten, um eine endliche Zustandsmaschine zu implementieren. Dieses Stateflow-Diagramm stellt ein vereinfachtes Modell der Logik des Schaltvorgangs in einem Vier-Gang-Automatikgetriebe eines Fahrzeugs dar. Das Diagramm stellt jede Gangposition durch einen Zustand dar, der als Rechteck mit der Kennzeichnung first, second, third oder fourth angezeigt wird. Diese Zustände sind, genau wie die Gänge, die sie darstellen, exklusiv, sodass immer nur ein Zustand aktiv ist.

Stateflow chart with states labeled first, second, third, and fourth. The chart transitions between the states when the speed is higher or lower than a specified amount.

Der Pfeil auf der linken Seite des Diagramms stellt den Standardübergang dar und kennzeichnet den Zustand, der zuerst aktiv wird. Wenn Sie das Diagramm ausführen, wird dieser Zustand im Zeichenbereich hervorgehoben. Die anderen Pfeile kennzeichnen die möglichen Übergänge zwischen den Zuständen. Um die Dynamik der Zustandsmaschine zu definieren, ordnen Sie jeden Übergang einer Booleschen Bedingung oder einem Triggerereignis zu. In diesem Beispiel überwacht das Diagramm die Geschwindigkeit des Fahrzeugs und wechselt in einen anderen Gang, wenn die Geschwindigkeit einen festgelegten Schwellenwert über- oder unterschreitet. Während der Simulation ändert sich die Hervorhebung im Diagramm abhängig von den jeweils aktiven Zuständen.

Chart animation showing states and transitions activating.

Dieses Diagramm ist einfach aufgebaut und lässt wichtige Faktoren wie Motordrehzahl und -drehmoment außer Acht. Sie können ein umfangreicheres und realistischeres Modell entwerfen, indem Sie dieses Stateflow-Diagramm mit anderen Komponenten in MATLAB® oder Simulink® verknüpfen. Die folgenden Beispiele beschreiben drei mögliche Ansätze.

Ausführen des Diagramms als MATLAB-Objekt

Dieses Beispiel stellt die abgeänderte Version eines Automatikgetriebes dar, in die eine Zustandshierarchie, temporale Logik und Eingangsereignisse integriert wurden.

  • Hierarchie: Das Diagramm besteht aus einem übergeordneten Zustand, gear_logic, der das Diagramm mit dem Vier-Gang-Automatikgetriebe aus dem vorherigen Beispiel umgibt. Der übergeordnete Zustand regelt die Geschwindigkeit und Beschleunigung des Fahrzeugs. Während der Ausführung ist gear_logic immer aktiv.

  • Temporale Logik: Im Zustand gear_logic bestimmt die Aktion on every(0.25,sec) die Geschwindigkeit des Fahrzeugs. Der Operator every erstellt einen MATLAB-Timer, der das Diagramm speed ausführt und die Diagrammdaten alle 0,25 Sekunden aktualisiert.

  • Eingangsereignisse: Die Eingangsereignisse SpeedUp, Cruise und SlowDown setzen den Wert der Diagrammdaten delta zurück. Diese Daten bestimmen, ob das Fahrzeug beschleunigt oder seine Geschwindigkeit während der einzelnen Ausführungsschritte beibehält.

Sie können dieses Diagramm als Objekt in MATLAB direkt über das Befehlsfenster oder mithilfe eines Skripts ausführen. Sie können auch eine MATLAB-App programmieren, die den Zustand des Diagramms über eine grafische Benutzeroberfläche regelt. Beispielsweise wird über diese Benutzeroberfläche ein Eingangsereignis an das Diagramm gesendet, wenn Sie auf eine Schaltfläche klicken. Im Diagramm regelt die MATLAB-Funktion widgets die Werte der Messfunktionen und Leuchten in der Benutzeroberfläche. Zum Starten des Beispiels klicken Sie in der Werkzeugleiste des App Designer auf Run. Das Beispiel wird so lange ausgeführt, bis Sie das Fenster der Benutzeroberfläche schließen.

Alternativ klicken Sie im Stateflow-Editor auf der Registerkarte State Chart auf Run. Zum Regeln der Fahrzeuggeschwindigkeit verwenden Sie im Fensterbereich Symbols die Schaltflächen SpeedUp, SlowDown und Cruise. Zum Stoppen des Beispiels klicken Sie auf Stop.

Weitere Informationen zum Ausführen von Stateflow-Diagrammen als MATLAB-Objekte finden Sie unter Ausführung in MATLAB.

Simulieren eines Diagramms als Simulink-Block mit lokalen Ereignissen

Dieses Beispiel umfasst einen komplexeren Entwurf eines Automatikgetriebes. Das Stateflow-Diagramm wird als Block in einem Simulink-Modell angezeigt. Die anderen Blöcke im Modell stellen die zugehörigen Fahrzeugkomponenten dar. Das Diagramm weist Schnittstellen zu den anderen Blöcken auf, sodass Daten über Eingangs- und Ausgangsverbindungen gemeinsam genutzt werden können. Zum Öffnen des Diagramms klicken Sie auf den Pfeil unten links im Block shift_logic.

Dieses Diagramm kombiniert Zustandshierarchie, Parallelismus, aktive Zustandsdaten, lokale Ereignisse und temporale Logik.

  • Hierarchie: Der Zustand gear_state umfasst eine abgeänderte Version des Diagramms mit dem Vier-Gang-Automatikgetriebe. Der Zustand selection_state umfasst untergeordnete Zustände, die die Betriebsmodi für Dauerbetrieb, Hochschalten und Herunterschalten darstellen. Wenn die Umstände das Schalten in einen höheren oder niedrigeren Gang erfordern, werden diese Zustände aktiv.

  • Parallelismus: Die parallelen Zustände gear_state und selection_state werden als Rechtecke mit einem gestrichelten Umriss dargestellt. Diese Zustände werden auch dann simultan angewendet, wenn die untergeordneten Zustände innerhalb dieser Zustände ein- und ausgeschaltet werden.

  • Daten aktiver Zustände: Der Ausgabewert gear spiegelt die Auswahl der Gänge während der Simulation wider. Das Diagramm generiert diesen Wert aus dem aktiven untergeordneten Zustand in gear_state.

  • Lokale Ereignisse: Anstelle Boolescher Bedingungen verwendet dieses Diagramm die lokalen Ereignisse UP und DOWN, um die Übergänge zwischen den Gängen zu triggern. Diese Ereignisse haben ihren Ursprung in den send-Befehlen in selection_state, wenn die Geschwindigkeit des Fahrzeugs den Betriebsbereich für den ausgewählten Gang verlässt. Die Simulink-Funktion calc_th bestimmt die Grenzwerte für den Betriebsbereich basierend auf dem ausgewählten Gang und der Motordrehzahl.

  • Temporale Logik: Damit die Schaltvorgänge nicht zu schnell aufeinanderfolgen, verwendet selection_state den temporalen Logikoperator after, um die Übertragung der Ereignisse UP und DOWN zu verzögern. Der Zustand überträgt eines dieser Ereignisse nur, wenn ein Gangwechsel länger als eine vorgegebene Zeit TWAIT erforderlich ist.

Gehen Sie zum Ausführen einer Simulation des Modells wie folgt vor:

  1. Doppelklicken Sie auf den Block User Inputs. Wählen Sie im Dialogfenster „Signal Editor“ aus der Liste Active Scenario ein vordefiniertes Brems-Drossel-Profil aus. Das Standardprofil ist Passing Maneuver.

  2. Klicken Sie auf Run. Im Stateflow-Editor werden die aktiven Zustände während der Simulation durch die Diagrammanimation hervorgehoben. Zum Verlangsamen der Animation wählen Sie auf der Registerkarte Debug aus der Dropdown-Liste Animation Speed die Option Slow aus.

  3. Überprüfen Sie in den „Scope“-Blöcken die Ergebnisse der Simulation. Jeder Bereich zeigt ein Kurvenbild seiner Eingangssignale während der Simulation an.

Simulieren eines Diagramms als Simulink-Block mit temporalen Bedingungen

Dieses Beispiel veranschaulicht eine weitere Alternative für die Modellierung des Getriebes in einem Fahrzeug. Das Stateflow-Diagramm wird als Block in einem Simulink-Modell angezeigt. Die anderen Blöcke im Modell stellen die zugehörigen Fahrzeugkomponenten dar. Das Diagramm weist Schnittstellen zu den anderen Blöcken auf, sodass Daten über Eingangs- und Ausgangsverbindungen gemeinsam genutzt werden können. Zum Öffnen des Diagramms klicken Sie auf den Pfeil unten links im Block Gear_logic.

Dieses Diagramm kombiniert Zustandshierarchie, aktive Zustandsdaten und temporale Logik.

  • Hierarchie: Dieses Modell verlagert das Diagramm des Vier-Gang-Automatikgetriebes in den übergeordneten Zustand gear. Der übergeordnete Zustand überwacht Fahrzeuggeschwindigkeit und Motordrehzahl und triggert die Schaltvorgänge. Die oben links im Zustand „gear“ aufgeführten Aktionen bestimmen die Betriebsschwellenwerte für den ausgewählten Gang sowie die Werte der Booleschen Bedingungen up und down. Die Kennzeichnung en,du weist darauf hin, dass die Zustandsaktionen ausgeführt werden, wenn der Zustand zum ersten Mal aktiv wird (en = entry) und bei jedem nachfolgenden Zeitschritt, solange der Zustand aktiv ist (du = during).

  • Daten aktiver Zustände: Der Ausgabewert gear spiegelt die Auswahl der Gänge während der Simulation wider. Das Diagramm generiert diesen Wert aus dem aktiven untergeordneten Zustand in gear.

  • Temporale Logik: Um eine schnelle Folge von Schaltvorgängen zu verhindern, verwenden die Booleschen Bedingungen up und down den temporalen Logikoperator duration, um den Übergang zwischen den Gängen zu steuern. Die Bedingungen sind erfüllt, wenn die Geschwindigkeit des Fahrzeugs länger als eine vorgegebene Zeit TWAIT (gemessen in Sekunden) außerhalb des Betriebsbereichs für den ausgewählten Gang bleibt.

Gehen Sie zum Ausführen einer Simulation des Modells wie folgt vor:

  1. Doppelklicken Sie auf den Block User Inputs. Wählen Sie im Dialogfenster „Signal Editor“ aus der Liste Active Scenario ein vordefiniertes Brems-Drossel-Profil aus. Das Standardprofil ist Passing Maneuver.

  2. Klicken Sie auf Run. Im Stateflow-Editor werden die aktiven Zustände während der Simulation durch die Diagrammanimation hervorgehoben. Zum Verlangsamen der Animation wählen Sie auf der Registerkarte Debug aus der Dropdown-Liste Animation Speed die Option Slow aus.

  3. Untersuchen Sie im Block „Scope“ die Ergebnisse der Simulation. Der Bereich zeigt ein Kurvenbild des während der Simulation ausgewählten Gangs an.

Nächste Schritte