MATLAB Simulink Stateflow
Transcription
MATLAB Simulink Stateflow
Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Projekt AirBag MATLAB Simulink Stateflow Betreuer: Heiko Falk , Stefan Steinke Autor: Lei Yao Wintersemester 1999/2000 und Sommersemester 2000 1 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Inhaltsverzeichnis 1 Einleitung 2 MATLAB 2.1 Übersicht 2.2 Einfache Berechnung 2.3 Matrizen 2.4 M-Files 2.4.1 Script-Files 2.4.2 Funktion-Files 2.5 Kontrollstrukturen 2.6 Graphiken 2.7 Toolboxen 3 Simulink 3.1 Übersicht 3.2 Modellierung 3.2.1 Bau eines Modells 3.2.2 Modellierung einer Gleichung 3.2.3 Eine Demo 3.3 Simulation 3.4 Analyse der Simulationsresultate 3.5 Blocksets 3.6 Real-Time Workshop(RTW) 4 Stateflow 4.1 Übersicht 4.2 Stateflow Diagramm Objekte 4.2.1 Zustände 4.2.2 Transitionen 4.2.3 Ereignisse 4.2.4 Daten 4.2.5 Hierachie 4.2.6 Bedingungen 4.2.7 Aktionen 4.2.8 History 4.2.9 Parallel(AND) und Exklusiv(OR) 4.2.10 Verbindungspunkte(Connective Junctions) 4.3 Notation 4.3.1 Zustände 4.3.2 Transitionen 4.3.3 Verbindungspunkte 4.4 Semantik 4.4.1 Was ist Semantik 4.4.2 For-Schleife 4.4.3 Unterzustände(Substate) 4.5 Stateflowmaschine 4.6 Stateflow Coder 5 Zusammenfassung 2 Autor: Lei Yao Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao MATLAB, Simulink und Stateflow 1 Einleitung Elektronische Steuergeräte werden heutzutage in vielen Bereichen benutzt. Um eingebettete Systeme zu entwickeln, werden verschiedene Werkzeuge für Modellierung, Simulation und Implementierung angeboten. MATLAB/Simulink/Stateflow von MathWorks ist so ein Werkzeugsystem. Dieses Werkzeugsystem wird bereits auch für SteuergeräteSoftwareentwicklung im Automobilbereich eingesetzt. Bild 1 stellt die gesamte Struktur dar. MATLAB ist eine Programmsprache, die die Grundlage für das ganze System ist. Simulink benutzt MATLAB, verwendet Blockdiagramme und gibt die Simulationsausgabe aus. Durch RTW kann Simulink C-Programm erzeugen. Stateflow wird auf MATLAB und Simulink gebaut. Stateflow verwendet Zustandsdiagram und erzeugt C-Programm durch Stateflow Coder . Bild 1 2 MATLAB 2.1 Übersicht MATLAB ist eine Programmiersprache für mathematisch-technische Untersuchungen unter Verwendung von Digitalrechnern. Das Programmsystem integriert Berechnung, 3 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Visualisierung und Programmierung in einer einfachen Benutzungsumgebung, wo Probleme und Lösungen mit gewohnten mathematischen Zeichen ausgedrückt werden. Das MATLAB System besteht aus fünf Hauptteilen: 1. MATLAB Sprache, 2. MATLAB Arbeitsumgebung, 3. Behandlung von Grafiken, 4. MATLAB mathematische Funktionsbibliothek und 5. MATLAB Anwendungsprogramm-Schnittstelle (Application Program Interface: API). 2.2 Einfache Berechnung MATLAB wird mit der Eingabe MATLAB <cr> oder mit der Rechnermaus gestartet. Ist das Programm in den Arbeitsspeicher geladen, so erscheint auf dem Bildschirm die Eingabeaufforderung >>. Das Programmsystem befindet sich in der interaktiven Betriebsart, wobei syntaktisch richtige Benutzereingaben zeilenweise ausgeführt werden und das Ergebnis auf dem Bildschirm erscheint. Die Eingabe des Ausdrucks >> 2+3 liefert ans = 5 wobei MATLAB das Ergebnis der Variablen ans zuweist, der Abkürzung für ”answer”. In der folgenden Zeile wird das Ergebnis der Variaben x zugewiesen: >> x=2+3; Das Semikolon wird gesetzt, wenn Zwischenergebnisse nicht ausgegeben werden sollen. Der Wert der Variablen kann jedoch jederzeit abgefragt werden: >> x x= 5 Falls ein Ausdruck nicht in einer einzelnen Zeile geschrieben werden kann, wird die erste Zeile durch drei oder mehr Punkte abgeschlossen und in der folgenden Zeile weiter geschrieben: >> y = 1-2+3-4+... 5+6 y= -3 Im folgenden Ausdruck >> z = x*y^2 z= 45 werden die bereits definierten Variablen x und y verwendet. Mit ^ wird potenziert. 2.3 Matrizen 4 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Der Name MATLAB ist die Abkürzung für MATrix LABoratory. Ursprünglich war MATLAB für den leichten Zugriff auf Matrizen geschrieben worden, wobei in den Elementen komplexe Zahlen zugelassen sind. Matrizen sind zeilenweise einzugeben. Die Elemente werden durch Leerzeichen und die Zeilen durch Semikolon oder <cr> abgeschlossen. Ein Paar eckige Klammern schließt die Elemente ein: >> A = [ 4 5 ; 6 3 ] A= 4 5 6 3 Mit einem einfachen Anführungszeichen ( ’ ) kann eine Matrix transponiert werden: >> B = A’ B= 4 6 3 5 Matrix-Elemente können in runden Klammern adressiert werden. Im Beispiel wird das Element in der zweiten Zeile, erste Spalte mit dem Wert 6 auf den Wert 2 gebracht: >> A(2,1) = 2 A= 4 5 2 3 Bei der elementweisen Multiplikation und Division von Vektoren oder Matrizen werden Elemente mit gleichem Index verknüpft. Elementweise Operationen werden durch einen Punkt links neben dem Operator gekennzeichnet: >> C = A .* B C= 16 30 6 15 diag(m) erzeugt eine Diagonalmatrix mit den Elementen des Vektors m: >> D = diag([ 4 5 ]) D= 4 0 0 5 Mit der Eingabe eye(n) wird eine Einheitsmatrix mit n Zeilen und n Spalten erzeugt: >> E = eye(2) E= 1 0 0 1 Vektoren werden als Matrizen mit einer Zeile oder einer Spalte behandelt: >> a = [ 1; 3; 5 ] a= 1 5 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao 3 5 Vektoren können auch mit dem Doppelpunkt ( : ) gebildet werden: >> b = 1 : 6 b= 1 2 3 4 5 6 Vektoroperationen sind nützlich für den Ausbau einer Tabelle: >> n = ( 0 : 6 )’; >> pows = [ n n .^2 2 .^n ] pows = 0 0 1 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32 6 36 64 2.4 m-Files Mit der obigen interaktiven Arbeitsweise werden Anweisungen zeilenweise eingegeben und ausgeführt. Um mehrere Programmzeilen zu schreiben und wieder zu verwenden, werden in der MATLAB Sprache M-Files benutzt. Zwei Arten von m-Files werden verwendet: ScriptFiles und Funktion-Files, die mit einem Text-Editor oder mit dem MATLAB-Editor erstellt werden können. 2.4.1 Script-Files Script-Files sind häufig umfangreichere Programmsequenzen und haben Zugriff auf alle in einer Sitzung definierten Variablen. Script-Files mit der Bezeichnung filename.m werden durch Eingabe von filename(call bei name) ohne den Zusatz .m gestartet. 2.4.2 Function-Files Funktion-Files sind meist kürzere Programme. Mit ihnen können die Benutzer eigene Funktionen definieren und damit den vorhandenen MATLAB-Funktionsvorrat erweitern. Variablen in Funktion-Files sind lokale Variablen. Funktion-Files sind m-Files in der folgenden allgemeinen syntaktischen Form, dabei sind E1, E2, ... Eingabeparameter und A1, A2, .... Ausgabeparameter: % Kommentare funktion[ A1, A2, .... ] = Filename( E1, E2, .... ) MATLAB-Anweisungen Das Funktion-File pt2wu.m berechnet ue und we: 6 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao % MATLAB Funktion-File pt2wu.m funktion[ue, we] = pt2wu(D, Wo) sq = sqrt(1-D*D); we = Wo * sq; ue = exp(-D * pi/sq); pi ist eine in MATLAB vordefinierte Konstante. Mit den Werten für D = 0.5 und Wo = 1/sec wird das Funktion-File gestartet: >> [ ue, we ] = pt2wu( D, Wo) ue = 0.1630 we = 0.8660 2.5 Kontrollstrukturen Wie in den meisten höheren Programmiersprachen gibt es im MATLAB die Kontrollstrukturen for-Schleife, while-Schleife, if-elseif-else. Die for-Schleife wird für eine feste Anzahl von Schleifendurchläufen verwendet. Bei der while-Schleife wird die Eintrittsbedingung vor dem Schleifendurchlauf geprüft. Die Anweisungen in der Schleife werden ausgeführt, solange die Bedingung erfüllt ist. Die If-else Struktur wird für die bedingte Ausführung von Anweisungen verwendet. 2.6 Graphiken MATLAB hat extensive Möglichkeiten zur Erstellung von Graphiken aus Vektoren und Matrizen. Für Graphiken mit linearer Skalierung der Achsen wird die Funktion plot verwendet. Mit nur einem Eingabeparameter plot(y) erhält man den Vektor y auf der Ordinate in Abhängigkeit von den Index (1...13) auf der Absizsse. Verwendet man zwei Eingabeparameter plot(x,y), dann wird der Vektor y auf der Ordinate und der Vektor x auf der Abszisse dargestellt: %MATLAB Script-File dreieck.m x = [0:5:60]; y = [0 1 2 3 2 1 0 -1 -2 -3 -2 -1 0]; plot(x,y) Mehrere Kurven können in einer Graphik dargestellt werden: %MATLAB Script-File dreisin.m t = 0:pi/100:2*pi; y1 = sin(t); y2 = sin(t-.25); y3 = sin(t-.5); plot(t,y1,t,y2,t,y3) 7 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Es ist möglich, Farbe und Darstellung der einzelnen Kurven mit dem Befehl plot(x,y, ‘colorstyle-marker’) zu spezifizieren. Mit plot(x,y, ‘g:+’) wird beispielsweise der Vektor y durch eine Kurve mit grünen Punkten und Pluszeichen auf allen Daten dargestellt. Die xlabel und ylabel Funktionen erzeugen x- und y-Achse Beschriftungen. Die title Funktion addiert einen Titel an das obere Ende. Die text Funktion fügt Text irgendwo in die Graphik ein. Mit subplot werden mehrere Teilbilder erzeugt. subplot(m n p) unterteilt das Graphikfenster in eine m*n Matrix von Teilbildern. Mit p wird das aktuelle Teilbild adressiert. Dreidimensionale Graphiken können mit Funktionen plot3, contour, mesh und surf dargestellt werden. 2.7 Toolboxen MATLAB ist schon sehr mächtig. Für Spezialgebiete gibt es aber noch Erweiterungen, so genannte Toolboxen. Toolboxen sind umfassende Sammlungen von MATLAB Funktionen, die die MATLAB Umgebung ausbauen, um besondere Klassen von Problemen zu lösen. Die Toolboxen liefern die Anstrengungen und die Erfolge mancher Spitzenforscher in der Welt in Gebieten wie Regelung, Communication, Finanzen, usw. Die verfügbaren Toolboxen sind Control System Toolbox, Signal Processing Toolbox, System Identification Toolbox, Neuronetz Toolbox, Fuzzy Control Disign Toolbox, usw. Mit der Control System Toolbox kann man direkt Signalflußplänen umformen, Regelungen im Zeitbereich und Frequenzbereich berechnen, Zustandsregelungen bearbeiten. 3 Simulink 3.1 Übersicht Simulink ist eine Erweiterung von MATLAB mit Bedienoberfläche unter Verwendung von Blockdiagrammen (Signalflussplänen). Mit diesem Software-Paket kann man dynamische Systemen modellieren, simulieren und analysieren. Simulink untersucht lineare und nicht lineare Systeme, die kontinuierlich, diskret oder hybrid sein können. Eine der Schlüsselmerkmale von Simulink ist, daß Simulink oberhalb MATLAB aufgebaut wird. Als eine Folge können die Benutzer von Simulink direkt auf die umfangreichen MATLAB-basierten Werkzeuge zugriffen, um System zu erzeugen, zu analysieren und zu optimieren. Die Werkzeuge enthalten MATLAB Anwendungstoolboxen, die spezielle Sammlungen von M-Files für die Bearbeitung besonderer Klassen von Problemen sind. 3.2 Modellierung 3.2.1 Bau eines Modells 8 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Simulink bietet eine graphische Benutzer-Schnittstelle für den Aufbau der Modelle als Blockdiagramm. Mit dieser Schnittstelle kann man ein Modell zeichnen wie mit Bleistift und Papier. Klicken-und-Ziehen Operationen werden benutzt. Diese ist sehr unterschiedlich von früheren Simulationspaketen, für die man Differential-Gleichungen in einem Programm formulieren mußte. Komplizierte Modelle profitieren oft durch die Hinzufügung der Hierarchie von Subsystemen. Ein Subsystem ist eine Gruppe von Blöcken. Man kann ein System auf einer höheren Ebene beobachten, und dann doppel-klicken auf die Blöcke, um Subsysteme zu öffnen und Details zu besichtigen. Durch Subsysteme ist ein Modell leichter zu lesen und zu verstehen. Ein Modell bestellt aus zwei Hauptobjekten: Blöcke und Linien. Das SimulinkBlockbibliothek-Fenster zeigt Icons, die die Blockbibliotheken wie Sinks, Sources, lineare und nichtlineare Komponenten, und Konnectoren repräsentieren(Bild 2). Jede Blockbibliothek besitzt eine Menge von Blöcken. In der Sources-Bibliothek kann man verschiedendste Eingabesignale wie zum Beispiel Sine-Wave-Block finden(Bild 3). Man kann auch Blöcke modifizieren oder eigene Blöcke erzeugen. Bild 2 9 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Bild 3 Um ein Modell zu bauen, gibt man das Kommando simulink bei dem MATLAB Prompt ein, dann erscheinen MATLAB-Kommandofenster, ein neues leeres Modellfenster und das Simulink-Blockbibliothek-Fenster auf dem Bildschirm. Die Blöcke werden von der Blockbibliothek in das Modellfenster kopiert, die Parameter mancher Blöcke werden eingestellt, und dann werden die Blöcke durch die Linien miteinander verbunden. 3.2.2 Modellierung einer Gleichung Die Gleichung Tf = 9/5(Tc) + 32 rechnet Celsius in Fahrenheit um. Ein Modell für diese Gleichung braucht 5 Blöcke: * Ein Ramp-Block aus der Sources-Bibliothek gibt das Temperatursignal ein. 10 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao * Ein Konstant-Block aus der Sources-Bibliothek definiert eine Konstante 32. * Ein Gain-Block aus der Linear-Bibliothek multipliziert das Eingangssignal mit 9/5. * Ein Sum-Block aus der Linear-Bibliothek addiert zwei Werte. * Ein Scope-Block aus der Sinks-Bibliothek zeigt die Ausgabe. Werden die 5 Blöcke aus der Bibliothek in ein Modellfenster kopiert und verbunden, entsteht das Modell für die Umrechnung von Celsius zu Fahrenheit (Bild 4). Bild 4 3.2.3 Eine Demo Die Demo Thermo modelliert die Thermodynamik eines Hauses (Bild 5). Das Thermostat ist auf 70 Grad Fahrenheit eingestellt und wird von der äußeren Temperatur beeinflußt, die durch eine Sinuswelle mit Amplitude von 15 Grad auf einer Basistemperatur von 50 Grad simuliert wird. Das Modell benutzt Subsysteme, um das Modelldiagramm zu vereinfachen. 5 Subsysteme sind Thermostat, Haus(Bild 6) und 3 Temp-Convert Subsysteme. Die innere und äußere Temperatur wird dem Haus eingegeben. Das Haus updatet die innere Temperatur. Das Thermostat entscheidet durch die innere Temperatur, ob die Heizung ein- oder ausgeschaltet werden soll, um die innere Temperatur um 70 Grad zu halten. Die Heizungskosten, innere und äußere Temperatur werden in den Scope-Blöcken angezeigt. 11 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Bild 5 Bild 6 12 Autor: Lei Yao Projekt: AirBag 3.3 Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Simulation Die Simulation von Simulink-Modellen betrifft die numerische Integration von ordinären Differentialgleichungen (ordinary differential equations: ODEs). Simulink stellt zahlreiche Solver für die Simulation solcher Gleichungen zur Verfügung. Wegen der Vielfalt von dynamischem Systemverhalten können manche Solvers leistungsfähiger als andere bei Lösung eines besonderen Problems sein. Um genaue und schnelle Resultate zu bekommen, sollen die Solver vorsichtig ausgewählt werden und die Parameter richtig eingestellt werden. Es gibt variable-step und fixed-step Solvers. Variable-step Solvers können ihre Schrittgröße während der Simulation modifizieren. Wenn ein Modell kontinuierliche Zustände hat, wird ode45 als ”erster Versuch” für die meisten Probleme benutzt. ode45 ist ein ausgezeichneter variable-step Solver für allgemeinen Zwecke. Simulationsparameter wie Start Time, Stop Time, Step Sizes, Output Options, usw sollen zuerst spezifiziert werden. Simulation kann entweder von dem Simulink-Menü oder durch Befehle in MATLAB’s Kommando-Window ausgeführt werden. Während der Ausführung einer Simulation kann die Ausgabe in Scopes beobachtet werden. Man kann auch die Parameter ändern und sofort in Scopes sehen was passiert. Die Simulationsresultate können für Postprocessing und Visualisierung in den MATLAB-Workspace gelegt werden. 3.4 Analyse der Simulationsresultate Simulationsresultate können nicht nur in Scopes gezeigt werden, sonder auch mit Linearisierungs- und Trimming-Tools analysiert werden. Die Funktion linmod erhält lineare Modelle in Zutandsraumform aus Systemen von Differential-Gleichungen. Die Funktion trim ermittelt einen stabilen Punkt, der einen spezifizierten Satz von Zustands-, Eingabe-, und/oder Ausgabebedingungen erfüllt. 3.5 Blocksets Ähnlich wie MATLAB und seinen Anwendungstoolboxen, bietet MathWorks Blocksets für die Benutzung mit Simulink an. Blocksets sind zusätzliche Simulink-Blöcke, die in einer separaten Bibliothek von der Haupt-Simulink-Blockbibliothek angeordnet werden. Blocksets sind für spezielle Anwendungen wie Kommunikation, Signalprocessing und Kraftwerksystem zustandig. Drei wichtige Blocksets sind: DSP Blockset, Fixed-Point Blockset und Nonlinear Control Design (NCD) Blockset. Das DSP Blockset baut Simulink für die Anwendung in der rapiden Simulation und den Entwurf von DSP-basierten Geräten und Systemen aus. Mit dem DSP Blockset bietet Simulink ein intuitives Werkzeug für interaktive Blockdiagramm-Simulationen und Evaluation durch Signalprocessing-Algorithmen. Das Fixed-Point Blockset erweitert die normale Blockbibliothek des Simulinks auch. Mit dieser neuer Sammlung von Blöcken können diskrete dynamische Systeme erzeugt werden, die Fixed-Point Arithmetik verwendet. Das NCD Blockset ist für den Entwurf von zeitdomain-basierten, robusten, nichtlinearen Steuerungen zuständig. 3.6 Real-Time Workshop(RTW) 13 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Das Simulink Real-Time Workshop erzeugt C Code direkt aus Simulink-Blockdiagrammen. Diese Funktion kann für eingebettete Systemen benutzt werden. Nachdem ein System mit Simulink entworfen worden ist, kann Code für Real-Time-Controller oder digitale SignalProzessoren erzeugt, übersetzt, gelinkt und im Targetprozessor abgelegt werden. RTW unterstützt DSP-Boards, eingebettete Controller und verschiedendstee kommerziell verfügbare Hardware. 4 4.1 Stateflow Übersicht Stateflow ist ein mächtiges graphisches Entwurfs- und Entwicklungswerkzeug für komplizierte Steuerungen und logische Probleme. Mit Stateflow kann man Stateflowdiagramme erzeugen. Ein Stateflowdiagramm ist eine graphische Darstellung von einem endlichen Automat, wo Zustände und Transitionen die grundlegenden Blöcke des Systems bilden. Mit Stateflow ist es leicht, Entwürfe herzustellen, verschiedene Szenarios zu betrachten, und zu iterieren, bis Stateflowdiagramme das gewünschte Verhalten modellieren. Eine der typischen Anwendungsgebeite von Stateflow sind eingebettete Systeme. Für die Codeerzeugung wird Stateflow Coder verwendet. 4.2 Stateflow Diagramm Objekte Ein Stateflowdiagramm besteht aus graphischen Komponenten und nichtgraphischen Objekten. Bild 7 zeigt die graphische Komponente. 14 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Bild 7 4.2.1 Zustände Ein Zustand beschreibt einen Modus eines ereignisgesteuerten Systems. Die Aktivität oder Nichtaktivität eines Zustandes ändert sich dynamisch nach Ereignissen und Bedingungen. Jeder Zustand hat Eltern. Im Bild 7 ist StateA1 ein Kind von StateA. Zustände haben Labels, die die Aktionen spezifizieren können. Die Aktionen werden nach Aktionstyp in einer Reihenfolge ausgeführt. Die Aktionstypen sind entry, during, exit und on. 4.2.2 Transitionen Eine Transition verbindet ein Objekt mit einem anderen. Ein Ende einer Transition hängt an einem Quellenobjekt, das andere an einem Zielobjekt. Ein Transitionslabel beschreibt die Umstände, unter denen das System sich von einem Zustand zu einem anderen Zustand bewegt. Um eine Transition zu triggern, müssen manche Ereignisse stattfinden. In Bild 7 wird die Transition von StateA1 zu StateA2 mit dem Ereignis transitionA1_A2 gezeichnet, das die Transition triggert. Default-Transitionen spezifizieren exklusive(OR) Zustände, die aktiv sein werden, wenn es Unklarheiten zwischen zwei oder mehreren exklusive(OR) Zuständen in der selben Ebene in der Hierarchie gibt. In Bild 7, wenn StateA aktiv ist, ist StateA1 bei Default auch aktiv. Eine innere Transition ist eine Transition, die keinen Quellenzustand hat. 4.2.3 Ereignisse 15 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Ereignisse sind keine graphischen Objekte. Ereignisse treiben Stateflowdiagramme. Hat ein Ereignis stattgefunden, wird der Status der Zustände in einem Stateflowdiagramm bewertet. Die Übertragung eines Ereignisses kann initiieren, daß eine Transition stattfindet und/oder eine Aktion ausgeführt wird. 4.2.4 Daten Datenobjekte sind numerische Werte im Stateflowdiagramm. Jedes Datum hat Eltern. Daten werden oft in den Aktionen manipuliert, die mit Zuständen und/oder Transitionen assoziiert werden können. Der Wert des Datums wird entweder innerhalb des Stateflowdiagramms durch Aktionen oder außerhalb des Stateflowdiagramms durch Simulink oder äußere Quellen bestimmt. In Bild 8, wenn der Zustand Off aktiv ist, und das Ereignis switch-on übertragen wird, wird die Transition von Off nach On getriggert. Sobald der Zustand On erreicht wird, wird das Datum on_count inkrementiert. Bild 8 4.2.5 Hierachie Stateflow unterstützt eine hierarchische Organisation von Zuständen. Ein Unterzustand kann in einem Superzustand existieren. Ein hierarchischer Entwurf reduziert die Zahl der Transitionen und erzeugt ordentliche, handliche Diagramme. In Bild 7 enthält der Superzustand StateA zwei Unterzutände, StateA1 und StateA2. StateA ist der Vatervon StateA1 und StateA2. Wenn ein Unterzustand aktiv ist, ist sein Vater Superzustand auch aktiv. 4.2.6 Bedingungen 16 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Eine Bedingung ist ein boolescher Ausdruck. Wenn der Ausdruck wahr ist, wird eine Transition ausgeführt. In Bild 7 findet die Transition von StateA1a oder StateA1b nach StateA1c statt, wenn der Ausdruck [condition1] wahr ist. 4.2.7 Aktionen Während ein Teil des Stateflowdiagramms ausgeführt wird, finden Aktionen statt. Stateflow unterstürtzt sowohl Mealy als auch Moore Automaten. In dem Mealy Modell werden Aktionen mit Transitionen verbunden, während in dem Moore Modell Aktionen mit Zuständen assoziiert werden. Stateflow unterstützt Zustandsaktionen, Transitionsaktionen und Bedingungsaktionen. Zustände können den Aktionstyp entry, during, exit und on haben. Transitionen können Bedingungsaktionen oder Transitionsaktionen haben. Eine Aktion kann ein Funktionsanruf, Übertragung eines Ereignisses, Zuweisung einer Variable, usw sein. 4.2.8 History History bietet die Mittel an, den Ziel-Unterzustand einer Transition nach historischer Informationen zu spezifizieren. Wenn ein Superzustand mit exklusiver(OR) Dekomposition einen History-Knoten hat, wird der Ziel-Zustand für eine Transition so definiert, daß es der zuletzt besuchte Zustand ist. Der History-Knoten hat Priorität gegenüber default Transitionen. 4.2.9 Parallel(AND) und Exklusiv(OR) Stateflow bietet zwei Typen von Zuständen an: parallele(AND) und exklusive(OR) Zustände. In Bild 7 sind StateA2a und StateA2b paralelle Zustände, sie können gleichzeitig aktiv sein. StateA1 und StateA2 sind exklusive Zustände, zu jedem Zeitpunkt kann nur ein Zustand aktiv sein. StateA hat eine exklusive Zustand-Dekomposition. 4.2.10 Verbindungspunkte(Connective Junctions) Verbindungspunkte sind Entscheidungsstellen in einem System. Ein Verbindungspunkt vereinfacht Darstellungen des Stateflowdiagramms und erleichtert die Erzeugung von leistungsfähigem Code. In Bild 7 wird ein Verbindungspunkt als eine Entscheidungsstelle für zwei Transitionssegmente benutzt, die an StateA1c beenden. 4.3 Notation Eine Notation definiert einen Satz von Objekten und Regeln, die die Beziehungen zwischen den Objekten verwalten. Die Stateflow-Notation bietet eine natürliche Sprache an, um die von einem Stateflowdiagram mitgeteilte Entwurfsinformationen zu kommunizieren. Die Notation bildet die Verbindungen zwischen den graphischen Objekten und der Aktionssprache. Die Aktionssprache diktiert die Aktionen, die mit Zuständen und Transitionen assoziiert werden können. Die Stateflow-Notation unterstützt unterschiedliche Arten der Darstellung für das gewünschte Systemverhalten. Welche Darstellung gewählt wird, beeinflußt die Leistungsfähigkeit des generierten Codes. 4.3.1 Zustände 17 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Aktionen können mit Zuständen via Labels vereinigt werden. Die Zustandslabels haben das folgende Format: name/ entry: during: exit: on event_name: Die Stichwörter entry, during, exit und on identifizieren Aktionen mit dem Zustand. Jedes Stichwort ist optional. In Bild 9 sind die Zustandsnamen On und Off. Der Zustand On hat entry Aktion on_count=0. Wenn die entry Aktion ausgeführt wird, wird der Wert on_count zu 0 eingestellt. Der Zustand On hat zwei during Aktionen light_on() und on_count++. Wenn On’s during Aktion ausgeführt wird, werden die Aktionen light_on() und on_count++ auch ausgeführt. Der Zustand On hat die Aktion on event_name, power_outage. Wenn das Ereignis power_outage stattfindet, wird die Aktion handle_outtage() ausgeführt. Der Zustand Off hat exit Aktion light_off(). Diese Aktion wird ausgeführt, wenn Off’s exit Aktion ausgeführt wird. Bild 9 4.3.2 Transitionen Die Transitionslabels haben folgendes allgemeines Format: event [condition] {condition_action} / transition_action Jeder Teil des Labels ist optional. Das Ereignis(event) veranlaßt die Transition stattzufinden, wenn die Bedingung(condition) wahr ist. Die condition_action wird ausgeführt, solange die condition als wahr bewertet wird und bevor das Transitionsziel als gültig bestimmt wird. Die transition_action wird durchgeführt, wenn die condition als wahr bewertet wird und nachdem das Transitionsziel als gültig bestimmt wird. In Bild 10, wenn 18 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao die Bedingung [off_count==0] wahr ist, triggert die Übertragung von dem Ereignis E die Transition von On zu Off. Die Bedingungsaktion off_count++ wird sofort durchgeführt. Wenn die Zielzustand Off auch gültig ist, wird die Transitiopnsaktion Light_off ausgeführt. Bild 10 4.3.3 Verbindungspunkte Verbindungspunkte werden für Darstellungen der if-then-else Struktur, for Schleife, Transition von einer gemeinsamen Quelle zu mehrfachen Zielen, usw verwendet. Verbindungspunkte und Transitionen sind die meistbenutzten Objekte in einer Flowdiagram-Notation. Die Flowdiagram-Notation wird im wesentlichen ohne Verwendung von Zuständen logisch dargestellt. Die Verwendung von Flowdiagram-Notationen kann leistungsfähigeren Code produzieren, der für Speicheranwendungen optimiert werden. Bild 11 zeigt eine reale Anwendung der Flußdiagramnotation und Zustandstransitionsnotation. Angenommen, daß Zustand Sensor.Low aktiv ist und Ereignis UPDATE stattfindet. Die innere Transition von Sensor nach dem ersten Verbindungspunkt ist gültig. Die Bedingungsaktion {start_adc()} wird durchgeführt. Die Eigenschleife an dem zweiten Verbindungspunkt testet die Bedingung [adc_busy()] und erzeugt eine Verzögerung. Die nächste Bedingungsaktion {sensorValue=read_adc()} setzt einen neuen Wert in dem Datenobjekt sensorValue. Nach dem Wert von sensorValue wird der Zielzustand festgestellt. 19 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Bild 11 4.4 4.4.1 Semantik Was ist Semantik Eine Semantik beschreibt, wie die Notation interpretiert und implementiert wird. Ein Stateflowdiagramm enthält Aktionen, die mit Transitionen und Zustände verbunden sind. Semantik beschreibt, in welcher Sequenz die Aktionen stattfinden. Die Kenntnis der Semantik ist wichtig, um sinnvolle Stateflowdiagramme entwerfen und Code erzeugen zu können. Das Stateflowdiagramm wird nur ausgeführt, wenn ein Ereignis stattfindet. Exakt was ausgeführt wird, hängt von den Umständen ab, wenn das Ereignis stattfindet. Wenn ein Ereignis stattfindet, läuft die Ausführung von oben nach unter durch die Hierarchie des Stateflowdiagramms. In jeder Ebene in der Hierarchie werden during und on Aktionen für die aktiven Zustände ausgeführt, dann wird die Transition der Kinder durchgeführt. 4.4.2 For-Schleife Dieses Beispiel zeigt die Semantik für eine for-Schleife. In Bild 12 werden die Bedingungsaktion und der Verbindungspunkt verwandt, um eine for-Schleife zu erzeugen. 20 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Bild 12 Am Anfang ist das Stateflowdiagramm schlafend. Zustand A ist aktiv. Ereignis E_one findet statt und weckt das Stateflowdiagramm auf. Ereignis E_one wird von der Wurzel des Stateflowdiagramms hinunter durch die Hierarchie des Stateflowdiagramms verarbeitet. #1 Die Wurzel des Stateflowdiagramm untersucht, ob es eine gültige Transition als eine Folge von E_one gibt. Es gibt ein gültiges Transitionssegment von Zustand A zu dem Verbindungspunkt. Die Bedingungsaktion i=0 wird ausgeführt und beendet. Zwei Transitionssegmente verlassen den Verbindungspunkt. Die Eigenschleife wird zunächst als gültig bewertet, weil sie eine Bedingung hat, während die andere Transition nicht beschriftet ist. #2 Die Bedingung [i<10] wird als wahr bewertet. Die Bedingungsaktionen i++ und ein Anruf zu func1 werden durchgeführt, bis die Bedingung falsch wird. #3 Das unbeschriftete Segment nach Zustand A ist jetzt gültig. Die vollständige Transition von Zustand A nach Zustand B ist gültig. #4 Zustand A führt exit Aktionen aus und beendet exit Aktionen (exitA()). #5 Zustand A wird inaktiv markiert. #6 Zustand B wird aktiv markiert. #7 Zustand B führt entry Aktionen aus und beendet entry Aktionen(entB()). #8 Das Stateflowdiagramm geht zurück zu “schlafen” und wartet, von einem anderem Ereignis aufgeweckt zu werden. 4.4.3 Unterzustände(Substate) Dieses Beispiel zeigt die Semantik für eine Transition von einem OR Subzustand zu einem OR Subzustand, siehe Bild 13. Bild 13 Am Anfang ist das Stateflowdiagramm schlafend. Zustand A.A1 ist aktiv. Ereignis E_one findet statt und weckt das Stateflowdiagramm auf. Bedingung C_one ist wahr. Ereignis E_one wird von der Wurzel des Stateflowdiagramms hinunter durch die Hierarchie des Stateflowdiagramms verarbeitet. #1 Die Stateflowdiagramm’s Wurzel untersucht, ob es eine gültige Transition als eine Folge von E_one gibt. Es gibt eine gültige Transition von Zustand A.A1 nach Zustand B.B1. 21 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao #2 Zustand A führt during Aktionen aus und beendet during Aktionen(durA()). #3 Zustand A.A1 führt exit Aktionen aus und beendet exit Aktionen(exitA1()). #4 Zustand A.A1 wird untätig markiert. #5 Zustand A führt exit Aktionen aus und beendet exit Aktionen(exitA()). #6 Zustand A wird untätig markiert. #7 Die Transitionsaktion A wird durchgeführt und beendet. #8 Zustand B wird tätig markiert. #9 Zustand B führt entry Aktionen aus und beendet entry Aktion(entB()). #10 Zustand B.B1 wird tätig markiert. #11 Zustand B.B1 führt entry Aktionen aus und beendet entry Aktionen(entB1()). #12 Das Stateflowdiagramm geht zurück zu “schlafen” und wartet, von anderem Ereignis aufgeweckt zu werden. 4.5 Stateflowmaschine Die Stateflowmaschine ist die Sammlung von Stateflowblöcken in einem Simulinkmodell. Das Simulinkmodell und die Stateflowmaschine arbeiten nahtlos zusammen. Wenn eine Simulation läuft, führen beide Simulink und Stateflow automatisch aus. Ein Simulinkmodell kann aus Kombinationen von Simulinkblöcken, Toolboxblöcken und Stateflowblöcken (Stateflowdiagrammen) bestehen. Es gibt eine eins-zu-eins Korrespondenz zwischen dem Simulinkmodell und der Stateflowmaschine wie in Bild 14. Jeder Stateflowblock in dem Simulinkmodell entspricht einer Chart(Stateflowdiagramm) im Stateflow. Die Stateflowmaschine ist die höchste Ebene in der Stateflowhierarchie. Ein Stateflowblock hat eine Schnittstelle mit seinem Simulinkmodell. Ereignisse und Daten von Simulink können zu Stateflow fliessen. 4.6 Stateflow Coder Stateflow Coder ist ein separates Produkt für Anwendung mit Stateflow, damit Code für RTW und Stateflow stand-alone (keine Simulation/ kein RTW) Targets erzeugt werden kann. Stateflow Coder generiert auf der Stateflow-Maschine basierten Integer-Code oder FloatingPoint-Code. RTW erzeugt Code aus dem Simulinkmodell und bietet ein Framework für die Durchführung der generierten Codes in Real-Time. Der von Stateflow erzeugte Code wird nahtlos mit dem von RTW generierten Code vereinigt. Mit Stateflow, Stateflow Coder, Simulink und RTW wird Zielcode für das komplette Modell erzeugt. Mit Stateflow und Stateflow Coder kann Zielcode exklusiv für die Stateflowmaschine des Simulinkmodells erzeugt werden. 22 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow Autor: Lei Yao Bild 14 5 Zusammenfassung Simulink verwendet eine blockorientierte Modellierung mit hierarchischer Struktur und ist sowohl für diskrete als auch für kontinuierliche oder hybride Systeme geeignet. Stateflow bietet neue Möglichkeiten an, mit Zustandsdiagrammen zu modellieren. Das System besitzt als Grundlage ein mathematisches Analysewerkzeug MATLAB, daß Möglichkeiten zur linearen Analyse und zum Reglerentwurf zur Verfügung stellt. Das Werkzeug generiert CCode für die Echtzeithardware eines Prototyping-Systems. Diese Code-Generierung ist Basis der durchgängigen Nutzbarkeit des Werkzeugs für die SteuergeräteSoftwareentwicklung. 23 Projekt: AirBag Thema: MATLAB/Simulink/Stateflow 24 Autor: Lei Yao