Dieses Bild zeigt ein komplexes Stateflow-Modell mit mehreren hierarchischen Unterebenen.
Bild: Ein komplexes Stateflow-Modell mit mehreren hierarchischen Unterebenen

So bekommen Sie Stateflow mit Modellierungsrichtlinien in den Griff

Stateflow ist ein leistungsstarkes Tool in der modellbasierten Entwicklung, insbesondere in Branchen wie Automotive, in denen eine präzise Steuerung von Zustandsautomaten und komplexer Logik essenziell ist. Um Stateflow effektiv nutzen zu können, müssen jedoch häufig wiederkehrende Herausforderungen wie Syntaxprobleme und Performance-Aspekte bewältigt werden.

In diesem Artikel beleuchten wir zentrale Erkenntnisse aus einer Umfrage von MES und zeigen konkrete Empfehlungen, mit denen Sie Ihre Stateflow-Modelle hinsichtlich Performance, Zuverlässigkeit und Wartbarkeit optimieren können.

Dieses Bild zeigt die Ergebnisse der Umfrage über die Verwendung von Stateflow in den Modellen der Teilnehmer.
Bild: Anteil von Modellen, die Stateflow verwenden

Stateflow einsetzen: Ergebnisse der Umfrage

Verbreitung von Stateflow in der modellbasierten Entwicklung

Im Jahr 2022 haben wir in Zusammenarbeit mit 30 Praxis-Expert:innen aus Unternehmen wie der Mercedes-Benz Group AG, der Bosch-Gruppe, der Continental AG und anderen eine auf Stateflow ausgerichtete Umfrage durchgeführt.

Zunächst wollten wir wissen, ob Fachleute in der modellbasierten Entwicklung Stateflow einsetzen. Die Ergebnisse zeigen, dass die meisten Anwender:innen Stateflow in 20 bis 50 Prozent ihrer Modelle verwenden.

Diese Abbildung zeigt den Anteil der Teilnehmenden an der Umfrage, die hauptsächlich C oder MATLAB als „Action Language“ verwenden.
Bild: Welche „Action Language“ verwenden die Teilnehmer:innen?

Bevorzugte „Action Language“ in Stateflow

Die zweite Frage bezog sich auf die verwendete „Action Language“. Das nachfolgende Kreisdiagramm zeigt deutlich, dass die meisten Anwender:innen MATLAB gegenüber C bevorzugen. Gründe dafür sind die einfachere Nutzung und die enge Integration in das Simulink-Ökosystem.

Dieses Bild zeigt die Hindernisse, auf die die Teilnehmenden bei der Nutzung von Stateflow am häufigsten stoßen.
Bild: Hindernisse für die Teilnehmer:innen bei der Nutzung von Stateflow

Häufige Herausforderungen bei der Nutzung von Stateflow

Anschließend fragten wir nach den größten Schwierigkeiten beim Arbeiten mit Stateflow. Die häufigste Antwort war fehlendes Wissen. Gleichzeitig gab ein beachtlicher Teil der Teilnehmer:innen an, keine Probleme zu haben. Fehlende Funktionen wurden am seltensten genannt. Das deutet darauf hin, dass vor allem Schulungen und bessere Dokumentation helfen können.

Dieses Bild zeigt, ob die Teilnehmenden in Stateflow arithmetische Berechnungen durchführen oder nicht.
Bild: Verwendung von arithmetischen Berechnungen durch die Teilnehmer:innen in Stateflow

Stateflow für arithmetische Berechnungen

Die vierte Frage bezog sich auf den Einsatz von Stateflow für arithmetische Berechnungen. Eine Mehrheit von 56 % bejahte diese Frage. Dies unterstreicht die Vielseitigkeit des Tools bei der Bewältigung komplexer Berechnungen, wie sie in Automobilsystemen häufig erforderlich sind.

Dieses Bild zeigt die Elemente und Muster, die die Teilnehmer am häufigsten verwenden.
Bild: Verwendung von Stateflow-Elementen und -Mustern

Häufig verwendete Stateflow-Elemente und -Muster

Zum Schluss fragten wir nach den am häufigsten verwendeten Stateflow-Elementen und -Mustern. Die Ergebnisse zeigten eine relativ gleichmäßige Verteilung. „Statecharts“ und „Condition Actions“ wurden etwas häufiger genutzt, während „Boxes“ die geringste Verbreitung aufwiesen. Das deutet auf eine klare Präferenz für strukturierte und bedingungsbasierte Modellierung hin, insbesondere bei der Umsetzung von Entscheidungslogik.

Zentrale Erkenntnisse aus der Umfrage

Die Umfrage bestätigt, dass Stateflow ein fester Bestandteil der modellbasierten Entwicklung ist. Gleichzeitig zeigen die Antworten mehrere Herausforderungen im praktischen Einsatz.

Auf der Grundlage dieses Feedbacks hat das MES-Team häufige Probleme und Verbesserungsmöglichkeiten ermittelt. Im weiteren Verlauf dieses Artikels betrachten wir diese Herausforderungen genauer und zeigen Best Practices für effizientere und zuverlässigere Stateflow-Modelle.

Welche Herausforderungen erschweren die modellbasierte Entwicklung mit Stateflow?

Die modellbasierte Entwicklung mit Stateflow bietet leistungsstarke Funktionen, bringt jedoch auch Herausforderungen mit sich, die Wartbarkeit und Effizienz beeinträchtigen können. Zu den wichtigsten Schwierigkeiten gehören:

  • Zunehmende Komplexität: Mit steigender Anzahl von Zustandsübergängen wird die Verwaltung schwieriger.
  • Skalierungsprobleme: Zustandsautomaten wachsen schnell und werden schwerer lesbar und wartbar.
  • Syntaxeinschränkungen: Strikte Syntaxregeln sind notwendig, um Konsistenz und Fehlerfreiheit sicherzustellen.
  • Hoher Designaufwand: Ein strukturierter Ansatz und disziplinierter Umgang mit Stateflow sind essenziell, um unerwartetes Verhalten zu vermeiden und die Modellklarheit zu verbessern.
Dies ist ein Beispiel für eine korrekte Syntax für „Transition Labels“.
Bild: Beispiel für eine korrekte Syntax für „Transition Labels“

10 Methoden für bessere Stateflow-Modelle

1. Korrekte Syntax für „Transition Labels“ sicherstellen

Eine saubere Syntax für „Transition Labels“ verbessert Lesbarkeit, Wartbarkeit und Vorhersagbarkeit von Stateflow-Modellen. Gleichzeitig unterstützt sie eine korrekte Codegenerierung in Werkzeugen wie TargetLink.

Die Bestandteile eines „Transition Labels“ sind:

  • „Event“: Definiert ein Ereignis, das den Übergang auslöst
  • „Condition“: Definiert einen booleschen Ausdruck, der den Übergang erlaubt
  • „Condition Action“: Wird ausgeführt, sobald die Bedingung wahr ist
  • „Transition Action“: Wird ausgeführt, nachdem das Ziel des Übergangs validiert wurde

Eine mögliche Syntax lautet: trigger [condition] {condition_action} / transition_action.

Es müssen nicht alle Bestandteile verwendet werden. Empfehlenswert ist es, „Events“ möglichst zu vermeiden und stattdessen „Conditions“ zu nutzen, da diese dem Standard entsprechen. Außerdem sollte bewusst zwischen „Condition Actions“ und „Transition Actions“ entschieden werden.

Das Bild zeigt eine „History Junction“, die mit dem Symbol ‚H‘ gekennzeichnet ist und Fehler verursachen kann.
Bild: „History Junction“, die zu Fehlern führen kann

2. Das sichere „Subset“ der Modellierungssprache verwenden

Basierend auf den Modellierungsrichtlinien: mes_slsf_3110 | misra_slsf_047_ab | misra_slsf_046_a

„History Junctions“ sollten vermieden werden, da sie:

  • Fehlinterpretationen des Modells verursachen können
  • den Validierungsprozess erschweren
  • Funktionalität verstecken und die Wartbarkeit verschlechtern

Das folgende Bild zeigt eine „History Junction“ gekennzeichnet mit dem Symbol „H“. Dies könnte zu den zuvor erwähnten Fehlern führen.

„Events“ sollten ebenfalls vermieden werden, da sie:

  • zu Rekursionsproblemen führen können.
  • unbeabsichtigte Funktionen verursachen können.
  • Funktionen verbergen können, was das Verständnis und die Pflege des Modells erschwert.

Welche Stateflow-Aktionsrichtlinien können bedenkenlos verwendet werden?
Die Empfehlung lautet, sich für genau einen Action-Typ zu entscheiden also entweder „Condition Actions“ oder „Transition Actions“ oder „State Actions“. Dieser Typ sollte dann konsistent im gesamten Modell verwendet werden.

Dieses Bild verdeutlicht, dass die Änderung von Variablen während „Condition Actions“ und „Transition Actions“ zu unerwartetem Verhalten führen kann.
Bild: Das Ändern von „Condition Actions“ und „Transition Actions“ kann zu Fehlern führen

3. „Condition Actions“ und „Transition Actions“ korrekt einsetzen

Basierend auf den Modellierungsrichtlinien: misra_slsf_045_e | misra_slsf_045_f | misra_slsf_045_g

Vermeiden Sie es, Variablen in „Condition Actions“ und „Transition Actions“ zu schreiben. Änderungen an Variablen in diesen Bereichen können unerwartetes Verhalten verursachen und das Debugging erschweren.

Dieses Bild zeigt, dass das Lesen von Variablen, die in „Transition Action“ geändert wurden, in einer nachfolgenden „Transition“ zu Ausführungsinkonsistenzen führen kann.
Bild: Das Lesen von Variablen, die in „Transition Action“ geändert wurden, kann zu Ausführungsinkonsistenzen führen

Außerdem sollten Variablen, die in einer „Transition Action“ geändert wurden, nicht in nachfolgenden „Transitions“ gelesen werden. Das kann zu Inkonsistenzen in der Ausführungsreihenfolge führen.

Dieses Bild veranschaulicht, dass zur Gewährleistung eines vorhersehbaren Verhaltens jede Variable während eines Zustandswechsels nur durch eine einzige „Transition Action“ geändert werden sollte.
Bild: Um ein vorhersehbares Verhalten zu erreichen, ändern Sie eine Variable in nur einer „Transition Action“ pro Zustandsänderung

Schreiben mit einer einzigen „Transition Action“: Für vorhersehbares Verhalten sollte eine Variable bei einem Zustandswechsel nur durch genau eine „Transition Action“ verändert werden.

Die Abbildung zeigt einige Beispiele für Übergänge, die parallele Zustandsgrenzen überschreiten.
Bild: Übergänge über parallele Zustandsgrenzen hinweg

4. Kreuzende Übergänge in Stateflow vermeiden

Basierend auf der Modellierungsrichtlinie: mes_slsf_3109

„Transitions“ sollten keine Zustandsgrenzen kreuzen. Solche Kreuzungen erschweren die Lesbarkeit des Charts und erhöhen das Risiko von Fehlinterpretationen und Modellierungsfehlern.

Zusätzlich erschwert ein unübersichtliches Layout Debugging und Wartung. Durch logisch organisierte „Transitions“ und klare Pfade verbessern Sie Lesbarkeit, Wartbarkeit und Zuverlässigkeit Ihrer Stateflow-Modelle.

In den folgenden Grafiken sind Übergänge zu erkennen, die parallele Zustandsgrenzen überschreiten. Es ist äußerst wichtig, solche Überschneidungen zu vermeiden, da sie zu Verwirrung und möglichen Modellierungsfehlern führen können.

5. Keine Gleichheitsoperatoren mit Gleitkommaoperanden verwenden

Basierend auf den Modellierungsrichtlinien: jc_0481 | mes_sltl_002

Vergleiche von Gleitkomma-Werten mit folgenden Operatoren sollten vermieden werden:

  • ==
  • !=
  • ~=
  • <>

Gleitkomma-Zahlen besitzen aufgrund ihrer binären Darstellung kleine Rundungsfehler. Exakte Vergleiche sind daher unzuverlässig. Zwei mathematisch gleiche Werte können im Speicher minimale Unterschiede besitzen.
Aus diesem Grund wird davon abgeraten, bei Gleitkommazahlen die strenge Gleichheitsprüfung (strikter Bit-für-Bit-Vergleich) zu verwenden.

Dieses Bild zeigt ein Beispiel für ein Problem, das durch „Backtracking“ in Stateflow verursacht wird.
Bild: Beispiel für ein Problem, das durch „Backtracking“ in Stateflow verursacht wird

6. „Backtracking“ in Stateflow vermeiden

Basierend auf den Modellierungsrichtlinien: mes_sf_002 | misra_slsf_043_h

Stateflow unterstützt kein „Backtracking“. Bereits ausgeführte Aktionen bleiben wirksam, selbst wenn der Übergangspfad den vorgesehenen Endzustand nicht erreicht. Das kann zu unerwartetem Verhalten führen.

Um solche Probleme zu vermeiden, sollte jeder Übergangspfad einen bedingungslosen Default Pfad besitzen. Außerdem sollten „Condition Actions“ nur im letzten Abschnitt eines Übergangs verwendet werden oder alternativ „Transition Actions“ eingesetzt werden.

(Wie in Abschnitt 3 erläutert, gibt es gute Gründe, sich für Übergangsmaßnahmen zu entscheiden.)

Beispiel für ein „Backtracking“-Problem:

Die Abbildung zeigt, wie das Hinzufügen eines neuen Ereignisses (Event1) die Reihenfolge der Übergänge ändert und warum eine manuelle Steuerung erforderlich ist.
Bild: Durch das Hinzufügen eines neuen Ereignisses (Event1) ändert sich die Reihenfolge der Übergänge, daher ist eine manuelle Kontrolle ratsam

7. Best Practices zum Befolgen der Ausführungsreihenfolge

Basierend auf der Modellierungsrichtlinie: mes_is_0002

Stateflow definiert die Ausführungsreihenfolge standardmäßig im Uhrzeigersinn, insbesondere bei parallelen Zuständen. Schon kleine Änderungen am Layout oder das Hinzufügen neuer Elemente können die Ausführungsreihenfolge verändern.

Die folgende Grafik veranschaulicht, wie sich die Ausführungsreihenfolge der Übergänge in einem Stateflow-Diagramm ändert, wenn ein neues Ereignis (Event1) eingeführt wird, und verdeutlicht damit, wie wichtig es ist, die Ausführungsreihenfolge manuell festzulegen.

Dieses Bild zeigt die empfohlenen Simulink-Einstellungen, um Stateflow-Funktionen lokal zu halten und globale Exporte zu vermeiden, die Tracing und Datenfluss erschweren.
Bild: Wählen Sie die Option „Allow exported functions to be called by Simulink“ nicht aus

8. Globale Stateflow-Funktionen vermeiden

Basierend auf der Modellierungsrichtlinie: mes_slsf_3106

Stateflow-Funktionen sollten lokal innerhalb des jeweiligen Charts definiert werden. Das verbessert die Modularität und verhindert unbeabsichtigte Wechselwirkungen.

Die Funktion „Export Chart Level Functions (Make Global)“ erlaubt einen globalen Zugriff auf grafische Funktionen innerhalb des gesamten Modells. Diese Funktionen lassen sich jedoch nur schwer nachverfolgen und führen zu intransparentem Verhalten.

Auch die Option „Allow exported functions to be called by Simulink“ sollte nicht aktiviert werden, da sie zusätzliche Komplexität bei Datenfluss und Funktionsverwaltung erzeugt.

Das Bild zeigt eine rekursive Schleife in Stateflow, in der func1 und func2 sich gegenseitig aufrufen, was eine unendliche Rekursion verursacht.
Bild: Rekursive Schleife in Stateflow, bei der func1 und func2 sich gegenseitig aufrufen, was zu einer unendlichen Rekursion führt

9. Rekursive Schleifen vermeiden

Basierend auf der Modellierungsrichtlinie: jc_0804

Um unbeabsichtigtes Verhalten zu vermeiden und die Modellintegrität zu gewährleisten, ist es von entscheidender Bedeutung, dass grafische Funktionen in Stateflow weder rekursiv definiert werden noch andere grafische Funktionen aufrufen. Rekursive Aufrufe können zu Endlosschleifen, Stapelüberläufen und einer erhöhten Komplexität bei der Fehlersuche und Wartung führen.

Das folgende Diagramm veranschaulicht ein Problem mit rekursiven Schleifen in grafischen Stateflow-Funktionen. Bei der Ausführung von func1(x) wird func2(x) aufgerufen, das wiederum func1(x) aufruft, wodurch eine unendliche Rekursion entsteht. Um dieses Problem zu vermeiden, wird empfohlen, direkte oder indirekte rekursive Funktionsaufrufe in grafischen Stateflow-Funktionen zu vermeiden.

Das Bild zeigt die Oberfläche des TargetLink Property Manager von dSPACE.
Bild: TargetLink Property Manager von dSPACE

10. Eingangsvariablen explizit definieren

Beim Arbeiten mit TargetLink, Simulink und Stateflow sollten Eingangsvariablen explizit definiert werden, um eine konsistente und klar strukturierte Schnittstelle sicherzustellen.
Der TargetLink Property Manager von dSPACE unterstützt dabei, Variablendefinitionen zentral zu verwalten und Konsistenz zwischen Modell und Implementierung sicherzustellen.

Fazit: Komplexität mit Stateflow Modellierungsrichtlinien beherrschen

Stateflow bietet leistungsstarke Modellierungsfunktionen, bringt jedoch auch Risiken mit sich, wenn Modelle nicht sauber aufgebaut werden.

Um Komplexität in den Griff zu bekommen, sollten Sie folgende Best Practices beachten:

  • Halten Sie es einfach! Vermeiden Sie unnötige Komplexität bei Übergängen und Zustandslogik.
  • Führen Sie arithmetische Operationen in Simulink durch; andernfalls besteht die Gefahr, dass das Diagramm überladen und unübersichtlich wird.
  • Befolgen Sie bewährte Richtlinien, um unerwartetes Verhalten und fehleranfällige Muster zu vermeiden.
  • Achten Sie auf ein klares und strukturiertes Layout, um die Lesbarkeit und Wartbarkeit zu verbessern.
  • Nutzen Sie Tools wie den MES Model Examiner (MXAM), um die Einhaltung der Modellierungsrichtlinien zu automatisieren.

Durch die konsequente Anwendung dieser Stateflow-Modellierungsrichtlinien entstehen robuste, effiziente und wartbare Stateflow-Modelle mit nahtloser Integration in Simulink und TargetLink.

In unserem MES-Blog können Sie eine umfrangreiche Sammlung von Artikeln, Webinaren, Forschungsprojekten und vielem mehr zum Thema modellbasierte Entwicklung erkunden. Bleiben Sie auf dem Laufenden, erweitern Sie Ihr Fachwissen und erstellen Sie einfach bessere Modelle!

Kontaktieren Sie uns

Dieses Bild zeigt Elena Bley.
Elena Bley
Senior Manager Webinars & Training
Was ist die Summe aus 7 und 2?

* Pflichtfeld

Was ist die Summe aus 8 und 3?