Matlab Simulink - Stateflow Grundlagen, Toolboxen, Beispiele von Anne Angermann, Michael Beuschel, Martin Rau, Ulrich Wohlfarth 4., überarbeitete Auflage
Oldenbourg Verlag München Wien
Vorwort zur vierten Auflage Dr. Anne Angermann, Dozentin an der TU München. Dr, Michael Beuschel, Conti Temic microelectronic GmbH, Ingolstadt. Dr. Martin Rau, BMW AG, München. Ulrich Wohlfarth, Patentanwaltskanzlei Charrier, Rapp & Liebau, Augsbnrg. Die Nennung von Marken oder Titeln oder geschützten Wörtern oder Wortfolgen erfolgt in diesem Werk ohne Erwähnung etwa bestehender Marken-, Geschmacksmuster-, Gebi'auchsmuster-, Titelschutzrechteoder Patente. Das Fehlen eines solchen Hinweises begründet also nicht die Annahme, ein nicht gekennzeichnetes Wort oder eine nicht gekennzeichnete Wortfolge, Ware oder Dienstleistung bzw. entsprechende Titel seien frei. Weitere Informationen zum Produkt MATLAB erhalten Sie unter The MathWorks GmbH Friedlandstr. 18 D-52064 Aachen Tel.: 0241-47075-0 Fax: 0241-47075-12 E-Mail:
[email protected] www.mathworks.de
Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet üb~r
abrufbar.
© 2005 Oldenbonrg Wissenschaftsverlag GmbH Rosenheimer Straße 145, D-81671 München Telefon: (089) 45051-0 www.oldenbourg.de Das Werk einschließlich aller Abbildungen ist urheberrechtlich geschützt. Jede Verwertung außerhalb der Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere für VervieWiltigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Bearbeitung in elektronischen Systemen. Lektorat: Kathrin Mönch Herstellung: Anna Grosser Umschlagkonzeption: Kraxenberger Kommunikationshaus, München Gedruckt auf säure- und chlorfreiem Papier Drucle R. Oldenbourg Graphische Betriebe Druckerei GmbH ISBN 3-486-57719-0
Die 4. Auflage wurde im Hinblick auf die aktuelle MATLAB-Version 7.0.1 (Release 14 mit Service Pack 1) vollständig überarbeitet und ergänzt, ohne jedoch den Umfang des Buches wesentlich zu erhöhen. Das Ergebnis ist ein kompaktes Lehrbuch für den Einsteiger und gleichzeitig ein übersichtliches Nachschlagewerk für den fortgeschrittenen MATLAB-Anwender. .Wesentliche Änderungen betreffen den mit zusätzlichen nützlichen Details ausgestatteten MATLAB-Desktop sowie das Thema Datenimport und -export. Neu aufgenommen wurden MATLAB-Datentypen sowie - aufgrund zahlreicher Anregungen - Tipps zur effizienten Programmierung und zur erweiterten grafischen Ausgabe. Die Abschnitte zur Spektralanalyse und zu digitalen Filtern wurden erweitert und dabei auch die grafische Benutzeroberfläche des Signal Processing Tools mit einbezogen. Die dem Buch beigelegte CD-ROM ist mit einem benutzerfreundlichen HTMLNavigator versehen. Neben den überarbeiteten Beispielen, Übungsaufgaben und Lösungen enthält die CD-ROM wieder eine Bibliothek der Autoren mit nützlichen Extras für MATLAB und Simulink. Danken möchten wir zuallererst Herrn Professor Schröder, Ordinarius des Lehrstuhls für Elektrische Antriebssysteme der Technischen Universität München, für seine umfassende Unterstützung bei der Erstellung dieses Buches. Ausgehend von seiner Idee und seinem unermüdlichen Engagement, eine längst notwendige Vorlesung zum Softwarepaket MATLAB und Simulink für Studenten der Fachrichtungen Energietechnik, Automatisierungstechnik und Mechatronik ins Leben zu rufen, konnten wir in sehr freier und kollegialer Arbeitsweise ein Skriptum zu dieser Vorlesung erstellen. Die äußerst positive Resonanz von Studenten unterschiedlichster Fachrichtungen sowie zahlreiche Anfragen aus Forschung und Industrie ermutigten uns, das Skriptum einem größeren Leserkreis zu erschließen und als Buch zu veröffentlichen. Aufgrund der regen Nachfrage erscheint dieses Buch nun bereits in seiner 4. Auflage. Nicht zuletzt danken wir daher unseren zahlreichen Lesern, allen Studenten und Kollegen, die uns dabei mit ihren Anregungen und ihrer stets wohlwollenden Kritik unterstützten. Für Verbesserungvorschläge und Hinweise auf noch vorhandene Fehler sind wir stets dankbar und werden sie auf der Internetseite www.matlabbuch.de neben weiteren aktuellen Informationen rund um MATLAB veröffentlichen. Dem Oldenbourg Verlag danken wir für die Bereitschaft, dieses Buch zu verlegen. Besonderer Dank gilt hierbei Frau Mönch sowie Frau Dr. Bromm für ihre hilfreiche Unterstützung während der Entstehung und für die Übernahme des Lektorats.
München
Anne Angermann Michael Beuschel Martin Rau Ulrich Wohlfarth
VI
Vorwort zur ersten Auflage Das vorliegende Buch "Matlab - Simulink - Statefiow" wendet sich an Studenten und Ingenieure, die das Simulationswerkzeug MATLAB/Simulink effizient einsetzen wollen. Zielsetzung dieses Buches ist es, dem Leser einen direkten Zugang zum Anwenden der umfangreichen Möglichkeiten dieses Programmpaketes zu ermöglichen. Es wird prägnant dargestellt, welche wesentlichen Funktionen in MATLAB und Simulink verfügbar sind - beispielsweise Ein- und Ausgabe, grafische Darstellungen oder die verschiedenen Toolboxen und Blocksets für die Behandlung zeitkontinuierlicher und zeitdiskreter linearer und nichtlinearer Systeme sowie ereignisdiskreter Systeme - und wie diese Funktionen zu nutzen sind. Dies wird außerdem an zahlreichen Beispielen erläutert. Um den Ansatz prägnante Einführung zu unterstützen, sind zudem zu jedem Abschnitt Übungsaufgaben mit deren Lösungen auf einer CD-ROM beigefügt. Der Leser hat somit die Option, sein Verständnis des betreffenden Kapitels selbständig zu vertiefen und sofort praktisch zu überprüfen. Um den Umfang dieses Buches zu begrenzen, sind keine theoretischen Abhandlungen z.B. über Integrationsverfahren, die Grundlagen der Regelungstechnik oder der Signalverarbeitung bzw. deren Implementierungen enthalten. Für den interessierten Leser finden sich jedoch in jedem Kapitel Hinweise auf vertiefende Literatur. Ausgangspunkt dieses Buches war meine Überlegung, Studenten so früh wie möglich mit den Vorteilen des wertvollen Werkzeuges Simulation bekannt zu machen. Dies beginnt bei regelungstechnischen AufgabensteIlungen bereits bei der Modellbildung der Komponenten des betrachteten Systems und der Erstellung des Simulationsprogramms. Es setzt sich fort bei der Validierung der Modelle .sowie der grafischen Veranschaulichung des Systemverhaltens in den verschiedenen Arbeitspunkten und bei unterschiedlichen Randbedingungen, etwa aufgrund variabler Parameter, der Systemanalyse, der Reglersynthese sowie der Optimierung des Gesamtsystems. Ausgehend von diesen Überlegungen wurde ein Konzept für dieses Buch erarbeitet, damit der Leser die verschiedenen AufgabensteIlungen möglichst anschaulich kennen lernt. Dieses Konzept wurde aufgrund langjähriger Erfahrung bei Vorlesungen, Studien- und Diplomarbeiten, Dissertationen und Industrieprojekten kontinuierlich verbessert. Meine Mitarbeiter unq ich hoffen, allen Interessierten in Studium und Beruf mit diesem Buch einen anschaulichen und effizienten Einstieg in die Simulation mit MATLAB und Simulink geben zu können. München
Dierk Schröder
Inhaltsverzeichnis 1
Einführung
2
MATLAB
2.1 2.1.1 2.1.2 2.1.3 2.1.4
Erste Schritte mit MATLAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der MATLAB-Desktop ................................................. Die MATLAB-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zuweisungen.......................................................... Mathematische Funktionen und Operatoren............................
5 5 7 8 9
2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6
Variablen ................................................ " ........ , ... Datentypen in MATLAB ............................................... Vektoren und Matrizen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Mathematische Funktionen und Operatoren für Vektoren und Matrizen. Strukturen. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cell Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Verwalten von Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 9 10 12 14 15 16
2.3 2.3.1 2.3.2 2.3.3 2.3.4
Ablaufsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Vergleichsoperatoren und logische Operatoren...... .. . .. . . ... .. .. . ..... Verzweigungsbefehle i f und swi tch ................................... Schleifenbefehle for und while .......... , .. . . ..... .. . . .. .... . .... . . ... Abbruchbefehle continue, break und return. . . . . . . . . . . . . . . . . . . . . . . . ..
17 17 19 19 20
2.4
Der MATLAB-Editor .............. , ........ '" ... '" .. .. .. .. .. .. . . . .. ..
21
2.5 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6
MATLAB-Funktionen .................................................. Funktionen mit variabler Parameterzahl ............................... Lokale, globale und statische Variablen ................................ Hilfetext in Funktionen ......................... , ................... , .. Function Handles .... , ............................................... " Funktionen als Inline Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. P-Code und clear functions.........................................
23 23 24 26 26 27 27
2.6 2.6.1 2.6.2 2.6.3
Code-Optimierung in MATLAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Der MATLAB-Profiler ....... , ...... , ............ , ... . .. . . .. ... . .. .. . ... Optimierung von Rechenzeit und Speicherbedarf ... . ... ... .. . . .. . ...... Tipps zur Fehlersuche .................................................
28 28 29 30
2.7 2.7.1 2.7.2
Übungsaufgaben. ...................................................... 31 Rechengenauigkeit ..................................................... 31 Fibonacci-Folge ....................................................... 31
Grundlagen
1 5
VIII
Inhaltsverzeichnis
2.7.3 2.7.4
Funktion gerade ...................................................... 31 Berechnungszeiten ermitteln ............................. , .. . .. ........ 32
3
Eingabe und Ausgabe in MATLAB
3.1
33
Steuerung der Bildschirmausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 33
3.2 3.2.1 3.2.2 3.2.3
· Benutzerdialoge .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 34 Text in MATLAB (Strings) ....................... , ....... , .. . .. ........ 34 Eingabedialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35 Formatierte Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35
3.3 3.3.1 3.3.2 3.3.3
Import und Export von Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 36 Standardformate ...................................................... 36 Formatierte Textdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 37 Binärdateien .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 39
3.4
Betriebssystemaufruf und Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 40
3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6
Grafische Darstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. · Die Figure - Grundlage einer MATIJAB-Grafik. . . . . . . . . . . . . . . . . . . . . . . . .. Achsen und Beschriftung ., . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Plot-Befehle für zweidimensionale Grafiken (2D-Grafik) ................ Plot-Befehle für dreidimensionale Grafiken (3D-Grafik) ... , .. .. . ..... ... Perspektive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Importieren, Exportieren und Drucken von Grafiken ..... , ....... ,. ....
40 41 43 44 48 49 51
3.6 3.6.1 3.6.2 3.6.3 3.6.4
Grafische Benutzeroberfläche (GUI). ... .. ... .. . .... .. . ... . .... ... .. . ... GUI-Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. GUI-Funktionalität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... GUI ausführen und exportieren... ... ....... .. . . .... . .. ... .. . .. .. ...... Aufbau des Application-M-File ........... , . .. ..... . . . ... . .... . .. ... ...
52 52 56 57 58
· Tipps rund um die MATLAB-Figure....................................
60
3.8 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Harmonisches Mittel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . .. Einschwingvorgang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Gauß-Glocke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Spirale und Doppelhelix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Funktion geradevek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
63 63 63 63 64 65
4
Differentialgleichungen in MATLAB
67
3.7
4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.2
Anfangswertprobleme (ODEs, DAEs und DDEs) ....................... 67 Gewöhnliche Differentialgleichungen (ODEs) . ... .. ... ... ...... ... .. . ... 67 · Differential-algebraische Gleichungen (DAEs) .......................... 80 Differentialgleichungen mit Totzeiten (DDEs) .......................... 83 Implizite Differentialgleichungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 86 Randwertprobleme für gewöhnliche Differentialgleichungen. . . . . . . . . . . ..
88
I I
i
')1
Inhaltsverzeichnis
IX
4.3
Partielle Differentialgleichungen (PDEs) ...............................
94
4.4 4.4.1 4.4.2 4.4.3 4.4.4
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Feder-Masse-Schwinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Elektrischer Schwingkreis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Springender Ball ...................................................... Kettenlinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
96 96 97 98 98
5
Regelungstechnische Funktionen - Control System Toolbox
99
5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6
ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle ........... Übertragungsfunktion - Transfer Function TF ......................... Nullstellen-Polstellen-Darstellung - Zero-Pole-Gain ZPK ............... Zustandsdarstellung - State-Space SS .................................. Frequenzgang-Daten-Modelle - Frequency Response Data FRD ........ Zeitdiskrete Darstellung von LTI-Modellen ............................. Zeitverzögerungen in LTI-Modellen ....................................
99 100 102 105 106 108 110
'5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9
Arbeiten mit LTI-Modellen ............................................ Eigenschaften von LTI-Modellen ....................................... Schnelle Datenabfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Rangfolge der LTI-Modelle ............................................ Vererbung von LTI-Modell-Eigenschaften .............................. Umwandlung in einen anderen LTI-Modell-Typ ........................ Arithmetische Operationen ............................................ Auswählen, verändern und verknüpfen von LTI-Modellen ............. " Spezielle LT1-Modelle .................................................. Umwandlung zwischen zeitkontinuierlichen und zeitdiskreten Systemen.
112 112 115 116 117 117 118 120 123 124
5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7
Analyse von LTI-Modellen ............... , ............................. Allgemeine Eigenschaften. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Modell-Dynamik ...................................................... Systemantwort im Zeitbereich ......................................... Systemantwort im Frequenzbereich ...................... , ............. Interaktive Modellanalyse mit dem LTI-Viewer ....................... " Ordnungsreduzierte Darstellung ....................................... Zustands beschreibungsformen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
128 128 130 138 142 151 154 157
5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5
Reglerentwurf .... , ....... , ............................................ Reglerentwurf mittels Wurzelortskurve ................................. Interaktiver Reglerentwurf: Das S1SO Design Tool ..................... Zustandsregelung und Zustandsbeobachtung ........................... Reglerentwurf mittels Polplatzierung ................................... Linear-quadratisch optimale Regelung .................................
162 162 166 167 169 173
5.5 5.5.1 5.5.2 5.5.3 5.5.4
Probleme der numerischen Darstellung ................... , ............. Fehler begriff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Kondition eines Problems .............................................. Numerische Instabilität ................................................ Bewertung der LTI-Modell-Typen nach numerischen Gesichtspunkten ..
180 180 181 182 183
x
Inhaltsverzeichnis
5.6 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8
Übungsaufgaben ....................................................... Erstellen von LTI-Modellen ....... , ........................ , ..... , ..... Verzögerte Übertragungsglieder ........................................ Verzögerte Übertragungsglieder zeitdiskretisiert ........................ Typumwandlung ...................................................... Stabilitätsanalyse ...................................................... Regelung der stabilen PT 2 -Übertragungsfunktion .... , ................. Regelung der instabilen PT 2-Übertragungsfunktion .................... Kondition und numerische Instabilität .................................
183 183 185 186 187 187 189 190 193
6
Signalverarbeitung - Signal Processing Toolbox
195
6.1 6.1.1 6:1.2
Interpolation, Approximation und Abtastung .......................... 195 Interpolation und Approximation ...................................... 195 Änderung der Abtastrate .................... " ........................ 198
6.2 6.2.1 6.2.2 6.2.3 6.2.4
Spektralanalyse ....................................................... Diskrete Fouriertransformation (DFT) ................................. A veraging ............................................................. Fensterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Leistungsspektren '" ..................................................
6.3
Korrelation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 207
6.4 6.4.1 6.4.2 6.4.3 6.4.4
Analoge und Digitale Filter ............................................ Analoge Filter ............... , ..... , ................................... Digitale FIR-Filter .......... , ......................................... Digitale IIR-Filter ....................... , ............................. Filterentwurf mit Prototyp-Tiefpässen .................................
211 211 213 215 218
6.5 6.5.1 6.5.2 6.5.3 6.5.4
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Signaltransformation im Frequenzbereich .............................. Signalanalyse und digitale Filterung ................................... Analoger Bandpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Digitaler IIR-Bandpass ..................................... , ..........
221 221 221 222 222
1
. Optimierung - Optimization Toolbox
199 200 202 202 204
Inline Objects ......................................................... 224
7.2
Algorithmensteuerung ................................................. 225
7.3 7.3.1 7.3.2
Nullstellenbestimmung ................................................ 228 Skalare Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 228 Vektorwertige Funktionen / Gleichungssysteme ........................ 232
7.4
Minimierung nichtlinearer Funktionen ................................. 237 Minimierung unter Nebenbedingungen ................................. Nichtlineare Minimierung unter Nebenbedingungen .................... Quadratische Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . Lineare Programmierung ..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
.1
i
223
7.1
7.5 7.5.1 7.5.2 7.5.3
Inhaltsverzeichnis
242 242 247 250 I ·1
XI
7.6
Methode der kleinsten Quadrate (Least Squares) ....................... 253
'7.7
Optimierung eines Simulink-Modells ................................... 261
7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.8.6 7.8.7
Übungsaufgaben ....................................................... Nullstellenbestimmung ................................................ Lösen von Gleichungssystemen ., ....................................... Minimierung ohne Nebenbedingungen .................................. Minimierung unter Nebenbedingungen ..... , ........................... Ausgleichspolynom ...... , ............................................. Curve Fitting ......................................................... Lineare Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
264 264 264 264 264 265 265 265
8
Simulink Grundlagen
261
8.1
Starten von Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 267
8.2
Erstellen und Editieren eines Signalflussplans .......................... 270
8.3
Simulations- und Parametersteuerung .................................. 272
8.4 8.4.1 8.4.2 8.4.3
Signale und Datenobjekte ............................................. Arbeiten mit Signalen ................................................. Arbeiten mit Datenobjekten ........................................... Der Model Explorer ...................................................
274 274 276 277
8.5 8.5.1 8.5.2 8.5.3
Signalerzeugung und -Ausgabe ......................................... Bibliothek: Sources - Signalerzeugung .................................. Bibliothek: Sinks und Signal Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Der Signal 8 Scope Manager ..........................................
278 278 283 289
8.6 8.6.1 8.6.2
Mathematische Verknüpfungen und Operatoren ........................ 290 Bibliothek: Math Operations ........................................... 290 Bibliothek: Logic and Bit Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 293
8.7 8.7.1 8.7.2
Simulationsparameter ................................................. 294 Die Configuration Parameters Dialogbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 294 Fehlerbehandlung und Fehlersuche ..................................... 305
8.8 8.8.1 8.8.2 8.8.3
306 307 309
8.8.4
Verwaltung und Organisation eines Simulink-Modells .... , ...... , ....... Arbeiten mit Callback-Routinen ....................................... Der Model Browser .. ................. , ........................ , ....... Bibliotheken: Signal Routing und Signal Attributes - Signalführung und -eigenschaften ......................................................... Drucken und Exportieren eines Simulink-Modells .......................
8.9 8.9.1 8.9.2 8.9.3
HierarchiebIldung ...................................................... Erstellen von Subsystemen / Bibliothek: Ports &. Subsystems .. . , ..... ,. Maskierung von Subsystemen .......................................... Model Referencing . ................... , ........... , ............ , .......
314 315 319 322
8.10 8.10.1
Übungsaufgaben ....................................................... 324 Nichtlineare Differentialgleichungen .................................... 324
310 314
Inhaltsverzeichnis
XII
Inhaltsverzeichnis
8.10.2
Gravitationspendel .................................................... 325
11.2.2
9
Lineare und nicht lineare Systeme in Simulink
11.2.3
9.1
Bibliothek: Continuous - Zeitkontinuierliche Systeme ................... 329
9.2 9.2.1 9.2.2
Analyse eines Simulink-Modells ........................................ 333 Linearisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 333 Bestimmung eines Gleichgewichtspunkts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 337
9.3
Bibliothek: Discontinuities - Nichtlineare Systeme ...................... 339
9.4
Bibliothek: Lookup Tables - Nachschlagetabellen ....................... 342
9.5 9.5.1
Bibliothek: User-Defined Functions - Benutzer-definierbare Funktionen .. 344 Bibliotheken: Model Verification und Model-Wide Utilities - Prüfblöcke und Modell-Eigenschaften ............................................. 347
9.6
Algebraische Schleifen ................................................. 348
9.7
S-Funktionen ............. , ....... , .................................... 350
9.8 9.8.1 9.8.2 9.8.3
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . Modellierung einer Gleichstrom-Nebenschluss-Maschine (GNM) ........ Modellierung einer Pulsweitenmodulation (PWM) ...................... Aufnahme von Bode-Diagrammen .....................................
329
356 356 357 358
XIII
Untersuchung des linearisierten Modells mit MATLAB und der Control System Toolbox ................. , .............................. , ...... 374 Interaktive Untersuchung eines Modells mit dem Simulink Control Design-Blockset ....................................................... 376
11.3 11.3.1 .11.3.2
Kaskadenregelung ..................................................... 379 Stromregelung ......................................................... 379 Drehzahlregelung ...................................................... 381
11.4 11.4.1 11.4.2
Zustandsbeobachter ................................................... 384 Luenberger-Beobachter ... , ............................................ 385 Störgrößen-Beobachter ................................................. 387
11.5
Zustandsregelung mit Zustandsbeobachter ............................. 389
11.6 11.6.1 11.6.2 11.6.3 11.6.4 11.6.5 11.6.6 11.6.7 11.6.8 11.6.9
Initialisierungsdateien ................................................. Gleichstrom-Nebenschluss-Maschine ................................... Stromregelung ......................................................... Drehzahlregelung ................................... , . . . . . . . . . . . . . . . . .. Grundeinstellung Zustandsbeobachter ........................... , ...... Zustandsbeobachtung mit Luenberger-Beobachter ...................... Zustandsbeobachtung mit Störgrößen-Beobachter ........ , ............. Zustandsregelung mit Zustandsbeobachter ............................. Zustandsregelung mit Luenberger-Beobachter .......................... Zustandsregelung mit Störgrößen-Beobachter ...........................
393 393 393 394 394 395 395 396 396 397
Übungsaufgaben ....................................................... Zustandsdarstellung GNM ........ , ...................... , ............. Systemanalyse ......................................................... Entwurf eines KaIman-Filters .......................................... Entwurf eines LQ-optimierten Zustandsreglers .........................
398 398 398 399 399
10
Abtastsysteme in Simulink
10.1
Allgemeines ............ '. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 359
10.2 10.2.2
Simulationsparameter ................................................. 360 Rein zeit diskrete Systeme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 360 Hybride Systeme (gemischt zeit diskret und zeitkontinuierlich) .......... 361
11.7 11.7.1 11.7.2 11.7.3 11.7.4
10.3
Bibliothek: Discrete - Zeit diskrete Systeme ............................. 361
12
Statefiow
401
12.1 12.1.1 12.1.2 12.1.3
Elemente von Statefiow ................................................ Grafische Elemente eines Charts ....................................... Chart-Eigenschaften und Trigger-Methoden ............................ Nichtgrafische Elemente eines Charts ..................................
402 404 413 415
12.2 12.2.1 12.2.2 12.2.3 12.2.4 12.2.5 12.2.6
Strukturierung und Hierarchiebildung .................................. Superstates ............................................................ Boxes ................................................................. Subcharts ................................ , .............. , ............. Grafische Funktionen .................................................. Truth Tables .......................................................... Embedded MATLAB Functions .........................................
420 420 425 426 428 430 433
12.3 12.3.1 12.3.2 12.3.3
Action Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Numerische Operatoren ........................... , ................. , ., Logische Operatoren, .................................................. Unäre Operatoren und Zuweisungsaktionen ............................
435 436 436 436
10.2.1
359
10.4 .. Gemischte Abtastzeitenund hybride Systeme . . . . . . . . . . . . . . . . . . . . . . . . .. 364 10.4.1 Gemischte Abtastzeiten ................................................ 364 10.4.2 Hybride Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 365
10.5 10.5.1 10.5.2
Übungsaufgaben ....................................................... 366 Zeitdiskreter Stromregier für GNM .................................... 366 Zeitdiskreter Anti-Windup-Drehzahlregler für GNM .................... 367
11
Regelkreise in Simulink
11.1 11.1.1 11.1.2
Die Gleichstrom-Nebenschluss-Maschine GNM ................... , ..... 369 Initialisierung der Maschinendaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 370 Simulink-Modell ....................................................... 371
11.2 11.2.1
. Untersuchung der Systemeigenschaften ................................. 373 Untersuchung mit Simulink ............................................ 373
369
XIV
Inhaltsverzeichnis
12.3.4 12.3.5 12.3.6 12.3.7
Datentyp Umwandlungen .............................................. Aufruf von MATLAB-Funktionen und Zugriff auf den Workspace ........ Variablen und Events in Action Language .............................. Temporallogik Operatoren .............................................
12.4
Anwendungsbeispiel: Getränkeautomat ................................ 442
12.5
Anwendungsbeispiel: Steuerung eines Heizgebläses ..................... 445
12.6 12.6.1 12.6.2
Übungsaufgaben ....................................................... 447 Mikrowellenherd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 447 Zweipunkt-Regelung ................................................... 448
437 438 440 441
Symbolverzeichnis
449
Literaturverzeichnis
453
Index
457
1
Einführung
MATLAB ist ein umfangreiches Softwarepaket für numerische Mathematik. Wie der Name MATLAB, abgleitet von MATrix LABoratory, schon zeigt, liegt seine besondere Stärke in der Vektor- und Matrizenrechnung. Unterteilt in ein Basismodul und zahlreiche Erweiterungspakete, so genannte Toolboxen, stellt MATLAB für unterschiedlichste Anwendungsgebiete ein geeignetes Werkzeug zur simulativen Lösung der auftretenden Problemstellungen dar. Das Basismodul verfügt neben den obligatorischen Ein- und Ausgabefunktionen und Befehlen zur Programmablaufsteuerung über eine Vielzahl mathematischer Funktionen, umfangreiche zwei- und dreidimensionale VisuaJisierungsmögJichkeiten, objektorientierte Funktionalität für die Programmierung interaktiver Anwenderoberflächen und Schnittstellen zu Programmiersprachen (C, Fortran, Java) und Hardware (serielle .Schnittstelle). Zusätzlich werden zahlreiche Toolboxen (TB) mit erweitertem Funktionsumfang angeboten. Im Rahmen dieses Buches werden die Toolboxen für Regelungstechnik, Control System Toolbox (Kap. 5), Signalverarbeitung, Signal Processing Toolbox (Kap. 6), und Optimierung, Optimization Toolbox (Kap. 7), vorgestellt. Eine Sonderstellung nimmt die Toolbox Simulink ein, die eine grafische Oberfläche zur ModelIierung und Simulation physikalischer Systeme mittels Signalflussgraphen zur Verfügung stellt (Kap. 8-11). Hierzu kommt noch Stateflow (Kap. 12), eine Ergänzung zu SimuJink (Blockset), mit dem endliche Zustandsautomaten modelliert und simuliert werden können. Das vorliegende Buch soll Einsteigern einen raschen und intuitiven Zugang zu MATLAB vermitteln, sowie erfahrenen Anwendern eine Vertiefung ihres Wissens ermöglichen. Zahlreiche Programmbeispiele aus den Gebieten Elektrotechnik, Mechanik, Regelungstechnik und Physik veranschaulichen das Gelesene und können selbst nachvollzogen werden. Am Ende der einzelnen Abschnitte finden sich die jeweils wichtigsten Befehle in tabellarischen Übersichten zusammengefasst, um allen MATLAB-Anwendern im Sinne eines kompakten Nachschlagewerks zu dienen. In Kapitel 2 - MATLAB Grundlagen wird ein Einstieg in die grundlegende Programmierung mit MATLAB gegeben. Alle wichtigen Typen von Variablen, mathematischen Funktionen und Konstrukte zur Programmablaufsteuerung werden erklärt. Besonders wird die Möglichkeit hervorgehoben, den Funktionsumfang von MATLAB durch selbst geschriebene Funktionen zu erweitern und umfangreiche Berechnungen in MATLABSkripts zu automatisieren. In Kapitel 3 - Eingabe und Ausgabe in MATLAB liegt der Schwerpunkt auf den Visualisierungsfunktionen: Ein- und Ausgabe von Daten am Command Window, zwei- und dreidimensionale Grafikfunktionen für die Darstellung von Daten und Berechnungsergebnissen und der Import und Export von Daten. Ferner wird in die Programmierung von grafischen Benutzeroberflächen, so genannten
2
1 Einführung
Graphical User Interfaces (GUI) zur benutzerfreundlichen Gestaltung von MATLABProgrammen eingeführt. Das Kapitel 4 - Differentialgleichungen in MATLAB führt in die numerische Lösung von Differentialgleichungen ein, wofür in MATLAB effiziente Algorithmen implementiert sind. Die Lösung von Anfangswertproblemen mit und ohne Unstetigkeiten, von differential-algebraischen Gleichungen (DAE) , von Differentialgleichungen mit Totzeiten (DDE), von Randwertproblemen und von einfachen partiellen Differentialgleichungen (PDE) wird behandelt. Nachdem nun alle wichtigen Grundfunktionen von MATLAB bekannt sind, erfolgt in Kapitel 5 - Regelungstechnische Funktionen eine detaillierte Darstellung der Fähigkeiten der Control System Toolbox. Dieses wichtige Thema beinhaltet alle Schritte von der Darstellung linearer zeitinvarianter Systeme als LTI-Objekt über deren Manipulation und Analyse bis zum Reglerentwurf. Hervorgehoben sei hier die sehr gute Verknüpfungsmöglichkeit der Control System Toolbox mit der grafischen Erweiterung Simulink zur Programmierung und Untersuchung dynamischer Systeme. Die digitale Signalverarbeitung ist für viele Disziplinen der Ingenieurwissenschaften relevant und wird durch die Behandlung der Signal Processing Toolbox in Kapitel 6 Signalverarbeitung berücksichtigt. Es werden numerische Verfahren zur Interpolation abgetasteter Signale, zur Spektralanalyse und Korrelation sowie zur Signalmanipulation durch analoge und digitale Filter behandelt. Viele Problemstellungen erfordern die Minimierung oder Maximierung mehr oder weniger komplexer Funktionen. Da dies häufig nur numerisch möglich ist, wird in Kapitel 7 - Optimierung die Optimization Toolbox mit ihren Algorithmen zur Nullstellensuche und Minimierung bzw. Maximierung behandelt. Insbesondere wird auf die Minimierung unter Nebenbedingungen, die Met.hode der kleinsten Quadrate, die lineare Programmierung und die Optimierung der Reglerparameter eines Simulink-Modells eingegangen. Nun erfolgt der Übergang zur grafischen Erweiterung Simulink, das zur grafischen Modellierung und Simulation dynamischer Systeme konzipiert ist und nahtlos mit allen Grundfunktionen und Toolboxen von MATLAB zusammenarbeitet. Das Kapitel 8 Simulink Grundlagen stellt einen Einstieg in die blockorientierte grafische Programmierumgebung mit den zugehörigen Funktionsbibliotheken dar. Die Erstellung von Modellen wird von Anfang an erklärt. Ferner werden alle wichtigen Datentypen, Simulationsparameter und Tocils für Verwaltung und Hierarchiebildung behandelt. In den Kapiteln 9 - Lineare und nichtlineare Systeme in Simulink und 10 - Abtastsysteme in Simulink wird jeweils auf typisch vorkommende Systemklassen näher eingegangen. In Kapitel 11 - Regelkreise in Simulink erfolgt ein kompletter Reglerentwurf mit· anschließender Simulation für eine Gleichstrom-Nebenschluss-Maschine, wodurch vor allem das Zusammenspiel zwischen der Control System Toolbox und Simulink aufgezeigt wird. Das abschließende Kapitel 12 - Stateflow behandelt die ModelIierung und Simulation ereignisdiskreter endlicher Zustandsautomaten. Diese Klasse von Systemen tritt häufig bei der Steuerung und Überwachung technischer Prozesse auf. Durch die Kombination mit Simulink lassen sich gemischt kontinuierliche und ereignisdiskrete Modelle erstellen. Für eine übersichtliche Darstellung werden folgende Schriftkonventionen verwendet:
1 Einführung
3
Variablen werden kursiv geschrieben und optionale Parameter in eckigen Klammern [l angegeben. Die Kennzeichnung der MATLAB-Befehle, der Ein- und Ausgaben sowie der Dateinamen erfolgt durch Schreibmaschinenschrift. Auf der beiliegenden CD-ROM findet sich der Programm-Code aller im Buch gezeigten Beispiele kapitelweise in Verzeichnissen abgelegt. Weiter enthält jedes KapitelVerzeichnis ein Unterverzeichnis loesungen, in dem sich die Musterläsungen (MATLABund Simulink-Dateien) zu den Übungsaufgaben befinden. Kommentiert werden diese Programme in der Datei loesung. pdf, die alle Musterlösungen, evtl. grafische Ausgaben und Kommentare zu den Lösungswegen enthält. Zusätzlich enthält die CD-ROM das Verzeichnis userlib mit einer Extra-Bibliothek, welche eine Auswahl nützlicher MATLAB-Funktionen und Simulink-Blöcke der Autoren enthält, und die um eine Installationsroutine ergänzt wurde. Zur komfortablen Benutzung der CD-ROM steht ein HTML-Navigator zur Verfügung, der durch Aufruf der Datei start. html gestartet wird. Ferner stehen aktualisierte Inhalte der CD-ROM, Errata und weitere aktuelle Informationen zum Buch und rund um MATLAB auf der Internetseite www.matlabbuch.de zur Verfügung.
2
MATLAB Grundlagen
2.1
Erste Schritte mit
MATLAB
Zum Starten von MATLAB wird die Datei matlab. exe oder die entsprechende Verknüpfung im Startmenü oder auf dem Desktop aufgerufen. Für flüssiges Arbeiten empfehlen sich wenigstens 512 MB Arbeitsspeicher. Beendet wird MATLAB durch Schließen des MATLAB-Desktop, durch Eingabe der Befehle quit bzw. exit oder mit der Tastenkombination Strg + Q.
2.1.1
Der MATLAB-Desktop
Nach dem Starten von MATLAB erscheint der so genannte MATLAB-Desktop, eine integrierte Entwicklungsumgebung, die folgende Fenster enthalten kann (aber nicht muss eine mögliche Konfiguration zeigt Abb. 2.1):
CD
Abb. 2.1: MATLAB-Desktop (Beispiel-Konfiguration)
Command Window Q): Dieser Bereich stellt das Kernstück von MATLAB dar. Hier werden alle Eingaben in den so genannten W orkspace gemacht und die Berechnungen
2 MATLAB Grundlagen
6
ausgegeben. Der Prompt» signalisiert die Eingabebereitschaft. Jede Eingabe wird mit der Return-Taste abgeschlossen. Die Regel "Punkt vor Strich" sowie Klammern gelten wie gewohnt. Zahlen können auch mit Exponent e (bzw. E) eingegeben werden. »
(40-3 + 3*2e3) I 7
ans
10000
Tippt man die ersten Buchstaben eines gesuchten Befehls ein, erhält man mit der Tabulator-Taste eine Liste der passenden MATLAB-Befehle. Editor @: Mit dem MATLAB-Editor können Skripts und Funktionen erstellt und bearbeitet werden. Er bietet neben den Funktionen zum Editieren von Text die bei Programmier-Umgebungen üblichen Möglichkeiten zum schrittweisen Abarbeiten des Programmtextes, zum Debuggen von Fehlern etc. Command History @: Hier werden die im Command Window eingegebenen Befehle gespeichert und angezeigt. Durch Doppelklicken können die Befehle wiederholt werden; auch lassen sich einzelne oder mehrere Befehle ausschneiden, kopieren oder löschen. Gespeicherte Befehle können im Command Window ebenso mit den Kursortasten 1" und 1 abgerufen werden; tippt man zuvor den Beginn der gesuchten Befehlszeile ein, erscheinen nur die passenden Befehle.
2.1 Erste Schritte mit MATLAB
2.1.2
7
Die MATLAB-Hilfe
MATLAB stellt eine umfangreiche Hilfe zur Verfügung. Mit help [befehl] kann die Hilfe zu einem Befehl direkt im Command Window aufgerufen und dort ausgegeben werden. » help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also sqrtm. Reference page in Help browser doc sqrt
Alternativ kann der Hilfe-Browser (siehe Abb. 2.2) über das Menü, den Button ~ im MATLAB-Desktop oder über die Befehle helpwin oder doc aufgerufen werden. Mit dem Befehl lookfor suchstring kann auch die erste Zeile aller MATLAB-Dateien im MATLAB-Pfad nach suchstring durchsucht werden.
&,;
Workspace Browser @: Hier werden alle im Worlcspace existierenden Variablen mit Namen, Datentyp (Class) und ggf. Wert angezeigt. Zusätzlich lassen sich diese Daten speichern und Variablen mittels des Array Editors einfach verändern. Current Directory Browser @: Mittels des Current Directory Browsers lassen sich das gerade aktuelle Verzeichnis des Workspace einsehen oder ändern, Dateien öffnen, Verzeichnisse erstellen und andere typische Verwaltungs-Aufgaben durchführen.
B '"
Profiler (ohne Abbildung, da Registerkarte hinter @): Der Profiler analysiert die Rechenzeit einzelner Befehle in MATLAB-Skripts und -Funktionen, siehe auch Kap. 2.6.2. Shortcut-Leiste (unterhalb der Button Leiste): Shortcuts können mit einem oder mehreren MATLAB-Befehlen belegt werden, die sich dann per Mausklick jederzeit ausführen lassen. Dies eignet sich insbesondere zum Wechseln in häufig genutzte Verzeichnisse sowie zum Vorbelegen oder Löschen von Variablen. Das Aussehen des Desktops kann auf vielfältige Weise den persönlichen Wünschen angepasst werden. Die einzelnen Fenster lassen sich durch Ziehen der Titelleisten mit der Maus neu anordnen. Unter dem Menü-Punkt Desktop können die einzelnen Fenster zu- und abgeschaltet werden. Insbesondere kann mit Undock bzw. dem Button 'i\'!; das aktuelle Fenster vom Desktop separiert und mit Dock bzw. ::l!I wieder dort integriert werden. Über das Menü Desktop/Save Layout können Desktop-Layouts gespeichert werden. Auf diese Weise gespeicherte sowie verschiedene Standard-Layouts können über das Menü Desktop/Desktop Layout jederzeit wiederhergestellt werden. Weitere Vorgaben können im Menü File/Preferences eingestellt werden.
Fiqrt (X)
B "" t3C;[1=~ (X) returns the square root of each element
of the array X. For the elements of x that are negative or comple>(, sqq; (Xl produces complex r88ult8.
Abb. 2.2: MATLABHilfe-Browser
Die Verwendung der MATLAB-Hilfe empfiehlt sich insbesondere bei der Suche nach neuen Befehlen und Funktionen. Oft finden sich am Ende des Hilfetextes Querverweise auf verwandte oder ergänzende Funktionen. Hilfe help [befehl] helpwin [befehl] doc [befehl] lookfor suchstring
MATLAB Online-Hilfe im Command Window MATLAB Online-Hilfe im Hilfe-Browser MATLAB HTML-Dokumentation im Hilfe-Browser Suche nach suchstring in der e~sten Zeile aller MATLABDateien im MATLAB-Pfad
2 l\il:ATLAB Grundlagen
8
9
Mathematische Funktionen und Operatoren
2.1.4
Zuweisungen
2.1.3
2.2 Variablen
Mit = wird in MATLAB eine Variable definiert und ihr ein Wert zugewiesen. 1) Eine vorherige Deklaration der Variablen ist nicht erforderlich. Die Eingabe des Variablennamens ohne Zuweisung gibt den aktuellen Wert der Variablen aus.
In MATLAB steht eine Vielzahl mathematischer Funktionen zur Verfügung; einige sind im Folgenden zusammengestellt. Eine weiterführende Übersicht erhält man durch Eingabe von help elfun und help .datafun. Alle aufgeführten Funktionen können auch auf Vektoren und Matrizen angewandt werden (diese werden in Kap. 2.2.2 behandelt).
Alle Variablen bleiben im so genannten Workspace sichtbar, bis sie gelöscht werden oder MATLAB beendet wird. Variablennamen 2 ) können aus bis zu 63 Buchstaben oder (mit Ausnahme des ersten Zeichens) Zahlen sowie Unterstrichen (_) bestehen. Großund Kleinschreibung wird berücksichtigt.
Mathematische Funktionen und Operatoren
*/ -
mOd(x,y) rem(x,y) sqrt(x)
Rechenoperatoren x Modulo y Rest nach Division x/y Quadratwurzel
exp (x) log(x) log10(x) erf(x)
Exponentialfunktion Natürlicher Logarithmus Zehner-Logarithmus Normalverteilung
abs(x) sign(x) round(x) ceil(x) floor(x)
Betrag Signum (Vorzeichen) Runden Runden nach oben Runden nach unten
real(x) imag(x) conj(x) angle (x)
Realteil Imaginärteil komplexe Konjugation Phase einer komplexen Zahl
35
sin(x)
2.5000
tan(x) cot(x)
Sinus Cosinus Tangens Cotangens
Die Ausgabe eines Ergebnisses lässt sich z.B. bei Aneinanderreihung mehrerer Anweisungen mit Semikolon (;) unterdrücken. Ein Komma (,) zur Trennung von Anweisungen dagegen gibt das Ergebnis aus. Entfällt das Komma am Zeilenende, wird das Ergebnis ebenfalls ausgegeben. »variable_1 25; variable_2 10; » variable_1 variable_1 = 25 » a = variable + variable_2, A variable 1 I variable 2
+ -
a = A
cos(x)
Bestimmte Variablennamen, wie pi, i, j, inf sind reserviert 3 ) und sollten daher nicht anders belegt werden; eps bezeichnet die relative Fließkomma-Genauigkeit (z.B. eps = 2. 2204e-016). Bei mathematisch nicht definierten Operationen (z.B. 0/0) wird NaN (Not a Number) ausgegeben. » 1 I 0 Warning: Divide by zero. ans
Inf
Zuweisung;en Unterdrückung der Ausgabe Ausgabe (aneinander gereihte Befehle)
Variablenzuweisung
Vorbelegte Variablen und Werte pi i, j inf
Kreiszahl 'Ir Imaginäre Einheit Unendlich 00
A
ans eps NaN
Standard-Ausgabevariable relative Fließkomma-Genauigkeit Not a Number (ungültiges Ergebnis)
Ohne Zuweisung speichert MATLAB das Ergebnis in der Variablen ans (siehe Beispiel auf Seite 6). 2) Variablen dürfen nicht namensgleich mit MATLAB-Funktionen und selbst geschriebenen Funktionen sein. Im Zweifelsfall wird eine Überschneidung mit which -all name angezeigt. 3) Für die Eulersche Zahl ist keine Variable reserviert; sie kann aber mit exp(1) erzeugt werden. 1)
2.2
Trigonometrische Funktionen atan(x) Arcus-Tangens ± 'Ir / 2 atan2(x,y) Arcus-Tangens ± 'Ir sinh(x) Sinus Hyperbolicus sinc(x) Spaltfunktion sin( 'lrx) / ('lrx)
Variablen
Um umfangreiche Daten effizient zu verarbeiten, bietet MATLAB für Variablen unterschiedliche Datentypen an. Aus allen Datentypen können Arrays erzeugt werden. Im Folgenden wird die Verwendung solcher Variablen sowie zugehöriger Funktionen und Operatoren erläutert. Für den schnellen Einstieg kann jedoch Kap. 2.2.1 übersprungen werden, da MATLAB in aller Regel automatisch mit geeigneten Datentypen arbeitet.
2.2.1
Datentypen in MATLAB
Standardmäßig verwendet MATLAB den Fließkomma-Datentyp d6Uble (64 Bit) und wandelt Daten vor Rechenoperationen falls nötig dahin um. Der Typ single (32 Bit) erlaubt die kompakte Speicherung großer Fließkomma-Daten. klein = single (gross) wandelt eine Variable beliebigen Datentyps in den Typ single um. Als Festkomma-Datentypen stehen int8, int16, int32 für vorzeichenbehaftete sowie uint8, uint16, uint32 für Zahlen 2': 0 zur Verfügung. Neben eingespartem Speicherplatz dienen sie der Modellierung von Festkomma-Arithmetik in MATLAB. Einige Rechenoperatoren unterstützen diese Datentypen (sofern alle übergebenen Variablen denselben Typ besitzen), bringen jedoch in der Regel keinen Gewinn an Laufzeit.
2 MATLAB Grundlagen
10
» noch_laenger = linspace (1, 19, 10) noch_laenger = 1 3 5 7 9 11 13 15 » hoch_hinaus = logspace (1, 2, 5) hoch_hinaus 10.0000 17.7828 31.6228 56.2341 100.0000
Als weitere Datentypen stehen char (16 Bit!) für Strings und logical für logische Ausdrücke zur Verfügung. Die erzwungene Typumwandlung erfolgt wie oben gezeigt.
Achtung:
Fließkomma-Zahlen werden gerundet und ggf. auf den größten bzw. kleinsten Festkomma- Wert begrenzt! Operationen mit gemischten Datentypen werden zwar intern mit dem genaueren Typ gerechnet, vor der Ausgabe jedoch auf den kleinsten(!) Datentyp reduziert.
Datentypen
2.2.2
Fließkomma (Standard für Zahlen) Festkomma mit Vorzeichen Festkomma ohne Vorzeichen Zeichen (Standard für Strings) Logischer Ausdruck
I
Vektoren und Matrizen
2
2 6
[1 2 3]
I
6
:)
ans 5
6
7
7
4
5
6
4
2
0
7
8
Des Weiteren stehen die Befehle linspace (start, ziel, anzahl) und logspace für linear bzw. logarithmisch gestufte Vektoren zur Verfügung. Bei logspace werden start und ziel als Zehnerexponent angegeben, d.h. statt 100 (= 10 2 ) wird lediglich 2 eingegeben. 4)
Der Zugriff auf einzelne Elemente von Vektoren und Matrizen erfolgt durch Angabe der Indizes. Der kleinste Index ist 1 (nicht O)! Insbesondere zur Ausgabe einzelner Zeilen bzw. Spalten eignet sich der Doppelpunkt-Operator, wobei ein allein stehender Doppelpunkt alle Elemente der zugehörigen Zeile bzw. Spalte adressiert.
» meine_matrix (end) ans =
1:8
8
1
Sehr nützlich ist auch der Befehl end, der den Index des letzten Eintrags eines Vektors bzw. einer Matrix bezeichnet.
3 7
2 3 10:-2:0
1
1
7
3
Vektoren mit fortlaufenden Elementen können besonders einfach mit dem DoppelpunktOperator (start : [schTittweite: Jziel) erzeugt werden. Wird nur start und ziel angegeben, wird die Schrittweite zu +1 gesetzt. Das Ergebnis ist jeweils ein Zeilenvektor.
» lang lang = 1 » tief tief = 10
1
» meine_matrix (2,
» meine_matrix = [mein_vektor; 5 6 7] meine_matrix 1 5
» zwo_drei = ones (2, 3) zwo_drei
ans::::
mein_vektor = 1
19
» meine_matrix (2, 3)
Die einfachste Art, einen Vektor bzw. eine Matrix zu erzeugen, ist die direkte Eingabe innerhalb eckiger Klammern []. Elemente einer Zeile werden durch Komma (,) oder Leerzeichen4 ) getrennt, Spalten durch Semikolon (;) oder durch Zeilenumbruch. » mein_vektor
17
Die Funktionen ones (zeilen, spalten) und zeros (zeilen, spalten) erzeugen Matrizen mit den Einträgen 1 bzw. O. Analog lassen sich Matrizen höherer Dimensionen erstellen. Optional kann ein Datentyp aus Kap. 2.2.1 angegeben werden: zeros (zeilen, spalten, typ). Der Befehl eye (zeilen) erzeugt eine Einheitsmatrix (Spaltenzahl = Zeilenzahl).
Im Folgenden werden die automatisch zugewiesenen Standard-Datentypen double bzw. char verwendet; eine Deklaration oder Umwandlung ist in der Regel nicht erforderlich.
double (x), single (x) int8 (x), int16 (x), int32 (x) uint8 (x), uint16 (x), uint32 (x) char (x) logical (x)
11
2.2 Variablen
In fast allen anderen Fällen werden Leerzeichen von
MATLAB
ignoriert.
»
meine_matrix (end,
:)
ans =
5
6
7
I
»M meine_matrix; »M (:, end+l) = [10; 11] M= 1 2 3 10
I
» zufall = rand (2, 3) zufall = 0.8381 0.6813 0.8318 0.0196 0.3795 0.5028
5
6
7
11
Ein hilfreicher Befehl zum Erzeugen von Testdaten und Rauschsignalen ist der Befehl rand (zeilen, spalten), der eine Matrix mit gleichverteilten Zufallswerten zwischen 0 und 1 ausgibt. Analog erzeugt randn (zeilen, spalten) normalverteilte Zufallswerte mit dem Mittelwert 0 und der Standardabweichung 1. Weitere Befehle siehe help elmat.
12
2 MATLAB Grundlagen
Vektoren und Matrizen [xl x2 ... ; x3 x4 ... ] start; [schrittweite : ]ziel linspace (start, ziel, anzahl) logspace (start, ziel, anzahl)
Eingabe von Vektoren und Matrizen Doppelpunkt-Operator (erzeugt Zeilenvektor ) Erzeugung linearer Vektoren Erzeugung logarithmischer Vektoren
eye (zeilen) ones (zeilen, spalten [, typ P zeros (zeilen, spalten [, typ]) rand (zeilen, spalten) randn (zeilen, spalten)
Einheitsmatrix Matrix mit Einträgen 1 Matrix mit Einträgen 0 Matrix mit Zufallswerten zwischen 0 und 1 Matrix mit normalverteilten Zufallswerten
Der Befehl diff (vektor [, n]) berechnet den Differenzenvektor (n-fache numerische Differentiation). Mit conv (vektor1, vektor2) werden zwei Vektoren gefaltet. Wenn beide Vektoren die Koeffizienten eines Polynoms enthalten, entspricht das Ergebnis den Koeffizienten nach einer Multiplikation beider Polynome. » diff (mein_vektor) ans =
Der Befehl inv (matrix) invertiert eine quadratische Matrix; die Befehle det und eig bestimmen deren Determinante und Eigenwerte. Der Rang einer Matrix wird mit rank (matrix) berechnet. »
Mathematische Funktionen und Operatoren für Vektoren und Matrizen
2.2.3
Viele mathematische Operatoren können auch auf Vektoren und Matrizen angewandt werden. Die Multiplikation mit * wirkt dann als Vektor- bzw. Matrixprodukt; mit ' wird eine quadratische Matrix potenziert. Die Linksdivision A\b liefert die Lösung x des linearen Gleichungssystems A . x = b (ggf. mittels least squares-Optimierung). Die Transponierte eines Vektors bzw. einer Matrix wird durch transpose oder .' erzeugt. Für die konjugiert-komplexe Transposition steht der Befehl ctranspose oder ' zur Verfügung. Für reellwertige Größen liefern beide Operatoren dasselbe Ergebnis.
I
I
» zwo_drei * meine_matrix' ~s
6 6
18 18
Soll eine der Operationen * / ' elementweise ausgeführt werden, wird dem Operator ein Punkt (.) vorangestellt. OperatiOl).en mit Skalaren sowie mit + und - werden immer elementweise ausgeführt. » zwo_drei ./ meine_matrix ~s
1.0000 0.2000
0.5000 0.1667
0.3333 0,1429
Natürlich funktioniert dies auch bei Matrizen mit komplexen Werten: » komplex komplex =
=
[l+i l-i; 2 3]
1.0000 + 1.0000i 2.0000
1.0000 - 1.0000i 3.0000
» komplex .* komplex ~s
o 4.0000
+ 2.0000i
0 - 2.0000i 9.0000
13
2.2 Variablen
r~gvoll =
[1 2; 4 9]
r~gvoll
1
2
4
9
» det
(r~gvoll)
~s=
» ans
r~k (r~gvoll)
= 2
» eig
(r~gvoll)
~s
0.1010 9.8990
Werden die nachstehenden Vektorbefehle wie min, sum etc. auf Matrizen angewandt, wirken sie spaltenweise, d.h. für jede Spalte wird eine separate Berechnung durchgeführt und das Ergebnis als Vektor ausgegeben.
*
.*
,
Funktionen und Operatoren für Vektoren und Matrizen Vektor- bzw. Matrixoperatoren, Linksdivision \ / Elementweise Operatoren
.
matrix. " transpose (matrix) matrix', ctranspose (matrix)
Transponierte Transponierte (konjugiert komplex)
diff (vector [, n]) conv (vector1, vector2)
n-facher Differenzenvektor (Standard n = 1) Faltung (Polynom-Multiplikation)
Weitere Funktionen inv (m) min(vec) kleinstes Vektorelement det (m) max(vec) größtes Vektorelement eig (m) mean (vec) Mittelwert rank (m) std(vec) Standardabweichung cumsum (v) sum(vec) Summe der Vektorelemente cumprod (v) prod(vec) Produkt der Vektorelemente
Inverse einer Matrix Determinante Eigenwerte Rang Kumulierte Summe Kumuliertes Produkt
2 MATLAB Grundlagen
14
2.2.4
2.2.5
Strukturen
Variablen können zu so genannten Strukturen zusammengestellt werden, um komplexe Daten übersichtlich zu verwalten. Dabei ist jedem Feld ein Name zugeordnet, der als String 5 ) zwischen einfache Anführungszeichen (, ,) gesetzt wird. Eine Struktur wird mit dem Befehl struet ('nameI', wertl, 'name2', wert2, ... ) oder mit einem Punkt (.) als Separator erzeugt.
» meine_struktur.daten(l,:) =s
» zelle zelle =
struet ('daten', meine_matrix, 'groesse', [23]);
3
Geschachtelte Strukturen sind ebenfalls möglich, wie das folgende Beispiel zeigt: Eine Struktur komponist wird angelegt und ihrem Feld name der String 'Johann Sebastian Baeh' zugewiesen. Eine zweite Struktur namens datum mit den drei Feldern Tag, Monat und Jahr enthält die entsprechenden Geburtsdaten. Anschließend wird die Struktur datum dem neu erzeugten Feld geboren der Struktur komponist zugewiesen.
I
I
Noch eine Stufe allgemeiner gehalten sind so genannte Gell Arrays. Dies sind multidimensionale Arrays, die in jeder einzelnen Zelle Daten unterschiedlicher Datentypen enthalten können. Erzeugt werden Gell Arrays mit dem Befehl eell oder durch Einschließen der Elemente bzw. Indizes in geschweifte Klammern { }.
Der Zugriff auf die Daten erfolgt ebenfalls mittels eines Punktes als Separator.
2
I
Cell Arrays
Die einzelnen Elemente eines Cell Arrays werden ebenso wie normale Vektoren oder Matrizen adressiert, nur werden statt runder Klammern geschweifte Klammern verwendet, z.B. zelleU, 2}.6) Im Folgenden wird ein leeres 2 x 3-Gell Array namens zelle erzeugt:
»meine_struktur
I
15
2.2 Variablen
komponist = struet ('name', 'Johanti Sebasti= Bach'); datum. Tag = 21; datum.Monat = 'März'; datum. Jahr = 1685; komponist.geboren = datum;
» » » » »
Die Struktur komponist soll nun einen zweiten Eintrag mit dem String 'Wolfgang Amadeus Mozart' als Wert für das Feld name erhalten. Die Werte für das Feld geboren werden nun direkt eingegeben (dies wäre oben ebenfalls möglich gewesen). komponist(2).name = 'Wolfg=g Amadeus Mozart'; komponist(2).geboren.Tag = 27; komponist(2).geboren.Monat = 'J=uar'; komponist(2).geboren.Jahr = 1756;
» » » »
Die Struktur komponist ist nun eine vektorwertige Struktur, deren einzelne Elemente wie Vektoren behandelt werden können. Indizes, die auf die Struktur elemente verweisen, stehen unmittelbar nach dem Namen der Struktur.
» komponist(2) =s name: 'Wolfg=g Amadeus Mozart' geboren: [lx1 struet] » komponist(2).geboren ans Tag: 27 Monat: , J=uar , Jahr: 1756 5)
Siehe auch weitere Ausführungen zum Thema Strings in Kap. 3.2.1.
I
[]
[]
eell (2, 3) [] []
[]
[]
Nun werden den einzelnen Zellen die folgenden Werte zugewiesen:
» » » » »
zelle {1, 1} zelle {1, 2} zelle {1, 3} zelle {2, 1} zelle {2, 3}
'Zelle {1, 1} ist ein Text'; 10; [1 2;
3 4]; komponist (2); date;
Die Eingabe des Namens des Gell Arrays zeigt seine Struktur. Den Inhalt einer oder mehrerer Zellen erhält man durch die Angabe ihrer Indizes (kein Leerzeichen vor der geschweiften Klammer { verwenden!): Verschachtelte Strukturen werden wie oben gezeigt angesprochen. » zelle zelle = [lx25 ehar ] [lxl struet]
[10] []
» zelle{2, 3}
[2x2 double] , 22-Sep-2004 ,
%kein Leerzeiehen vor {
=s= 22-Sep-2004 » zelle{2, l}.geboren.Monat =s= J=uar
%kein Leerzeichen vor {
Gell Arrays eignen sich insbesondere auch zum Speichern unterschiedlich langer Strings. Werden Strings dagegen in einem normalen ehar-Array gespeichert, müssen alle Einträge dieselbe Anzahl an Zeichen aufweisen. Dies lässt sich mit einem Cell Array umgehen. 6) Die einzelnen Zellen eines (beliebigen) Array-Typs können auch mit nur einem Index adressiert werden. Für ein zweidimensionales mx n-Array ist zelle{k,j} gleichbedeutend mit zelle{(j-1)*m+k} (siehe auch Befehle ind2sub und sub2ind). Die Reihenfolge der Elemente kann mit: ausgegeben werden, z.B. meine..matrix(:).
2 MATLAB Grundlagen
16 Strukturen und Cell Arrays struct ('nI', wl, 'n2', w2, .. .) struktur. name zelle = {wert} zelle {index} = wert
Erzeugen eines Cell Arrays Erzeugen eines Cell Arrays
cell (n) cell (m, n)
Erzeugen eines n x n-Cell Arrays Erzeugen eines m x n-Cell Arrays
2.2.6
Erzeugen einer Struktur Zugriff auf Element name
2.3 Ablaufsteuerung
17
Über das Menü DesktopjWorkspace oder den Befehl workspace lässt sich der Workspace Browser öffnen. Dieser erlaubt ebenfalls eine Übersicht der vorhandenen Variablen. Durch Doppelklicken auf den gewünschten Namen wird der Array Editor aktiviert (siehe Abb. 2.3). Dort können Variablen editiert und gelöscht werden. Ein markierter Datenbereich (im Beispiel die 2. Spalte von zelle{ 1 ,3}) kann über die Auswahlliste ~8 direkt grafisch angezeigt werden. Die Schaltflächen iEaOJSPlD. dienen zum Anordnen mehrerer Teilfenster innerhalb des Array Editors.
Verwalten von Variablen
Im Folgenden werden Befehle vorgestellt, die Informationen über Art, Größe und Speicherbedarf von Variablen liefern sowie das Löschen von Variablen erlauben. Die Dimension eines Vektors bzw. einer Matrix lässt sich mit size (variable) bestimmen. Für Vektoren eignet sich auch der Befehl length (var'iable), der bei Matrizen den Wert der größten Dimension angibt. Eine Variable kann auch die Größe 0 besitzen, wenn sie mit variable = [] erzeugt wurde. » length (meine_matrix) ans 3
» size (meine_matrix) ans 2
3
Mit dem Befehl who werden alle aktuell im Worlcspace vorhandenen Variablen aufgelistet. Mit whos erhält man zusätzlich deren Dimension (Size), Speicherbedarf (Bytes) und Datentyp (Class). Mit clear [variableI variable2 ... ] können Variablen gezielt gelöscht werden. Der Befehl clear alleine löscht alle Variablen im Workspace; clear all löscht zudem alle globalen Variablen. 7) Dies eignet sich auch gut als Shortcut auf dem MATLAB-Desktop.
» clear variable 1 variable 2 a A meine matrix lang tief noch_laenger hoch_hinaus zwo_drei M zufall rangvoll datum ans » whos Name
Size
komplex komponist
2x2 1x2
mein_vektor
1x3
meine_struktur zelle
lxl 2x3
Grand total is 168 elements using 2762 bytes 7)
Zu globalen Variablen siehe Kap. 2.5.2
Bytes
Class
double array (complex) struct array double array struct array 1110 cell array
64 1252 24 312
Abb.
2.3: MATLAB
Army Editor
Verwalten von Variablen size (variable) length (variable)
Dimensionen einer Variablen Länge eines Vektors, größte Dimension einer Matrix
clear clear all clear [vI v2 ... ]
Löscht alle Variablen im Workspace Löscht zusätzlich alle globalen Variablen Löscht ausgewählte Variablen
who whos
Liste aller im Workspace existierenden Variablen Ausführliche Liste aller im Workspace existierenden Variablen mit Name, Dimension, Speicher bedarf und Datentyp
2.3
Ablaufsteuerung
Die Ablaufsteuerung umfasst neben den eigentlichen Verzweigungs-, Schleifen- und Abbruchbefehlen die Abfrage von Bedingungen sowie deren logische Verknüpfung.
2.3.1
Vergleichsoperatoren und logische Operatoren
Logische Operatoren können auf alle Zahlen angewandt werden. 'illerte ungleich 0 sind dabei logisch wahr und 0 ist logisch falsch. Als Ergebnis erhält man stets 0 bzw. l. Neben Vergleichsoperatoren stehen logische Operatoren für UND, ODER, NEGATION und EXKLUSIV ODER zur Verfügung, und zwar meist in der Form eines Zeichens oder als Funktion, z.B. a & b oder and (a, b) für a UND b. Zuerst werden mathematische, dann logische Ausdrücke ausgewertet (für Details siehe help precedence). Treten mehrere logische Operatoren auf, empfiehlt sich die Verwendung von Klammern!
2 MATLAB Grundlagen
18
» mein_vektor >= 2 ans »
2.3 Ablaufsteuerung
mit logical explizit in logische Ausdrücke umgewandelt werden. 8 )
o
Vergleichsoperatoren
1 == 0 I (4 > 5-2 & 4 <=
5)
eq (a, b) ne (a, b) l t (a, b) le (a, b) gt (a, b) ge (a, b)
ans =
1
< <= > >=
Hier wird eine Ergebnistabelle für logische Verknüpfungen zweier Binärzahlen erstellt: » a =
[001
» [ a
b
1]'; b = [0 1 0 1]'; a&b -alb xor(a,b) -a -(a&b) -(alb)]
ans 0 0
0 0 0
0 0
0
0
1
0 0
1 0
& 1
not (a) and (a, b) or (a, b) xor (a, b)
&& 11
all (vec) jedes Element wahr any (vec) mind. 1 Element wahr logical (a) Typ-Umwandlung
0 0
Die Shortcut-Operatoren && und 11 brechen im Gegensatz zu & und 1 die Auswertung mehrerer logischer Ausdrücke ab, sobald das Ergebnis eindeutig ist: so wird ausdruck in Cl 1 ausdruck) ausgewertet, in Cl 1 1 ausdruck) dagegen nicht. Die Auswertung erfolgt dabei von links nach rechts. Bei vektorwertigen Daten müssen allerdings nach wie vor die Operatoren & und 1 bzw. all oder any verwendet werden (siehe unten). Die Funktionen any (vektor) ist wahr, wenn mindestens ein Element eines Vektors (bestehend aus Zahlen oder logischen Ausdrücken) wahr ist; all (vektor) ist nur wahr, wenn jedes Element wahr ist. Die Funktion find (vektor) liefert die Indizes aller wahren Elemente. Eine weiterführende Befehlsübersicht erhält man mit help ops. Der Befehl exist ( , name') überprüft, ob eine Variable, Funktion oder Datei name existiert: Falls nicht, wird 0 zurückgeliefert, ansonsten eine Zahl ungleich 0, z.B. 1 für eine Variable, 2 für eine MATLAB-Datei, 7 für ein Verzeichnis (siehe auch help eXist). Eine spezielle Anwenciung logischer Operatoren ist das logical indexing. Dabei wird ein Array mit einem Index-Array derselben Größe adressiert, welches nur aus den (logischen) Werten 0 und 1 besteht. Das folgende Beispiel setzt alle negativen Elemente von a auf O. Der Ausdruck a
NEGATION UND ODER EXKLUSIV ODER Shortcut-UND (skalar) Shortcut-ODER (skalar)
2.3.2
exist (, x') Existenz von x find (vec) Indizes wahrer Elemente
Verzweigungsbefehle i f und swi tch
Mit Hilfe der oben behandelten Operatoren können Fallunterscheidungen durchgeführt werden. Dafür stellt MATLAB die folgenden Verzweigungsbefehle zur Verfügung: if ausdruck befehle [elseif ausdruck befehle ... ] [else befehle] end switch ausdruck case ausdruck befehle [... ] [otherwise befehle] end Bei case können mehrere ODER-verknüpfte Möglichkeiten innerhalb geschweifter Klammern { } (d.h. als Cell Array) angegeben werden.
» test = 5; » if test<=2; a=2, elseif test<=5; a=5, else a=10, end a 5
» switch test case 2; a=2, case
{3
4 5}; a=5, otherwise a=10, end
a =
5 = -2:7
a = -1 » a Ca < 0) a = 0 0 -2
0
2
3
4
5
6
7
0
2
3
4
5
6
7
0
In einem weiteren Schritt sollen alle durch 3 teilbaren Elemente von a entfernt werden.
I
Logische Operatoren
gleich ungleich kleiner kleiner gleich größer größer gleich
Weitere Operatoren
1 0
0
» a
19
» a = a (logical (mod (a, 3») Warning: Values other than 0 or 1 converted to logical 1 a = 2
4
5
In beiden Fällen sollten die Teilbefehle durch Komma bzw. Semikolon getrennt werden. In Skripts werden die einzelnen Teilbefehle üblicherweise in eigene Zeilen geschrieben. Eine Verschachtelung mehrerer if- und swi tch-Konstrukte ist möglich.
2.3.3
Schleifenbefehle for und while
Mit Schleifen können bestimmte Anweisungen mehrfach durchlaufen werden: for variable = vektor befehle end while ausdruck befehle end
7
Da der Ausdruck mod(a,3) auch andere Werte als 0 und 1 liefert, muss sein Ergebnis
8) Alternativ: a (-mod (a, 3)) = []. Dabei übernimmt die Negation - die Konvertierung in den Datentyp logical; die leere Zuweisung mit [] löscht die entsprechenden Elemente des Vektors a.
» for k;1:0, k 2, end A
Die for-Schleife im obigen Beispiel wird nicht durchlaufen, da der für k angegebene Bereich i: 0 leer ist. Im Unterschied dazu wird im folgenden Beispiel die while-Schleife mindestens einmal abg"arbeitet, da die Abbruchbedingung (siehe auch Kap. 2.3.4) erst am Ende geprüft wird. Außerdem sind zwei end notwendig (für if und while)! »
I
2.4 Der MATLAB-Editor
2 MATLAB Grundlagen
20
n ;
A
2,
if m>5, break; end;
end
m
4 m 9
2.3.4
Abbruchbefehle continue, break und return
Weitere Befehle zur Ablaufsteuerung sind continue, break und return. Mit continue wird innerhalb einer for- oder while-Schleife sofort zum nächsten Iterationsschritt gesprungen; alle innerhalb der aktuellen Schleife noch folgenden Befehle werden übergangen. Der Befehl break dagegen bricht die aktuelle Schleife ganz ab. Der Befehl return bricht eine MATLAB-Funktion bzw. ein Skript 9 ) ab und kehrt zur aufrufenden Ebene zurück (bzw. zum Command Window, falls die Funktion von dort aufgerufen wurde). Im folgenden Beispiel wird überprüft, welche ungerade Zahlen zwischen 13 und 17 Primzahlen sind. Die zu testenden Zahlen m werden in der äußeren Schleife, mögliche Teiler n in der inneren Schleife hochgezählt. for m ; 13:2:17 for n ; 2:m-1 if mod (m,n) - 0, continue, end sprintf (, %2d ist keine Primzahl. \n', m) break end if n ; ; m-1 sprintf ('!! %2d IST eine Primzahl!\n', m) end end Wenn der Rest mod(m,n) ungleich 0 ist (also n kein Teiler von m ist), wirkt der continueBefehl. Der folgende sprintf- lO ) und der break-Befehl werden übersprungen; es wird sofort das nächsthöhere n getestet. Ist n dagegen Teiler von mund m somit keine Primzahl, wird die innere for-Schleife nach der Ausgabe "ist keine Primzahl" bei break verlassen und das nächsthöhere m getestet. Ist m durch keine Zahl von 2 bis m-i teilbar, so ist rn eine Primzahl. Die Überprüfung mit der zweiten if-Abfrage n == rn-i ist notwendig, da die innere Schleife zwar bei Nicht-Primzahlen vorzeitig abgebrochen wird, aber dennoch alle nachfolgenden Befehle der äußeren Schleife abgearbeitet werden. Die Ausgabe am MATLAB-Workspace ergibt: 9) MATLAD-Skripts und -Funktionen werden in Kap. 2.4 und 2.5 behandelt. 10)
!! 13 IST eine Primzahl! 15 ist keine Primzahl. !! 17 IST eine Primzahl! Eine weiterführende Übersicht zur Programm-Ablaufsteuerung bietet help lang. Verzweigungen, Schleifen und Ablaufsteuerung switch ... case ... [otherwise ... ] end
If-Verzweigung Switch-Verzweigung
for variable = vektor befehle end while ausdruck befehle end
For-Schleife While-Schleife
break continue
Sofortiger Schleifen-Abbruch Sofortiger Sprung zum nächsten Iterationsschritt einer Schleife
return
Sofortiger Funktions-Rücksprung
i f ... [elseif ... ] [else ... ] end
1;
» while 1, n;n+1; m;n
I
21
Die Syntax des Ausgabe-Befehls sprintf wird in Kap. 3.3 erklärt.
2.4
Der MATLAB-Editor
Neben der direkten Befehlseingabe am MATLAB-Prompt können Befehlsfolgen auch in so genannten MATLAB-Skripts (Textdateien mit der Endung .m, daher auch M-Files genannt) gespeichert werden. Zur Bearbeitung dieser Dateien steht der MATLAB-Editor zur Verfügung (siehe Abb. 2.4). Dieser kann über den Button n auf dem Desktop oder das Menü File/New/MFile aufgerufen werden. Ein bestehendes M-File wird über File/Open, durch Doppelklicken im Current Directory Browser oder mit dem Befehl edi t datei geö.ffnet.
fOl:: m "'"
13:2:~
for n'" 2:m-l if mod(nhn) .... = 0, continue, end fprintf (' ~2cl ist keine Prim2ahl. \n' ,m) break End
if n == :rn-i fprintt ('!! %2d IST eine
Prünzahl !\n',
!{))
Abb. 2.4: MATLAB-Editor (mit Bezspieldatei zu Kap. 2.3.4)
2 MATLAB Grundlagen
22
Das Ausführen eines Skripts geschieht durch Eingabe des Dateinamens(ohne Endung) im MATLAB-Command-Window, in diesem Fall also mit beispiele, mit Run im Kontextmenü des Gurrent Directory Browsers oder mit dem Button il@]. Zum Debuggen eines Skripts (oder einer Funktion) können in der Spalte neben der Zeilennummer Breakpoints per Mausklick gesetzt und gelöscht werden. 11 ) :ijjl} startet den Debugger bzw. springt zum nächsten Breakpoint. Mit "@<\0W, können einzelne Zeilen abgearbeitet, aufgerufene Skripts bzw. Funktionen angesprungen und wieder verlassen werden. Die jeweils aktuelle Zeile ist mit einem Pfeil markiert, im Command Window (Prompt K») und im Workspace Browser sind die dann sichtbaren Variablen verfügbar. Beendet wird der Debugger mit Erreichen des Skript-Endes oder mit 1ßl. Kommentare werden durch das Zeichen % markiert, d.h. alle Zeichen rechts von % bis zum Zeilenende werden von MATLAB ignoriert. Zum Auskommentieren längerer Passagen ist das Menü TextfGomment (bzw. umgekehrt TextfUncomment) hilfreich. Ebenso existiert mit %{ kommentar %} eine Maskierung mehrzeiliger Kommentare. Da lange Zeilen oft unübersichtlich werden, besteht die Möglichkeit, Zeilen innerhalb eines Befehls mit ... umzubrechen (siehe Beispiel in Kap. 3.2.2). Hilfreich für lange Skripts ist auch der so genannte Cell Mode. Er wird über das Menü Gell/Enable Gell Mode aktiviert und ist an der zusätzlichen Buttonleiste erkennbar (siehe Abb. 2.4). Das Skript wird dabei durch Gell Divider %% in Abschnitte unterteilt; der Kommentar nach %% wird bei der automatischen Dokumentation als Überschrift verwendet. Der Gell Mode bietet unter anderem folgende Funktionen: Schnelle Navigation: Mit der Tastenkombination Btrg + 1 bzw. Strg + 1" kann man direkt zum nächsten bzw. vorigen Abschnitt springen.
EI
EI
Schnelle Evaluierung: Über die Buttons ~~:.~~ lässt sich ein Skript abschnittsweise ausführen. Mit [~@-::::}+{tE~'::'T~ wird eine markierte Zahl entsprechend der eingegebenen Differenz (bzw. Faktor) geändert und anschließend der Abschnitt ausgeführt. Dabei wird das Skript nicht gespeichert!
.. Schnelle Dokumentation: Über das Menü File/Publish Ta HTML wird der Code eines Skripts abschnittsweise samt Überschriften und Ergebnissen (Text und Grafik) als HTML-Dokument ausgegeben. Andere Formate sind ebenfalls möglich. Weitere Einstellungen über das Menü File/Preferences. Debugging und Cell Mode funktionieren nur, falls der Editor zuvor aus dem MATLABDesktop heraus gestartet wurde. Skripts %
%{ kommentar %} %% 11)
Fortsetzungszeichen zum Umbruch überlanger Zeilen Beginn einer Kommentar-Zeile Mehrzeiliger Kommentar Beginn eines Kommentars als Gell-Divider
Über das Kontextmenü kann eine zusätzliche Anhalte-Bedingung angegeben werden.
2.5 MATLAB-Funktionen
2.5
23
MATLAB- Funktionen
Eine Sonderform der M-Files stellen so genannte MATLAB-Funktianen dar. Das sind in einer Datei abgespeicherte MATLAB-Skripts, dill ihren eigenen, nach außen nicht sichtbaren Workspace (d.h. Variablen-Bereich) haben. Definiert wird eine Funktion durch das Schlüsselwort funetion in der ersten Befehlszeile der Datei: funetion [outl, out2, ... ] befehle
=
funktionsname (inl, in2, .. .)
In runden Klammern 0 nach dem Funktionsnamen 12 ) stehen die Übergabe-Parameter inl, in2, ... , die beim Aufruf der Funktion übergeben werden können. In eckigen Klammern [] stehen die Rückgabewerte outl, out2, ... , die die Funktion an die aufrufende Funktion bzw. an den Workspace zurückgibt. Zahlreiche MATLAB-Befehle sind als Funktionen programmiert, z.B. sine(x) - Anzeigen des Quellcodes mit edit sine. Funktionen können von anderen Funktionen und Skripts aufgerufen werden, Skripts ebenso durch andere Skripts. Lokale Funktionen können in dem M-File der aufrufenden Funktion unten angefügt werden; die lokalen Funktionen sind dann nur für die Funktionen in dieser einen Datei sichtbar. Als Beispiel sei die Funktion mittelwerte in der Datei mittelwerte.m gespeichert. Sie berechnet den arithmetischen und geometrischen Mittelwert eines übergebenen Vektors: function [arithm, geom] = mittelwerte (x) arithm = mean(x); geom = prod(x).'(1/length(x));
%Datei mittelwerte.m % Arithmetisches Mittel %Geometrisches Mittel
Mit dem Aufruf mittelwerte(test) wird nur das erste Ergebnis der Rückgabeliste [arithm, geom] zurückgegeben. Werden mehrere Rückgabewerte benötigt, so muss das Ergebnis in ein Array der Form [A, G] gespeichert werden: » test
= [243];
» [A, G] = mittelwerte (test)
A=
3 G
2.8845
2.5.1
Funktionen mit variabler Parameterzahl
Eine Stärke von MATLAB-Funktionen ist, mit einer unterschiedlichen Anzahl von Übergabe-Parametern zurechtzukommen. Hierzu existieren innerhalb einer Funktion die Variablen nargin und nargout, die die Anzahl der übergebenen Parameter bzw. zurückzuschreibenden Werte enthalten. Zusätzlich stehen noch die Befehle input name zum Ermitteln der Variablennamen der Übergabe-Parameter und nargchk zum Überprüfen der korrekten Anzahl der übergebenen Parameter zur Verfügung. Im Folgenden soll die Funktion mi ttel werte2 entweder nur den arithmetischen, nur den 12)
Der möglichst der Dateiname sein sollte, aber nicht muss!
2 MATLAB Grundlagen
24
2.5 MATLAB-Funktionen
25
geometrischen oder beide Mittelwerte berechnen, wozu ein zweiter Übergabe-Parameter schalter definiert wird.
So kann in der Funktion mi ttelwerte2 die Übergabe des Parameters schalter vermieden werden, wenn dieser in der Funktion mittelwerte3 als global definiert wird:
Je nach Anzahl der übergebenen Parameter wird nun unterschiedlich verfahren: Wird nur eine Variable x übergeben, so werden beide Mittelwerte zurückgegeben. Wird auch der zweite Parameter schalter übergeben, so wird out1 das geometrische Mittel zugewiesen, wenn schalter == 'g' ist, ansonsten das arithmetische Mittel. out2 wird als leer definiert. Wird eine andere Zahl an Parametern übergeben (Test mit nargchk), wird mittels error eine Fehlermeldung ausgegeben und die Funktion abgebrochen.
function [out 1 , out2] global schalter
function [outl, out2] ~ mittelwerte2 (x, schalter) error (nargchk (1, 2, nargin» if nargin ~~ 1 outl ~ mean(x); out2 ~ prod(x).~(l/length(x»; elseif nargin ~~ 2 if schalter ~~ 'g', outl ~ prod(x).~(l/length(x»; else outl ~ mean(x); end out 2 [] ; end
%Datei mittelwerte2.m % Prüfe Parameterzahl
%Arithmetisches Mittel %Geometrisches Mittel % Arithmetisches Mittel %Geometrisches Mittel
% Leere Ausgabe für out2
mittelwerte3 (x)
outl ~ mean(x); out2 ~ prod(x).-(l/length(x»; if -isempty (schalter) if schalter ~~ 'g', out1 ~ out2; end out2 ~ []; end
%Datei mittelwerte3.m % Definiert globale Variable
% Arithmetisches Mittel %Geometrisches Mittel
%Gibt geometrisches Mittel aus
Hierdurch entfällt die Abfrage von narginj es muss nur z.B. mit isempty überprüft werden, ob die globale Variable schalter nicht leer ist. Dann wird für schalter ~= 'g' die Rückgabevariable outi auf das geometrische Mittel (out2) und anschließend out2 auf [] gesetzt. Ebenso muss im Command Window die Variable schalter - vor der ersten Zuweisung! als global definiert werden. Wird die Variable dann dort gleich' g' gesetzt, kann die Funktion mi ttelwerte3. m auf diesen Wert zugreifen.
Damit ergibt sich folgende Ausgabe: » global schalter
» mittelwerte2 (test,'g')
» schalter
ans 2.8845
Funktionen function [out]
name (in)
nargin,nargout nargchk (min, max, n) isempty ('name') error ( 'info' )
MATLAB-Funktion name mit Liste der Eingabeparameter in und Ausgabewerte out definieren Anzahl der Ein- bzw. Ausgabeparameter Anzahl n der Übergabeparameter überprüfen, ob gilt: min :s; n :s; max, sonst Fehlertext Gültigkeit der Variablen name prüfen Abbruch der Funktion und Anzeige von info
~ 'g'; » test ~ [243]; » [Ml, M2] ~ mittelwerte3 (test) M1 2.8845 M2
[J
Die Anzeige aller globalen Variablen ergibt dann:
» whos global Name
Size
schalter
lxl
Bytes Class 2
char array (global)
Grand total is 1 element using 2 bytes
2.5.2
Lokale, globale und statische Variablen
Die Variablen innerhalb jeder Funktion sind lokal und werden beim Verlassen der Funktion wieder gelöscht. Soll eine Variable dagegen bis zum nächsten Aufruf derselben Funktion gespeichert bleiben, muss sie zu Beginn der Funktion mit persistent variable ... als statisch definiert werden. Statische Variablen werden durch clear functions oder bei Änderung des M-Files der Funktion gelöscht. Globale Variablen können mit global variable ... definiert werden. Um auf diese Variablen zugreifen zu können, muss diese Definition zu Beginn jeder betroffenen MATLABFunktion sowie bei Bedarf im Workspace des Command Windows erfolgen. Angezeigt werden die globalen Variablen mit whos global, gelöscht werden sie mit clear global.
Der Befehl assignin erlaubt einer Funktion den Schreibzugriff auf andere (d.h. von ihr nicht sichtbare) Workspaces. Wird die Zeile assignin (' base' , 'name' , wert) innerhalb einer F\mktion aufgerufen, weist sie der Variablen name im Workspace des Command Windows den Wert wert zu. Falls die Variable name nicht existiert, wird sie dabei erzeugt. Ein Beispiel zur Verwendung von assignin findet sich auf Seite 242.
Achtung:
Globale Variablen und der Befehl assignin sind innerhalb von Funktionen mit Vorsicht zu genießen, da natürlich auch andere Funktionen, die Zugriff auf die so verwendeten Variablen haben, deren 1Vert verändern können!
2 MATLAB Grundlagen
26
2.5 MATLAB-Funktionen
[outl, out2, ... ] [mdl, out2, ... ]
Globale und Statische Variablen in Funktionen persistent varl ... global varl ... elear global varl ...
Statische (lokale) Variablen definieren Globale Variablen definieren Globale Variablen löschen
assignin ('base', 'var', x)
Zuweisen des Wertes x an die Variable var im Workspace des Command Window
= =
27
feval Cf_handle, inl, in2, ... ) f_handle (inl, in2, ... )
Hierbei sind inl, in2, ... die Eingabeparameter der Funktion und outl, out2, ... die Rückgabewerte. Für das obige Beispiel mittelwerte wird nun das Function Handle fh erzeugt und die Funktion damit aufgerufen: » fh = @mittelwerte; » A = fh (test) A=
% function_handle auf @det erzeugen % Ausführen des function_handles fh
3
2.5.3
Hilfetext in Funktionen
Zur Erklärung einer Funktion kann im Kopf des zugehörigen M-Files ein Hilfetext eingefügt werden, der beim Aufrufvonhelp funktion ausgegeben wird. Der Text muss mit dem Kommentarzeichen %beginnen; die Ausgabe endet mit der ersten Leerzeile. Alle weiteren auskommeritierten Zeilen werden unterdrückt. Für die Funktion mi ttelwerte lauten die ersten Zeilen z.B.
I I
%MITTELWERTE (X) Berechnungen verschiedener Mittelwerte % [A,G] = MITTELWERTE (X) berechnet das arithmetische % Mittel A und das geometrische Mittel G des Vektors X.
2.5.5
Funktionen als Inline Object
Eine sehr bequeme Möglichkeit zum Arbeiten mit immer wieder verwendeten kleinen Funktionen sind inline objects: 14 ) Hiermit können im MATLAß-Workspace Funktionen definiert werden, ohne sie in einem M-File abspeichern zu müssen. Bereitgestellt und ausgeführt wird eine solche Inline-Object-Funktion wie folgt; sowohl die Befehlszeile (Formel) als auch die Parameter werden als .Strings angegeben: » f1
= inline ('x.-2+x-1',
'x')
fl Inline function: f1(x) = x.-2+x-l
% Erstellt: 21.01.02
Wird nun am MATLAB-Prompt der Befehl help mittelwerte eingegeben, so sieht die Ausgabe wie folgt aus:
» test = [243]; » f1 (test)
» help mittelwerte
ans 5
MITTELWERTE (X) Berechnungen verschiedener Mittelwerte [A,G] = MITTELWERTE (X) berechnet das arithmetische Mittel A und das geometrische Mittel G des Vektors X.
2.5.4
Function Handles
Üblicherweise wird eine Funktion wie oben gezeigt direkt aufgerufen. Ein zweite, sehr mächtige Möglichkeit ist das indirekte Ansprechen der Funktion über das ihr zugeordnete Function Handle. 13 ) Ein Function Handle stellt den Zeiger auf eine Funktion dar. Dieser dient vor allem der Übergabe einer Funktion als Parameter an eine andere Funktion und wird z.B. beim Aufruf von Gleichungslösern und Optimierungsbefehlen verwendet (siehe Kap. 4 und 7). Ein Function Handle wird durch den Operator erzeugt:
f_handle
=
@
@funktion
Das Function Handle stellt einen eigenen Datentyp dar, der wie eine Struktur aufgebaut ist.
11
P-Code und clear functions
Wird ein MATLAB-Skript oder eine MATLAß-Funktion zum ersten Mal aufgerufen, erzeugt MATLAB einen Pseudo-Code, der dann ausgeführt wird. Bleibt daher die Änderung eines M-Files ohne Wirkung, wurde dieser Übersetzungsvorgang nicht neu gestartet. Dies sollte automatisch geschehen, kann aber auch durch den Befehl elear functions erzwungen werden (die M-Files werden dabei natürlich nicht gelöscht!). Der Pseudo-Code kann auch mit pcode datei erzeugt und als P-File abgespeichert werden, um z.B. Algorithmen zu verschlüsseln. Existieren sowohl M-File als auch das gleichnamige P-File, führt MATLAB immer das P-File aus. Nach einer Änderung des M-Files muss daher der Befehl peode wiederholt oder das P-File gelöscht werden!
vor dem Funktionsnamen f1mktion
Die dem Function Handle zugewisene Funktion kann nun mit dem Befehl feval ausgeführt werden. Alternativ kann das Function Handle auch wie der ursprüngliche Funktionsname verwendet werden: 13)
2.5.6
19
14)
Für eine detaillierte Erklärung zu lnline Objects siehe auch Kap. 7.1.
28
2 MATLAB Grundlagen
29
2.6 Code-Optimierung in MATLAB
Funktionen (erweitert) f_handle = @funktion funetions (jJ!andle) feval (j.Jwndle)
F\mction Handle auf funktion erzeugen Function-Handle-Informationen abrufen Function Handle (d.h. Funktion) ausführen
f
Funktion als Inline-Object definieren
=
inline (funktion)
peode datei elear funetions
2.6
P-Code zu M-File datei.m speichern Alle P-Codes im Workspace löschen
Code-Optimierung in MATLAB
Werden in MATLAB umfangreiche Daten bearbeitet, gilt es Hardware-Ressourcen möglichst effizient zu nutzen. Dieser Abschnitt beschreibt zunächst den MATLAB-Profiler als wichtiges Werkzeug für die Suche nach Optimierungspotential. Anschließend werden einige Tipps zur Reduktion der Rechenzeit und des Speicherbedarfs sowie zur Vermeidung typischer Fehler gegeben.
2.6.1
Der
MATLAB- Profiler
Der MATLAB-Profiler wird über das Menü Desktop/Profiler des MATLAB-Desktops aufgerufen. Im Feld Run this code wird die zu testende Funktion oder der Name des M-Files (ohne Endung) eingetragen und der Profiler mit dem Button Start Profiling gestartet.
, prQfil~ Summary . Generated 23.ser·200412:45:32
~ ~_M rnun
..?,234s
!_~.141S .. ..1F'iRYWff5B'lTiW;Sil1
_~j~~6J~~~:~ ~ ". j?:_~:~_~ __ .J .~.__
2.6.2
I
.". . _. .J Abb. 2.6: Listing mit Laufzeit-Markierung
Optimierung von Rechenzeit und Speicherbedarf
MATLAB kompiliert eingegebene Befehle, Skripts und Funktionen - unbemerkt vom Anwender - bereits vor der Ausführung. Dies geschieht durch den so genannten JITAccelerator.1 6 ) Dennoch lässt sich die Effizienz von MATLAB-Skripts und -Funktionen durch geeignete Programmierung noch weiter verbessern. In der Regel wird die meiste Laufzeit an wenigen Stellen innerhalb oft durchlaufener Schleifen des MATLAB-Codes verschenkt; diese findet man am besten mittels des MATLAB-Profilers. Der folgende Abschnitt zeigt, wie solche Stellen optimiert werden können. • Große Arrays sollten vor ihrer Verwendung mit der maximal benötigten Größe vorbelegt werden, damit MATLAB den benötigten Speicher alloziert. Dafür eignen sich Befehle wie zeros (zeilen, spalten [,' typ' 1). Optional kann dabei auch ein kompakter Datentyp aus Kap. 2.2.1 angegeben werden. • Shortcut-Operatoren && und 11 (anstelle von & und I) beschleunigen skalare logische Verknüpfungen z.B. bei if- oder while-Abfragen .
• Laufzeit 15) (time) .. Anzahl der Aufrufe (ealls)
" Alle Hardware-Zugriffe benötigen viel Zeit und sollten daher innerhalb häufig durchlaufener Schleifen unterbleiben. Dies gilt für Ausgaben im Command Window, Lesen und Schreiben von Dateien sowie für grafische Ausgaben jeder Art .
.. Nicht erreichter Code (line bzw. coverage) .. Code-Prüfung (mlint)
• Das Löschen nicht mehr benötigter Variablen mit clear variable und das Schließen nicht benötigter Figures mit Glose nummer gibt den dadurch belegten Speicher (zumindest zum Teil) wieder frei. Achtung:
Wird im genannten Auswahlfeld die Rubrik mlint gewählt, werden Zeilen mit fehleranfälligen oder zeit intensiven Konstrukten markiert und mit (meist) hilfreichen Kommentaren versehen. 15)
_.!1
__1_".' __ """ ... 1.....
Abb. 2.5: Profiler mit Summary
Als Ergebnis zeigt der Profiler zunächst eine Übersicht an (Profile Summary, siehe Abb. 2.5). Durch Anklicken der gewünschten Funktion oder Datei in der linken Spalte gelangt man zur Detailansicht (siehe Abb. 2.6). Diese zeigt zuerst eine tabellarische Übersicht, die unter anderem folgende Rubriken enthält:
Weiter unten folgt schließlich ein Listing mit darüber liegendem Auswahlfeld. Durch Anklicken einer der genannten Rubriken kann dieses Kriterium durch farbige Markierung der relevanten Zeilen hervorgehoben werden.
...
:'! l-(~.ar~:,~~nd= seJ~_I!~_e~·1
.!d!.!k!In!illJi.m.!lIS6lfTime"',!TOlaJ,Timapli?1
J
Bei der Optimierung sind immer auch die Lesbarkeit und Wartung eines M-Files zu berücksichtigen! Daher gelten die folgenden Anregungen ausschließlich für Stellen mit akuten Laufzeitproblemen:
o Strukturen und Cell-Arrays sowie Arrays hoher Dimension besitzen einen hohen Verwaltungsaufwand und sollten daher in inneren Schleifen vermieden werden.
Alternative Laufzeitmessung mit den Funktionen tic und tae, siehe Übungsaufgabe in Kap. 2.7.4. 16)
Just In Time Accelerator
2 MATLAB Grundlagen
30
o Jeder Aufruf von MATLAB-Skripts und -Funktionen, die als M-File vorliegen, benötigt zusätzlich Zeit. Diese lässt sich verringern, indem der Inhalt des aufgerufenen M-Files (entsprechend angepasst) in die Schleife kopiert wird. o Die Verwendung globaler Variablen, um Daten zwischen Funktionen auszutauschen, vermeidet das mehrfache Anlegen derselben Daten im Arbeitsspeicher. Vorsicht: Es besteht die Gefahr des unbeabsichtigten Überschreibens!
2.7 Übungsaufgaben
31
2.7
Übungsaufgaben
2.7.1
Rechengenauigkeit
Alle Rechenoperationen in MATLAB werden mit dem Variablentyp double (64 Bit) durchgeführt, soweit kein anderer Typ explizit angegeben ist. An einem Beispiel kann die Grenze der Rechengenauigkeit untersucht werden.
Schließlich kann MATLAB mit matlab.exe -nojvm auch ohne die Java Virtual Machine neu gestartet werden. Dies spart deutlich Arbeitsspeicher; dafür steht allein das Command Window ohne den gewohnten Bedienkomfort zur Verfügung.
Quadrieren Sie die Zahl 1.0000000001 insgesamt 32-mal! Berechnen Sie das Ergebnis zunächst in einer Schleife! Bestimmen Sie zum Vergleich das Ergebnis mit einer einzigen Potenzfunktion! Was fällt Ihnen auf?
2.6.3
Hinweis: Wählen Sie ein geeignetes Format der ZahlendarsteIlung, z.B. mit dem Befehl format long g.
Tipps zur Fehlersuche
Auch erfahrene MATLAB-Anwender sind vor Flüchtigkeitsfehlern nicht restlos gewappnet. Manche Fehler sind besonders tückisch, da sie eine MATLAB-Fehlermeldung an ganz anderer Stelle bewirken oder lediglich durch" überraschende" Ergebnisse auffallen. Einige solche Fehler werden im Folgenden beschrieben und mit Tipps zur Abhilfe ergänzt: ., Alte Daten eines vorherigen Projekts" überleben" im Workspace. Werden gleiche Variablennamen weiter verwendet, sind diese Variablen dann noch falsch belegt. Neben unplausiblen Ergebnissen ist eine typische Fehlermeldung "Index exceeds ma-trix dimensions". Abhilfe mit clear all. .. Ein mehrdimensionales Array wird mit zuwenig Indizes adressiert. MATLAB fasst das Array dann fälschlicherweise als Vektor bzw. Array niedrigerer Dimension auf (siehe auch Fußnote auf Seite 15). Abhilfe durch Debugger und Anzeigen der betreffenden Variable im Array-Editor.
2.7.2
N ach dem italienischen Mathematiker Leonardo Pisano Fibonacci (ca. 1175 bis 1250 n. Chr.) ist folgende Reihe benannt: n(k) = n(k - 1)
., Leerzeichen vor Klammern bei der Adressierung von Cell-Arrays und beim Zusammensetzen von Strings können zu Fehlermeldungen führen. Fehlerfrei funktioniert z.B. zelle{2} statt zelle {2} (siehe Beispiel auf Seite 15) sowie [num2str(2.5), 'm~J statt [num2str (2.5), 'm'J (siehe Beispiel Kap. 3.2.3). .. Variablen und Funktionen besitzen identische Namen oder es existieren mehrere M-Files desselben Namens im MATLAB-Pfad. Die Abfrage which -all name listet alle Vorkommen eines Namens im Workspace und MATLAB-Pfad auf.
+ n(k -
n(l) = n(2) = 1
mit
2)
Berechnen Sie die nächsten 10 Elemente mit einer Schleife! Beginnen Sie mit dem Vektor [1 1J, an den Sie bei jedem Durchlauf ein Element anfügen! Das wievielte Element überschreitet als Erstes den Wert 10 20 7 Verwenden Sie dazu eine Schleife mit entsprechender Abbruchbedingung! Die Elemente der Fibonacci-Reihe können nach Gleichung (2.1) auch explizit bestimmt werden:
.. Globale oder Workspace-Variablen werden in einem anderen Skript (oder Funktion) unbeabsichtigt geändert. Abhilfe durch Funktionen mit lokalen Variablen und durch (neue) eindeutige Namen für globale und Workspace-Variablen. .. Tippfehler bei Variablennamen, z.B. varible (k) = 2*variable (k-1), bleiben unentdeckt, wenn die Variable bei der Ausführung des fehlerhaften Codes bereits vorhanden ist. In diesem Fall wird eine neue Variable mit falschem Namen varible erzeugt; die eigentliche Variable dagegen bleibt unverändert. Abhilfe durch den MATLAB-Profiler: Unter der Rubrik mlint wird auf nicht verwendete Variablen und damit auf solche Tippfehler hingewiesen.
Fibonacci-Folge
n(k) = Fk - (l-F)k
V5
mit
F =
1+V5 2
(2.1 )
Berechnen Sie damit ohne Schleife das 12. bis 20. Element mit elementweisen Vektoroperationen!
2.7.3
Funktion gerade
Die Funktion gerade soll aus zwei Punkte-Paaren (xl,yd und (X2,Y2) in kartesischen 'Koordinaten die Parameter Steigung mund Yo (y- Wert für x = 0) der Geradengleichung
y=m·x+yo bestimmen. Es müssen also 4 Werte xl, y1, x2, y2 an die Funktion übergeben werden, die wiederum 2 Werte mund yO zurückgibt. Für den Fall einer senkrechten Steigung (Xl = X2) soll eine Warnung' Steigung unendlich!' mittels des Befehls disp17) ausgegeben werden. 17)
Zur Verwendung des Befehls disp siehe Kapitel 3.2.3.
2 MATLAB Grundlagen
32
Werden nur 2 Werte übergeben, so sollen neben den Parametern mund yO (in diesem Fall = 0) noch der Abstand r des Punktes vom Ursprung (Radius) und der mathematisch positive Winkel phi zur x-Achse in Grad zurückgegeben werden. Wird eine andere Anzahl von Werten übergeben, so soll eine Fehlermeldung mit 'Falsche Anzahl von Parametern! ' und der Hilfetext der Funktion (Aufruf mit help gerade) ausgegeben werden.
2.7.4
3
Eingabe und Ausgabe MATLAB
Berechnungszeiten ermitteln
In MATLAB existieren verschiedene Befehle zur Abfrage der Systemzeit und zum Messen der Berechnungsdauer, darunter tic und toc: tic startet eine Stoppuhr, toc hält diese wieder an und gibt die verstrichene Zeit aus. Somit kann die Laufzeit von Programmen ermittelt werden, indem sie innerhalb eines solchen tic-t~c-Paares aufgerufen werden. Zum Vergleich der Laufzeit verschiedener Programmstrukturen werden die Funktionen mittelwerte aus Kap. 2.5 und mittelwerte2 aus Kap. 2.5.1 verwendet. Schreiben Sie ein Skript mi ttelwerte..zei t .m, in dem beide Funktionen jeweils 10000mal mit einem Testvektor aufgerufen werden. Stoppen Sie die Zeit für 10000 Durchläufe für jede der beiden Funktionen. Wiederholen Sie diesen Test 10-mal (mittels einer Schleife) und mitteln Sie anschließend die Zeiten. Welche Funktion ist schneller und warum?
In
Die in diesem Kapitel vorgestellten Befehle dienen der Steuerung der Bildschirmausgabe, der komfortablen Ein- und Ausgabe von Daten im Dialog mit dem Benutzer sowie dem Import und Export von Dateien. Weitere Schwerpunkte sind die grafische Darstellung von Ergebnissen in MATLAB und der Import und Export von Grafiken.
3.1
Steuerung der Bildschirmausgabe
Die Befehle zur Steuerung der Bildschirmausgabe sind syntaktisch an die entsprechenden UNIX-Befehle angelehnt. Sie sind vor allem zum Debuggen von Programmen oder zum Vorführen bestimmter Zusammenhänge hilfreich. Soll die Bildschirmausgabe seitenweise erfolgen, wird mit more on die seitenweise Bildschirmansgabe ein-, mit more off ausgeschaltet. more (n) zeigt jeweils n Zeilen je Seite an. Die Steuerung erfolgt wie in UNIX: Ist die Ausgabe länger als eine Seite, so schaltet die Return-Taste um eine Zeile weiter, die Leertaste zeigt die nächste Seite an und die Taste Q bricht die Ausgabe ab. Mit dem Befehl echo on können die beim Aufrufen eines MATLAB-Skripts oder einer Funktion ausgeführten Befehle angezeigt werden; echo off schaltet dies wieder aus. Beim Ausführen einer Funktion funktion werden die darin aufgerufenen Befehle mit echo funktion on ausgegeben (Ausschalten mit echo funktion off), wie das folgende Beispiel zeigt: » echo mittelwerte on » [A, G] = mittelwerte (1:2:7) arithm geom
mean(x); prod(x).-(1/length(x));
% Arithmetisches Mittel %Geometrisches Mittel
A= 4 G
3.2011
Die Bildschirmausgabe anhalten kann man mit dem Befehl pause, der die Ausgabe beim nächsten Tastendruck fortsetzt, während pause (n) die Ausgabe für n Sekunden anhält. Mit pause off schaltet man alle folgenden pause-Befehle aus; es wird also nicht mehr angehalten. Mit pause on werden die pause-Befehle wieder aktiviert. So gibt die folgende Schleife jeweils den Zähler aus und wartet dann die dem Zähler entsprechende
3.2 Benutzerdialoge
3 Eingabe und Ausgabe in MATLAB
34
3.2.2
Zeit in Sekunden.1) Am Ende muss mit einem Tastendruck quittiert werden. 1 3
5
Ende » Auch sehr nützlich ist.der Befehl eIe (Clear Command window), mit dem alle Ein- und Ausgaben am Command Window gelöscht werden und der Cursor in die erste Zeile gesetzt wird.
Eingabedialog
Die Abfrage von Daten erfolgt mit dem Befehl variable = input (string). Der String wird ausgegeben; die Eingabe wird der Variablen zugewiesen. Wird keine Zahl, sondern ein String abgefragt, lautet der Befehl string = input (string, 's'). Als Sonderzeichen stehen innerhalb des Strings der Zeilenumbruch \n, das einfache Anführungszeichen ' , sowie der Backslash \ \ zur Verfügung. Hier das Beispiel eines Eingabedialogs:
» for i=1:2:6, disp(i), pause(i), end, disp('Ende'), pause
I
35
I
preis = input (['Wieviel kostet heuer \n', ... 'die Wies"n-Maß ? ']l waehrung = input ('Währung? " 's'); Nach Aufruf des Skripts kann man folgenden Dialog führen:
Steuerung der Bildschirmausgabe more echo pause pause (n) eIe
3.2
Seitenweise Ausgabe am Bildschirm Zeigt Befehle bei Ausführung von Skripts und Funktionen an Hält die Bildschirmausgabe an (bis Tastendruck) Hält die Bildschirmausgabe für n Sekunden an Löscht alle Ein- und Ausgaben im Command Window
Benutzerdialoge
Text in MATLAB (Strings)
Texte (Strings) werden in einfache Anführungszeichen eingeschlossen und können Variablen zugewiesen werden: 2 ) string = 'text'. String-Variablen werden als Zeilen-Vektor gespeichert und können mit [' textl' , 'text2'] zusammengesetzt werden. Geht ein String in einem Skript über mehrere Zeilen, muss der String am Ende jeder Zeile abgeschlossen werden, da andernfalls der Umbruch mit ... auch als Teil des Strings interpretiert werden würde. »text
['Das ist', "
Bytes
1x17
34
1)
Für vektorielle Daten kann die Ausgabe mit string = sprintf (string, variable) formatiert und mit disp ausgegeben werden. Die Syntax zur Formatierung entspricht bei num2str und sprintf im Wesentlichen der der Sprache C (genaue Infos über help sprintf). Alle Variablen müssen in einer einzigen Matrix angegeben werden, wobei jede Spalte einen Datensatz für die Ausgabe darstellt. Fortsetzung des obigen Beispiels: disp (['Aber' num2str(preis, '%0.2f'), ' " waehrung, , pro Maß wird ein teurer Rausch!']) disp (, ,) ausgabe = sprintf ('Zwei Maß kosten dann %2.2f %s.', ... preis*2, waehrung); disp (ausgabe) mehr = sprintf ('%4d Maß kosten dann %2.2f.\n', [3:5; (3:5)*preis]); disp (mehr)
% Leerzeile ausgeben % Ausgabe formatieren
%ausgeben %Ausgabe formatieren %Vektoren für Ausgabe %ausgeben
Als Ausgabe erhält man: Class char array
Grand total is 17 elements using 34 bytes Der Befehl disp zur Ausgabe von Zahlen und Strings wird in Kap. 3.2.3 behandelt. wählt automatisch den Datentyp char, ohne dass dieser explizit angegeben werden muss.
2) MATLAB
Formatierte Ausgabe
'ein Text!']
text Das ist ein Text! » whos text Name Size text
3.2.3
7.10 EUR
Für die Ausgabe lassen sich Daten und Strings ebenfalls formatieren. Der Befehl disp (string) gibt einen String am Bildschirm aus. Interessant wird dieser Befehl, wenn der String zur Laufzeit aus variablen Texten zusammengesetzt wird; Zahlen müssen dann mit num2str (variable [, format]) ebenfalls in einen String umgewandelt werden.
Benutzerdialoge zur Eingabe und Ausgabe von Text und Daten können mit den im Folgenden beschriebenen Befehlen erstellt werden. Zu diesem Zweck wird zunächst die Behandlung von Text in MATLAB betrachtet.
3.2.1
Wieviel kostet heuer die Wies'n-Maß ? Währung ?
Aber 7.10 EUR pro Maß wird ein teurer Rausch! Zwei 3 4 5
Maß Maß Maß Maß
kosten kosten kosten kosten
dann dann dann dann
14.20 EUR. 21.30. 28.40. 35.50.
Neben den oben beschriebenen Möglichkeiten erlaubt MATLAB auch die Erstellung grafischer Benutzerschnittstellen, die in Kap. 3.6 beschrieben wird.
3 Eingabe und Ausgabe in MATLAB
36
Benutzerdialoge input Cstring) input Cstring, , s') num2str Cvariable [, format]) sprintf (string, variable) disp Cstring)
variable string string string
Formatierung
Sonderzeichen \n \t
\\ %%
Zeilenumbruch Tabulator Backslash \ Prozent % Anführungszeichen '
Abfrage einer Variablen Abfrage eines Strings Umwandlung Zahl in String Formatierten String erzeugen Textausgabe auf Bildschirm
%d %x %5.2f %.2e %s
Ganze Zahl (z.B. 321) Ganze Zahl hexadezimal Fließkomma-Zahl (z.B. 54.21) Exponentenschreibweise (z.B. 5.42e+001) String
3.3
Import und Export von Daten
3.3.1
Standardformate
Wird nach load ein Dateiname ohne Endung angegeben, nimmt MATLAB an, dass die Daten im MATLAB-Binätformat (so genannte MAT-Files, mit der Endung MAT) vorliegen. Bei diesem sind außer den Werten der Variablen auch deren Namen gespeichert und die Daten falls möglich zusätzlich komprimiert. Zum Einlesen von Daten im ASCII-Format wird der Dateiname mit Endung angegeben. Die Daten einer Zeile müssen dann durch Leerzeichen oder Tabulatoren getrennt sein (keine Kommata!). Jede Zeile muss gleich viele Elemente besitzen (Kommentarzeilen sind aber erlaubt). Die eingelesenen Werte werden standardmäßig einer Variablen mit dem Namen der Datei zugewiesen. Mit variable = load ( , datei name ,) werden die eingelesenen Werte stattdessen der angegebenen Variablen zugewiesen.
I I
% Spaltenvektor % Matrix [test_vektor cos(test_vektor)]; %Speichern in Datei test.mat %Workspace löschen %Laden auS Datei test.mat [0:0.1:10]' ;
» who
Your variables are: test_matrix test_vektor
37
Beim Speichern mit save erzeugt MKrLAB standardmäßig ein MAT-File. Die Option -append hängt zu speichernde Variablen an ein bestehendes MAT-File an. Werden beim Laden und Speichern keine Variablen explizit angegeben, lädt MATLAB jeweils alle Variablen des MAT-Files bzw. speichert alle Variablen aus dem Workspace. Mit der alternativen Option -ascii kann ein ASCII-Format ausgegeben werden. Die Namen der Variablen werden dann nicht gespeichert. Speichern im ASCII-Format schreibt alle Variablen untereinander in die Ausgabedatei. Bei unterschiedlicher Spaltenzahl ist ein Einlesen in MATLAB dann nicht mehr ohne weiteres möglich. Selbst bei gleicher Spaltenzahl können die ursprünglichen Variablen aufgrund der nicht gespeicherten Namen nicht mehr separiert werden.
» » » »
save test.txt -ascii test_matrix clear load test.txt who
% Speichern in Datei test.txt %Workspace löschen %Laden aus Datei test.txt % Anzeige des Workspace
Your variables are: test Die Befehle xlswrite (' datei' , variable) und xlsread (, datei') schließlich schreiben in eine Excel-Datei bzw. lesen daraus. Für Details sei auf die MATLAB-Hilfe verwiesen.
Für den Import und Export von Dateien unterstützt MATLAB standardmäßig ASCII-Text sowie ein spezielles MATLAB-Binärformat. Das Laden und Speichern geschieht mit den Befehlen load dateiname [variableI variable2 ... ] und save dateiname [variableI variable2 ... ]. Die alternativen Klammerversionen load C' dateiname ' [,' variablel ' ,'variable2', ... ]) und save C' dateiname ' [,' variableI ' , , variable2' , ... j) erlauben, den Dateinamen auch als String-Variable zu übergeben.
» test_vektor » test_matrix » save test » clear » load test
3.3 Import und Export von Daten
%Anzeige des Workspace
Datenimport und -export Standardformate load datei [variable ... ] save datei [variable ... ]
Laden aus MAT-File Speichern in MAT-File
[variable =] load datei.endung save datei. endung -ascii [variable ... ]
Laden aus ASCII-File Speichern in ASCII-File
variable
Laden aus Excel-File Speichern in Excel-File
3,3.2
=
xlsread (' datei.xls') xlswrite (' datei.xls' , variable)
Formatierte Textdateien
Ein universeller Befehl zum Einlesen beliebig formatierter Textdateien ist vektor fscanf (fid, 'format'), der ähnlich wie in der Sprache C arbeitet. Hauptunterschied ist allerdings die vektorisierte Verarbeitung der Daten, d.h. der Formatstring wird so lange wiederholt auf die Daten angewandt, bis das Dateiende erreicht ist oder keine Übereinstimmung mehr gefunden wird. Dies bringt insbesondere bei großen Textdateien einen deutlichen Zeitgewinn gegenüber zeilenweisem Zugriff. Die Befehle string = fgetl (fid) und string = fgets (fid, anzahl) lesen bei jedem Aufruf jeweils eine ganze Zeile bzw. eine bestimmte (maximale) Anzahl an Zeichen aus. Zum Öffnen und Schließen der Datei sind dabei jeweils die zusätzlichen Befehle fid = fopen ( , datei. endung , , , zugriff') und f elose (fid) notwendig, wobei fid das Handle der geöffneten Datei ist: Der Parameter zugriff kann aus folgenden Strings bestehen
3 Eingabe und Ausgabe in MATLAB
38
(siehe auch help fopen): 'w', 'a' für Schreiben bzw. Anfügen (Datei wird bei Bedarf angelegt), sowie 'r' für Lesen. Für die formatierte Ausgabe in eine Textdatei kann der Befehl fprintf verwendet werden. Die Syntax entspricht der von sprintf; es können jeweils nur reelle Zahlen verarbeitet werden. Die Bierpreise von Kap. 3.2.3 werden mit den nachstehenden Befehlen in eine Datei bier. txt geschrieben: 3 ) » » » »
bier_id = fopen ('bier.txt', 'w'); fprintf (bier_id, '%s\r\n', 'Bierpreis-', 'Hochrechnung'); fprintf (bier_id, '%4d Maß kosten dann %2.2f.\r\n', '[3:5; (3:5)*preis]); fclose (bier_id);
%Kopfzeilen
3.3 Import und Export von Daten
Mit Ausnahme ungültiger Werte liest auch der Befehl dlmread numerische Daten ein. Als Trennzeichen wird ein Komma vorgegeben; der gewünschte Bereich für die Ausgabe kann in Tabellen-Notation angegeben werden. Leere Werte werden immer mit 0 belegt. »matrix matrix 4 1
»zeilen
textread ('chaos.txt', 'delimiter' ,
'whitespace' ,
'%s' , '\n' ,
, ,)
% Datei und Formatstring % Zeilenumbruch als Trennzeichen % kein Zeichen überspringen
zeilen 'Kopfzeile' '4,5,6, '
'Fusszeile'
Ein weiteres Beispiel liest dieselbe Datei als numerische Daten ein; dabei werden leere bzw. ungültige Werte (hier *) durch NaN (Not a Number) ersetzt. Zu beachten ist, dass am Zeilenende jeweils ein weiterer leerer Wert gelesen wird, da die Zeilen mit einem Trennzeichen (,) enden. matrix
5 2
textread ('chaos.txt',
,
, ,
, 'delimiter' , 'whi tespace' , '* 'headerlines' , 1,
% Datei und (leerer) Formatstring
,,
'emptyvalues' , NaN)
%Komma als Trennzeichen
% überspringt * und Leerzeichen % überspringt die erste Zeile % ersetzt leere Felder durch NaN
matrix
4
5
6
1
2
NaN
3
NaN
0
NaN NaN NaN
3) Das Beispiel erzeugt einen Text im DOS-Format: Der Format-String \r\n gibt die beiden Zeichen carriage return (GR) und linefeed (LF) für den Zeilenumbruch aus. Unter UNIX genügt \n.
'A2 .. C3')
% Datei, Trennzeichen, Bereich
6
o
Datenimport und -export formatiert
fid =
fopen (, datei.endung', 'zugriff') fclose (fid)
Datei öffnen Datei schließen
vektor =
fprintf (fid, , format' , variable [, ... j) fscanf (fid, , format')
Formatiertes Schreiben Formatiertes Lesen
string = string =
fgetl (fid) fgets (fid, n)
n Zeichen lesen
cellarray
=
variable = variable =
3.3.3
, 1, 2,,' '3,* ,G,'
»
dlmread ('chaos.txt',
Für sehr große Textdateien bietet der Befehl textscan eine höhere Effizienz und Flexibilität. Zum interaktiven Einlesen formatierter Textdateien steht außerdem der Import Wizard zur Verfügung; er wird über das Menü File/Import Data aufgerufen. Eine vollständige Übersicht der Befehle für Dateizugriffe bietet help iofun.
Die Ausgabe der unterschiedlich langen Kopfzeilen kann auch elegant mit einem Cell Array erfolgen, indem zunächst jede Zeile k in eine Zelle kopfzeilen{k} gespeichert und dann mit fprintf (bier _id, '%s\r\n' , kopfzeilen{:}) ausgegeben werden. Für das Einlesen beliebiger Textdaten stellt MATLAB die sehr flexible Funktion [varl, var2, ... ] =textread (' datei', ' format') zur Verfügung. Die Anzahl der Rückgabevariablen muss dabei den Elementen des Formatstrings entsprechen; bei leerem Formatstring wird nur eine einzige Variable zurückgegeben. Optional können weitere Parameter und zugehörige Werte angegeben werden (siehe help textread). Das folgende Beispiel liest die Datei chaos. txt zeilenweise in ein Cell Array aus Strings ein:
39
Eine Zeile lesen
textscan (fid, , format' [, anzahl J [, , parameter' , wert, ... ]) textread (' datei', ' format' [, 'parameter', wert, ... p dlmread ( 'datei' , , trennzeichen ' [, 'bereich'])
Binärdateien
Zum Lesen und Schreiben binärer Daten stehen die Befehle vektor = fread (fid, 'format') und fwrite (fid, matrix, 'format') zur Verfügung. Typische Formate sind unten aufgeführt; Standard ist uchar. Siehe auch help fread. Datenimport und -export binär
vektor =
fread (jid, 'format') fwri te (fid, matrix, , format')
Lesen Schreiben
uchar, uint16, uint32, uint64 int8, int16, int32, int64 float32, float64 bitN, ubitN, 1:::; N:::; 64
Formate ohne Vorzeichen Formate mit Vorzeichen Formate Fließkomma N Bits mit/ohne Vorzeichen
3 Eingabe und Ausgabe in MATLAB
40
3.4
Betriebssystemaufruf und Dateiverwaltung
3.5 Grafische Darstellung
3.5.1
41
Die Figure - Grundlage einer MATLAB-Grafik
Damit MATLAB ein aufgerufenes M-File oder Daten findet, muss sich die zugehörige Datei im aktuellen Verzeichnis oder im MATLAB-Pfad befinden. Der MATLAB-Pfad kann im Path Browser eingesehen und geändert werden. Dar Aufruf erfolgt über das Menü File/Set Path oder den Befehl pathtool. Im Path Browser kann man über den Button Add Folder dem MATLAB-Pfad ein neues Verzeichnis hinzufügen.
Den Rahmen für alle grafischen Ausgaben stellt die so genannte MATLAB-Figure dar, die mit figure erzeugt und mit einer Nummer versehen wird. Eine vorhandene Figure kann mit figure (nummer) angesprochen werden, die Nummer (eigentlich das Handle) einer Figure erhält man mit gef (Get handle to Current Figure). Alle Grafikbefehle wirken stets auf die zuletzt erzeugte bzw. angesprochene Figure.
Ein Ausrufezeichen (!) am Beginn einer Zeile veranlasst MATLAB, den Rest der Zeile dem Betriebssystem als Kommando zu übergeben. Hilfreich kann hier auch der mächtige (aber meist unübersichtliche!) Befehl eval(string) sein: Dieser Befehl interpretiert einen String als MATLAB-BefehL Das folgende Beispiel erstellt das Verzeichnis testverzeichnis, weist der Struct-Variablen verzeichnis den Verzeichnisnamen zu und löscht das Verzeichnis wieder. Eine weitere Übersicht erhält man mit help general.
Abb. 3.1 wurde mit den folgenden Befehlen erzeugt. Falls keine Nummer explizit angegeben wird, vergibt MATLAB diese automatisch (hier 1).
» mkdir ('testverzeichnis') » verzeichnis = dir ('testverzeic*'); » eval (['!rmdir " verzeichnis.name])
» figure » plot (diff (primas (500)))
%Abstand
zwischen Primzahlen < 500
% Verzeichnis anlegen (MATLAB-Befehl)
%Dir-Befehl ausführen (MATLAB-Befehl) %Verzeichnis löschen (Betriebssystem)
Die nachfolgend aufgeführten MATLAB-Befehle erlauben, ähnlich wie in gängigen Betriebssystemen, aus MATLAB heraus Verzeichnisse und Dateien zu verwalten (manuell ist dies natürlich auch im Current Directory Browser möglich). Betriebssystemaufruf und Dateiverwaltung
ls [auswahl]
Verzeichniswechsel Anzeige des aktuellen Verzeichnisses Anzeige Verzeichnis-Inhalt Anzeige Verzeichnis-Inhalt
mkdir verzeichnis copyfile quelle ziel delete datei
Neues Verzeichnis erstellen Datei kopieren Datei löschen
! kommando
Betriebssystemaufruf String als MATLAB-Befehl interpretieren
cd verzeichnis pwd dir [auswahl]
eval (string)
3.5
Grafische Darstellung
Insbesondere bei großen Datenmengen ist eine numerische Ausgabe wenig anschaulich. Daher werden nun Möglichkeiten zur grafischen Ausgabe behandelt. Zuerst werden die MATLAB-Figure sowie die für alle grafischen Ausgaben gleichermaßen gültigen Befehle, wie Achsen-Skalierung und Beschriftung, angesprochen. In den Kapiteln 3.5.3 und 3.5.4 werden die spezifischen Befehle für zwei- und dreidimensionale Grafiken beschrieben und an Beispielen ausführlich dargestellt; Kapitel 3.5.6 zeigt Möglichkeiten zum Import, Export und Drucken von Grafiken.
Abb. 3.1: MATLAB-Figure Eine Figure kann mit subplot (zeilen, spalten, zaehler) gleichmäßig in so genannte Subplots unterteilt werden. Der jeweils angesprochene Subplot wird durch die Variable zaehler bestimmt; es wird zeilenweise von links oben durchnummeriert. Sind alle Argumente einstellig, können sie ohne Komma (und ohne Leerzeichen!) hintereinander geschrieben werden (siehe Beispiel auf Seite 45). Der Inhalt einer vorhandenen Figure kann mit elf (Clear Figure) gelöscht werden. Die Figure selbst kann mit elose nummer geschlossen (d.h. gelöscht) werden. elose schließt die aktuelle Figure; elose all schließt alle geöffneten Figures. MATLAB verwaltet alle Grafiken objektorientiert. Die Objekt-Hierarchie für Grafikobjekte ist in Abb. 3.2 dargestellt. Die Eigenschaften der aktuellen Figure erhält man mit dem Befehl get (FigureHandle) bzw. get (gd), die Eigenschaften des aktuellen Subplots über das Handle gea (Get handle to Current Axis) entsprechend mit get (gca). Des Weiteren gibt set (gd) bzw. set (gca) eine Liste der möglichen Parameter aus. Das Abfragen und Setzen einzelner Eigenschaften geschieht wie folgt: 4 ) get (handle, 'eigenschaft' ) set (handle, ) eigenschaft) , VEri) Bei etlichen Grafikbefehlen (z.B. plot, xlabel, text, legend, siehe ab Kap. 3.5.3) lassen sich Eigenschaften und zugehörige Werte in gleicher Weise als zusätzliche Parameter übergeben. 4)
Die übergebenen Werte können je nach Eigenschaft eine Zahl, ein Array oder ein String sein.
3 Eingabe und Ausgabe in MATLAB
42
Über das Figure-Menü View kann der Property Editor aufgerufen werden; er erleichtert das Setzen einzelner Eigenschaften der Figure und aller anderen Grafikobjekte, wie Achsen, Beschriftung, Linienstärken, Skalierung etc. Ist der Button ,!:ii aktiviert, können Objekte in der Figure angeklickt und dann deren Eigenschaften verändert werden.
3.5 Grafische Darstellung
43
Über Annotations kann die Figure mit frei platzierbaren Grafik- und Textobjekten versehen werden. Diese Funktionen sind auch über das Figure-Menü View/Plot Edit Toolbar verfügbar. Im Plot Browser können Objekte der Figure einzeln unsichtbar geschaltet werden. Das so gestaltete Layout einer Figure kann über das Figure-Menü File/Generate M-File als MATLAB-Funktion ausgegeben werden. Diese lässt sich dann mit anderen Daten wiederverwenden. Grafik allgemein Erzeugen (Ansprechen) einer Figure Erzeugen eines Subplots
elf elose nummer elose all
Rücksetzen der aktuellen Figure Figure nummer schließen (löschen) Alle Figures schließen (löschen)
gcf
Aktuelle Figurenummer (Handle) Aktueller Subplot (Handle) Eigenschaft auslesen Eigenschaft setzen
gea get (handle, ' eigenschaft') set (handle, , eigenschaft' , wert)
Abb. 3.2: Objekt-Hierarchie für Grafikobjekte
Die Figure-Buttons.Sl,14.1i aktivieren bzw. deaktivieren zusätzlich zum Property Editor noch weitere Werkzeuge (siehe Abb. 3.3): Die Figure Palette erlaubt das Hinzufügen weiterer Objekte. Über New Subplots werden Subplots eingefügt. Ebenso können Subplots mit der Maus verschoben, skaliert sowie auch gelöscht werden. Variables bietet im Kontextmenü an, verfügbare Variablen zu plotten.
figure [(nummer)] subplot (zeilen, spalten, zaehler)
3.5.2
Achsen und Beschriftung
Die Skalierung der Achsen erfolgt automatisch, kann aber auch manuell mit dem Befehl axis ( [xmin, xmax, ymin, ymax] ) für zweidimensionale bzw. mit axis ([xl, x2, yl, y2, zl, z2]) für dreidimensionale Grafiken eingestellt werden. Mit axis ( , auto') wird die Skalierung wieder MATLAB über.Jassen. Der Befehl grid on erzeugt ein Gitternetz entsprechend der Achsenteilung. 5 ) Zur genaueren Betrachtung von Ausschnitten eines Plots kann nach dem Befehl zoom on (oder nach Anklicken eines der Buttons . ±oo.
"",,Une
~Arrow ,
Double Arrow
~ Text Arrow
Mit legend Cstringl, string2 ... [, , Location', richtung]) kann eine Legende erzeugt werden. Die Strings werden entsprechend der Reihenfolge der plot-Befehle zugeordnet. Die Position der Legende wird mit richtung als (englische) Himmelsrichtung angegeben: 'NE' platziert z.B. rechts oben (Standard), '\ol' links, 'Best' automatisch und Abb. 3.3: MATLAB-Figure mit Werkzeugen
5)
6)
Änderung der Achsenteilung mittels Property Editor oder wie im Beispiel auf Seite 47 gezeigt. Die in Kap. 3.2 beschriebenen Sonderzeichen \n, " sowie \ \ gelten hier jedoch nicht.
3 Eingabe und Ausgabe in MATLAB
44 'BestOutside ' neben dem Plot. Der Button unsichtbar. Weitere Infos über help legend.
.[§
schaltet eine Legende sichtbar oder
Der Befehl text (x, y, string) schließlich platziert einen Text an einer beliebigen Koordinate im aktuellen Plot. Den genannten Beschriftungsbefehlen können optional weitere Parameter übergeben werden, z.B. ti tle (' Überschrift' , 'FontSize' , 16, 'FontWeight', 'Bold'). Weitere Infos zur grafischen Ausgabe erhält man mit help graph2d, help graph3d und help specgraph (Spezialbefehle); siehe auch Kap. 3.7. Grafik: Achsen axis ( [xmin, xmax, ymin, ymax] ) axis ([xl, x2, yI, y2, zl, z2]) axis ( , auto')
Manuelle Achsen-Skalierung (2D) Manuelle Achsen-Skalierung (3D) Automatische Achsen-Skalierung
grid [on I off] zoom [on I off]
Gitternetz ein I aus Zoomfunktion ein I aus Grafik: Beschriftung
xlabel (string) ylabel (string) zlabel (string)
Beschriftung der x-Achse Beschriftung der y-Achse Beschriftung der z-Achse
ti tle (string) text (x, y, str·ing) legend (string1, ... [, 'Location', ... ])
Überschrift erzeugen Text platzieren Legende erzeugen
3.5.3
rl
3.5 Grafische Darstellung
k
b c g
'~ben
schwarz blau cyan grün
r rot m magenta y gelb w weiß
45
Punkte 0
*
+, x
Punkte Kreise Sterne Kreuze
R,n,en --. :
durchgezogen gestrichelt gestrichelt gepunktet
Standardmäßig löscht jeder neue plot-Befehl zunächst alle vorhandenen Objekte der aktuellen Figure (bzw. des Subplots). Dies wird mit dem Befehl hold .on nach dem ersten plot-Befehl verhindert. Das folgende Beispiel erzeugt Abb. 3.4: figure subplot (121) plot ([-5:0.1:5], cos ((-5:0.1:5)*pi), 'k:') hold on fplot (' 2*sinc (x) " [-5 5], ' k--') subplot (122) t - (0:20)*O,9*pi; plot (cos (t), sin (t))
%Erzeugt neue Figure % Linker SUbplot %schwarz, gepunktet %alten Plot beibehalten % schwarz, gestrichelt % Rechter Subplot %Standard: blaue Linie
Plot-Befehle für zweidimensionale Grafiken
Der Befehl plot (xwerte, ywerte ... [,plotstil]) zeichnet die als Wertepaare (xwerte, ywerte) gegebenen Punkte. Diese werden standardmäßig mit einer blauen Linie verbunden. Werden als Argument mehrere x/y-Vektoren abwechselnd übergeben, erhält man unabhängige Linien. Entfällt xwerte, werden die Werte ywerte über ihrem Index geplottet; enthält ywerte dabei komplexe Zahlen, wird der Imaginärteil über dem Realteil dargestellt. Der Befehl stairs verwendet dieselbe Syntax, erzeugt aber eine treppenförmige Linie (z.B. für abgetastete Signale, siehe Beispiel in Kap. 10.4.2). Die Befehle bar und stern erzeugen Balkendiagramme (siehe Spektren in Kap. 6.2). Die Befehle semilogx und semilogy besitzen die gleiche Syntax wie plot mit dem Unterschied, dass die x-Achse bzw. y-Achse logarithmisch skaliert wird. loglog plottet beide Achsen logarithmisch. Der Befehl polar plottet Daten in Polarkoordinaten. Der Parameter plotstil ist ein String, der Farbe, Linien- und ggf. Punkttyp eines Plots bestimmt. Aus allen drei Kategorien kann plotstil je ein Element enthalten (muss aber nicht). So steht z.B. 'g-.' für eine grüne gestrichelte Linie (- - -); 'ro-' steht für eine rote durchgezogene Linie, bei der jeder Datenpunkt zusätzlich mit einem Kreis markiert ist. Darüber hinaus können optional Eigenschaft/Werte-Paare angegeben werden. So erzeugt z.B. plot (x, y, ' r' , 'LineWidth' , 2.0) einen Plot mit dicker roter Linie. Weitere Infos über help plot oder in Kap. 3.7.
Abb. 3.4: MATLAB-Figure
mit zwei Subplots und über das Menü Tools aktiviertem Data Cursor (links)
Der verwendete Befehl fplot (funktion, bereich [, plotstilj) dient der einfachen Darstellung expliziter Funktionen, die als String angegeben werden. Mit erweiterter Funktionalität steht darüber hinaus ezplot (funktionl, funktion2 [, bereich]) zur Verfügung, um auch implizite Funktionen und Parameterkurven zu plotten (siehe Abb. 3.5). » ezplot ('x-2 - y-2 - 2') » ezplot ('sin(3*t) * cos(t) / (t+pi)', ... 'sin(3*t)
* sin(t) / (t+pi)', [0, 4*pi])
46
3 Eingabe und Ausgabe in MATLAB x2 _?_2 = 0
3.5 Grafische Darstellung Übertragungsfunktionen
x = sin(3 I) cos(l) I (I+n), y = sin(3 I) sin(l) I (I+n)
20 1
6
OOF_.,
01
0.1
4
60
0.05
2 >-
47
00
:<2.
o
0
>-
-0.1
-4
-0.15 -5
0
~ -20, /
tf. -30 -60
:Zeitkonslante >.,
-0.1
5
Q)
gj
0.
-0.2,
-6
~
~
-0.05
-2
~ 30
011-----
Q)
/
o
0.1
-40L'------~------~------~
0.2
x
1~
1~
1~
1~
-90' 10°
m [rad S-1]
102
10' (0
= .... ",
3
10
[rad S-1]
Abb. 3.5: Implizite Punktion (links) und Parameterkurve (rechts) mit dem ezpLot-BeJehl Abb. 3.6: Beispiel: Frequenz- und Phasengang eines TieJpasses und eines Hochpasses
Grafik: 2D Plot-Befehle plot C[xwerte,l ywerte ... [, plotstil]) stairs C[xwerte,l ywerte ... [, plotstilj) bar ( ... ), stern ( ... )
Plot, linear Plot, linear treppenförmig Plot, linear, Balken
loglog (xwerte, ywerte ... [,plot8tilj) sernilogx Cxwerte, ywerte ... [,plot8tilj) sernilogy Cxwerte, ywerte ... [,plot8til])
Plot, logarithmisch Plot, x-Achse logarithmisch Plot, y-Achse logarithmisch
polar (winkel, radius ... [,plot8til])
Plot, in Polarkoordinaten
fplot (junktion,. bereich) ezplot (funktion (x, y) [, bereich]) ezplot (junktion1, funktion2 [,bereich])
Plot, explizite Funktion Plot, implizite Funktion Plot, Parameterkurve
hold [on
I off]
Vorhandene Objekte halten
Beispiel: Frequenzgang Tiefpass und Hochpass Im Folgenden findet sich ein (zugegebenermaßen kompliziertes) Beispiel, das Abb. 3.6 erzeugt. Dabei wird der Frequenzgang eines Tiefpasses (auch PT1-Glied) und eines Hochpasses (auch DT 1-Glied) mit der Zeitkonstanten T im Laplace-Bereich (8 = jw) berechnet und ausgegeben. Die Eckfrequenz liegt jeweils bei l/T = 20 rad 8- 1 = 3.18 Hz. 1
HTP(jw) = l+jwT
jwT H EIP (jw)=l-HTP = l+jwT
Hinweis für Interessierte: Mit set wird zunächst die Achsenteilung geändert und anschließend die Beschriftung der Achsen; gca liefert das Handle des jeweiligen Subplots, um die Parameter ytick und yticklabel zu ändern.
.I
T
omega
0.05; logspace (0, 3, 100);
% Zeitkonstante Es] %Frequenzvektor [radis]
frequenzgang_TP frequenzgang_HP
(T*j*omega + 1).-(-1); 1 - frequenzgang_TP;
figure (3) clf subplot (121) loglog (omega, abs (frequenzgang_TP), '-') hold on loglog (omega, abs (frequenzgang_HP), ,--,) loglog ([1 1] /T, [0.01 10], ':') text (1.1/T, 0.02, 'Zeitkonstante') title ('Übertragungsfunktionen') xlabel ('\omega [rad s---l]') ylabel ('Amplitude [dB]') legend ('Tiefpass', 'Hochpass') axis ([1 le3 0.01 10]) skala = -40:20:40; set (gca, 'ytick', 10.-(skala/20» set (gca, 'yticklabel', skala)
%Frequenzgang %Frequenzgang
Tiefpass Hochpass
% Erzeugt Figure 3
% Löscht ggf. alte Plots
%Linker Subplot: Amplitude %Amplitudengang Tiefpass %Amplitudengang Hochpass %Linie Zeitkonstante %Text Zeitkonstante % Titel linker Subplot
% Achsenbeschriftung X % Achsenbeschriftung Y %Legende an Standardposition
%Sichtbarer %Gewünschte
Bereich Achsteilung % Setzt Achsteilung (dB) %Setzt Beschriftung
subplot (122) %Rechter SUbplot: Phase semilogx (omega, angle (frequenzgang_TP) *180/pi, ,-,) %Phasengang TP hold on semilogx (omega, angle (frequenzgang_HP) *180/pi, ,--,) % Phasengang HP % Aktiviert Gitterlinien grid on xlabel ('\omega [rad s---l]') %Achsenbeschriftung X ylabel ('Phase [Grad]') % Achsenbeschriftung Y axis ([1 le3 -90 90]) %Sichtbarer Bereich skala = -90:30:90; %Gewünschte AChsteilung set (gca, 'ytick', skala) %Setzt Achsteilung (Grad) set (gca, 'yticklabel', skala) % Setzt Beschriftung
Hinweis für immer noch Interessierte: Der Frequenzgang kann auch mit den in Kap. 5 behandelten Befehlen tf und bode dargestellt werden:
48
3 Eingabe und Ausgabe in MATLAB
» tiefpass = tf ([1], [0.05 1]); » hochpass = 1 - tiefpass; » bode (tiefpass, 'b-', hochpass, 'r--')
Mittels des Befehls tf wird die Übertragungsfunktion im Laplace-Bereich, bestehend aus Zähler- und Nennerpolynom, generiert. Mit dem Befehl bode wird automatisch ein Bodediagramm erzeugt.
3.5.4
Plot-Befehle für dreidimensionale Grafiken
Zur Darstellung mehrdimensionaler Zusammenhänge eignen sich 3D-Plots. Im Folgenden werden einige der dafür verfügbaren Befehle beschrieben. Die Befehle zur Beschriftung und zur Achsen-Skalierung leiten sich dabei von denen bei 2D-Plots ab. Der Befehl plot3 entspricht plot, lediglich um einen dritten Datenvektor für die zAchse erweitert. Folgende Befehle erzeugen den dreidimensionalen Plot in Abb. 3.7:
.1
3.5 Grafische Darstellung
kleinsten Datenwert skaliert. Ohne Angabe einer Farb-Matrix wird farbe = zwerte angenommen. Die Skalierung der Farbe kann mit caxis (farb~min, farb~max) festgelegt werden. Infos über vordefinierte Farbtabellen sind über help graph3d zu erhalten.
3.5.5
Der Befehl box on erzeugt einen Rahmen (Box) um die 3D-Grafik. Weitergehende Einstellmöglichkeiten für Perspektive und Beleuchtung bietet ,das FigureMenü View/Camera Toolbar und die Befehlsübersicht mit help graph3d .
Grafik: 3D Plot-Befehle
10 5
o 1
o -1
Abb. 3.7: DTeidimensionaler Plot
Zur Darstellung zweidimensionaler Funktionen als Flächen im Raum dient der Befehl surf (xwerte, ywerte, zwerte ... [, farbe]). Sind xwerte, ywerte und zwerte Matrizen gleicher Zeilen- und Spaltenzahl, werden die beschriebenen Punkte geplottet und die dazwischen liegenden Flächen ausgefüllt. Liegen alle Punkte in einem gleichmäßigen Raster bezüglich der x- und y-Achse, können xwerte und ywerte auch Vektoren sein. In diesem Fall werden die Einträge von xwerte auf die Spalten und ywerte auf die Zeilen der Matrix zwerte bezogen. Die Befehle mesh und waterfall besitzen dieselbe Syntax wie surf, erzeugen aber ein Gitter ohne ausgefüllte Flächen bzw. ein Wasserfall-Diagramm. Dagegen erzeugt contour einen Plot der "Höhenlinien" (Linien gleicher zwerte). Optional kann eine weitere Matrix farbe zur Festlegung der Farbe angegeben werden. Jedes Element von farbe entspricht einem Element von zwerte. Die Farb-Werte werden als Indizes für eine Farbtabelle verwendet, die über colormap (name) geändert werden kann. Der größte und kleinste Eintrag von farbe wird automatisch auf den größten bzw.
Perspektive
Die Perspektive von 3D-Plots kann mit view (horizontal, vertikal) durch Vorgabe des horizontalen und vertikalen Winkels (in Grad) verändert werden. Standard ist (-37.5°,30°). Verschiedene Möglichkeiten sind in Abb. 3.8 zu sehen. Die Perspektive kann auch interaktiv durch Ziehen mit der Maus verändert werden, nachdem der Befehl rotate3d on eingegeben oder der Button ,~. im Figure-Fenster aktiviert wurde. Für große Grafiken sollte man dabei über das Kontextmenü die Option Rotate Options/Plot Box Rotaie wählen, damit die Grafik nicht während des Drehens neu gezeichnet wird.
» phi = (0:100) / 100 * 2*pi; » plot3 (-sin (2*phi), cos (3*phi), 1.5*phi, 'k.-') » grid on
-1
49
[X, YJ = meshgrid (xvektor, yvektor)
Koordinatenmatrizen
plot3 (xwerte, ywerte, zwerte . .. [, plotstil]) surf (xwerte, ywerte, zwerte . .. [, farbe]) mesh (xwerte, yweTte, zwer·te . .. [, farbe]) waterfall (xweTie, ywerte, zwerte ... [... ]) contour (xweTte, ywer·te, zweTte . .. [... ])
3D-Plot, 3D-Plot, 3D-Plot, 3D-Plot, 2D-Plot,
box [on I off] rotate3d [on I off] view (horizontal, veTtikal) zlabel (string)
Box einblenden Interaktives Drehen Perspektive ändern Beschriftung der z-Achse
Punkte/Linien Fläche Gitter Wasserfall Höhenlinien
Farben einstellen colormap (name) caxis (farb~min,
farb~max)
Wahl der Farbtabelle Skalierung der Farbe
Beispiel Im folgenden Beispiel erzeugt der Befehl meshgrid zunächst aus den Vektoren x und y die Matrizen X und Y, deren Zeilen bzw. Spalten den Vektoren x bzw. yentsprechen. Daraus berechnet sich dann die Matrix Z: x =
y
0:0.05:2; -1:0.2:1;
[X, Y] Z
meshgrid (x, y); %Erzeugt Matrizen über Bereich von x, y (Y+l) .* cos (2*X.-2) + (Y-1) .* sin (2*X.-2) / 5;
I I,
1
3 Eingabe und Ausgabe in MATLAB
50
Die so erhaltenen Daten werden nun mittels verschiedener Befehle und Einstellungen geplottet (siehe Abb. 3.8):
3.5.6
51
Importieren, Exportieren und Drucken von Grafiken
Zum Einlesen von Pixel-Grafiken bietet MATLAB den Befehl imread an. Mit variable = imread ( , dalei' , ' format') wird eine Grafik-Datei mit dem angegebenen Format 7) als Variable eingelesen, wobei variable bei Graustufen-Bildern eine zweidimensionale Matrix, bei Farbbildern ein dreidimensionales Array ist.
figure subplot (221) surf (X, Y, Z) view (-40, 30) title ('surf (X, Y, Z); view (-40, 30)') subplot (222) mesh (X, Y, Z) view (-20, 30) title ('mesh (X, Y, Z); view (-20, 30); grid off; box on') grid off box on subplot (223) waterfall (X, Y, Z) view (-20, 10) title ('waterfall (X, Y, Z); view (-20, 10)') subplot (224) contour (X, Y, Z) ti tle (' contour .(X, Y, Z)')
Der Befehl image (variable) gibt die so eingelesene Grafik in einer Figure aus. So erzeugen die folgenden Befehlszeilen die Figure in Abb. 3.9, die das imjpg-Format vorliegende Bild foto. jpg enthält: »
foto_variable = imread ('foto.jpg', 'jpeg');
» image (foto_variable)
Das Drucken und Exportieren von Grafiken aus MATLAB geschieht über den Befehl print. Mit print -fnummer wird die Figure n1!mmer auf dem Standard-Drucker ausgegeben. Mit print -fnummer -dopUon ' datei' erfolgt die Ausgabe in Dateien verschiedener Grafikf~rmate. 8)
» print
mesh (X, Y, Z); view (-20, 30); grid off; box on
surf (X, Y, Z); view (-40, 30)
3.5 Grafische Darstellung
-fi;
»print -fl -dmeta 'bild'; » print -fl -depsc 'bild';
% Drucken von Figure 1 auf Standard-Drucker %Speichern als Windows-Metafile (bild.emf) % Speichern als Farb-Postscript (bild.eps) ,I
I,
2
o -2
1
2
o
2
-1
0
i' Abb. 3.9: Mit imread und image eingebundene Grafik
waterfall (X, Y, Z); view (-20, 10) 2
MATLAB bietet auch die Speicherung in einem eigenen Figure-Format an; dieses eignet sich insbesondere für spätere Weiterverarbeitung einer Figure in MATLAB. Gespeichert wird entweder über das Figure-Menü FilejSave As oder mit dem Befehl saveas (handle, 'datei' [,' jormat'j).9)
0.5
0
0
-1 -0.5 1
Mögliche Formate: 'bmp', 'ico', 'jpg'j'jpeg', 'pcx', 'tif'j'tiff', siehe auch help imread. Mögliche Formate: bmp, meta (emf), eps, jpeg, pcx, tUf, siehe auch help print. 9) Mögliche Formate: 'fig' (speichert Figure als binäres Fig-File), 'm' (erzeugt ein Fig-File und ein M-File, das das Fig-File aufruft). Des Weiteren sind auch Formate wie bei print zulässig. 7)
-2
0
8)
"".J.
-1
0
0.5
1.5
2
-1
0
0.5
1.5
2
Abb. 3.8: Beispiel: Verschiedene Darstellungen dreidimensionaler Daten ",
3 Eingabe und Ausgabe in MATLAB
52
Grafik: Importieren, Exportieren und Drucken print -fn-urnmeT' print -fnummeT' -dformat 'datei'
Figure auf Standarddrucker drucken Figure in Datei speichern
saveas (handle, , d{l,tei', 'f ig')
Figure als MATLAB-Figure speichern
var'iabl e = imre ad ( , datei' , , format' ) image (variable)
3.6
Pixel-Grafik in Matrix einlesen Pixel-Grafik in Figure plotten
Grafische Benutzeroberfläche (GUr)
Zur komfortablen Bedienung eigener Programme lassen sich in MATLAB grafische Benutzerschnittstellen, so genannte GUIs IO ) erstellen. GUIs sind interaktive Figures in Form einer Dialogbox, die auch Text- und Grafikausgabe enthalten können. Als Beispiel dient die Erstellung eines Datums-Rechners zur Bestimmung des Wochentags für ein beliebiges Datum (siehe Abb. 3.10).
Abb. 3.10: Be,spiel: Datums-Rechner als fertiges CU!
Zur Erstellung eines GUI müssen Layout und Funktionalität festgelegt werden. Für das Layout existiert ein grafischer Editor; die Funktionalität wird anschließend in ein automatisch vorgefertigtes Application-M-File eingefügt. Eine manuelle Erstellung des Layouts ist umständlich und daher nicht zu empfehlen.!l) Weiterführende Fragen beantworten wie immer die MATLAB-Hilfe (z.B. help uitools) und die Handbücher. [38J
3.6.1
3.6 Grafische Benutzeroberfläche (GUI)
Funktionsaufrufe (z.B. bei Anklicken einer Schaltfläche) verändert werden und eignen sich somit auch zur Ausgabe, insbesondere Edit Text- und Statie Text-Objekte. GUr-Objekte Push Button
Schaltfläche, die beim Anklicken eine Funktion ausführt
Toggle Button Radio Button Cheek Box Listbox Pop-up Menu
Auswahlfeld in Form einer Schaltfläche Auswahlfeld rund Auswahlfeld eckig Auswahlliste (auch mehrere Elemente gleichzeitig) Auswahlliste (immer genau ein Element)
Edit Text Statie Text Slider
Editierbares Textfeld zur Ein- und Ausgabe (auch mehrzeilig) Statisches Textfeld (auch mehrzeilig) Schieberegler
Panel Button Group
Gefülltes. Rechteck zur grafischen Gestaltung des GUr Wie Panel, unterstützt Exklusiv-Auswahl, siehe GUIDE-Beispiel
Axes
Ausgabebereich für Grafik (2D- und 3D-Plots)
Das Objekt Panel gruppiert alle Objekte, die in diesem Bereich erstellt oder dorthin verschoben werden. Button Group stellt zudem die Verwaltung mehrerer (exklusiver) Auswahlfelder zur Verfügung, indem immer nur eines ausgewählt werden kann. Eine Hierarchie sämtlicher Objekte einschließlich der GUI-Figure als oberste Stufe zeigt der Objeet BT'Owser, der über das GUIDE-Menü View/ObJect Browser oder den Button :~~. aufgerufen wird (Abb. 3.12).
GUr-Layout
Zur Erstellung und Bearbeitung eines GUI-Layouts bietet MATLAB den GUIDE-Editor an, siehe Abb. 3.11. Beim Aufrufen über das MATLAB-Menü File/New/GUI oder mit dem Befehl guide erscheint zunächst eine Start-Auswahl. Neben einer leeren GUIFigure können auch verschiedene Beispiele damit erzeugt werden. Neue Objekte innerhalb der GUI-Figure werden durch Anklicken eines Typs und Platzieren mit der Maus erzeugt. Die Größe kann ebenfalls nach Anklicken eines Objekts mit der Maus verändert werden. Vorteilhaft wird im Menü Tools/Grid and Rulers die Grid Size auf 10 Pixel gesetzt. Bereits vorhandene Objekte können durch Ziehen mit der rechten Maustaste oder über das GUIDE-Menü EditjDuplicate dupliziert werden. Falls sich Objekte gegenseitig verdecken, kann die Reihenfolge im GUIDE-Menü Layout geändert werden. Alle Objekte können vorbelegt und beim Ausführen des GUI durch 10)
53
Graphical User Interface
11) Die Datei datumsrechner_rnanuell.m zeigt eine kompakte manuelle Programmierung.
",·,ü~i'f ul()QntrQI (Woch,"rltag "Slalic Text')
. lliJuioonlrGI(BeJ€chnen"Woehentagbereohnenn)
Abb. 3.11: CUIDE-Editor mit Beispiel
Abb. 3.12: GU!-Object-BrowseT'
Die Eigenschaften der Objekte können mit dem Property Inspector editiert werden, der durch Doppelklick auf ein Objekt im GUIDE oder im Object Browser, über das Menü View/Property Inspeetor oder mit dem Button[l§ aufgerufen wird (Abb. 3.13). Viele Eigenschaften lassen sich direkt im Property Inspector durch Anklicken der Einträge in der rechten Spalte ändern. Für umfangreichere Eigenschaften (z.B. Baekground-
3 Eingabe und Ausgabe in MATLAB
54
Color, String) wird zusätzlich ein Button angezeigt, der beim Anklicken ein passendes Dialogfenster öffnet. So werden die Monatsnamen im Popup-Menü als Eigenschaft String mit dem String-Editor (Abb. 3.14) eingegeben. Je nach Objekt-Typ können nicht benötigte Eigenschafts-Felder leer oder mit Default-Werten belegt bleiben, insbesondere wenn sie beim Start des GUI initialisiert werden (siehe Beispiel Seite 57). !Januar Februar März APril
Mai !JUni
I,Juli
,I.:-, Toollip8trln~, ~-
uI9oryte.xtMenu:
··.UQits
--'ÜsefData -.-,y~!~e." .. Visible,
.:,.''[~) «None:.
@ ~haraGters
l!!lll
, l!ill11.01
.. "80n
Abb. 3.1.'1: GUI-Property-Inspector
Abb. 3.14: GUI-String-Editor
Im Folgenden werden die wichtigsten Objekt-Eigenschaften erläutert. Einige davon (wie ... Color, Font ... ) sind selbsterklärend und werden daher nicht näher beschrieben:
Callback enthält den Funktionsaufruf, der bei jeder Aktivierung des Objekts durch Anklicken oder Eingabe ausgeführt wird. Der automatisch generierte Funktionsname leitet sich aus der Eigenschaft Tag ab. Eine entsprechende (leere) Funktion zu jedem Objekt wird auch im Application-M-File automatisch erzeugt. Enable legt fest, ob ein Objekt vom Anwender aktiviert oder verändert werden kann (on). Im Gegensatz zu inactive verändert sich bei off die Objekt-Farbe zu grau. M'in, Max legen den Wertebereich eines Sliders fest. Gilt Max - Min > 1, erlauben Edit Text- und Listbox-Objekte die Eingabe mehrzeiliger Texte bzw. die gleichzeitige Auswahl mehrerer Elemente. Position besteht aus dem Vektor [links unten Breite Höhe], der durch GUIDE automatisch gesetzt wird und Lage12 ) sowie Größe des Objekts bestimmt. Mithilfe des Werkzeugs Align O~ject können Objekte komfortabel ausgerichtet werden. Der Aufruf erfolgt über das GUIDE-Menü ToolsjAlign Objects oder den Button '0$.. Siehe auch Units. String kann einen (einzeiligen) Text zur Beschriftung einer Schaltfläche oder eines Auswahlfelds enthalten. Mehrzeilige Texte sind bei Textfeldern und Auswahllisten möglich. Bei Letzteren entspricht jede Zeile einem Element der Auswahlliste. Der Text wird stets ohne Anführungszeichen eingegeben. Style legt den Typ des Objekts fest und wird von GUIDE automatisch vergeben; siehe Liste der GUI-Objekte (außer Axes) auf Seite 53. 12)
Linke untere Ecke des Objekts bezogen auf linke untere Ecke des GUI-Fensters.
3.6 Grafische Benutzeroberfläche (GUI)
55
Tag enthält den (eindeutigen) Namen des Objekts. 13 ) Dieser wird auch für den Namen der zugehörigen Callback-Funktion im automatisch erzeugten Appl-ication-M-File verwendet. Der Übersichtlichkeit halber sollten die Default-Namen bereits vor dem ersten Speichern des GUI durch sinnvolle Bezeichnungen ersetzt werden. Bei jeder späteren Änderung sollte man prüfen, ob MATLAB beim erneuten Speichern des GUI die Funktionsnamen im Application-M-File auch richtig angepasst hat. TooltipString kann einen (einzeiligen) Text enthalten, der angezeigt wird, sobald sich der Mauszeiger für einige Zeit über dem Objekt befindet. Der Text wird ebenfalls ohne Anführungszeichen eingegeben. Units legt die Einheit für die Eigenschaft Position fest. Die Default-Einstellung characters skaliert Objekte entsprechend der Schriftgröße und ermöglicht so ein gleichbleibendes Aussehen des GUI auf unterschiedlichen Rechnern. Die Einstellung normalized erwartet Werte im Bereich 0 ... 1, die sich auf die aktuelle Breite und Höhe der GUI-Figure beziehen; dies eignet sich besonders für GUI-Figures mit veränderlicher Größe (siehe Resize unter Figure-Eigenschaften) . Value enthält den aktuellen Wert eines Sl-iders bzw. gibt an, ob ein Auswahlfeld aktiviert ist (1) oder nicht (0). Für eine exklusive Auswahl (d.h. immer nur eine Möglichkeit) kann ein Pop-up Menu verwendet werden; bei den übrigen Auswahlfeldern muss dies durch einen F\mktionsaufruf sichergestellt werden, der die verbleibenden Auswahlfelder auf 0 setzt. 14) Alternativ wird dies auch von der Button Group unterstützt (für Details siehe zugehörige MATLAB-Hilfe bzw, -Beispiele). Bei Auswahllisten enthält Value den Index des gewählten Listeneintrags (durchnummeriert mit 1,2, ... ).1 5 ) Visible bestimmt, ob ein Objekt sichtbar ist oder ausgeblendet wird. Damit kann das GUI-Layout zur Laufzeit verändert werden. Die wichtigsten Figure-Eigenschaften für GUIs werden im Folgenden erläutert; auch hier wird auf offensichtliche Eigenschaften nicht weiter eingegangen. Zum Editieren muss der Property Inspektor durch Doppelklick auf den GUI-Hintergrund im GUIDE oder auf die GUI-Figure im Object Browser geöffnet werden.
FileName wird beim Speichern des GUI verwendet und sollte daher hier nicht geändert werden (besser über das GUIDE-Menü FilejSave As). Name enthält den Text, der in der Titelzeile des GUI-Fensters angezeigt wird. Position bestimmt Lage 16) und Größe der GUI-Figure beim Öffnen. Diese Werte werden durch GUIDE automatisch gesetzt. Resize ermöglicht oder verhindert, dass der Anwender die Größe der GUI-Figure per Maus ändert (siehe auch Units unter Objekt-Eigenschaften). 13) 14) 15) 16)
Tag in kursiver SchTijt ist der Bezeichner des Objekts - nicht zu verwechseln mit "Tag" a.ls Datum. Siehe auch beigelegte CD-ROM, Beispiel reglerkonfigurator .rn. Bei Listbox enthält Value die Indizes aller gewählten Elemente als Vektor. Linke untere Ecke der GUI-Figure bezogen auf linke untere Bildschirmecke.
3 Eingabe und Ausgabe in MATLAB
56
3.6 Grafische Benutzeroberfläche (GUI)
57
Tag wird nur benötigt, falls der Anwender auf die GUI-Figure mittels Handle zugreifen möchte (z.B. von einem anderen GUI aus) oder für printdlg (siehe unten). Das Handle des GUI erhält man dann mit handles. Tag Name oder mit handle = findobj ('Tag', TagName).
entweder als global definiert werden (dies muss allerdings in jeder darauf zugreifenden Funktion wiederholt werden!) oder über die vorgegebene Struktur handles. Letztere wird an jede lokale Funktion übergeben und ist somit dort sichtbar. Die Definition erfolgt zu Beginn der folgenden Funktion im Application-M-File:
Units legt die Einheit für die Position der GUI-Figure fest. Auch hier empfiehlt sich die Default-Einstellung characters für ein rechnerunabhängiges Aussehen des GUr. Die Einstellung normalized bezieht sich hier auf Breite und Höhe des Bildschirms.
function datumsrechner_OpeningFcn(hObject, eventdata, handles, varargin)
Die Einstellungen zum Speichern des GUI im GUIDE-Menü Tools/GU! Options können übernommen werden. Damit werden beim Speichern jeweils zwei Dateien erzeugt (bzw. ergänzt): ein Fig-File mit dem Layout der GUI-Figure sowie ein ApplicationM-File, das die GUI-Figure aufruft und in dem schon bestimmte Funktionen vordefiniert sind. Im gewählten Beispiel werden die Dateien datums rechner. fig und datumsrechner . m erzeugt.
3.6.2
GVI-Funktionalität
Die eigentliche Funktionalität eines GUI verbirgt sich in den Callback-Funktionen. Bei jedem Aufruf eines Objekts (d.h. Anklieken oder Eingabe) werden so genannte Callbacks ausgeführt. Diese rufen stets das automatisch generierte Application-M-File auf und übergeben den Namen der gewünschten Callback-Funktion als Parameter. So erfolgt z.B. beim Anklieken des Push Buttons (Tag = Berechnen) im Datums-Rechner der folgende Funktionsaufruf: datumsrechner('Berechnen_Callback',gcbo, [] ,guidata(gcbo) )
Damit ruft das Application-M-File seinerseits die gewünschte lokale Callback-Funktion Berechnen_Callback auf, die im Application-M-File wie folgt vordefiniert ist: function Berechnen_Callback(hObject, eventdata, handles)
Der Inhalt der Funktion muss durch den Anwender programmiert werden. Im vorliegenden Beispiel werden die folgenden Zeilen eingefügt. TagNr Monat Jahr
str2num (get (handles.TagNr, 'String'»; get (handles.Monat, 'Value'); str2num (get (handles.Jahr, 'String'»;
Wochentag ~ weekday (datenum (Jahr, Monat, TagNr»; set (handles.Wochentag, 'String' , handles.TageListe (Wochentag»;
Beim Aufruf dieser Callback-Funktion werden zunächst TagNr, Monat und Jahr mit get ausgelesen. TagNr und Jahr liegen als String vor und müssen daher noch mit str2num in Zahlen umgewandelt werden; bei Monat entspricht das Feld Value dem gewählten Listenelement (Januar = 1, etc.) und muss nicht konvertiert werden. Schließlich wird mit den MATLAB-Befehlen datenum und weekday der Wochentag berechnet (Sonntag = 1, etc.) und der entsprechende Eintrag des Arrays TageListe ausgegeben. TageListe wird am besten während der Initialisierung des GUI definiert. Um aus unterschiedlichen lokalen Funktionen auf diese Variable zugreifen zu können, kann diese
Hier kann der Anwender eigene Deklarationen und Initialisierungs-Befehle programmieren. Im vorliegenden Beispiel werden die folgenden Zeilen eingefügt: handles.TageListe
{'Sonntag.', 'Montag.', 'Dienstag.', 'Mittwoch.', 'Donnerstag.', 'Freitag.', 'Samstag.'};
[Jahr, Monat, TagNrJ Wochentag
datevec (now); weekday (now);
set set set set
(handles.TagNr, 'String', num2str (TagNr»; (handles.Monat, 'Value', Monat); (handles.Jahr, 'String', num2str (Jahr»; (handles.Wochentag, 'String', handles.TageListe (Wochentag»;
Damit wird beim Start des GUI die Struktur handles um das Cell Array TageListe erweitert. Anschließend wird das aktuelle Datum abgefragt und das GUr mit diesen Werten vorbelegt; dazu müssen TagNr und Jahr wieder in Strings umgewandelt werden. Der (automatisch erzeugte) Befehl guidata(hObject, handles) im Application-MFile (siehe Seite 59) schließt die Initialisierung ab; er wird benötigt, um die erweiterte Struktur handles zu speichern. Für die Erstellung von Menüs und Kontextmenüs steht ein eigener Editor zur Verfügung (Aufruf über GUIDE-Menü Tools/Menu Editor oder den Button ~); für jeden Menüeintrag wird im Application-M-File die zugehörige Funktion vordefiniert. Zudem können vordefinierte Dialogboxen vom GUI aus aufgerufen werden. Beispiele finden sich in der Start-Auswahl des GUIDE-Editors (siehe auch help uitools). Das GUIDE-Menü Tools/Tab Order Editor erlaubt, die R.eihenfolge der Eingabefelder eines GUI für das Durchsteppen mit der Tabulator-Taste festzulegen.
3.6.3
GVI ausführen und exportieren
Ausgeführt wird das fertige GUI durch Eingabe des Namens des Application-M-Files im MATLAB-Command-Window oder mit dem Kontextmenü Run im Current Directory Browser. Mit dem GUIDE-Menü Tools/Run oder dem Button I~ kann das GUI auch direkt aus dem GUIDE-Editor heraus gestartet werden (dabei werden Änderungen am GUI gespeichert). Das fertige GUr des Datums-Rechners zeigt Abb. 3.10. Mit dem GUIDE-Menü File/Export wird ein bereits gespeichertes GUr bei Bedarf (z.B. zur Erzeugung eines P-Files) zu einem einzigen Export-M-File zusammengefasst. Dies kann die getrennte Speicherung von Fig-File und Application-M-File jedoch nicht ersetzen, da das Export-M-File nicht mehr mittels GUIDE grafisch editiert werden kann.
58
3 Eingabe und Ausgabe in MATLAB
GU!: Vordefinierte Dialogboxen
'ce II array = inputdlg (text, titel) msgbox (text, titel [, iconj) string = questdlg (text, titel, button, ... defaulO dateiname = uigetfile (filter, titel) dateiname = uiputfile (filter, titel) handle = . wai tbar (x, [handle, 1titel) printdlg (handle)
Datei öffnen Datei speichern Fortschri ttsbalken Drucken
Umwandlung Umwandlung Formatierten Formatierten
Zahl in String String in Zahl String erzeugen String lesen
funetion datumsrechner_OpeningFcn(hObject, eventdata, handles, varargin)
% EINGEFÜGT: Definiert Liste der Wochentage als Variable in der Struktur %
"handles". Setzt alle Werte beim ersten Aufruf auf aktuelles Datum.
handles.TageListe
Aufbau des Application-M-File
Für Interessierte wird im Folgenden der Aufbau des automatisch erzeugten ApplicationM-Files näher erläutert. Dazu wird der MATLAB-Code des Datums-Rechners auszugsweise ( ... ) wiedergegeben und kommentiert. Das Application-M-File wird sowohl beim Starten des GUI als auch bei Callbacks durch MATLAB aufgerufen. Zu Beginn des Application-M-Files wird daher anhand der übergebenen Parameter eine Verzweigung in verschiedene Aktionen durchgeführt: Beim Aufrufen des Application-M-Files ohne Parameter wird das GUI gestartet; wird der Name einer Callback-Funktion als Parameter übergeben, wird diese von hier aufgerufen. function varargout
=
datumsreehner(varargin)
% DATUMSRECHNER M-file for datumsrechner.fig % DATUMSRECHNER, by itself, creates a new DATUMSRECHNER ( ... ) % % % (
... )
DATUMSRECHNER('CALLBACK',hObject,eventData,handles, ... ) calls the loeal function named CALLBACK in DATUMSRECHNER.M with the given input arguments.
%Begin initialization code - DO NOT EDIT (
... )
% End initialization code - DO NOT EDIT Der nächste Abschnitt dient im Wesentlichen der Initialisierung des GUI. Innerhalb der Funktion datumsrechnerJJpeningFcn können Initialisierungs-Befehle eingefügt werden, die die Eigenschaften der GUI-Figure überschreiben. Soll die Struktur handles erweitert werden, muss dies vor dem Befehl guidata erfolgen. Schließlich können mit der Funktion datumsrechnerJJutputFcn auch Parameter zur aufrufenden .Funktion (bzw. zum Command-Window) zurückgegeben werden.
{'Sonntag.', 'Montag.', 'Dienstag.', 'Mittwoch.', 'Donnerstag.', IFreitag.', 'Samstag.'};
[Jahr, Monat, TagNr] datevec (now); Wochentag weekday (now); set (handles.TagNr, 'String', num2str (TagNr)); set (handles.Monat, 'Value', Monat); set (handles.Jahr, 'String' , num2str (Jahr)); set (handles.Woehentag, 'String', handles.TageListe (Wochentag));
%EINGEFÜGT ENDE %Choose default command line output for datumsrechner handles.output
3.6.4
59
% --- Executes just before datumsrechner is made visible. Texteingabe Textausgabe Frage
GU!: Nützliche Befehle
string = num2str (variable [, formatp variable = str2num (str'ing) string = sprintf (string, variable) variable = sscanf (string, format)
3.6 Grafische Benutzeroberfläche (GUI)
=
hObject;
%Update handles structure gUidata(hObject, handles);
% --- Outputs from this function are returned to the command line. function varargout = datumsrechner_OutputFcn(hObject, eventdata, handles)
%Get default command line output from handles structure varargout{l}
=
handles.output;
Im nächsten Teil des Application-M-Files sind alle Callback-Funktionen vordefiniert. Für GUI-Objekte (außer Menüs und Axes) existieren je zwei Funktionen: . ...CreateFcn und ... _Callback. Erstere wird nur beim Starten des GUI aufgerufen, Letztere bei jeder Aktivierung des Objekts (durch Anklicken oder Eingabe). Jedesmal, wenn der GUI-Figure neue Objekte hinzugefügt werden, werden hier die zugehörigen Funktion mit dem Namen TagName_CreateFcn und TagName_Callback angehängt, wobei TagName der im Feld Tag stehende Bezeichner des Objekts ist.
% --- Executes during object creation, after setting all properties. function TagNr_CreateFcn(hObject, eventdata, handles) (
... )
function TagNr_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function Monat_CreateFcn(hObject, eventdata, handles) (
... )
%---
Executes on selection change in Monat.
funetion Monat_Callback(hObject, eventdata, handles)
%--- Executes during objeet creation, after setting all properties . function Jahr_CreateFcn(hObject, eventdata, handles)
C. .. ) funetion Jahr_Callback(hObject, eventdata, handles)
60
3 Eingabe und Ausgabe in MATLAB
% --- Executes on button press in Berechnen. function Berechnen_Callback(hObject, eventdata, handles)
%EINGEFÜGT: % TagNr Monat Jahr
Holt aktuelle Werte (ggf. mit Umwandlung String nach Zahl) Berechnet zugehörigen Wochentag und gibt diesen aus. str2num (get (handles.TagNr, 'String')); get (handles.Monat, 'Value'); str2num (get (handles.Jahr, 'String'));
Wochentag weekday (datenum (Jahr, Monat, TagNr)); set (handles.Wochentag, 'String', handles.TageListe (Wochentag));
% EINGEFÜGT ENDE Hier endet das Application-M-File. Im Export-M-File schließt sich hier die Funktion datumsrechneLexport.LayoutFcn mit der Layout-Information des GUI an. Es folgen schließlich noch weitere Funktionen zum Starten des GUI (gekürzt):
I
%---
Creates and returns a handle to the GUI figure. function h1 = datumsrechner_export_LayoutFcn(policy) (.
.. )
3.7
Tipps rund um die MATLAB-Figure
Eine Stärke von MATLAB sind die umfangreichen grafischen Ausgabemöglichkeiten. Der folgende Abschnitt gibt einige Tipps, wie diese noch effizienter eingesetzt werden können. .. Liniendicke und -farbe lassen sich durch Anhängen eines oder mehrerer der folgenden Eigenschaft-Werte-Paare ändern. Standard-Linienstärke ist 0.5. Die Farbe wird als [rot grün blau] mit Wertebereich 0 ... 1 (dunkel... hell) angegeben. Dies ist möglich bei plot, semilogx, semilogy, loglog, stairs und plot3. plot (x,y, '0--', 'LineWidth',3, .,. , Color' , [1.0 0.7 o. OJ ) • Schriftart und -größe lassen sich durch Anhängen eines oder mehrerer der folgenden Eigenschaft-Werte-Paare ändern. Dies gilt für die Befehle text, title, xlabel, ylabel und zlabel. title ('Titeltext', 'FontName', 'Courier' , 'FontSize' , 16, ... 'FontWeight', 'Bold') Bei legend muss dies dagegen wie folgt geschehen: handle = legend ... set (handle, 'FontName', 'Courier') .. Zum Beschriften von Datenpunkten wird der Befehl text sinnvollerweise mit einem Offset in x- und/oder in y-Richtung versehen. Die folgende Zeile beschriftet
61
3.7 Tipps rund um die MATLAB-Figure den Datenpunkt (x, y) mit dem Wert y (zwei Nachkommastellen): text (x + 0.2, Y+ 0.1, num2str (y, ' %3. 2f
'»
.. Die Achsenbeschriftung kann wie im Beispiel auf Seite 47 geändert werden: Die Eigenschaft xtick (analog ytick, ztick) gibt die Position der Beschriftung als Vektor vor. xticklabel ändert die Beschriftung selbst; die zugehörigen Werte können sowohl ein Zahlenvektor als auch ein Cell Array aus Strings sein. set (gca, 'XTick', [123], ... 'XTickLabel' , {, A' , 'B' , 'C'}) .. Ausgefallene Anordnungen von Subplots lassen sich per Drag & Drop mit den Figure-Werkzeugen realisieren; der Aufruf erfolgt mit dem Figure-Button:Ci (siehe Abb. 3.3). Der anschließend über das Menü File/Generate M-File erzeugte Code ist allerdings etwas umständlich. Wer interaktives Arbeiten bevorzugt, kann mit diesen Werkzeugen auch die oben stehenden Formatierungen vornehmen. .. Eine Legende iterativ zusammensetzen ermöglicht analog zum Beispiel auf Seite 38 ein Cell Array legendtext. Jeder Eintrag wird über eine Laufvariable k angefügt (man beachte die geschweiften Klammern {}) und schließlich mit legend ausgegeben: legendtext {k} = ' String' ; % für j eden Eintrag legend (legendtext) .. Ein Mehrzeiliger Text wird bei den Befehlen text, ti tle, xlabel, ylabel und zlabel mit einem Cell Array aus Strings erzeugt. title ({'Zeile 1'; 'Zeile2'}l Ausnahme ist wieder legend; dort sind mehrzeilige Einträge nur mit dem 1\\TgXBefehl \newline innerhalb eines Strings möglich: legend ( , Daten l' , 'Daten 21 \newlineDaten 22') • Ein Textblock in einem leeren Teil des Figure-Fensters kann mit einem Subplot erstellt werden, dessen Achsen unsichtbar geschaltet sind. Soweit nicht mit dem Befehl axis verändert, sind die x- und y-Achse jeweils von 0 ... 1 skaliert; die Position (0, 1) stellt folglich die linke obere Ecke des Subplots dar. Diese Möglichkeit kann auch in GUIs genutzt werden, um dort Sonderzeichen und Formeln auszugeben. subplot (212) set (gca, 'Visible', 'off') text (0.0, 1. 0, {' Zeile l' ; , Zeile 2'}) .. Neben den auf Seite 43 beschriebenen Beschriftungsmöglichkeiten für griechische Buchstaben und einfache Formeln steht auch ein L\\lE;X-Interpreter für Griechische Zeichen, Steuerzeichen sowie anspruchsvolle Formeln zur Verfügung. Dabei muss eine etwas andere Syntax für den Befehl text verwendet werden. text ('Position', [0.50.3], ... , Interpreter' , 'latex', .. , 'String' , ' $$\hat \alpha Test_{ ab} \cdot \frac{a}{b}$$')
62
3 Eingabe und Ausgabe in MATLAB .. Die Größe einer Figure beim Drucken wird über die folgenden Einstellungen verändert. Als Einheiten stehen neben inches (Standard) auch normalized (0 ... 1), eentimeters und points zur Verfügung. set (gef, ' PaperUni ts ' , 'normalized' , ... 'PaperPosition ' , [links unten breite höhe]) .. Das Papierformat kann wie folgt geändert werden. Es besteht die Wahl zwischen portrait (Hochformat ist Standard) und landscape (Querformat). Die Größe des Papiers kann z.B. mit usletter (Standard) sowie AO .. , A5 spezifiziert werden. set (gef, 'PaperOrientation' , 'lands cape , , ... 'PaperType' , 'A4') '" Um Figures auf fortlaufende Seiten zu drucken, bestehen zwei Möglichkeiten: Werden alle Figures in einem einzigen M-File erzeugt, kann über das MATLAB-Menü File/Publish To HTML ein HTML-Dokument mit allen Figures erstellt werden. Weitere Einstellung finden sich im Menü File/Preferences und dann unter der Rubrik Editor/Publishing. Alternativ bietet sich der Befehl print mit der Option -append an - allerdings nur für PostScript-Ausgabe. print -fnummer -dps -append ' PS-Datei'
63
3.8 Übungsaufgaben
3.8
Übungsaufgaben
3.8.1
Harmonisches Mittel
Erweitern Sie die Funktion mittelwerte zur Berechnung der Mittelwerte in Kap. 2.5 um die Berechnung des Harmonischen Mittels:
n
H(x)
1
=
x(l)
1
+ . . 1._ + ... + x(n) x(2)
Erstellen Sie ein MATLAB-Skript, bei dem über einen Eingabedialog eine frei wählbare Anzahl an Datensätzen eingegeben werden kann. Nach jeder Eingabe werden die Mittelwerte mit obiger Funktion berechnet. Wenn keine weitere Eingabe mehr erfolgt (d.h. leere Eingabe), wird die Anzahl der Datensätze ausgegeben und danach spaltenförmig ihre Länge mit den zugehörigen Mittelwerten. Der gesamte Dialog soll z.B. folgendermaßen aussehen: Geben Geben Geben Geben
Sie Sie Sie Sie
einen einen einen einen
Datenvektor Datenvektor Datenvektor Datenvektor
ein: [1 2 3 4 5] ein: 1:10 ein: logspace (0, 2, 100) ein:
Es wurden die Mittelwerte für 3 Datensätze berechnet. Arithmetisch Geometrisch Harmonisch
A= A=
3.00 5.50
Datensatz Datensatz Datensatz
mit 5 Werten: 2 mit 10 Werten: 3 mit 100 Werten:
3.8.2
Einschwingvorgang
A = 21.79
G=
2.61
H =
2.19
G = 10.00
H = H=
3.41 4.59
G = 4.53
In vielen technischen Systemen treten exponentiell abklingende Einschwingvorgänge auf. Diese lassen sich z.B. durch die Skalierung einer Cosinus-Funktion mit einer Exponentialfunktion darstellen (F ist die Frequenz, T die Dämpfungs-Zeitkonstante):
h(t)
=
cos(21fFt) . exp( -t/T)
F = 0.05Hz
T= 50 s
Zeichnen Sie diese Funktion sowie ihre Hüllkurven mit MATLAB, wie sie in Abb. 3.15 dargestellt ist! Beschriften Sie die Achsen, fügen Sie eine Legende ein und markieren Sie die Dämpfungs-Zeitkonstante Tl
3.8.3
Gauß-Glocke
Plotten Sie eine Gauß-Glockenkurve nach Abb. 3.16! Zi
= exp
(-~)
64
3 Eingabe und Ausgabe in MATLAB
Gauß-Glocke
Schwingung - obere Hüllkurve untere Hüllkurve
i ___
0.5
Die in Übung 2.7.3 programmierte Funktion gerade soll nun zur F\mktion geradevek so erweitert werden, dass die Koordinaten xi, yi, x2 und y2 auch vektoriell sein dürfen, also die Geradengleichungen und Werte für jeweils mehrere Punkte Pt, P2 , ••. Pn mit n = length (xi) bestimmt werden können. So enthält der Vektor xi die xl-Koordinaten aller Punkte, x2 die x2-Koordinaten aller Punkte etc .
cD 1::> ::J
.t
a. E «
o
Zusätzlich soll der Aufruf der Fnnktion geradevek ohne Übergabe von Parametern eine Demonstration der Fnnktionalität in Form der folgenden Bildschirmausgabe im Command Window liefern sowie die in Abb. 3.19 gezeigte Figure erzeugen. Zur Ermittlung der Punkte mit Geraden unendlicher Steigung eignet sich der Befehl find.
-0.5
o
Zeitkonstante _1~V---~
o
____
50
~
___
100 Zeit [si
~
4
_ ____
150
Funktion geradevek
3.8.5
Exponentiell abklingende Schwingung
65
3.8 Übungsaufgaben
200
=~;============================================
-4
DEMO geradevek: ===============================================
Abb. 3.15: Einschwingvorgang
Abb. 3.16: Gauß-Glocke
a) [rn,yO] ~ geradevek(1,2,3,1) rn
~
-0.5000
Erzeugen Sie dazu zunächst die Matrizen X und Y der Koordinaten und anschließend eine Matrix Ader Abstandsquadrate, für deren Elemente ai = x; + yf gilt. Testen Sie auch die Befehle mesh sowie pcolor!
3.8.4
Radius:
2.5000 =============================================== b) [rn , yO] ~ geradevek( [1 1], [2 2], [3 2], [1 4])
2.0000
-0.5000 yO
Schreiben Sie ein Skript, das eine sich verjüngende Spirale erzeugt, wie in Abb. 3.17 zu sehen (Laufvariable t 2: 1): 'P = 27ft
~
rn
Spirale und Doppelhelix
Winkel:
yO
1
Höhe:
r=-
t
o
2.5000
=============================================== c) [rn,yO,r,phi] ~ geradevek([O -2],[4 1]) Steigung rn +/- unendlich für Punkt(e) 1 !
m
h=ln(t)
~
~
-0.5000
Inf
Verändern Sie nun das Skript, so dass es eine Doppelhelix erzeugt (siehe Abb. 3.18)! Verwenden Sie dazu den Befehl surf!
yO
~
0
0 r
~
2.2361
4.0000 Spirale
phi
Doppelhelix
90.0000 153.4349 ===============================================
------
2 1.5
0.5
0 -1
0 -1 -1 ~
1
1
Abb. 3.17: Spirale
0
P1=(1,2)
2
0
~ 1
Abb. 3.18: Doppelhelix
-1
1=:4~2,4)
4
4 0.5
o o
.
~P2~(3'1). m ~ -0., 5 YO-2.5 2
4
c) geradevek([O -2],[4 1])
b) geradevek([1 1],[22],[32],[1 4])
a) geradevek(1 ,2,3,1)
4
.~(1'2)
2
o
o
. . . .2~(3,1) m ~ [-0.5 2], yO = [2.5 0] 2
4
Abb. 3.19: Ausgabe der Funktion geradevek zur Online-HilJe
2
o
P - (0 4)
~d'C'
m= [Inl -0.5]. yO ~ [0 0]
-2
o
2
4
Differentialgleichungen in MATLAB
Eine wesentliche Fähigkeit von MATLAB ist die numerische Lösung von Differentialgleichungen. Von dieser Fähigkeit macht auch die grafische Simulationsumgebung Simulink intensiv Gebrauch (Kap. 8). In MATLAB wird unterschieden zwischen gewöhnlichen Differentialgleichungen (ODEs, Ordinary D'ifferential Equations) , differentialalgebraischen Gleichungen (DAEs, Differential Algebmic Equations) , Differentialgleichungen mit Verzögerungen (DDEs, Delay Differential Equations) , impliziten Differentialgleichungen und partiellen Differentialgleichungen (PDEs, Partial Differential Equations). Die in MATLAB enthaltenen numerischen Lösungsalgorithmen entsprechen dem momentanen Stand der Forschung in der numerischen Mathematik und können für eine Vielzahl von Systemen eingesetzt werden, die durch Differentialgleichungen beschreibbar sind. Ausführliche Theorie zu Differentialgleichungen und deren numerischer Lösung findet sich in [2, 11, 21, 32, 35, 36, 46].
4.1
Anfangswertprobleme (ODEs, DAEs und DDEs)
Eine klassische AufgabensteIlung in den Ingenieurwissenschaften ist das Anfangswertproblem. Gegeben ist ein dynamisches System mit eindeutig definierten Anfangszuständen, und man möchte den zeitlichen Verlauf der Zustandsgrößen über einen vorgegebenen Zeitraum berechnen. Bezüglich Struktur und Lösbarkeit kann eine Unterscheidung in gewöhnliche Differentialgleichungen (ODEs), differential-algebraische Gleichungen (DAEs), Differentialgleichungen mit Verzögerungen (DDEs) und impliziten Differentialgleichungen getroffen werden.
4.1.1
Gewöhnliche Differentialgleichungen (0 D Es)
Mathematisch lässt sich eine gewöhnliche Differentialgleichung mit dem Zustandsvektor x, dem Zeitargument t, einer beliebigen vektorwertigen Funktion f und dem Anfangszustand Xo zum Zeitpunkt to als Differentialgleichungssystem erster Ordnung gemäß Gleichung (4.1) darstellen.
*- =
f(t, x)
x(to) = Xo
(4.1)
68
4 Differentialgleichungen in MATLAB
Bei einem System n-ter Ordnung kann (4.1) mit ausgeschrieben werden als:
Xl = fl(t,XI(t),X2(t), ... xn(t))
Xn
=
fn(t, Xl (t), X2 (t), ... Xn(t))
XiQ
Tab. 4.1: Lösungsalgorithmen (Solver) für ODEs und DAEs
Xl (to) = XlO
Xn(to)
x(n) = f (t, X, i, ... ,x(n-l»)
=
(4.2)
XnO
=
X2 X3
Xn-l
=
Xn
Solver
Problembeschreibung
Verfahren
ode45 ode23 ode113 ode15s ode23s ode23t ode23tb ode15i
Nicht steife Differentialgleichungen Nicht steife Differentialgleichungen Nicht steife Differentialgleichungen Steife Differentialgleichungen und DAEs Steife Differentialgleichungen Mäßig steife Differentialgleichungen und DAEs Steife Differentialgleichungen Implizite Differentialgleichungen
Runge-Kutta Runge-Kutta Adams NDFs (BDFs) Rosenbrock Trapez Regel TR-BDF2 BDFs
(4.3)
kann durch die Substitution Xl = X, X2 = i etc. in die geforderte Form (4.1) umgewandelt werden. Die Anfangsbedingungen müssen entsprechend umgerechnet werden. =
69
als Anfangswert von Gleichung i
Oftmals liegt das betrachtete dynamische System nicht als System von n Differentialgleichungen, sondern als Differentialgleichung n-ter Ordnung vor. Dies stellt keine Einschränkung dar, vielmehr kann jede gewöhnliche Differentialgleichung n-ter Ordnung in ein System mit n Differentialgleichungen erster Ordnung umgewandelt werden. Die Differentialgleichung
Xl X2
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
(4.4)
Xn =./ (t, Xl, X2,· . . , Xn ) Zur Lösung von Differentialgleichungen gemäß (4.1) stehen in MATLAB die in Tab. 4.1 zusammengestellten Algorithmen zur Verfügung [40]. Wichtige Grundtypen von Integrationsalgorithmen werden in Kap. 8.7.1 genauer erläutert. Eine Differentialgleichung wird als steif (stiff) bezeichnet, wenn das charakteristische Polynom gleichzeitig sehr kleine und sehr große. Nullstellen besitzt oder wenn Schaltvorgänge berücksichtigt werden müssen.
function dxdt ; xpunkt(t, x) dxdt ; [. .. ; ... ; ... ];
Die Übergabe einer Funktion als Handle ist die in MATLAB bevorzugte Methode zur Übergabe von Funktionen an andere Funktionen. Ein Handle enthält die gesamte Information, die MATLAB zum Ausführen der Funktion mittels feval benötigt. Der Solver ruft die Funktion xpunkt für verschiedene Zeitpunkte t und mit dem jeweils aktuellen Zustandsvektor x auf, wodurch die Ableitungen am aktuellen Lösungspunkt berechnet werden. Das Argument tspan bezeichnet das Zeitintervall der gewünschten Lösung. Ist tspan ein Vektor aus zwei Elementen, so ist das erste Element der Startzeitpunkt und das zweite der Endzeitpunkt der Integration. Soll die Lösung zu fest vorgegebenen Zeitpunkten bestimmt werden, so kann für tspan eine Folge von auf- oder absteigenden Zeitwerten angegeben werden. Die Auswertung im Rückgabeparameter t erfolgt dann genau zu diesen Zeitpunkten. Die interne variable Integrationsschrittweite bzw. die Rechengenauigkeit wird durch tspan nicht beeinflusst. Die Lösungswerte zu den gewünschten Zeitpunkten werden durch Interpolation der von MATLAB intern verwendeten Zeitschritte berechnet. xO ist der Spaltenvektor der Anfangswerte der Lösungstrajektorie.
Bei der Wahl der Integrationsverfahren hat sich folgendes Vorgehen bewährt: Zuerst wählt man eines der drei ersten Verfahren in Tab. 4.1. Erscheint das Ergebnis nicht plausibel, so werden die restlichen Verfahren ausprobiert. Der Solver ode45 ist für sehr viele Systeme geeignet und kann somit immer in einem ersten Versuch verwendet werden. Genauere Angaben zu den zugrunde liegenden Algorithmen, der automatischen Schrittweitensteuerung und Anwendungsempfehlungen können [33, 40] entnommen werden.
Der Rückgabewert t ist ein Spaltenvektor, der die Zeitpunkte aller berechneten Lösungswerte enthält. Die Rückgabematrix x beinhaltet die zu den Zeitpunkten gehörenden Lösungsvektoren, wobei jede Zeile von x der entsprechenden Zeile von t zugeordnet ist.
Der einfachste Aufruf eines Solvers erfolgt durch den Befehl
loesung
[t, x] ; solver(@xpunkt, tspan, xO)
Dabei werden immer die Felder loesung. x, loesung. y und loesung. sol ver generiert. In loesung. x werden die vom Solver gewählten Zeitschritte als Zeilenvektor gespeichert. Das Feld loesung. y enthält die Lösungsvektoren zu den Zeitpunkten 10esung. x als Spaltenvektoren, so dass sich im Allgemeinen eine Matrix für 10esung. y ergibt. Das Feld loesung. sol ver enthält zur Information den Namen des zur Lösung verwendeten Solvers als String (z.B. ode45). Da die Illtegrationsschrittweite vom Solver aufgrund von
wobei solver durch ein Verfahren aus Tab. 4.1 zu ersetzen ist (z.B. ode45). @xpunkt ist das Function Handle der MATLAB-Funktion xpunkt (siehe Kap. 2.5), die als Spaltenvektor die ersten Ableitungen des Differentialgleichungssystems zurückliefert. xpunkt hat für ein System dritter Ordnung die Form:
Beim Aufruf eines Solvers mit nur einem Rückgabewert wird die Lösung in einer Struktur gespeichert. solver(@xpunkt, tspan, xO)
4 Differentialgleichungen in MATLAB
70
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
71
Toleranzen selbst gewählt wird, kann die Anzahl der Schritte nie genau vorherbestimmt werden. Wenn hingegen die Auswertung der Lösung einer Differentialgleichung zu genau festgelegten Zeitpunkten benötigt wird, kann dies durch das Kommando deval erfolgen. Dazu muss die Lösung in einer Struktur gespeichert worden sein. Aufgrund von zusätzlichen Informationen im Feld idata werden evtl. benötigte Zwischenwerte interpoliert. Dies ist ähnlich wie die Angabe eines Zeitpunkte-Vektors tspan im Solver, nur dass hier die gesamte Lösung in einer Struktur gespeichert wird und später zu unterschiedlichen Zeitpunkten ausgewertet werden kann. Der Aufruf von devallautet: [x, xp]
deval(loesung, tint, idx)
Der Zeilenvektor tint enthält die gewünschten Auswertezeitpunkte, und der Vektor idx gibt die Indizes der Elemente der Lösungstrajektorie an, die in den Lösungsvektor x übernommen werden sollen. Die Angabe von idx im Aufruf von deval kann auch entfallen, was dazu führt, dass alle Elemente der Lösung nach x übernommen werden. Die Spalten von x stellen die Lösung der Differentialgleichung zu den Zeitpunkten tint dar, die Spalten von xp stellen die erste Ableitung der polynomialen Interpolation der Lösung dar. Der Rückgabewert xp kann auch entfallen. Um eine bereits berechnete Lösung eines Anfangswertproblems auf ein längeres Intervall auszudehnen, kann der Befehl odextend genutzt werden. Dabei wird der Endwert des ursprünglichen Lösungsintervalls als Anfangswert für die weitere Integration der Lösung verwendet. Der Aufruf lautet: loesung_ext
Angetriebenes Pendel: Die numerischen Lösungsalgorithmen für Differentialgleichungen werden nun an einem einfachen Beispiel demonstriert. Abb. 4.1 zeigt ein idealisiertes Pendel. Am Ende eines masselosen Seils befindet sich die Punktrnasse m, die Bewegungen nur in einer Ebene ausführen kann. Auf die Masse wirkt die Beschleunigungskraft FB aufgrund der Gravitation, die Reibkraft FReib und die von außen aufgebrachte Antriebskraft FA (t). Die Reibkraft nimmt Werte zwischen -FR für positive Winkelgeschwindigkeiten und +FR für negative Winkelgeschwindigkeiten
FReib
2 = - - . FR' arctan(lO
1r
a = -cl· tj3
Abb. 4.1: Angetriebenes Pendel
ergibt die Differentialgleichung des reibungsbehafteten Pendels.
Substituiert man Xl = cp und chungssystem erster Ordnung:
::h
odextend(loesung, @xpunkt, tend, xO_ext)
FB = m·g·sincp
\\
cp.. = - g - .. sm cp - - FR . -2 . arctan (10') cp -FA(t) -I m·l 1r m·l
odextend(loesung, @xpunkt, tend)
Die Einstellungen für Solver und Optionen werden der Struktur loesung entnommen. Für die Fortsetzung der Integration können auch andere Anfangswerte X03xt benutzt werden. Die Integration erfolgt dann mit den AnfangswertenxO_ext. Der Aufruflautet: loesung_ext
\\\\~"IG
.
X2
=
X2
(4.8)
=
(4.9)
X2
g. I
FR
2 1r
FA(t)
= -_. smXI - - - . -. arctan(lOx2) - - -
m·l
m·l
Mittels des Solvers ode45 soll die Lösung dieser Differentialgleichung für die Anregung FA(t) = 30· sin(21r . 0.1 . t) und die Anfangswerte cpo = 0.26 (~15°) und
% xpunkt_pendel.m function xpunkt
=
xpunkt_pendel(t,x)
(4.5)
%Geometrie, Masse, Reibung
(4.6)
%Antriebskraft
I = 5; m = 30; g = 9.81; Fr = 4;
(4.7)
Hierbei ist a der Betrag der Beschleunigung entlang der Kreistangente, tj3 ist die Winkelbeschleunigung und gdie Erdbeschleunigung. Das Kräftegleichgewicht am Massepunkt
Fa = 30*sin(2*pi*O.1*t); %Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(l)) - Fr*2/pi*atan(10*x(2))/m/l - Fa/m/l]; In den folgenden Programmzeilen werden zuerst die Anfangswerte und die Integrationsdauer gesetzt, anschließend die Integration mittels ode45 durchgeführt und schließlich
4 Differentialgleichungen in MATLAB
72
73
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs) Pendelbewegung
das Ergebnis in einer Grafik dargestellt. Dazu wird die Lösung zu 200 äquidistanten Zeitpunkten zwischen 0 und 40 sausgewertet. % dgl_pendel. m % Anfangswerte, Zeitspanne xO = [15/360*2*pi; 0]; tspan = [0 40] ; % Integration der DGL loesung = ode45(@xpunkt_pendel, tspan, xO); % grafische Ausgabe von phi und phi punkt tint = linspace(tspan(l), tspan(2), 200); x = deval(loesung, tint); subplot (211) plot(tint,x(1,:),tint,x(2,:»
Abb. 4.2: Lösungsverlauj des angetriebenen Pendels
Die 'Funktion xpunkt_pendel wird an ode45 nicht als String, sondern als Function Handle (@xpunkt_pendel, siehe Kap. 2.5) übergeben.!) Die Parameter /, m und FR können auch erst beim Aufruf von ode45 an xpunkt_pendel übergeben werden. Die Funktion xpunkt_pendel muss dann folgendermaßen abgeändert werden:
tionen definierten Funktionen als zusätzliche Argumente übergeben. Mit der Struktur options kann das Verhalten der Solver gesteuert werden. Eine Struktur mit Standardvorbelegungen wird durch das Kommando odeset erzeugt.
% xpunkt_pende12.m
» odeset
function xpunkt = xpunkt_pende12(t,x,1,m,Fr) g = 9.81;
% Antriebskraft Fa = 30*sin(2*pi*0.1*t); %Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(l»
- Fr*2/pi*atan(10*x(2»/m/l - Fa/m/l];
Der Aufruf von ode45 lautet dann:
% dgl_pende12.m
%Anfangswerte, Zeitspanne xO = [15/360*2*pi; 0]; tspan = [0 40]; %Geometrie, Masse, Reibung 1 = 5; m = 30; Fr = 4; % Integration der DGL loesung = ode45(@xpunkt_pende12, tspan, xO, [], 1, m, Fr); Die Parameter 1, m und Fr werden von ode45 an die Funktion der Ableitungen (xpunkt_pende1) weitergereicht. Der Platzhalter [) ist für Optionen reserviert, die im Anschluss an dieses Beispiel besprochen werden. Der Lösungsverlauf über eine Zeitspanne von 40 s ist in Abb. 4.2 dargestellt. Unter Berücksichtigung von Optionseinstellungen lauten die allgemeinen Aufrufe der verschiedenen Solver: [t, x] = solver(@xpunkt, tspan, xO, options, pl, p2, ... ); loesung = solver(@xpunkt, tspan, xO, options, pl, p2, ... ); Die Parameter pi, p2, ... werden an die Funktion xpunkt und an alle evtl. in den Op1)
Eine weitere Alternative sind Inline-Objekte, siehe Kap. 7.1.
10
AbsTol: RelTol: NormControl: OutputFcn: OutputSel: Refine: Stats: InitialStep: MaxStep: BDF: MaxOrder: Jacobian: JPattern: Vectorized: Mass: MStateDependence: MvPattern: MassSingular: InitialSlope: Events:
15
20 Zeit[s)
25
30
35
40
[positive scalar or vector {le-6} ] [positive scalar {le-3} ] [ on I {off} ] [function] [vector of integers [positive integer 1 [on I {off} ] [positive scalar [positive scalar [on I {off} ] [1 I 2 I 3 I 4 I {5} ] [matrix I function ] [sparse matrix ] [on I {off} ] [matrix I function [none I {weak} I strong [sparse matrix ] [yes I no I {maybe} ] [vector] [function
In eckigen Klammern werden die möglichen Wer;te bzw. in geschweiften Klammern die Standardwerte angezeigt. Eine neue Options-Struktur mit einzelnen veränderten Werten wird durch den Befehl ode set generiert. options
odeset('namel', wertl, 'name2', wert2, ... );
Die Namen stehen für die möglichen Felder der Options-Struktur, denen die gewünschten Werte zugeordnet werden können. Um z.B. das Feld RelTol auf den Wert 10- 6 zu setzen, ist folgendes Kommando nötig: options
odeset('RelTol', 1e-6);
74
Option OutputSeI kann mit einem Vektor belegt werden, der die Indizes derjenigen Zustandsgrößen angibt, die in den Lösungsvektor x bzw. loesung. x übernommen werden. Bei großen Systemen kann dadurch Speicherplatz eingespart werden.
Wenn in einer bestehenden Options-Struktur einzelne Felder abgeändert werden sollen, so geschieht dies durch die folgende MATLAB-Eingabe, wobei alle nicht veränderten Felder ihre vorherigen Werte behalten: options
odeset(options,
Die in der Option OutputFcn angegebene Funktion wird bei jedem Integrationsschritt aufgerufen. Durch Angabe von
'name1', wert 1 , 'name2', wert2, ... );
Die Abfrage einzelner Felder einer Options-Struktur kann entweder mit dem PunktOperator (z.B. options. Rel Tol) oder mit dem speziellen Befehl odeget erfolgen. Wenn das Feld name der Struktur options in die Variable opt gespeichert werden soll, so geschieht dies durch:
I
opt
odeget (options , 'name')
Die Felder einer Options-Struktur lassen sich in Kategorien einteilen, von denen die wichtigsten kurz besprochen werden. Tab. 4.2 zeigt die Einteilung gemäß [40J. Tab. 4.2: ODE-Optionen: Einteilung in Kategorien
Kategorie
Feldnarne
Toleranzen Ausgabe des Solvers Jacobi-Matrix Schrittweite Masse-Matrix und DAEs
RelTol, AbsTol, NormControl OutputFcn, OutputSeI, Refine, Stats Jacobian, JPattern, Vectorized InitialStep, MaxStep Mass, MStateDependence, MvPattern, MassSingular, InitialSlope Events MaxOrder, BDF
Event-Erkennung speziell für ode15s
Einige Optionen sind von ihrem Namen her selbsterklärend: RelTol und Abstol bezeichnen die relative bzw. absolute Toleranz des Integrationsalgorithmus [39]. Mit diesen Optionen wird die Genauigkeit der Lösungstrajektorie gesteuert. InitialStep und MaxStep kennzeichnet die Start- bzw. maximale Integrationsschrittweite. Die Letztere kann unter anderem dafür verwendet werden, dass der Sol ver bei periodischen Lösungen nicht über ganze Perioden hinwegspringt, wenn die maximale Schrittweite auf einen Bruchteil der zu erwartenden Periode eingestellt wird. Mit den Optionen zur Ausgabe des Solvers lässt sich die Anzahl der Ausgabewerte und der Aufruf zusätzlicher F\mktionen bei jedem Integrationsschritt steuern. Die Option Refine kann auf einen beliebigen ganzzahligen Wert größer 1 gesetzt werden. Dadurch erhöht sich die Anzahl der Ausgabewerte (t,x) um diesen Faktor, wobei die zusätzlichen Zwischenwerte nicht durch Integrationsschritte, sondern durch Interpolation aus benachbarten Lösungswerten erzeugt werden. Dies dient meist dazu, den Lösungsverlauf glatter darstellen zu können. Wenn die Option Stats auf on gesetzt wird, werden neben den Rückgabewerten der Solver-Funktion statistische Informationen zur Lösungsberechnung, wie z.B. Anzahl der Funktionsauswertungen, Anzahl fehlgeschlagener Schritte, Anzahl erfolgreicher Schritte etc., geliefert. Diese Information kann für Diagnosezwecke und Rechenzeitabschätzungen wichtige Anhaltspunkte liefern. Die
75
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
4 Differentialgleichungen in MATLAB
options
odeset('OutputFcn', @myoutput);
wird die Funktion my output mit den Argumenten t, x und flag aufgerufen. Die funktion muss dabei folgendermaßen definiert sein:
.I
function status ~ myoutput(t, x, flag) % hier folgen Aktionen der Output-Funktion %und die Rückgabe von status Vor dem Start der Integration wird myoutput mit dem Flag 'ini t' aufgerufen. Dies ermöglicht vor der Integration, Initialisierungen in der Output-F\mktion durchzuführen. Während der Integration wird die Output-Funktion ohne Flag, nur mit zwei Argumenten aufgerufen (myoutput (t, x») und sie führt ihre eigentliche Aufgabe durch. Typische Aufgaben für eine Output-Funktion sind grafische Ausgaben, Abspeichern in Dateien oder zusätzliche Überwachungen. Während der Integration muss der Rückgabewert status der Output-Funktion einen Wert von 0 oder 1 annehmen. Bei einem Status von 1 wird die Integration angehalten. Dies ist ein eleganter Weg, um z.B. über ein GUI (siehe Kap. 3.6) eine Stopp-Schaltfiäche zu implementieren. Nach Beendigung der Integration wird die Output-Funktion einmalig mit dem Flag 'done' aufgerufen. Dies dient zum Löschen von Dateien oder Variablen, zur Durchführung von kompletten Bildschirmausgaben etc. In MATLAB sind bereits vier vorgefertigte Output-Funktionen vorhanden, die direkt verwendet werden können oder als Basis für eigene Funktionen dienen. odeplot liefert eine grafische Ausgabe der Zustandsvariablen über der Zeit, odephas2 und odephas3 generieren zwei- bzw. dreidimensionale Phasenplots und odeprint listet die Lösung im Command Window auf. Die Option OutputSeI ist ein Vektor aus Indizes, der angibt, welche Komponenten des Lösungsvektors an die Output-Funktion übergeben werden sollen. Wenn mittels odeplot nur die zweite und vierte Komponente des Lösungvektors geplottet werden soll, so geschieht dies durch die folgende Optionseinstellung: options
odeset('OutputFcn', @odeplot, 'OutputSel',
[24]);
In einem Beispiel soll die Funktionsweise von odephas2 als Output-Funktion kurz erläutert werden. Es wird die lineare homogene Differentialgleichung zweiter Ordnung aus Gleichung (4.10) mit dem Anfangswert Xo = [1 IV betrachtet.
x = A. X = [-0.1 -20
1 ] ·x -1
(4.10)
Die folgenden MATLAB-Kommandos definieren die Funktion der Ableitungen, wobei die Systemmatrix A vom Solver als Parameter mit übergeben wird.
76
I
4 Differentialgleichungen in MATLAB
77
Für die laufende Berechnung der Jacobi-Matrix dient die F\mktion Fj acobi, wobei die Parameter 1, m und Fr beim Funktionsaufruf übergeben werden.
% odeplot_xpunkt.m function xpunkt = odeplot_xpunkt(t, x, A) xpunkt = A * x;
% Fjacobi.m
In den nachfolgenden Zeilen wird die Differentialgleichung in der Zeitspanne von 0 bis 10 s mittels ode45 gelöst und der Phasenplot in Abb. 4.3 mit der Output-Funktion odephas2 generiert, wobei ode45 mit zwei Rückgabewerten aufgerufen wurde.
I
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
function J = Fjacobi(t, x, 1, m, Fr) %Erdbeschleunigung g = 9.81;
%Jacobi-Matrix J = [0 1; -g/l*cos(x(l»
% odeplot_bsp.m A = [-0.1 1; -20 -1]; xO = [1; 1]; options = odeset('OutputFcn', @odephas2); [t, x] = ode45(@odeplot_xpunkt, [010], xO, options, A);
-Fr*2/pi*10/(1+(10*x(2»-2)/m/l];
Zur Integration wird nun ein Solver für steife Systeme verwendet (ode15s) und die Funktion zur Berechnung der Jacobi-Matrix in der Option Jacobian bekannt gemacht. Zur Berechnung der rechten Seite der Differentialgleichung dient die Funktion xpunkt_pende12 auf Seite 72, die eine Parameterübergabe zulässt.
% dgl_pendel_jacobi.m % Anfangswerte, Zeitspanne xO = [15/360*2*pi; 0]; tspan = [040]; %Geometrie, Masse, Reibung 1 = 5: m = 30; Fr = 4; options = odeset('Jacobian', @Fjacobi); %Integration der DGL [t x] = ode15s(@xpunkt_pende12, tspan, xO, options, 1, m, Fr);
x"
Abb. 4.3: Phasenplot der Differentialgleichung (4.10) erzeugt mit odephas2
Die Solver für steife Differentialgleichungen (ode15s, ode23s, ode23t, ode23tb) arbeiten effizienter, wenn ihnen zusätzliche Informationen über die Jacobi-Matrix der rechten Seite von Gleichung (4.1) zur Verfügung gestellt wird. Die Jacobi-Matrix wird für die numerische Integration der genannten Algorithmen immer benötigt, wird sie jedoch nicht explizit spezifiziert, so wird sie selbst numerisch durch finite Differenzen berechnet, was die Anzahl der Funktionsauswertungen und damit die Rechenzeit erhöht. Die Jacobi-Matrix ist definiert als: f, [)X2 8b . • . 812 ~ ...
[)Xl 8
8f(t, x)
--- =
8x
EJxl
r
..
1
[)X2
..
(4.11)
..
Die Berechnung der Jacobi-Matrix erfolgt in einer Funktion (z.B. function J FjacobiCt, x)), die in der Option Jacobian angegeben wird. options
odeset('Jacobian', @Fjacobi);
Wenn die Jacobi-Matrix konstant ist (z.B. bei linearen Differentialgleichungen), kann in der Option Jacobian auch direkt die konstante Matrix spezifiziert werden. Als Beispiel für die Verwendung der Jacobi-Matrix soll wieder das Pendel aus Gleichung (4.8) dienen, auch wenn es sich tatsächlich nicht um ein steifes System handelt.
Das Ergebnis der Lösungstrajektorie ist natürlich identisch mit der Darstellung in Abb.4.2. Event-Behandlung: In vielen technischen Systemen spielen Schaltvorgänge oder Unstetigkeiten eine wichtige Rolle. Dabei kann es sich um einfache unstetige funktionale Zusammenhänge oder auch um Strukturvariabilitäten dynamischer Systeme handeln. Typische Beispiele sind Haftreibungsvorgänge, Stoßvorgänge oder das Auftrennen und Verbinden von Teilsystemen. Die numerischen Integrationsverfahren dürfen über solche Unstetigkeitsstellen nicht einfach hinwegintegrieren, da sich das numerische Ergebnis im Allgemeinen sehr deutlich von der Realität unterscheiden wird. Die Solver in MATLAB sind zu diesem Zweck mit Mechanismen zur Detektion solcher Unstetigkeiten, so genannter Events, ausgestattet. Die Solver sind in der Lage, während der Integration die Schrittweite so anzupassen, dass Nullstellen einer Funktion exakt mit einem Integrationsschritt getroffen werden. Wenn die Nullstelle erreicht wird, kann die Integration entweder ganz normal fortgesetzt oder angehalten werden. Die Option Events wird benutzt, um die Funktion anzugeben, deren Nullstellen detektiert werden sollen. Die Funktion muss die folgende Form besitzen: function [value, isterminal, direction]
ereignis(t, x, pi, p2, ... )
Die Funktion ereignis wird mit dem aktuellen Zeitpunkt t, dem Zustandsvektor x und evtl. weiteren Parametern p1, p2, ... aufgerufen. Die Rückgabewerte haben die folgende Bedeutung: • va1ue ist ein Vektor, dessen Nulldurchgänge vom Solver überwacht werden. Die Integrationsschrittweite wird so variiert, dass die Nulldurchgänge exakt getroffen
78
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
4 Differentialgleichungen in MATLAB
der Anfangswert der Winkelgeschwindigkeit auf die negative Aufprallgeschwindigkeit gesetzt wird. Bis zum nächsten Stoß gilt wieder Gleichung (4.12). Dies wird so lange fortgesetzt, bis die Endzeit der Integration erreicht ist. Die zu detektierenden Ereignisse sind demnach die mit negativer Steigung erfolgenden Nulldurchgänge von 'P. Die einzelnen Abschnitte der Integration werden am Ende zu einer Gesamtlösungstrajektorie zusammengesetzt .
werden. Das Element va1ue (i) wird als i-tes Ereignis bezeichnet. e isterminal(i)=1 bedeutet, dass bei einem Nulldurchgang von va1ue(i) die numerische Integration zu beenden ist. Wenn istermina1Ci)=O ist, wird die Integration nicht unterbrochen. • direction(i)=O heißt, dass alle Nulldurchgänge von va1ue(i) zu detektieren sind; bei direction (i) =1 werden nur Nulldurchgänge mit positiver Steigung bzw. bei direction(i)=-1 nur Nulldurchgänge mit negativer Steigung von va1ue(i) detektiert.
Die beschriebene Vorgehensweise wird in den nachfolgenden MATLAB-Funktionen realisiert. Zunächst wird die Differentialgleichung (4.12) in der Funktion xpunkt_pende1wand abgebildet.
%xpunkt_pendelwand.m
Die Überwachung von Ereignissen wird durch die Option Events aktiviert. Zur Überwachung der Funktion ereignis ist folgende Option notwendig:
I
options
79
function xpunkt = xpunkt_pendelwand(t,x,l,m,g,Fr)
%Berechnung von xpunkt xpunkt = [x(2); -g/l*sin(x(l»
odeset('Events', @ereignis);
- Fr*2/pi*atan(10*x(2»/m/l];
Die Verwendung der Option Events veranlasst den Solver, weitere Rückgabewerte zu liefern. Die allgemeinen Aufrufe der Solver lauten nun:
Die Ereignisfunktion ereignis muss Nulldurchgänge mit negativer Steigung von 'P = Xl feststellen und die Integration abbrechen.
[t, x, te, xe, ie] = sOlver(@xpunkt, tspan, xO, options, pi, p2, ... ); loesung = sOlver(@xpunkt, tspan, xO, options, pi, p2, ... );
% ereignis.rn
Im Spaltenvektor te werden die Zeitpunkte des Auftretens eines Events aus der Funktion ereignis zurückgegeben. Die Zeilen von xe enthalten den Lösungsvektor zu diesen Zeitpunkten. Die Werte in ie geben die Nummer der zu den Zeitpunkten te aufgetretenen Ereignisse an. Diese Nummer ist der Index des Elements va1ue (ie) der Ereignisfunktion, bei der ein Nulldurchgang stattfand. Beim Aufruf eines Solvers mit nur einem Rückgabewert werden bei aktivierter Event-Überwachung die zusätzlichen Felder loesung. xe, loesung. ye und loesung. ie angelegt. In loesung. xe werden die Zeitpunkte von aufgetretenen Events abgelegt, ye enthält die zugehörigen Lösungsvektoren und loesung. ie enthält die Indizes der detektierten Events. Zur Veranschaulichung der Möglichkeiten der Event Lokalisierung wird wieder das Pendel aus Abb. 4.1 betrachtet. Die folgenden Modifikationen in der Problemstellung sind jedoch zu beachten: Das Pendel wird nicht angetrieben, sondern nur aufgrund der Gewichtskraft beschleunigt. In der Stellung 'P = 0 befindet sich eine starre Wand, an der das Pendel einen vollkommen elastischen Stoß ohne Energieverlust vollführt. Setzt man in Gleichung (4.9) die Antriebskraft FA auf null, so erhält man für 'P > 0 das Differentialgleichungssystem (4.12) zwischen zwei Stößen. Es gilt wieder die Substitution Xl = 'P und X2 =
Xl = .
X2
(4.12)
X2
g.
FR
2
m·l
'Ir
= - - . smXl - - - . - . arctan(lOxz)
l
Wenn das Pendel aus der Anfangslage 'Po = 0.26 U~15°) losgelassen wird, gilt zunächst Gleichung (4.12), bis die Lage 'P = 0 erreicht ist. Dieses Ereignis wird detektiert, die Aufprallgeschwindigkeit wird ausgelesen, und die Integration wird angehalten. Der elastische Stoß wird dargestellt, indem für den nächsten Abschnitt (bis zum nächsten Stoß)
I
function [value, isterminal, direction] = ereignis(t,x,l,m,g,Fr) value = x(l); %Nulldurchgang von phi detektieren isterminal = 1; % Integration stoppen direction = -1; %nur Nulldurchgang mit negativer Steigung detektieren
Die Funktion ereignis benötigt die Argumente 1, m, g und Fr, da sie vom Solver auch an die Ereignisfunktion übergeben werden. Die Argumente müssen in der Definition vorhanden sein, auch wenn sie in der Funktion nicht ausgewertet werden. Den eigentlichen Lösungsvorgang zeigt die Datei dg1_pende1wand.m.
%dgl_pendelwand.m 1 = 5; m = 30; g = 9.81; Fr = 4; % Geometrie, Masse, Reibung % Anfangswerte, Zeitspanne, Optionen xO = [15/360*2*pi; 0]; tend = 20; tspan = [0 tend]; options odeset('Events' ,@ereignis); t = []; x = []; % Variablen zur Akkumulation von t und x while 1 %Beginn Schleife % Lösung bis zum ersten Ereignis [tout xout] = ode45(@xpunkt_pendelwand,tspan,xO,options,1,m,g,Fr); n length(tout); t = [t; tout]; % Akkumulation von t und x x = [x; xout]; xO = [0; -xout(n,2)]; %neue Anfangswerte setzen tstart = tout(n); %neuen Startzeitpunkt setzen tspan = [tstart tend]; if tstart>=tend %Abbruch, wenn Endzeit erreicht break end end %grafische Ausgabe von phi und phi punkt phi = x(:,l); phipunkt = x(:,2); subplot(211); plot(t,phi,t,phipunkt)
80
4 Differentialgleichungen in MATLAB
Die Lösungstrajektorie zwischen zwei Ereignissen wird in den Variablen tout und xout zwischengespeichert und in den Variablen t und x akkumuliert.' Mit dem Kommando options = odeset ( 'Events' ,@ereignis) wird die Funktion ereignis als Ereignisfunktionbekannt gemacht. In einer while-Schleife werden die Lösungen zwischen zwei Ereignissen berechnet, die Einzeltrajektorien akkumuliert, neue Anfangswerte und Startzeiten für den nächsten Abschnitt gesetzt und bei Überschreiten der Endzeit die Schleife abgebrochen. Schließlich wird das zusammengesetzte Ergebnis noch grafisch dargestellt. Der Lösungsverlauf für 'P und
4.1 Anfangswertprobleme (ODEs, DAEs und DDEsl
81
wert Xo konsistent mit der DAE ist. Das bedeutet, es muss eine Anfangssteilheit x(to) existieren, so dass M(to, xo) . x(to) = f(to, xo) ist. Bei nicht konsistenter Anfangsbedingung versucht der Sol ver in deren Nähe eine konsistente zu finden und das Problem mit diesem neuen Anfangswert zu lösen. DAEs können nur mit den Solvern ode15s und ode23t behandelt werden. Der Solver ode23s kann nur DAEs mit konstanter Masse-Matrix lösen. In der Option Mass muss entweder eine konstante Matrix oder ein Zeiger auf eine Funktion zur Ermittlung der Masse-Matrix enthalten sein. Bei der Lösung von DAEs kann die Effizienz der Algorithmen dadurch gesteigert werden, dass das Problem mit diagonaler Masse-Matrix formuliert wird. Eine weitere Effizienzsteigerung ist bei nicht zustandsabhängigen Masse-Matrizen (ode set C' MStateDependence' , 'none'), schwach zustandsabhängigen Masse-Matrizen (odeset ( 'MStateDependence' , 'weak' , Standardeinstellung) oder stark zustandsabhängigen Masse-Matrizen (odeset (' MStateDependence' , 'strong') durch Setzen der entsprechenden Option möglich. Bei nicht zustandsabhängiger MasseMatrix wird die Funktion zu ihrer Berechnung nur mit der Zeit t, nicht jedoch mit dem Zustandsvektor x aufgerufen, d.h. eine Definition von mass (t) reicht aus. Das bekannte Pendel aus Gleichung (4.8) soll als Beispiel für eine Differentialgleichung mit Masse-Matrix dienen und wird in die Form (4.13) umformuliert. Zusätzlich wird angenommen, dass die Masse m des Pendels mit der Zeit exponentiell abnimmt und das Pendel nicht angetrieben wird.
20
m(t) = mo. exp
(;t)
(4.15)
Abb. 4.4: Lösungsverlauf des Pendels mit elastischem Stoß
Als Differentialgleichungssystem mit Masse-Matrix ergibt sich:
4.1.2
Differential-algebraische Gleichungen (DAEs)
Häufig lassen sich Differentialgleichungen der Mechanik durch eine Differentialgleichung mit Masse-Matrix gemäß Gleichung (4.13) darstellen.
M(t,x) . x = f(t, x)
mit
x(to) = Xo
(4.13)
In der zeit- und zustandsabhängigen Masse-Matrix sind typischerweise Massen und Trägheitsmomente des mechanischen Systems enthalten. Wenn die Masse-Matrix nicht singulär ist, kann Gleichung (4.13) in Gleichung (4.14) umgeformt werden und es existiert eine Lösung für alle Anfangsbedingungen to und xo.
x = M- 1 (t, x) . f(t, x)
mit
x(to) = Xo
(4.14)
m(t)·
:h
=
.
m(t) . g . FR 2 = - - - - . smxl - - . -. arctan(10x2) I I IT
X2
X2
(4.16)
Aus Gleichung (4.16) lässt sich unschwer die Masse-Matrix ablesen.
M(t) =
[~ m~t)]
(4.17)
Die Funktion xpunkt_pendelmass repräsentiert die rechte Seite von Gleichung (4.16). Die Daten zu Geometrie, Anfangsmasse etc. werden als Parameter vom Solver übergeben.
Bei nicht singulärer Masse-Matrix sind alle Solver in der Lage, ein System gemäß Gleichung (4.13) zu lösen. Für Systeme mit konstanter Masse-Matrix wird die Option Mass aus Tab. 4.2 direkt auf diese Matrix gesetzt. Bei zeit- und zustandsabhängigen MasseMatrizen enthält diese Option einen Zeiger auf eine Funktion mass Ct, x), die für die Ermittlung der Masse-Matrix sorgt.
function xpunkt = xpunkt_pendelmassCt,x,l,mO,g,Fr,T) m = mO*exp(-t/T); %Berechnung von xpunkt xpunkt = [x(2); -m*g/1*sin(x(1» - Fr*2/pi*atan(10*x(2»/1];
Bei singulärer Matrix M(t, x) stellt Gleichung (4.13) eine differential-algebraische Gleichung (kurz: DAE) dar, die nur dann eine Lösung besitzt, wenn der Anfangs-
Die kontinuierliche Berechnung der Masse-Matrix (4.17) wird in der Funktion mass realisiert. Auch hier werden die Daten des Pendels als Parameter vom Solver übergeben.
% xpunkt_pendelmass.m
4 Differentialgleichungen in MATLAB
82
I
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
%maSS.ffi
Anfangswertprobleme
function M = mass(t,x,l,mO,g,Fr,T) M = [i 0; 0 mO*exp(-t/T));
Damit der Solver die Masse-Matrix verwenden kann, muss sie über die Option Mass auf @mass gesetzt werden. Die Lösung der Differentialgleichung des Pendels mit zeitvariabler Masse-Matrix mit dem Solver ode15s erfolgt gemäß den nachstehenden MATLABKommandos.
%dgl_pendelmass.m %Daten, Anfangswerte,
Zeitspanne, Optionen 1 = 5; mO = 30; g = 9.8i; Fr= 4; T =i5; xO = [i5/360*2*pi; 0); tspan = [020]; options = odeset('Mass', @mass); % Integration der DGL [t x) = odei5s(@xpunkt_pendelmass,tspan,xO,options,1,mO,g,Fr,T);
Als Lösung für rp und r.p über die Zeitspanne von 20 s ergibt sich der in Abb. 4.5 oben dargestellte Verlauf. Im unteren Teil von Abb. 4.5 ist der zugehörige Masseverlauf dargestellt. Pendelbewegung 0.4 r ,- - , - - - , - - , - - - , - - - , - - - . - - , - - - - , - - , - - - - ,
-
10
12
14
16
18
20
30,~,~-r_--,--r_--r--,---,--,---,---,---,
25
20
15 10
_ _L - _ - L_ _L _ _ - L_ _L - _ - L_ _ 10
MOO
12
14
Lösung eines Anfangswertproblems sol ver ist z.B. ode45
[x, xp]
Auswerten der Lösung
L-_-L_~
16
18
=
deval(lsg, tint, idx)
options = odeset('namel',wertl, ... ) opt_wert = odeget(options,'name')
4.1.3
Optionen setzen Optionen abfra.gen
Differentialgleichungen mit Totzeiten (DDEs)
MATLAB ist in der Lage, Differentialgleichungen mit mehreren konstanten Totzeiten (Verzögerungen) zu lösen. Die rechte Seite einer derartigen Differentialgleichung hängt dann nicht nur von der Zeit und vom aktuellen Zustandsvektor, sondern auch von zeitlich verzögerten Zustandsvektoren ab. Dieser Typ von Differentialgleichung wird als Delay Differential Equation (DDE) bezeichnet und hat die allgemeine Form aus Gleichung (4.18).
x=
f(t, x(t), x(t -
Tl),
x(t -
T2), ... ,
x(t -
Tk))
(4.18)
Die Totzeiten Tl bis Tk sind positive Konstanten. Es wird die Lösung eines Anfangswertproblems mit x(to) = Xo im Intervall to :::; t :::; tend gesucht. Aus Gleichung (4.18) ist sofort ersichtlich, dass die zeitliche Ableitung x auch von der vergangenen Lösung für t < to abhängig ist. Die vergangene Lösung (History) wird mit s(t) bezeichnet und es gilt:
x(t)
Zeit [sI
o
[t,x] = solver(@xpunkt,tspan,xO,opt) lsg = solver(@xpunkt,tspan,xO,opt)
phi [radI nhiR.unkt [radis]
Mass6verlauf m(t)
0!~_~
83
=
s(t)
für
t < to
(4.19)
Im Allgemeinen besitzen Anfangswertprobleme für Differentialgleichungen mit Totzeiten eine Unstetigkeit in der ersten Ableitung am Anfangszeitpunkt to, da die vergangene Lösung s(t) die Differentialgleichung bei t = to normalerweise nicht erfüllt. Diese Unstetigkeit pflanzt sich in Abständen von Tl bis Tk in der Lösung für t 2': t o fort. Ein zuverlässiger Lösungsalgorithmus muss diese Unstetigkeiten bei der Integration beachten. Die Lösung von Anfangswertproblemen mit Totzeiten erfolgt durch den Befehl dde23. Dieser basiert auf dem Solver ode23, beachtet aber zusätzlich die angesprochenen Unstetigkeiten. Der allgemeine Aufruf lautet:
20
Abb. 4.5: Lösungsverlauj des Pendels mit zeitvariabler Masse-Matrix
loesung
dde23(@xpunkt, tau, history, tspan, options, pi, pi, ... )
@xpunkt ist das Function Handle zur Berechnung der rechten Seite der Differentialgleichung (4.18). Die Definition lautet: function dxdt = xpunkt(t, x, Z, pi, p2, ... ) dxdt = [ ... ; ... ; ... ] ;
Die rechte Seite xpunkt wird mit der Integrationszeit t, dem aktuellen Lösungsvektor x und den verzögerten Lösungsvektoren Z aufgerufen. Dabei entspricht jede Spalte von
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs)
4 Differentialgleichungen in MATLAB
84
Z einem verzögerten Lösungsvektor, Z(: ,j)= x(t - Tj). Der Vektor tau enthält alle Verzögerungszeiten Tl bis Tk.
Seite 70). Bei Verwendung einer Event-Funktion existieren auch hier die zusätzlichen Felder loesung. xe, loesung. ye und loesung. ie mit der entsprechenden Bedeutung.
Das Argument history ist entweder ein konstanter Spaltenvektor, der die Lösung für t < to angibt, oder das Function Handle einer Funktion, die die Lösung für t < to berechnet.
Beispiel: Mit dem Solver dde23 wird nun eine einfache Differentialgleichung mit Totzeiten gelöst und das Ergebnis grafisch dargestellt. Die Differentialgleichung lautet:
:h(t) = -0.4· Xl(t -1)
function hist = history(t, pi, p2, ... ) hist = [ ... ; ... ; ... ];
Der Vektor tspan besteht aus den Elementen to und tend und gibt die Integrationszeit an. Mit der Struktur options können Optionseinstellungen analog zu Tab. 4.2 vorgenommen werden. An alle beteiligten Funktionen werden schließlich noch die Parameter p1, p2, ... übergeben. Eine Liste aller zulässigen Optionen liefert das Kommando ddeset.
» ddeset AbsTol: Events: InitialStep: InitialY: Jurops: MaxStep: NormControl: OutputFcn: OutputSeI: RelTol: Stats:
[positive scalar or vector {ie-6} ] [function] [positive scalar [vector] [vector] [positive scalar [on I {off} ] [function] [vector of integers [positive scalar {ie-3} [on I {off} ]
Die Optionen haben die gleiche Bedeutung wie in Tab. 4.2. Das neue Feld InitialY dient zur Spezifikation einer Unstetigkeit bei t = to. Ohne dessen Angabe wird für den Anfangswert Xo = 8(to) verwendet. Dies entspricht einer stetigen Lösung bei to. Wird das Feld InitialY mit einem Wert ungleich 8(tO) belegt, so wird dieser als Anfangswert benutzt und die Lösung besitzt dann eine Unstetigkeit bei to. Um Unstetigkeiten in der vergangenen Lösung (History) oder in den Koeffizienten der rechten Seite anzugeben, werden die (positiven oder negativen) Zeitpunkte von Unstetigkeitsstellen dem Feld Jumps als Vektor zugewiesen. Zustandsabhängige Unstetigkeiten werden über eine Event-Funktion im Feld Events wie in Kap. 4.1.1 behandelt. Das Setzen und Ändern von Feldern einer Options-Struktur geschieht mit den Kommandos ddeset und ddeget.
I
85
» options = ddeset('Jurops', [i 378]); » xO = ddeget(options,'InitiaIY');
Der Rückgabewert loesung des Aufrufs dde23 ist eine Struktur mit den Feldern loesung .x, loesung. y, loesung. yp, loesung. solver, loesung. discont und loesung.history. Diese besitzen die gleichen Bedeutungen wie bei den ODE-Solvern in Kap. 4.1.1. Das neue Feld loesung. discont zeigt alle berücksichtigten Unstetigkeiten an, auch wenn sie durch die Totzeiten Tl bis Tk bedingt sind. Schließlich enthält das Feld loesung. history die zur Berechnung verwendete vergangene Lösungstrajektorie. Die Auswertung der Lösung erfolgt wie gewohnt mit dem Kommando deval (siehe
X2(t) = Xl(t -1) - 2· X2(t - 0.5)
(4.20)
Die Lösung für t < to sei konstant und gleich [1 - 2 J. Es wird nun der Lösungsverlauf für to = 0 :s; t :s; tend = 6 mit dem Anfangswert xo = 0 berechnet. Dazu erfolgt zunächst die Definition der History-Funktion.
I
% hist_ddebsp.m function s = hist_ddebsp(t) s = [i; -2];
Die rechte Seite der Differentialgleichung wird in der Funktion xpunkt_ddebsp codiert. Dazu werden zunächst die Lösungen x(t - 1) und x(t - 0.5) in den Variablen x_tau1 und x_tau2 zwischengespeichert. Anschließend wird die Ableitung xpunkt berechnet. % xpunkt_ddebsp.m function xpunkt = xpunkt_ddebsp(x, t, Z) % verzögerte
Lösung extrahieren
x_tau1 = Z(:,1); x_tau2 = Z(:,2); %Ableitung berechnen xpunkt = [-O.4*x_tau1(1); x_taul(1) - 2*x_tau2(2)];
Die Lösung der Differentialgleichung erfolgt mit den na.chstehenden Kommandos. Zuerst werden die Verzögerungszeiten Tl = 1 und T2 = 0.5 in den Vektor tau gespeichert. Das Feld Initial Y wird auf den Anfangswert 0 gesetzt, da er sich von der vergangenen Lösung 8(0) unterscheidet. Dadurch entsteht eine Unstetigkeit der ersten Ableitung bei to = O. Anschließend erfolgt die Lösung mittels dde23 und eine grafische Auswertung.
% ddebsp.m i'. Zeitspanne tspan = [06];
%Verzögerungszeiten tau = [1, 0.5];
% Optionen setzen options = ddeset('InitiaIY',[O;O]);
% Lösung der DGL loesung = dde23(@xpunkt_ddebsp, tau, @hist_ddebsp, tspan, options); Auswertung tint = linspace(O, 6, 60); x = deval(loesung, tint); subplot(211); plot(tint,x(1,:),tint,x(2,:))
%grafische
Das Ergebnis ist in Abb. 4.6 dargestellt. Deutlich sind die Unstetigkeiten bei t = 1 und t = 0.5 erkennbar. Diese sind durch die Unstetigkeit bei t = 0 und die Totzeiten Tl = 1 und
T2
= 0.5 bedingt.
4 Differentialgleichungen in MATLAB
86
4.1 Anfangswertprobleme (ODEs, DAEs und DDEs) darstellen. Wenn man Gleichung (4.9) umformuliert, so erhält man:
DGL mit Totzeiten
.
X2
Abb. 4.6: Lösung der Differentialgleichung (4.20)
Differentialgleichungen mit Totzeiten (DDEs)
4.1.4
x(to)
=
xo
I
+ -_. -2 . arctan(lOx2) m·l 7f
Xl - X2 = 0 FA(t) + --= 0
(4.22)
m·l
function f = f_pendel(t,x,xp,l,m,g,Fr)
% Antriebskraft Fa = 30*sin(2*pi*0.1*t);
% Berechnung von f f = [xp(1)-x(2); xp(2) + g/l*sin(x(l»
Wenn eine gewöhnliche Differentialgleichung nicht nach ihrer Ableitung x auflösbar ist, spricht man von einer impliziten Differentialgleichung. Die hier behandelten impliziten Differentialgleichungen sind von der Form:
x(to) = xo
+ - . SmXl
FR
% Lpendel.m
Lösung der DDE Auswertung der Lösung Optionen setzen Optionen abfragen
Implizite Differentialgleichungen
f(t,x,x) =0
g.
Die Anregung des Pendels erfolgt mit FA(t) = 30 ·sin(27f· O.I·t), die Anfangsauslenkung beträgt XlQ = 0.26 bei der Anfangswinkelgeschwindigkeit X20 = O. Die Anfangswerte x(to) und x(t o) müssen konsistent mit der zu lösenden Differentialgleichung sein. x(to) berechnet sich aus der vorgegebenen Anfangsbedingung zu x(to) = [0_26 OJT. Der Wert x(to) lässt sich aus der Differentialgleichung (4.22) explizit berechnen. Ist dies nicht möglich, so kann zur konsistenten Anfangswertberechnung auch das Kommando decic verwendet werden. Die Funktion zur Berechnung der linken Seite von Gleichung (4.22) lautet:
-2 LI______-L______~______~L-______L -______7-______~ 3 o Zeit[s]
loes = dde23(@xpunkt,tau,hist,tspan,opt) [x, xpJ = devalCloes, xint, idx) opt = ddeset ( , name l' , wert 1, ... ) opt_wert = ddeget (opt , , name' )
87
+ Fr*2/pi*atan(10*x(2»/rn/l + Fa/rn/I];
Die Lösung der impliziten Differentialgleichung erfolgt in folgendem rn-Skript. Dabei werden die Geometrieparameter von der l:
(4.21)
Die Lösung derartiger Differentialgleichungen erfolgt mit dem Befehl ode15i. Die möglichen Aufrufe lauten: [t, x] = ode15i(@f, tspan, xc, xpO, options) loesung = ode15i(@f, tspan, xe, xpo, options)
Die Argumente des Solvers ode15i entsprechen Gleichung (4.21). @f ist das Function Handle auf die linke Seite von Gleichung (4.21), tspan ist ein Vektor zur Spezifikation des Integrationsintervalls, xO ist der Anfangswert der Lösung, xpO ist die Anfangssteigung der Lösung, und mittels options können Optionen zur Integration angegeben werden. In t und x wird die Lösung x(t) zurückgeliefert. Wird nur der Rückgabewert loesung auf der linken Seite angegeben, so wird die Lösung in eine Struktur gespeichert (siehe Seite 69). Als Beispiel wird die Differentialgleichung des Pendels aus Kap. 4.1.1 nochmals mittels ode15i gelöst. Auch diese Differentialgleichung lässt sich als implizite Gleichung
10
15
20 Zeit[s]
25
30
35
Abb. 4.7: Lösung des angetriebenen Pendels mittels ode15i
%dgl_pendel_irnplizit.m %Geometrie, Masse, Reibung 1 = 5; m = 30; g = 9.81; Fr % Anfangswerte, Zeitspanne xO = [15/360*2*pi; 0]; tspan = [040];
4;
40
4 Differentialgleichungen in MATLAB
88
xpo = [xO(2); -g/l*sin(xO(l»];
% Integration der DGL loesung = ode15i(@f_pendel,tspan,xO,xpO,[],1,m,g,Fr);
% grafische Ausgabe von xl und x2 tint = linspace(tspan(i),tspan(2) ,200); x = deval(loesung, tint); subplot(2l1) plot(tint,x(1,:),tint,x(2,:» Implizite Differentialgleichungen Lösung der DGL Auswertung der Lösung Berechnung konsistenter Anfangs bedingungen
loesung
bvp4c(@ystrich,@randbed,loesinit)
ystrich ist eine Funktion, die in einem Spaltenvektor die rechte Seite von Gleichung (4.23) zurückliefert. Sie wird von bvp4c mit den Argumenten x und y aufgerufen und hat die Form: function dydx dydx = [. .. ];
4.2
Randwertprobleme für gewöhnliche Differentialgleichungen
=
dy dx
= fex, y)
(4.23)
Jetzt ist x die unabhängige Variable (entspricht t bei Anfangswertproblemen) und y die abhängige Variable. Die Randbedingungen spezifizieren einen Zusammenhang der Lösung für mehrere Punkte x. MATLAB kann nur Zweipunld-Randwertprobleme lösen, d.h. die Randbedingungen spezifizieren einen Zusammenhang zwischen den Lösungspunkten am Anfang und am Ende des Lösungsintervalls. Es wird eine Lösung im Intervall [a bJ berechnet, wobei die allgemeinen Randbedingungen lauten:
g(y(a),y(b)) = 0
(4.24)
Im Gegensatz zu Anfangswertproblemen können Randwertprobleme keine, eine oder mehrere Lösungen besitzen. Bei vielen Randwertproblemen sind neben der Funktion y(x) auch unbekannte konstante Parameter gesucht. Das allgemeine Randwertproblem mit dem unbekannten Parametervektor p lautet daher:
y'(x)
=
f(x,y,p)
g(y(a),y(b),p) = 0
ystrich(x,y)
Die Funktion randbed ermittelt als Spaltenvektor die Restabweichungen (Residuen) der Randbedingungen von ihren Sollwerten.
Bisher waren für die Lösung von gewöhnlichen Differentialgleichungen immer Startwerte am Beginn des Lösungsintervalls gegeben. Es existieren jedoch auch technische Problemstellungen, bei denen die Lösung der Differentialgleichung gleichzeitig Bedingungen am Beginn und Ende des Lösungshorizonts erfüllen muss. Dies bezeichnet man als Randwertproblem (BVP, Boundary Value Problem). MATLAB ist in der Lage, Randwertprobleme der folgenden Form zu lösen:
y' (x)
89
In diesem Fall muss die Anzahl der Randbedingungen um die Zahl der unbekannten Parameter höher sein, um eine eindeutige Lösung zu erhalten. Die numerische Lösung von Randwertproblemen erfolgt nicht streng vorwärts gerichtet, sondern erfordert den Einsatz eines Suchverfahrens. Dieses benötigt zum Starten eine geschätzte Anfangslösung und eine anfängliche Intervalleinteilung des Lösungsbereichs, die vom Benutzer angegeben werden müssen. Anschließend wird eine numerische Lösung durch Lösen eines Satzes von algebraischen Gleichungen, die aus den Rand- und Intervallbedingungen resultieren, berechnet. Die Intervalleinteilung wird so lange verfeinert, bis die geforderte Genauigkeit erreicht ist. Die numerische Lösung für Zweipunkt-Randwertprobleme erfolgt mit dem MATLAB-Befehl bvp4c. Seine Grundsyntax lautet:
% Anfangs-Ableitung aus der DGL berechnen
loesung=ode15iC@f,tspan,xO,xpO,options) [x, xp] =deval (loesung, xint, idx) [xOm,xpOm] =decic(@f, tO ,xO ,fix..xO ,xpO, fix..xpO)
4.2 Randwertprobleme für gewöhnliche Differentialgleichungen
(4.25)
function res = randbed(ya,yb) res = [. .. ]; Die Argumente ya und yb sind Spaltenvektoren der erzielten Funktionswerte an den Intervallgrenzen a und b. Wenn eine Randbedingung lautet VI(a) = 5, dann muss eine Komponente des Rückgabevektors res lauten: res (i)=ya(1)-5. Die Struktur loesinit stellt eine anfängliche Schätzlösung des Randwertproblems dar. Die Struktur muss mindestens die beiden Felder loesini t. x und loesini t. Yenthalten. x enthält ein Gitter von Punkten an denen die Anfangslösung gegeben ist. Dadurch werden implizit auch die Intervallgrenzen des Lösungsintervalls definiert. Die Grenzen a und b werden bestimmt aus x (1) und x (end). Das Feld y enthält als Spaltenvektor die anfänglichen Schätzwerte der Lösung an den Gitterpunkten x. Der Lösungsvektor loesini t. y(; , i) gehört zum Gitterpunkt loesini t. x(i). Der Name der StrukturJür die Anfangslösung kann beliebig sein, die Felder mit den Gitterpunkten und zugehörigen Lösungsvektoren müssen jedoch die Namen x und y tragen. Als Hilfe zur Erzeugung der Anfangslösung steht die Funktion bvpini t zur Verfügung. Ihre Syntax lautet: loesinit
bvpinit(xinit, yinit)
wobei xini t ein Vektor der anfänglichen Rasterpunkte ist. Das Argument yini t kann entweder ein Spaltenvektor der Dimension der Systemordnung oder ein Function Handle sein. Wenn yini tein Spaltenvektor ist, wird sein Wert für a.lle Rasterpunkte in xini t konstant fortgesetzt, d.h. man erhält eine konstante Anfangslösung. Wenn yini t ein Function Hi:mdle ist, wird die zugeordnete Funktion an allen Gitterpunkten xini t ausgewertet. Die Funktion muss einen Spaltenvektor mit der Anfangslösung für einen Gitterpunkt xini t (i) zurückliefern.
4 Differentialgleichungen in MATLAB
90
4.2 Randwertprobleme für gewöhnliche Differentialgleichungen
Der Solver bvp4c liefert inder Struktur loesung die Felder x und y. Das Feld loesung. x enthält die vom Solver gewählten Gitterpunkte, in loesung. y sind die berechneten Werte der Lösung y( x) an den Gitterpunkten enthalten. In loesung. yp werden schließlich die Ableitungen y'(x) an den Gitterpunkten geliefert. Wenn die Lösung auch bei Werten zwischen zwei Gitterpunkten benötigt wird, kann dazu die Funktion deval, wie bei Anfangswertproblemen auch, zur Interpolation verwendet werden. Der Aufruf lautet:
beschleunigen. Es muss dann gelten:
f(Xl,X2, ... ,Yl,Y2, ... ) = [f(Xl,Yl),f(X2,Y2), ... J
y'(x) = dy =.:!:..g'Y+f(x,y) dx x
xint ist ein Vektor mit den gewünschten Lösungspunkten. Zu jedem Element i des Vektors xint (i) wird der zugehörige Lösungsvektor xi(: , i) und die erste Ableitung xpi (: , i) des Lösungsvektors berechnet, die dann für grafische Ausgaben verwendet werden können. Wenn der Vektor idx angegeben wird (optional), werden nur die Lösungen mit den in idx enthaltenen Indizes in xi und xpi gespeichert.
» bvpset AbsTol: RelTol: SingularTerm: FJacobian: BCJacobian: Stats: Nmax: Vectorized:
•
[ positive scalar or vector {le-6} ] [ positive scalar {le-3} ] [ matrix] [ function [function ] [ on I {off} ] [nonnegative integer {floor(1000/n)} ] [on I {off} ]
Der allgemeine Aufruf von bvp4c mit Optionen lautet:
•
loesung
bvp4c(@ystrich,@randbed,10esinit,options)
Wenn zusätzlich zum Lösungsverlauf y(x) unbekannte Parameter gesucht sind, so müssen bei der Anfangslösung auch anfängliche Parameterwerte in der Struktur loesini t angegeben werden. Dies geschieht im Feld loesini t . parameters, in dem alle unbekannten Parameter in einem Vektor zusammengefasst werden. Sobald dieses Feld vorhanden ist, werden diese Parameter in die Lösungssuche einbezogen. Die funktionen xpunkt (rechte Seite der DGL) und randbed (Residuen der Randbedingungen) werden in diesem Fall vom Solver bvp4c zusätzlich mit dem Parametervektor aufgerufen. Ihre Definitionen müssen daher lauten: function dydx = ystrich(x,y,parameters)
options
function res = randbed(ya,yb,parameters)
bvpset(options,'namel',wertl,'name2',wert2, ... )
Wenn für die Initialisierung der Lösung die Funktion bvpini t benutzt wird, so wird als drittes Argument der unbekannte Parametervektor übergeben. loesinit
var
(4.27)
Die Option SingularTerm muss mit der Matrix S aus Gleichung (4.27) belegt werden. Es ist zu beachten, dass die Funktion ystrich nach wie vor nur den Term f(x, y) zurückliefern darf. Das singuläre Randwertproblem kann nur im Intervall [0 bJ gelöst werden. Die Randbedingungen bei x = 0 müssen konsistent mit der notwendigen Bedingung g . y(O) = 0 für eine stetige Lösung sein. Diese Bedingung sollte auch von der Anfangslösung loesini t erfüllt werden.
Die Veränderung einzelner Felder einer Options-Struktur erfolgt durch
wobei name1 und name2 die Felder von options bezeichnen und wert1 und wert2 die zuzuweisenden Werte sind. Einzelne Felder können mit dem Befehl bvpget aus einer Options-Struktur abgefragt werden.
(4.26)
Mit der Option SingularTerm kann eine spezielle Klasse singulärer Randwertprobleme gelöst werden. Diese müssen die folgende Form besitzen:
[xi, xpi] = deval(loesung, xint, idx)
Der Solver bvp4c kann auch mit Optionen zur individuellen Anpassung aufgerufen werden. Dazu wird eine Options-Struktur verwendet, die mit dem Kommando bvpset erzeugt und verändert werden kann. Die einfache Eingabe von bvpset zeigt alle zulässigen Optionen an.
91
bvpinit(xinit, yinit, parameters)
bvpget(options, 'name')
Der Rückgabewert var enthält den Wert des Feldes name aus der Struktur options. Mit den Feldern AbsTol und RelTol können die entsprechenden Toleranzen eingestellt und die Genauigkeit der Lösung beeinflusst werden [40J. In den Feldern F J aco bian und BCJacobian können Function I-Iandles angegeben werden, die auf Funktionen zur Berechnung der Jacobi-Matrix der rechten Seite des DGL-Systems in (4.23) bzw. der Funktion randbed zeigen. Zu beachten ist, dass beim Einsatz unbekannter Parameter (siehe unten) die 'Funktionen zur Berechnung der Jacobi-Matrizen auch die partiellen Ableitungen bezüglich der unbekannten Parameter liefern müssen [40J. Mit dem Feld Nmax kann die Zahl der Rasterpunkte in loesung. x nach oben begrenzt werden. Die Option Vectorized gibt an, ob die rechte Seite von Gleichung (4.23) vektorwertig aufgerufen werden kann. Dies kann die Ausführungsgeschwindigkeit vonbvp4c erheblich
Zusätzlich zu unbekannten Parametern können den Funktionen ystrich und randbed auch bekannte Parameter übergeben werden. Diese folgen in den Funktionsdefinitionen direkt auf den Vektor der unbekannten Parameter. 2 ) Die entsprechenden Funktionsdefinitionen lauten dann: function dydx = ystrich(x,y,parameters,pl,p2, ... ) function res = randbed(ya,yb,parameters,pl,p2, ... )
Die Parameter p1, p2 ... werden den Funktionen vom Solver übergeben und müssen auch beim Solveraufruf berücksichtigt werden. Der Aufruf ändert sich entsprechend. 2)
Wenn keine unbelmnnten Parameter vorhanden sind, folgen sie direkt auf die Argumente x und y
bzw. ya und yb.
4 Differentialgleichungen in MATLAB
92
loesung
93
%bvp_balken.rn % Schätzwert für
bvp4c(@ystrich,@randbed,loesinit,options,p1,p2, ... )
Beispiel: Zur Illustration der Verwendung des Solvers bvp4c wird nun als Beispiel ein Biegebalken [21] genauer betrachtet. Die Differentialgleichung des Biegebalkens aus Abb. 4.8 lautet für kleine Durchbiegungen (1 + y'2 f':j 1): M(x»O
x
///%///
4.2 Randwertprobleme für gewöhnliche Differentialgleichungen
Start lösung xrnesh = linspace(0,1,100); yini(l) = 0; yini(2) = 0; loesinit = bvpinit(xrnesh,yini); % Lösung berechnen loesung = bvp4c(@ystrich_balken, @bc_balken, loesinit) % Ergebnis grafisch darstellen subplot(211) plot(loesung.x,loesung.y(l,:»
Der Verlauf der betrachteten Biegelinie ist in Abb. 4.9 dargestellt. Man beachte, dass die y-Koordinaten in Abb. 4.8 und Abb. 4.9 in entgegengesetzte Richtungen zeigen.
111/111
y 81egel1n1e
3
3 X 10-
Abb. 4.8: Biegebalken mit Momentenverlauf M(x)
g2.5
6;c
2
~
~1.5
M(x) =b(x) _y" = EI(x)
(4.28)
:ö
i1 ~
o
Mit der vorgegebenen Lagerung und der Länge des Balkens von I Randbedingungen
y(O) = 0
und
y(l) =
o.
=
1 ergeben sich die
Der Biegemomentverlauf M(x) und die Biegesteifigkeit EI(x) sind von der Koordinate x folgendermaßen abhängig: M(x) = 5 - 4x
EI(x) = 100e-
(4.30).
Mit der Substitution YI = Y und Y2 = y' ergibt sich die in MATLAB codierte rechte Seite von Gleichung (4.28) zu:
I
oV o
(4.29)
x
1
0.5
% ystrich_balken.rn function dydx = ystrich_balken(x,y) dydx = [y(2); (4*x-5)!100*exp(-x)];
In der Funktion bc_balken werden die Residuen der Randbedingungen an den Positionen x = 0 und x = 1 berechnet.
% bc_balken.rn function res = bC_balken(ya,yb) res = [ya(l); yb(l)];
').,,1 0.1
0.2
0.3
0.4
0.5 0.6 Position x
0.8
0.9
Abb. 4.9: Mit bvp4c berechnete Biegelinie
Das Kommando bvp4c kann auch Randwertprobleme mit mehr als zwei Randbedingungen lösen (Multi-Point-Randwertprobleme). Das Randwertproblem wird dann in mehrere Regionen aufgeteilt. An den Regionsgrenzen müssen zusätzliche Randbedingungen gelten. Die Definition mehrerer Regionen erfolgt bei der Initialisierung. Im folgenden Beispiel werden die Regionen -2 bis 1 und 1 bis 2 definiert. Die Regionsgrenzen werden beim x-Raster doppelt angegeben. xinit = [-2 -1.5 -1 -0.5 0 0.5 1 1 1.52]; yinit=[1; 1]; solinit = bvpinit(xinit, yinit);
In der Funktion randbed zur Berechnung der Abweichungen von den Randbedingungen werden diese an den Grenzen -2 und 1 für die erste Region und 1 und 2 für die zweite Region berechnet. Ein Beispiel für ein Randwertproblem mit drei Randbedingungen enthält die Datei three bvp. m. 3) 3) Im Umfang vonMATLAB enthalten.
Zunächst wird ein Anfangsgitter xmesh erzeugt. Die Anfangslösungen sollen sowohl für YI als auch Y2 für alle Punkte des Gitters xmesh gleich null sein. Die Struktur mit der Anfangslösung wird mit der Hilfsfunktion bvpini t erzeugt. Die Berechnung der Lösung erfolgt ohne die Verwendung spezieller Optionen mit dem Solver bvp4c.
0.7
94
4 Differentialgleichungen in MATLAB
4.3 Partielle Differentialgleichungen (PDEs)
Q(x, t) ist eine Diagonalmatrix mit Elementen immer ungleich null oder identisch nulL
Randwertprobleme 10es = bvp4c(@ystrieh,@randb,init,opt) init = bvpinit(xinit,yinit) [xi, xpiJ = deva1(loes, xint, idx) opt = bvpset('namel',wertl, ... ) opt_wert = bvpget(opt,'name')
4.3
Zu beachten ist, dass die Randbedingung bezüglich der Flussfunktion f anstelle der partiellen Ableitung ou/ox definiert ist und nur die Funktion p von u abhängig sein darf.
Lösung eines Randwertproblems Startlösung festlegen Auswertung der Lösung Optionen setzen Optionen abfragen
In MATLAB steht zur Lösung der beschriebenen Systeme aus parabolischen und elliptischen partiellen Differentialgleichungen mit der Zeitvariable t und einer Ortsvariablen x der Solver pdepe zur Verfügung. Er löst Anfangs-Randwertpl'obleme und benötigt mindestens eine parabolische Gleichung im System. Der Solver wandelt die PDEs durch Diskretisierung über die vom Anwender angegebenen Rasterpunkte in ODEs um. Die Zeitintegration erfolgt mit dem Solver ode15s. Der PDE-Solver pdepe nutzt die Fähigkeiten von ode15s zur Lösung von differential-algebraischen Gleichungen, die auftreten, wenn im PDE-System elliptische Gleichungen vorhanden sind. Wenn die, zu elliptischen Gleichungen gehörenden, Anfangswerte nicht konsistent mit der Diskretisierung sind, versucht pdepe diese anzupassen. Gelingt es nicht, muss das Diskretisierungsraster feiner gewählt werden. Der Aufruf des PDE-Solvers lautet:
Pa.rtielle Differentialgleichungen (PDEs)
Den am schwierigsten zu lösenden Typ von Differentialgleichungen stellen partielle Differentialgleichungen dar. Im Gegensatz zu gewöhnlichen Differentialgleichungen stellen sie einen,funktionalen Zusammenhang zwischen der Ableitung nach dem Zeitargument 't und örtlichen Variablen x her. Eine analytische Lösung von PDEs ist im Allgemeinen nicht möglich, und auch die numerische Lösung gestaltet sich sehr schwierig. Für fortgeschrittene Anwendungen existiert eine separate PDE-Toolbox; einfache Problemstellungen können jedoch auch in MATLAB numerisch gelöst werden. Die in MATLAB numerisch lösbaren partiellen Differentialgleichungen hängen von der Zeit 't und einerOrtsvariablen x ab und müssen die folgende Form besitzen:
C ( x, t, u, ou) OX ' . ou ot = x
-m . ox0 (m x . f (x, t, u, ou)) OX + s ( x, t, u, ou) OX
(4.31)
Die Lösungsfunktion u( t, x) kann numerisch im Intervall to < t < t f bzw. a < x < b bestimmt werden. Die Werte a und b müssen beschränkt sein. m darf die Werte 0, 1 oder 2 annehmen, was der flachen, zylindrischen und sphärischen Symmetrie entspricht. Wenn m > 0 ist, muss auch a 2': 0 sein. In Gleichung (4.31) stellt feinen Flussterm und s eine Quelle dar. Die Kopplung der Ortsableitung und der Zeitableitung ist auf die Multiplikation mit der Diagonalmatrix C beschränkt, deren Elemente entweder null oder positiv sind. Ein Element gleich null entspricht einer elliptischen Gleichung und andernfalls einer parabolischen Gleichung. Es muss mindestens eine parabolische Gleichung existieren. Ein Element der Matrix C, das zu einer parabolischen Gleichung gehört, darf für einzelne Werte x verschwinden, wenn diese Werte Gitterpunkte der festgelegten Ortsdiskretisierung sind. Unstetigkeiten in C und s dürfen ebenfalls nur an Gitterpunkten auftreten, Zur Anfangszeit to muss die Lösung für alle x eine Anfangsbedingung der folgenden Form erfüllen:
u(x, to)
=
uo(x)
(4.32)
Die Funktion uo(x) wird als Anfangswertfunktion bezeichnet. An den Intervallgrenzen x = a und x = b erfüllt die Lösung für alle Zeitpunkte t die Randbedingungen:
p(x, t, u)
+ Q(x, t) . f
(x, t, u, ~~)
= 0
95
(4.33)
. I
loesung
pdepe(m,@pdefun,@iefun,@befun,xmesh,tspan)
Das Argument m definiert die Symmetrie der AufgabensteIlung (m kann 0,1 oder 2 sein). Die Funktion pdefun definiert die Komponenten der PDE und berechnet die Terme C, fund s aus Gleichung (4.31). pdefun hat die Form: funetion [e,f,s]
pdefun(x,t,u,dudx)
Die Argumente x und t sind Skalare, u ist der Spaltenvektor der aktuellen Lösung und dudx seine partielle Ableitung. Die Ergebnisse e, fund s sind alles Spaltenvektoren, wobei der Vektor e genau die Diagonalelemente der Matrix C aus Gleichung (4.31) enthält. In der Funktion icfun wird die Anfangslösung u(x, to) zum Zeitpunkt to, abhängig nur von der Ortskoordinate x bestimmt. Die Funktion liefert in einem Spaltenvektor u die Anfangslösung und lautet allgemein: funetion u
iefun(x)
Das vierte Argument von pdepe ist eine Funktion zur Berechnung der Terme p und Q aus Gleichung (4.33) der Randbedingungen. Die Funktion befun lautet: funetion [pl,ql,pr,qr]
befun(xl,ul,xr,ur,t)
u1 und ur sind die aktuellen Lösungen am linken Rand bei x1=a bzw. am rechten Rand bei xr=b. Die Rückgabewerte pI und ql entsprechen dem Vektor p und der Diagonalen der Matrix Q aus Gleichung (4.33), ausgewertet am linken Rand bei xl=a. Entsprechendes gilt für pr und qr am rechten Rand bei xr=b. Wenn m > 0 und a = 0 ist, verlangt der Solver zur Lösbarkeit, dass der Fluss f an der Stelle x = a verschwindet. Der Solver pdepe erzwingt diese Randbedingung automatisch und ignoriert andere Werte aus pI und ql. Das Argument xmesh von pdepe ist ein Zeilenvektor mit aufsteigenden Ortskoordinaten, mit dem festgelegt wird, für welche Werte x jeweils eine Lösung für alle Werte aus tspan
96
4 Differentialgleichungen in MATLAB
berechnet wird. Der Vektor xmesh muss mindestens drei Elemente besitzen. Der Zeilenvektor tspan enthält in aufsteigender Reihenfolge alle Zeitpunkte, an denen für alle Elemente aus xmesh die Lösung bestimmt werden soll. Auch hier gilt die Mindestlänge von drei Elementen. Der Solver akzeptiert die gleiche Options-Struktur wie gewöhnliche Differentialgleichungen in Kap. 4.1.1, die auch mit den dort beschriebenen Befehlen manipuliert werden kann. Außerdem können auch hier Parameter an die von pdepe aufgerufenen funktionen übergeben werden. Die Funktionen pdefun, icfun und befun werden mit den zusätzlichen Parametern pi, p2, ... aufgerufen. Der allgemeinste Aufruf lautet demnach: loesung
97
4.4 Übungsaufgaben
c,d
m
T
Abb. 4.10: Feder-Masse-Schwinger mit Dämpfung
pdepe(m,@pdefun,@iefun,@bcfun,xmesh,tspan,options,p1,p2, ... )
Der Rückgabewert loesung von pdepe ist ein dreidimensionales Feld mit den folgenden Einträgen: .. loesung(:,: ,k) ist die k-te Komponente des Lösungsvektors u(x, t). e loesung(i ,j ,k) ist die k-te Komponente der Lösung zum Zeitpunkt tspan(i) und am Gitterpunkt xmesh (j). Wenn die Lösung nur aus einer Komponenten besteht, wird in loesung nur ein zweidimensionales Feld zurückgeliefert. Die Interpolation des Lösungs-Arrays zwischen zwei Gitterpunkten erfolgt mit dem Befehl pdeval. Ein einfaches Beispiel zur Verwendung von pdepe ist in der Online-Hilfe zu MATLAB enthalten (Aufruf mit doe pdepe). Ein umfangreicheres Beispiel zur Wärmeleitung findet sich in [13J.
Als Zahlenwerte sind gegeben: m = 5, c = 150, d = 1. Lösen Sie die Differentialgleichung für die Zeitspanne von t = 0 ... 20 mit den Anfangswerten xo = 0.2 und xo = 0 mit dem Solver ode45 ohne spezielle Optionen für die Toleranzen, und stellen Sie das Ergebnis für den Weg x und die Geschwindigkeit x grafisch dar. Stellen Sie ebenfalls den Masseverlauf im Intervall t = O... 20 grafisch dar. Hinweis: Sie können die Differentialgleichung mit und ohne Masse-Matrix darstellen und lösen.
4.4.2
Elektrischer Schwingkreis
In dieser Aufgabe geht es um eine einfache Event-Erkennung. Betrachtet wird der in Abb. 4.11 dargestellte elektrische Schwingkreis. Die Bauelemente besitzen folgende Werte: R = 0.5, L = 10- 4 und C = 10- 6 . Zum Zeitpunkt t = 0.3· 10- 3 wird der Schalter geschlossen, und die resultierende Kapazität verdoppelt sich durch die Parallelschaltung. Dieses Ereignis soll exakt detektiert, die Integration angehalten und eine
Partielle DGLs (PDEs) loesung ; pdepe(m,@pdefun,@iefun,... @befun,xmesh,tspan,opt) [uint,dudxintJ ; pdeval(m,xmesh,ui,xint)
4.4
Ubungsaufgaben
4.4.1
Feder-Masse-Schwinger
Lösung einer PDE Auswertung der Lösung
Betrachtet wird ein Feder-Masse-Schwinger gemäß Abb. 4.10. In der Ruhelage befindet sich die bewegliche Masse in der Stellung x = O. Es wird angenommen, dass sich die Masse in der Zeit von t = 0 bis t = 20 von 5 auf 1 linear verringert. Die Differentialgleichung des Feder-Masse-Systems ist gegeben durch Gleichung (4.34).
m(t) . x = -c· x - d·
x
(4.34)
ucj
l
eie Abb. 4.11: Elekt'f"'!scher Schwingkreis
neue Integration mit den Endwerten des letzten Abschnitts als Anfangswerte gestartet werden. Bestimmen Sie den Lösungsverlauf der Zustandsgrößen I und Uc im Intervall
4 Differentialgleichungen in MATLAB
98
= 0 ... 10- 3 . Stellen Sie die Lösungskurven grafisch über der Zeit dar. Die Differentialgleichungen des Schwingkreises lauten:
t
. 1 Uc = -·1 C
(4.35)
. 1 R 1 = - - . Uc - -·1 L
4.4.3
In dieser Aufgabe wird ein Ball untersucht, der im freien Fall auf eine elastische Oberfläche trifft. Die Oberfläche besitzt eine Elastizität c und eine Dämpfung d, wodurch der Ball wieder reflektiert wird. Auf der Oberfläche ist die Positionskoordinate x = O. Die Bewegung des Balls mit der Masse m wird durch zwei verschiedene Differentialgleichungen beschrieben. Im freien Fall gilt mit der Erdbeschleunigung 9 die Gleichung (4.36).
x=-g
(4.36)
Während der Berührungsphase mit der elastischen Oberfläche gilt Gleichung (4.37).
x=
-c . x - d .
x-
m .9
(4.37)
Die Bewegung kann in zwei Phasen eingeteilt werden: Freier Fall bis x = 0 und Berührung mit der Oberfläche für x < O. Die Übergänge zwischen diesen Phasen sollen exakt detektiert und die einzelnen Lösungstrajektorien zur grafischen Darstellung zusammengesetzt werden. Wählen Sie den Solver ode45 und die Option Events entsprechend aus. Die folgenden Zahlenwerte sind gegeben: m = 1, c = 300, d = 0.5 und 9 = 9.81. Bestimmen Sie die Lösungstrajektorie für die Zeitspanne von 20 s unter Berücksichtigung der Umschaltung zwischen den Bewegungsphasen. Verwenden Sie die Anfangswerte xo = 1 und Xo = 0 und stellen Sie das Ergebnis grafisch dar.
4.4.4
Kettenlinie
Ein Seil soll an den Punkten (0,0) und (0,1) im karthesisehen Koordinatensystem aufgehängt werden. Es wird nur von seinem eigenen Gewicht m· 9 belastet. Der sich einstellende Verlauf y(x) wird durch die folgende Differentialgleichung mit Randbedingungen beschrieben: y" =
av + 1
Regelungstechnische Funktionen Control System Toolbox
L
Springender Ball
m .
5
y/2
y(O) = 0
y(l)
=
0
(4.38)
Im Parameter a sind Länge und Masse des Seils sowie die horizontale Spannkraft enthalten. Es gilt a = 4. Berechnen Sie durch Lösung eines Randwertproblems den Verlauf y(x), den das hängende Seil beschreibt. Verwenden Sie als Startlösung eine waagrechte Gerade mit der Gleichung y = -0.5.
Ein für den Regelungstechniker und Systemtheoretiker bedeutsames und äußerst hilfreiches Werkzeug stellt die Control System Toolbox dar. Mit ihrer Hilfe lassen sich alle Schritte der regelungstechnischen Untersuchung eines Systems durchführen. Zur Vertiefung sei auf die Fachliteratur verwiesen: [4, 17, 18, 19,22, 26, 27, 29J. • Modellhafte Beschreibung linearer, zeitinvarianter Systeme in zeitkontinuierlicher und zeitdiskreter Form (Übertragungsfunktion, Nullstellen-PolstellenDarstellung, Zustandsdarstellung, Frequenzgang-Daten-Modelle; Kap. 5.1) • Umwandeln und Bearbeiten der Systeme (Kap. 5.2), Analyse der Systemeigenschaften (Dynamik, Zeit- und Frequenzantwort; Kap. 5.3) • Entwurf und Optimierung von Reglern (Wurzelortskurve, SISO Design Tool, Zustandsregelung und -beobachtung, LQ-Optimierung, KaIman-Filter; Kap. 5.4) Zusätzlich stehen noch Bewertungsalgorithmen für Probleme der numerischen Zuverlässigkeit zur Verfügung (Kap. 5.5), die überwiegend in M-Files abgelegt sind und somit für Änderungen und Ergänzungen offen stehen (hierzu siehe [5, 10, 16, 35, 36, 45]).
5.1
ModelIierung linearer zeitinvarianter Systeme LTI-Modelle
Zu Beginn einer regelungstechnischen Untersuchung steht die ModelIierung des gegebenen Systems. Ausgehend von den physikalischen Gesetzen wird eine, üblicherweise mathematische, Systembeschreibung hergeleitet, die die Ursache-WirkungsZusammenhänge zwischen den Eingängen u und den Ausgängen y beschreibt. MATLAB stellt nun für lineare zeitinvariante Systeme (LT1-Systeme) der Typen SingleInput/Single-Output (SISO) und Multiple-Input/Multiple-Output (MIMO) (zeitkontinuierlich und -diskret) die folgenden vier Darstellungsarten zur Verfügung:
• Übertragungsfunktion (Transfer Function TF) • Nullstellen-Polstellen-Darstellung (Zero-Pole-Gain ZPK) • Zustandsdarstellung (State-Space SS) • Frequenzgang-Daten-Modelle (Frequency Response Data FRD)
5 Regelungstechnische Funktionen - Contral System Toolbox
100
Hierbei stellen die Modelle TF, ZPK und SS parametrische Beschreibungsformen dar, während FRD-Modelle zur Darstellung und Analyse von gemessenen oder simulierten Frequenzgang-Verläufen dienen. Die Analyse bei FRD-Modellen beschränkt sich folglich auch nur auf Frequenzraum-Methoden.
Achtung:
Die Koeffizienten der Modelle TF, ZPK und SS können auch aus der Menge der komplexen Zahlen stammen! Allerdings können für solche Modelle nicht .alle Funktionen verwandt werden, nämlich Zeitbereichsantworten (Kap. 5.3.3), margin und allmargin (Kap. 5.3.4) und rlocus (Kap. 5.4.1).
5.1 ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle Erstellen von TF-MIMO-Systemen
MIMO-Systeme lassen sich als zweidimensionale Matrix H von Übertragungsfunktionen darstellen, wobei das Matrixelement h ij für die Übertragungsfunktion vom Eingang j zum Ausgang i steht; die Zeilen entsprechen also den Ausgängen und die Spaltenden Eingängen (Gleiche Anordnung wie die D-Matrix der Zustandsdarstellung, Kap. 5.1.3).
[ h u h 12 ] h 21 h 22
H
Übertragungsfunktion - Transfer Function TF
5.1.1
Eine Übertragungsfunktion ist eine rationale Funktion in s mit dem Zählerpolynom num (eng!. numerator, Zähler) und dem Nennerpolynom den (eng!. denominator, Nenner) und beschreibt das Übertragungsverhalten eines Systems im Laplace-Bereich.
h(s) = num (s) den(s)
am sm bn sn
+ am -1 S=-l + ... + a1 s + ao + bn- 1 sn-1 + ... + b1 S + bo
101
n1Lmu denu num21 [ den21
num 12 ] den12 num22 den22
S2~
[ S2
2s - 3 ] s+1 s+5 -1 s+2 + 5s + 4 2s 2 + 6s + 10
(5.2)
Die Eingabe in MATLAB kann auf zwei Arten erfolgen: 1. Definieren der einzelnen TF-SISO-Übertragungsfunktionen mit tf
(5.1)
Erstellen von TF-SISO-Systemen Übertragungsfunktionen von SISO-Systemen lassen sich auf zwei Arten definieren: 1. Befehl tf Cnum, den): Eingabe des Zählerpolynoms num und des Nennerpolynoms den jeweils als Vektoren mit Koeffizienten von s in absteigender Reihenfolge von s. »h = tf([2 -3],[1 1]) Transfer function: 2 s - 3
I
»h11 »h12 » h21 » h22
= = = =
tf([2 -3],[1 1]); tf([l 1 -6],[1 5]); tf([l 2],[1 5 4]); tf(-1,[2 6 10]);
oder als rationale Funktionen in s: » s = tf('s'); »h11 (2*s-3) / (s+l); »h12 (s"2+s-6) / (s+5); »h21 (s+2) / (s"2+5*s+4); » h22 = -1 / (2*s·2+6*s+10);
Zusammenfügen zur Matrix H: »
H = [h11 h12 ; h21 h22];
s + 1
2. Rationale Funktion in s: Es wird zuerst die Variable s als TF-Modell definiert und dann die Übertragungsfunktion als rationale Funktion in seingegeben.
» s
=
2. Definieren von zwei Cell Arrays der Dimension Ny x Nu (Ny: Anzahl der Ausgänge, Nu Anzahl der Eingänge): Der eine enthält alle Zählerpolynome (NUM), der andere alle Nennerpolynome (DEN).
tf ( ',s ' )
[ nu n12 ] n21 n22
NUM
Transfer function: s
»
h = (s+2) / (s"2 + 5*s + 4)
Transfer function: s + 2 s"2 + 5 s + 4
Achtung:
Wurde s als TF-Modell deti.niert, so werden alle folgenden mit rationalen Fhnktionen in s erstellten Modelle als TF-Modelle interpretiert, bis s neu belegt oder in ein ZPK-Modell umgewandelt wird.
DEN
12 [ du d ] d21 d22
(5.3)
Auch hier werden in MATLAB jeweils die Vektoren mit den Koeffizienten von s in absteigender Reihenfolge von seingegeben.
» NUM » DEN
= { [2 -3] = {[1 1]
[1 1 -6]
;
[1 2] -1 };
[1 5] ; [1 5 4] [2 6 10] };
Aufruf von tf mit den Parametern NUM und DEN.
» H = tf(NUM,DEN);
5 Regelungstechnische Funktionen - Contral System Toolbox
102
5.1 Modellierung linearer zeitinvarianter Systeme - LTI-Modelle
103
Die Ausgabe ist in beiden Fällen identisch:
Erstellen von ZPK-SISO-Systemen
»H
Wie bei den TF-Modellen stehen auch hier zwei Möglichkeiten zur Verfügung, ein ZPKModell zu erzeugen:
Transfer function from input 1 to output ... 2 s - 3
1. Befehl zpk (z,p, k): Eingabe des Nullstellenvektors z ([-6 1 1]), des Polstellenvektors P ([-5 1]) und des (skalaren) Verstärkungsfaldors k (3).
#1:
s + 1
#2:
» h
s + 2 -------------
3 (s+6) (s-1)"2
Transfer function from input 2 to output ... s"2 + s - 6
#2:
zpk([-6 1 1],[-5 1],3)
Zero/pole/gain:
s"2 + 5 s + 4
#1:
=
(s+5) (s-1)
----------s + 5
2. Rationale Funktion in s: I-Iierzu wird die Variable s a.ls ZPK-Modell definiert und dann die Übertragungsfunktion als rationale Funktion in seingegeben.
-1 ---------------2 s"2 + 6 s + 10
»s
zpk('s')
Zero/pole/gain; s
Systeme nur mit Verstärkung
2 * 1 I «S-1)*(8+2»
»h
Bestehen alle Übertragungsfunktionen nur aus Verstärkungsfaktoren, so genügt folgender Aufruf, um das TF-Modell G des Systems zu erzeugen:
Zero/pole/gain: 2
» G = tf([1 2 ; 3 0]) (s-1) (s+2)
Transfer function from input 1 to output ... #1:
1
#2:
3
Achtung:
Transfer function from input 2 to output ... #1:
2
#2:
0
5.1.2
Erstellen von ZPK-MIMO-Systemen
Nullstellen-Polstellen-Darstellung - Zero-Pole-Gain ZPK
Eine der Übertragungsfunktion ähnliche Beschreibungsform des Übertragungsverhaltens ist die Nullstellen-Polstellen"Darstellung:
h(s)
=
k. (s - zil' .... (s - Zm-l) . (s - zm) (s Pi)· ... · (s - Pn-l) . (s - Pn)
Wurde s als ZPK-Modell definiert, so werden alle folgenden mit rationalen Punktionen in s erstellten Modelle als ZPK-Modelle interpretiert, bis s neu belegt oder in ein TP-Modell umgewandelt wird.
Auch hier wird die zweidimensionale Matrix H mit der Dimension Ny x N1l und den Matrixelementen hij für die Übertragungsfunktion vom Eingang j (Spalten) zum Ausgang i (Zeilen) aufgestellt.
H = [
h
ll
k l2
kll . ;::
h 21 h 22
[
k 21
.
Z12]
Pl2
hl2 ] Z21 . P21
k
22 . Z22
P22
(5.4)
Hier ist k ein reeller oder komplexer Verstärkungsfaktor, die Zl ... Zm bzw. die PI·' .Pn sind die reellen und/oder konjungiert komplexen Paare der Nullstellen (eng!. zeros) bzw. der Polstellen (eng!. poles). Sie entsprechen somit den Wurzeln des Zählers bzw. des Nenners der Übertragungsfunktion.
2. _ _1 (s-1)·(s+2)
3 . -,,;(S_-_l..:.,)2_.-,'-(s_+-----,-:.6) (s - 1) . (s + 5) (5.5)
1 . ~(s_-_l--,--) (;-s_-.::..:.2) (s+4)'(8+1) --c'
s+l
-1 . -,---,;----::--::-;-
(S2
+ 2 s + 2) . (s + 1)
5 Regelungstechnische Funktionen - Control System Toolbox
104
5.1.3
Die Eingabe in MATLAB erfolgt auf die zwei schon bekannten Arten:
I
I
» 8 = Zpk('8'); » h11 = 2 * 1 / «8-1)*(8+2»: » h12 = 3 * (8·2-2*8+1)*(8+6) / (8·2+4*8-5); » h21 = (s·2-3*8+2) / (s·2+5*s+4); » h22 = -1 * (s+1) / «s-2+2*s+2)*(s+1»;
» h21 » h22
= = = =
zpk([], [-2 1] ,2); zpk( [-6 1 1], [-5 1],3): zpk([i 2] ,[-4 -1] ,1): zpk(-1,[-1 -1+i -1-i],-1);
oder als rationale Funktionen in s:
Zustandsdarstellung - State-Space SS
Zustands-DGL:
x
Ax
+
Bu
(5.7)
Ausgangsgleichung:
y
Cx
+
Du
(5.8)
mit
Zusammenfügen zur Matrix H:
x: u: y:
Zustandsvektor Eingangsvektor Ausgangsvektor
(Nx x 1) (Nu x 1) (Ny x 1)
A: B: C: D:
» H = [hl1 h12 : h21 h22]: 2. Definieren von zwei Cell Arrays (Dimension Ny x Nu, Ausgänge i = 1 ... Ny, Eingänge j = 1 ... Nu) für die Nullstellenpolynome (Z) und die Polstellenpolynome (P) sowie der Ny x Nu-Matrix der Verstärkungsfaktoren (K).
Z=
I
[
ZU
Z12
Z21
Z22
]
P=
Pu
P12
P21
P22
» Z
= { [] [-6 1 1 ] : [1 2] -1 }; » P = { [-2 1] [-5 1] : [-4 -1] [-1 -1+i -1-i] }: » K = [23; 1 -1];
Aufruf von zpk mit den Parametern Z, p und K.
» H = zpk(Z,P,K) Zero/pole/gain from input 1 to output ... 2 #1:
-----------
(s+2) (s-1)
K =
ku k 12 [ k 21 k 22
105
In der Zustandsdarstellung wird nicht die Übertragungsfunktion zwischen den Eingangsund Ausgangsgrößen betrachtet, sondern für jedes Speicherelement (;;: Integrator) eine Differentialgleichung 1. Ordnung ermittelt. So ergibt sich für ein System mit n Speichern nicht eine Übertragungsfunktion n-ter Ordnung, sondern ein Satz von n Differentialgleichungen 1. Ordnung. In Matrix-Schreibweise ergeben sich für den Fall eines Multiple-InputjMultiple-Output-Systems (MIMO) folgende Gleichungen:
1. Definieren der einzelnen ZPK-SISO-Übertragungsfunktionen mit zpk
» hll » h12
5.1 ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle
]
(5.6)
Systemmatrix Eingangsmatrix Ausgangsmatrix Durchschaltmatrix
(Nx (Nx (Ny (Ny
x Nx) x Nu) x Nx) x N1l)
Hierbei ist Nx die Ordnung des Systems bzw. die Anzahl der Speicherelemente, Nu die Zahl der Eingangsgrößen und Ny die Anzahl der Ausgangsgrößen. Im häufig auftretenden Fall eines Single-InputjSingle-Output-Systems (8ISO) mit nur einer Eingangs- und einer Ausgangsgröße vereinfachen sich die Gleichungen (5.7) und (5.8) durch Ersetzen von B durch b (Nx x 1), C durch c T (1 x Nx) und D durch d zu (b,c Spaltenvektoren, d skalar): Zustands-DGL:
x
Ax
+
bu
(5.9)
Ausgangsgleichung:
y
cT
+
du
(5.10)
X
Die Eingabe in MATLAB erfolgt mit dem Befehl ss(A,B,C,D), wobei A, B, C und D die entsprechenden System-Matrizen bzw. -Vektoren sind: • Kein Durchschaltanteil: Da in der physikalischen Realität die meisten Strecken Tiefpass-Charakteristik aufweisen, entfällt in der Regel der Durchschaltanteil, so dass D = 0 (d = 0) gesetzt werden darf, unabhängig von den Dimensionen von 11 und y. » ss(A,B,C,O)
(s-1) (s-2) #2:
-----------
(s+4) (s+1) Zero/pole/gain from input 2 to output ... #1:
3 (s+6) (s-1)-2 ---------------
(s+5) (s-1) - (s+1) #2:
--------------------
(s+1) (8-2 + 2s + 2)
• SISO-System: Ist der Vektor c als Spaltenvektor definiert, so muss er bei der Parameterübergabe transponiert werden! » 88(A,B,C' ,D)
• Zustandsminimale Darstellung: Wird das System sys und der zusätzliche Parameter 'min' übergeben, so wird ein SS-Modell erzeugt, das aus der minimalen Anzahl von Zuständen besteht.
» ss(sys, 'min')
5 Regelungstechnische Funktionen - Control System Toolbox
106
Als Beispiel dient nun ein MIMO-System mit zwei Zuständen, zwei Eingängen und drei Ausgängen. Die beschreibenden Matrizen sind mit folgenden Werten belegt:
[~! ]
A
B
110 oI 2
C
[: : 1
D
[ 000 0 0 0 000
5.1 ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle
Mathematisch gesehen stellt die Frequenzgangfunktion die komplexe Antwort eines Systems auf Anregung mit einem sinusförmigen Eingangssignal dar:
1
F(jw) = 1F(jw) I. ejcp(w)
1
F(jw)
1
=
MATLAB-Eingabe: »
SYS = ss([l 2
3 4], [1 1 0
o
1 2], [0 1
1 2
107
3 1],0)
am (jw)m + ... + adjw) + ao bn (jw)n + ... + b1 (jw) + bo (5.12)
JRe{F(jw)}2 + Im{F(jw)}2
(5.13)
Im{F(jw)} ) ( Re{F(jw)}
(5.14)
= arctan
a = xl x2
xl 1 3
x2 2 4
xl x2
ul 1 0
u2 1
Erstellen von FRD-SISO-Systemen Die Eingabe in MATLAB geschieht mit dem Befehl frd (ant,jreq, eh). fIierbei ist ant der Vektor mit den komplexen Frequenzantworten zu den entsprechenden im Vektor freq gespeicherten Frequenzen. eh ist ein optionaler Parameter für die Einheit der Frequenz in 'radis' (Standardwert) oder 'Hz'.
b =
u3 0 2
Als Beispiel dient hier ein PT1-Glied: I
F
c = yl y2 y3
xl 0 1 3
x2 1 2 1
yl y2 y3
ul 0 0 0
u2 0 0 0
1 +jwT
I
l-jwT + (wT)2
»
freq = [0.01 0.1 1 10 100 1000 10000] ; (l-j*freq)./ (l+freq. -2) ; »sysfrd = frd(ant,freq,'Units','rad/s')
» ant
d =
VI +I (wT)2 . e
-j
arctan(wT)
(5.15)
% Frequenzpunkte
% PTl
erzeugen
>From input 1 to:
5.1.4
u3 0 0 0
Frequency(rad/s) 0.01 0.10 1.00 10.00 100.00 1000.00 10000.00
Frequenzgang-Daten-Modelle - Frequency Response Data FRD
Im Gegensatz zu den drei bereits vorgestellten Modellen basiert das F'requenzgangDaten-Modell nicht auf einer mathematischen Beschreibung des Systems, sondern auf einem aus einer Messung oder Simulation aufgenommenen Frequenzgang-Datensatz. Dieser kann z.B. aus der Messung der Amplitude und des Phasenwinkels des Ausgangssignals eines Systems bei Anregung mit einem sinusförmigen Signal bei unterschiedlichen Frequenzen ermittelt werden. Das Ausgangssignaly(t) geht aus dem Eingangssignal sin(wt) wie folgt hervor:
y(t)
IG(w)l·sin(wt+
IF(jw)I·Im{ej(wt+
output 1 9.99900e-001-0.009999i 9.9009ge-001-0.099010i 5.00000e-001-0.500000i 9. 9009ge-003-0.099010i 9. 99900e-005-0.009999i 9.9999ge-007-0.001000i 1.00000e-008-0.000100i
Continuous-time frequency response data model.
Erstellen von FRD-MIMO-Systemen FRD-MIMO-Systeme werden auf die gleiche Art und Weise erzeugt, nur dass hier der Frequenzantworten-Vektor ant ein Tensor 1) der Dimension Ny x Nu x Nf mit der Anzahl der Ausgänge Ny, der Anzahl der Eingänge Nu und der Länge Nf des Frequenzenvektors freq ist. 1)
Multidimensionale Matrix, siehe [6, 341.
5 Regelungstechnische Funktionen - Control System Toolbox
108
Zeitdiskrete Darstellung von LTI-Modellen
5.1.5
Bei zeitdiskreten Modellen wird die z- Transformation statt der Laplace-Transformation verwendet, die Differentialgleichungen gehen in Differenzengleichungen über. Zeitdiskrete Modelle werden analog den zeitkontinuierlichen Modellen definiert, zusätzlich muss nun die Abtastzeit T s als Parameter Ts angegeben werden. Ist die Abtastzeit noch nicht festgelegt, so wird Ts auf den Wert -1 gesetzt. Die MATLAB-Befehle lauten:
systf syszpk sysss sysfrd
tf (num,den,Ts) zpk (z,p,k,Ts) ss (a,b,c,d,Ts) frd (ant,jreq,Ts)
Zeitdiskrete TF- und ZPK-Systeme
Auch hier gibt es wieder zwei Möglichkeiten zur Eingabe:
Zeitdiskrete Übertragungsfunktion in DSP-Format In einigen Bereichen der Regelungstechnik, z.B. in der digitalen Signalverarbeitung, werden Übertragungsfunktionen oft als rationale Funktionen in der Variablen Z-l und in aufsteigender Reihenfolge angegeben. Dies kollidiert bei der normalen Eingabe von Übertragungsfunktionen in z mit unterschiedlicher Ordnung von Zähler- und Nennerpolynom mit der Regel der absteigenden Reihenfolge. Um dieses Problem zu vermeiden, bietet MATLAB den Befehl filt(num,den,Ts ), der ein TF-Modell in DSP-Format erzeugt. Da es sich hierbei immer um ein zeitdiskretes Modell handelt, kann die Angabe für T s auch unterbleiben.
Transfer function: 1 - 0.5 z--l
Z-l _
hDSP
1 + z--l - 2 z--2
1 -I- z
0, 5z- 2 1 -
2z- 2
z - 0,5 -I- z - 2
hTF
Z2
Sampling time:·O.Ol
Zeitdiskrete SS-Systeme
1. Befehl tf (num, den, T s ) bzw. Befehl zpk(z,p, k, TB): Eingabe der entsprechenden System-Parameter wie in Kap. 5.1.1 und 5.1.2 und der Abtastzeit T s . h = tf([l -0.5],[1 1 -2],0.01)
109
»h = filt([l -0.5],[1 1 -2],0.01)
Eine zeitdiskreteÜbertragungsfunktion wird als rationale Funktion in z definiert, entweder als Übertragungsfunktion oder in Nullstellen-Polstellen-Darstellung: z - 0,5 z - 0,5 h ZPK hTF z2 -I- z - 2 (z -I- 2)(z - 1)
»
5.1 ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle
»h = zpk(0.5,[-2 1],1,0.01)
Transfer function: z - 0.5
Zero/pole/gain: (z-0.5)
z-2 + z - 2
(z+2) (z-l)
Sampling time: 0.01
Sampling time: 0.01
Die zeit diskrete Zustandsdarstellung eines SS-Systems lautet (mit alk)
=
a(kTs )):
Zustands-DGL:
x(k -I- 1)
A x(k) -I- B ulk)
(5.16)
Ausgangsgleichung:
y(k)
C x(k) -I- D ulk)
(5.17)
Die Eingabe erfolgt genauso wie in Kap. 5.1.3 zuzüglich der Eingabe von T s . »
2. Rationale Funktion in z: Erst die Variable z als TF- bzw. ZPK-Modell definieren und dann die Übertragungsfunktion als rationale Funktion in zeingeben. »z
tf('z',O.Ol)
»z
sys = ss([ 3 ],[ 1 3 ],[ 0.5 ],0,-1);
LTI-Modelle tf (num, den[, T s ])
Übertragungsfunktion: Vektor der Zählerkoeffizienten num, Vektor der Nennerkoeffizienten den
zpk (z, p , k[, T s ])
N ullstellen-Polst ellen-Darstellung: Nullstellenvektor z, Polstellenvektor p, Verstärkungsvektor k
ss CA, B, C ,D[, T s ])
Zustandsdarstellung: Systemmatrix A, Eingangsmatrix B, Ausgangsmatrix C, Durchschaltmatrix D
zpk('z',O.Ol)
Transfer function: z
Zero/pole/gain: z
Sampling time: 0.01
Sampling time: 0.01
» h = (z-0.5) I (z-2 + z - 2)
»
Transfer function: z - 0.5
Zero/pole/gain: (z-0.5)
z-2 + z - 2
(z+2) (z-1)
Sampling time: 0.01
Sampling time: 0.01
h = (z-0.5) I «z+2)*(z-1»
frd Cant, freq, eh[, T s ]) Frequenzgang-Daten-ModeIIe: Frequenzantwort ant, Vektor der Frequenzen freq, Einheit radis (Standard) oder Hz (eh='Units', 'radis')
Ts
Abtastzeit für zeitdiskrete Systeme ohne T s : zeitkontinuierliches Modell T s = -1: zeitdiskretes Modell, T s unspezifiziert
5 Regelungstechnische Funktionen - Control System Toolbox
110
5.1.6
Zeitverzögerungen in LTI-Modellen
Da die Zeitverzögerungen durch das Setzen von hierfür vordefinierten Eigenschaften der LTI-Modelle erfolgt, empfiehlt sich vor dem Weiterlesen das Studium von Kap. 5.2.1.
Zeitverzögerungen zwis,Ghen Ein- und Ausgängen Für TF-, ZPK- und FRD-Modelle lassen sich im Frequenzbereich Zeitverzögerungen Td zwischen den einzelnen Ein- und Ausgängen festlegen. In der Laplace-Notation be,deutet dies eine Multiplikation der Übertragungsfunktion mit e-Td s. In MATLAB wird die Zeitverzögerung zwischen Eingang j und Ausgang i eingegeben über die Eigenschaft ioDelay des LTI-Modells, der eine Matrix Td mit den Zeitverzögerungen der einzelnen Ein-/ Ausgänge zugewiesen wird (Die Matrix muss die gleiche Dimension wie das LTI-Modell sys haben): set(sys,'ioDelay',Td) Als Beispiel dient das TF-MIMO-Modell aus Kapitel 5.1.1, S. 101: Es wird der Übertragungsfunktion vom Eingang 2 zum Ausgang 1 eine Zeitverzögerung von 0,4 Sekunden hinzugefügt.
» H(1,2)
° 0])
Transfer function: s'2 + s - 6 exp(-0.4*s) * s + 5
Bei zeitdiskreten Systemen funktioniert die Eingabe der Verzögerungszeiten ebenso wie bei den zeitkontinuierlichen Systemen, nur werden hier die Vielfachen n der Abtastzeit T s übergeben. Dies entspricht im z-Bereich dann einer Multiplikation mit z-n, was dem Hinzufügen eines n-fachen Poles bei z = gleichkommt. Das folgende Beispiel zeigt die Erzeugung einer zeit diskreten Eingangsverzögerung von vier Abtastperioden,
°
» h = tf([l -0.5],[1 1 -2],0.01,'InputDelay',4)
Transfer function: z - 0.5 z'(-4) * ----------z'2 + z - 2 Sampling time: 0.01
Pade-Approximation für zeitkontinuierliche Systeme 2 ) Durch die Pade-Approximation wird die Zeitverzögerung e- Td S des zeitkontinuierlichen Systems angenähert durch eine rationale Funktion. Dies geschieht mit dem Befehl pade (sys,n) pade (sys, ni, no, nio)
[num,denJ = pade (sys,ni,no,nio) sysx = pade (sys, ni, no, nio)
Hierbei gibt der Parameter n die Ordnung der rationalen Funktion an. Bei MIMOSystemen kann die Ordnung jeweils einzeln für jeden Eingang im Vektor ni, für jeden Ausgang im Vektor no und in der Matrix nio für die Zeitverzögerungen zwischen den Ein- und Ausgängen angegeben werden. Die Ausgabevariablen num und den enthalten Zähler und Nenner der rationalen Approximations-Funktion als TF-Modell, während bei sysx der Modell-Typ des Ursprungsmodells sys erhalten bleibt. So ergibt sich mit der Pade-Approximation für die Teilübertragungsfunktion H (1,2) aus obigem Beispiel die rationale Übertragungsfunktion:
» pade(H(1,2» Zeitverzögerungen am Eingang oder Ausgang Existiert am Ein- oder Ausgang eines Modells in Zustandsdarstellung eine Zeitverzögerung, so kann diese mittels der Eigenschaften InputDelay bzw. OutputDelay in das SS-LTI-Modell eingebaut werden. Die Zustandsdarstellung des Systems im Zeitbereich lautet mit der Verzögerungszeit T de zwischen Eingang u und Zustandsvektor x bzw. T da zwischen Zustandsvektor x und Ausgang y wie folgt:
+
Zustands-DGL:
:ic(t)
A x(t)
Ausgangsgleichung:
y(t)
C x(t - Tda)
B u(t - T de )
+ D u(t -
(5.18)
(Tde
111
Zeitverzögerungen bei zeitdiskreten Systemen
Oft treten in realen Systemen Zeitverzögerungen auf, d.h. die Signale werden nicht sofort, sondern erst nach Ablauf einer bestimmten Zeit am Eingang wirksam, am Ausgang sichtbar oder innerhalb des Systems treten verzögernde Effekte auf. Zur ModelIierung bietet die Control System Toolbox nun die im Folgenden erläuterten Befehle.
» set (H, 'ioDelay' , [0 0.4
5.1 ModelIierung linearer zeitinvarianter Systeme - LTI-Modelle
+ Tda))
(5,19)
Hiermit vereinfacht sich auch die Eingabe von gleichen Zeitverzögerungen zwischen Einund Ausgängen: Anstatt für jedes einzelne Matrixelement für die Werte von ioDelay den gleichen Wert angeben zu müssen, benötigt man hier nur die Angabe eines Vektors mit den Zeitverzögerungen am Eingang (InputDelay) oder Ausgang (OutputDelay).
Transfer function: -s'3 + 4 s'2 + 11 s - 30 s-2 + 10 s + 25
Zeitverzögerung - Eigenschaften und Befehle sys. InputDelay
Eingangs-Zeitverzögerung des LTI-Modells sys sys.OutputDelay Ausgangs-Zeitverzögerung des LTI-Modells sys sys. ioDelay Ein-/ Ausgangs-Zeitverzögerungen des LTI-Modells sys totaldelay (sys) Ermittelt die gesamte Zeitverzögerung des Systems delay2z (sys) Ersetzt Zeitverzögerungen durch Pole bei z = 0 pade (sys, n) Pade-Approximation mit Ordnung n 2) Im zeitdiskreten Fall entspricht der Pade-Approximation der Befehl delay2z,
5 Regelungstechnische Funktionen - Control System Toolbox
112
5.2
Arbeiten mit LTI-Modellen
5.2.1
Eigenschaften von LTI-Modellen
5.2 Arbeiten mit LTI-Modellen
Abrufen von Modell-Eigenschaften Die einzelnen Modell-Eigenschaften können auf zweierlei Arten abgerufen werden: 1. Befehl get (sys, ' EigN ame' ): Der Befehl get ist das Pendant zu set und liefert den Wert der angegebenen Eigenschaft zurück. Wird nur get (sys) aufgerufen, so werden sämtliche Eigenschaften von sys angezeigt bzw. an eine Variable übergeben.
LTI-Objekte Unabhängig von der gewählten Darstellungsart eines Systems speichert MATLAB alle Daten eines LTI-Modells als so genanntes LTI-Objekt (LTI-object) in einer Variablen ab, die die Form einer Struktur bzw. eines Gell Armys (Kap. 2.2.4) aufweist. Eigenschaften eines LTI-Objekts bestehen also aus verschiedenen Feldern mit vorgegebenen Namen (EigName) und den ihnen zugewiesenen Werten (EigWert). Der Zugriff auf die einzelnen Felder (Eigenschaften) erfolgt entweder mit dem". "Befehl oder mit den Befehlen get (Abrufen der Eigenschaften) und set (Ändern der Eigenschaften), wobei bei den Eigenschaftsnamen Groß- und Kleinschreibung nicht unterschieden wird. Online-Hilfe zu den Eigenschaften von LTI-Objekten erhält man mit ltiprops.
113
2. ". "-Befehl: Mit dem Befehl sys. EigN ame wird der Wert EigWert der Eigenschaft EigN ame des LTI-Objekts sys angezeigt oder anderen Variablen zugewiesen.
Beispiel Erst wird mit tf eine Übertragungsfunktion sys definiert, deren Eigenschaft 'Notes' dEm String 'LTI-Objekt' zugewiesen bekommt. »sys
tf([1 -0.5],[1 1 -2],-1,'Notes','LTI-Dbjekt')
Setzen und Ändern von Modell-Eigenschaften Um einer Eigenschaft EigN ame den Wert EigWert zuzuweisen, gibt es drei Möglichkeiten:
Transfer function: z - 0.5 z-2 + z - 2
1. Befehle tf, zpk, ss oder frd: Beim Erstellen eines LTI-Objekts können eine oder mehrere Eigenschaften durch paarweise Angabe ihres Namens Ei 9 Name und ihres Wertes EigWert bestimmt werden:
sys sys sys sys
tf (num,den,Ts , ' EigName' ,EigWert, ... )
Sampling time: unspecified
Dann wird mit set die noch unspezifizierte Abtastzeit Ts auf 0.05 gesetzt und die Eigenschaft' InputName ' mit dem String 'Eingang' belegt.
zpk (z,p,k,Ts , 'EigName' ,EigWert)
»
ss (a,b,c,d,Ts , ' EigName' ,EigWert) frd (ant,jreq,T"eh, 'EigName' ,EigWert)
»sys.DutputName
2. Befehl set: Hier werden die Werte einer oder mehrerer Modell-Eigenschaften wie folgt gesetzt oder geändert: set (sys, 'EigNamel' ,EigWertl, 'EigName2' ,EigWert2, ... ) Wird der set (sys)-Befehl ohne zusätzliche Parameter aufgerufen, so werden alle für ein LTI-Objekt möglichen Einstellungen angezeigt. 3. ". "-Befehl: Mit dem". "-Befehl für Strukturen können auf einfache Weise die Eigenschaften von LTI-Objekten geändert werden. So wird mit
sys.EigName
EigWert
der Eigenschaft EigName des Modells sys der Wert EigWert zugewiesen.
set(sys,'Ts' ,0.05,'InputName' ,'Eingang') 'Ausgang'
Transfer function from input "Eingang" to output "Ausgang": z -0.5 z-2 + z - 2 Sampling time: 0.05
Weiter wird der Variablen abtastzeit die Abtastzeit Ts und der Variablen notiz der Inhalt der Eigenschaft Notes zugewiesen. »abtastzeit abtastzeit 0.0500
sys.Ts
» notiz = get(sys, 'Notes') notiz = 'LTI-Objekt'
5 Regelungstechnische Funktionen - Control System Toolbox
114
5.2 Arbeiten mit LTI-Modellen
Abschließend werden mit get alle Eigenschaften angezeigt.
» get(sys) num: den: Variable: Ts: InputDelay: OutputDelay: ioDelayMatrix: InputName: OutputName: InputGroup: OutputGroup: Notes: UserData:
{[O {[i
-O.5]} -2]}
'z' 0.05 0 0 0 {'Eingang'} {'Ausgang'} [ixi struct] [ixi struct] {'LTI-Objekt'}
115
Eigenschaften von TF-Modellen num
Zähler
Cell Array reeller Zeilenvektoren
den
Nenner
Variable
TF-Variable
Cell Array reeller Zeilenvektoren , s ' , 'p' , 'z' , 'q) oder 'z . . -1 '
Eigenschaften von ZPK-Modellen z
Nullstellen
Cell Array reeller Spaltenvektoren
P k
Polstellen
Cell Array reeller Spaltenvektoren
Verstärkungen
Variable
ZPK-Variable
zweidimensionale reelle Matrix 'S','p','z','q' oder 'z . . . -1'
Eigenschaften von SS-Modellen
[]
a
Systemmatrix
zweidimensionale reelle Matrix
Allgemeine und modellspezifische Eigenschaften
b
Eingangsmatrix
Es gibt nun die bei allen LTI-Objekten existierenden allgemeinen Eigenschaften (generic properties) und die von der Darstellungsart (TF, ZPK, SS, FRD) abhängigen modellspezifischen Eigenschaften (model-specific properties). In den folgenden Tabellen steht in der ersten Spalte der Name der Eigenschaft, in der zweiten Spalte eine kurze Beschreibung und in der dritten Spalte die Art des Wertes.
c d
Ausgangsmatrix Durchschaltmatrix
zweidimensionale reelle Matrix zweidimensionale reelle Matrix zweidimensionale reelle Matrix
e
Deskriptormatrix
zweidimensionale reelle Matrix
StateName
Namen der Zustände
Cell-Vector von Strings
Eigenschaften von FRD-Modellen Allgemeine Eigenschaften von LTI-Modellen Ts
Abtastzeit (in Sekunden)
Skalar
Frequency
Frequenzpunkte
Reeller Vektor
ResponseData Frequenzantwort
Komplexwertige mehrdim. Matrix
Uni ts
' radi s' oder 'Hz'
Einheit der Frequenz
InputDelay
Eingangs-Zeitverzögerung
Vektor
outputDelay
A usgangs-Zeitverzögerung
Vektor
ioDelay
Ein-/ Ausgangsverzögerungen
Matrix
InputName Output Name
Namen der Eingänge
Cell-Vector von Strings
Namen der Ausgänge
Cell-Vector von Strings
InputGroup outputGroup
Gruppen von Eingängen Gruppen von Ausgängen
Cell Array
Notes
Bemerkungen
Text
[num,den,Ts]
tfdata (sys)
Userdata
Zusätzliche Daten
beliebig
[z,p,k,Ts] [a,b,c,d,Ts]
zpkdata (sys) ssdata (sys)
Cant ,freq ,Ts]
frddata (sysjrd)
Cell Array
5.2.2
Schnelle Datenabfrage
Da MATLAB die Daten eines Modells in ein LTI-Objekt speichert (Kap. 5.2.1), gibt es zum schnellen und bequemen Auslesen der wichtigsten Modell-Daten folgende Befehle (sys: TF-, ZPK- oder SS-Modell; sysfrd: FRD-Modell):
5 Regelungstechnische Funktionen - Contral System Toolbox
116
5.2 Arbeiten mit LTI-Modellen
117
So liefert tfdata für die Übertragungsfunktion h = tf ([2 -3], [1 1]) aus Kap. 5.1.1:
5.2.4
» [num,den,Tsl
Von Interesse ist auch, wie bei Operationen auf LTI-Modellen deren Eigenschaften behandelt werden. Gleiches gilt beim Verknüpfen mehrerer Modelle verschiedener Typen. Obwohl dies oft von der Operation abhängig ist, lassen sich doch einige Grundregeln angeben:
=
tfdata(h)
num [lx2 double] den [lx2 double] Ts
• Diskrete LTI-ModelIe: Werden durch eine Operation zeit diskrete LTIModelle verknüpft, so müssen alle Modelle die gleiche Abtastzeit haben bzw. bis auf eine alle Abtastzeiten unspezifiziert sein (sys. Ts = -1). Die Abtastzeit des Ergebnisses ist dann die der Einzelmodelle, falls nicht alle Abtastzeiten unspezifiziert waren.
o %Abfrage des Cell arrays
» num{1,1} ans 2
-3
Da num und den bei tf sowie p und z bei zpk auch bei SISO"Systemen immer Cell Arrays sind, kann für diese Modell-Typen das Abspeichern in Zeilenvektoren und nicht in Cell Arrays mit dem Parameter 'v' erzwungen werden, wodurch sich der Zugriff vereinfacht. » [num,den,Tsl » num 2
5.2.3
=
Vererbung von LTI-Modell-Eigenschaften
tfdata(h,'v')
-3
e
Notes und UserData werden bei den meisten Operationen nicht vererbt.
e
Verknüpfung zweier Systeme: Werdtjn zwei Systeme mit Befehlen wie +, *, [,], [;], append oder feedback verknüpft, so werden die Namen für Ein- oder Ansgänge (InputNarne, OutputNarne) sowie Gruppen von Ein- oder Ausgängen (InputGroup, OutputGroup) vererbt, wenn sie bei beiden Systemen gleich sind. Andernfalls bleibt die entsprechende Eigenschaft des neuen Systems unbesetzt.
• Variable Variable:
Rangfolge der LTI-Modelle
Bei TF- und ZPK-Modellen gilt folgende Rangfolge:
Werden Operationen auf LTI-Modelle verschiedener Typen gleichzeitig angewendet oder erhalten Befehle als Eingabe unterschiedliche Modell-Typen, so wird der Typ des Antwortmodells nach folgender Rangliste bestimmt (A > B: A hat Vorrang vor B): FRD >
SS >
ZPK >
TF
(5.20)
Intern bestimmt MATLAB obiger Regel entsprechend zuerst den Modell-Typ mit der höchsten Priorität und wandelt dann alle Modelle anderen Typs in diesen um, bevor es die Operation ausführt. Soll diese Regel durchbrochen werden und die Ausgabe in einem bestimmten Modell-Typ erfolgen, so sind hier zwei Wege möglich (TF-Modell systf, SS-Modell sysss): • Vorheriges Umwandeln: Es werden erst alle Modelle in den gewünschten Modell-Typ umgewandelt und dann die Operation ausgeführt. sys
systf + tf(sysss)
%Erst umwandeln, dann rechnen
• Nachfolgendes Umwandeln: Es wird erst die Operation ausgeführt und das Ergebnis in den gewünschten Modell-Typ umgewandelt. sys
Achtung:
tf(systf + sysss)
%Erst rechnen, dann umwandeln
Die beiden Vorgehensweisen sind numerisch nicht identisch! Aufgrund der unterschiedlichen Abfolge der Umwandlungen kann es hier zu Problemen bei der numerischen Darstellung kommen (Kap. 5.5)!
5.2.5
Zeitkontinuierliche Modelle:
p >
s
Zeitdiskrete Modelle:
z~-1
>
q
> z
Umwandlung in einen anderen LTI-Modell-Typ
Um LTI-Modelle verschiedener Typen gemeinsam bearbeiten zu können, um sie zu verbinden oder um Operationen auf sie anwenden zu können, die nur für einen bestimmten Typ möglich sind, können die Typen ineinander umgewandelt werden. Explizite Umwandlung Soll ein LTI-Modell in einen bestimmten Typ umgewandelt werden, so geschieht dies mit den Befehlen zur Erstellung von LTI-Modellen, nur dass jetzt das umzuwandelnde Modell sys als Parameter übergeben wird:
sys sys sys sysfrd
tf (sys) zpk(sys) ss (sys) frd(sys,freq)
% Umwandlung %Umwandlung %Umwandlung %Umwandlung
in in in in
TF-Modell ZPK-Modell 55-Modell FRD-Modell
Hierbei können die Typen TF, ZPK und SS ohne weiteres ineinander umgewandelt werden, bei der Umwandlung in ein FRD-Modell muss zusätzlich noch der Frequenzenvektor freq angegeben werden. Eine Umwandlung eines FRD-Modells in einen anderen Typ ist nicht möglich.
5 Regelungstechnische Funktionen - Contral System Toolbox
118
Zusätzlich bietet MATLAB bereits folgende Umwandlungsfunktionen:
TF:
=
ZPK:
[z ,p ,k]
=
tf2zp(num, den)
SS:
[A,B,C,D]
=
tf2ss(num,den)
--------
ZPK --+
SS --+ ss2tf(A,B,C,D,iu)
Al 0 ] A = [ 0 A2
Y
Auch hier gelten die in Kapitel 5.5 aufgeführten Probleme bei der numerischen Darstellung von Systemen!
5.2.6
Arithmetische Operationen
Addition und Subtraktion Das Addieren bzw. das Subtrahieren zweier Systeme entspricht dem Parallel-Schalten, es werden also bei gleichem Eingangssignal die Ausgänge addiert oder subtrahiert:
Subtraktion:
Y
= GI . U
YI - Y2 = GI . U
+G2 . U -
G2 . U
GI'
GI' (G 2
V
sysl
*
,Y
A
-
sys
sysl + sys2
sys
sysl
Y
u
sys2
B
[Al B l C2] o A2
=
Abb. 5.1: Signalfiussplan Addition und Subtraktion
sysl - sys2
[B~~2]
C
u = G- 1 Y
sys
sysl
*
sys2
=
[Cl D l C 2
D
]
Dl D2
sys = inv(sys)
1
Linksseitige Matrix-Division:
GI- G2
sysl \ sys2
1
sysl / sys2
GI G 2-
Für Modelle in Zustandsdarstellung ergibt sich die Inversion mit D quadratisch und invertierbar zu: A = A-BD- I C
sys
(GI x G 2)· u
Abb. 5.2: Signalfiussplan Multiplikation
Inversion:
+
sysl + sys2
u)
Inversion, links- und rechtsseitige Matrix-Division: Diese Operationen sind natul(gemäß nur definiert für quadratische Systeme, d.h. Systeme mit der gleichen Anzahl von Ein- und Ausgängen (gleichbedeutend mit D ist quadratisch).
+', sys
·
sys2
Rechtsseitige Matrix-Division: u
D I ±D 2
Für Modelle in Zustandsdarstellung ergibt sich wieder:
Da es sich bei den LTI-Modellen um mathematische Darstellungsformen handelt, können auch die meisten (Matrix-) Operationen auf sie angewendet werden.
+ Y2
D
u 'I Sy~;--I v'l s;;~l~~ sys
Achtung:
YI
C = [Cl (- )C 2 ]
Multiplikation: Die Multiplikation entspricht der Reihenschaltung zweier LTIModelle, wobei wegen der matrixähnlichen Struktur auf die Reihenfolge der Systeme zu achten ist:
------
Automatische Umwandlung
Y
[~~]
B
sS2zp(A,B,C,D,iu) zp2ss(z,p,k)
Es gibt Operationen, die nur auf bestimmte Modell-Typen angewendet werden können. Werden nun Modelle eines anderen Typs als Parameter an so einen Befehl übergeben, so wandelt MATLAB diese erst in den benötigten Modell-Typ um und führt dann die entsprechende Operation aus. So berechnet z.B. der Befehl step die Sprungantwort eines Systems basierend auf der Zustandsdarstellung (SS), in die alle anderen Modell-Typen umgewandelt werden.
Addition:
119
Für Modelle in Zustandsdarstellung ergibt sich (- für Subtraktion):
zp2tf(z,p,k)
TF --+ [num, den]
5.2 Arbeiten mit LTI-Modellen
Addition Subtraktion
*
B
BD- I
Multiplikation Potenz Transposition
c
-D-IC
D
D- l
inv Matrix-Inversion / rechtsseitige Matrix-Division \ linksseitige Matrix-Division
5 Regelungstechnische Funktionen - Control System Toolbox
120
Auswählen, verändern und verknüpfen von LTI-Modellen
5.2.7
5.2 Arbeiten mit LTI-Modellen
» systf(: ,1)
121
[]
Transfer function from input to output ... 1
#1 :
Auswählen von LTI-Modellen
s
LTI-Modelle lassen sich aufgrund ihrer matrixähnlichen Struktur sehr leicht bearbeiten. So können einfach Teilsysteme extrahiert oder verändert werden; Ein- und Ausgänge lassen sich bequem hinzufügen oder löschen. Anhand des folgenden Beispiels sollen diese Funktionen erläutert werden: Zuerst wird ein MIMO-TF-Modell sys mit zwei Ein- und zwei Ausgängen erzeugt. Anschließend wird daraus ein Teilsystem teilsys extrahiert (Übertragungsfunktion von Eingang 2 nach Ausgang 1). Nun wird diesem Teilsystem eine I-Übertragungsfunktion zugewiesen und in das Originalsystem eingefügt. » systf = tf([h11 h12;h21 h22]) Transfer function from input 1 to output ... 2 s + 1 #1:
s - 1
» systf(: ,2)
[tf(1, [1 -1])
tf(1,1)]
Bei SS-Modellen geschieht bei der Extraktion Folgendes: teilsys zeugt ein Teilsystem mit den Matrizen a, b(: ,j), c (i, :) und dei ,j).
sys(i,j) er-
Verknüpfen von LTI-Modellen Zum einfachen Zusammensetzen von Systemen aus mehreren Teilsystemen gibt es einige hilfreiche Funktionen: Horizontale Verknüpfung: Die horizontale Verknüpfung addiert bei einem System mit verschiedenen Eingängen die entsprechenden Ausgänge miteinander, d.h. sie fügt eine neue Spalte an H an:
s + 0.1 #2:
#2:
0
Transfer function from input 2 to output ... 1
sys
[sysl, sys2 ] Iy
#1 : s + 0.5
y
[H1,H2
1. [~~]
H1Ul + H2U2
U2 1
---1--0'
#2:
s - 1
» teilsys = systf(1,2) Transfer function:
%H von Eingang 2 nach Ausgang 1
Vertikale Verknüpfung: Die vertikale Verknüpfung verwendet für beide Systeme die gleichen Eingänge und setzt den Ausgang aus den beiden Teilausgängen zusammen. Sie entspricht dem Hinzufügen einer neuen Zeile in der Matrix-Schreibweise.
1
sys
s + 0.5
»
teilsys
=
tf(1,[1 0])
Transfer function:
[sysl
sys2
H [Yl] _ [Hl]
. Y2
-
2
I YI
I Y2
.U
1
Diagonale Verknüpfung: Beim diagonalen Verknüpfen wird aus den Systenilen ein neues System kreiert, die Teilsysteme bleiben aber völlig entkoppelt:
s
»systf(l,2)
teilsys;
Gelöscht wird nun die erste Spalte respektive der Eingang 1, dann wird eine neue Spalte (;;' neuer Eingang) angehängt. Hier ist auf die zwei Möglichkeiten der Zuweisung zu achten: Bei sys (i ,j) = neu bleibt der Typ des Modells unverändert, bei sys = [sys, neu] wird er auf den Typ von neu gewandelt.
r- -
sys
append(sysl,sys2)
1 0]. [Ul] [Yl] Y2 = [H0 H 2 112
-
-
-
-
-
-
-
-,
ull ~YI -I--sysl I I
I
-U2~IY2 sys2 IL- sys ________ _ I I
5 Regelungstechnische Funktionen - Control System Toolbox
122
Parallele Verknüpfung: Das parallele Verknüpfen ist die generalisierte Form der Addition von Systemen. Es können sowohl die Ein- als auch die Ausgänge angegeben werden, die miteinander verknüpft werden sollen: Die Indexvektoren inl und in2 geben an, welche Eingänge Ul von sys1 und U2 von sys2 miteinander verbunden werden, und die Indexvektoren out1 und out2 geben an, welche Ausgänge Yl von sys1 und Y2 von sys2 summiert werden. Das erstellte System sys hat dann Dim(vl)+Dim(u)+Dim(v2) Eingänge und Dim(zl) + Dim(y) + Dim(z2) Ausgänge.
5.2 Arbeiten mit LTI-Modellen »
integrator
123
tf(1,[30])
Transfer function: 1 3 s
»proportional
tf(2,1)
Transfer function: 2
sys
parallel(sys1, sys2 ,in1, in2 ,out1 ,out2)
»
feedback (integrator ,proportional)
Transfer function: 1
Serielle Verknüpfung: Das serielle Verknüpfen ist die generalisierte Form der Multiplikation von Systemen. Es wird angegeben, welche Ausgänge outputs1 von sys1 mit welchen Eingängen inputs2 von sys2 verbunden werden. Das erstellte System sys hat dann Dim(u) Eingänge und Dim(y) Ausgänge.
r-----------, :~V2
sys
series Csysl, sys2 ,outputs1 ,inputs2)
u I
--t-
:y
sys2 ~
Yl U2
svsl
I Z,
I
~s~s_ _________ .J
Rückgekoppeltes System: Besonders hilfreich ist die Rückkopplungsfunktion feedback. Mit ihr lässt sich die Übertragungsfunktion eines geschlossenen Regelkreises sys = (E + vor· T1!eck)-l vor mit den Übertragungsfunktionen vor im Vorwärts- und rueck im Rückwärtszweig einfach erzeugen: r _________ , I Y u l 1----
sys
feedbackCvor,rueck)
3 s + 2
Verknüpfen von LTI-Modellen
[ sys1 , sys2 [ sys1 ; sys2 appendCsys1,sys2) parallel series feedback Csys1, sys2)
5.2.8
Horizontales Verknüpfen Vertikales Verknüpfen Diagonales Verknüpfen Paralleles Verknüpfen Serielles Verknüpfen Berechnen eines rückgekoppelten Systems
Spezielle LTI-Modelle
Mit der Control System Toolbox können auf schnelle Art und Weise stabile zeitkontinuierliche und zeitdiskrete mit Zufallswerten besetzte Testsysteme sowie Systeme 2. Ordnung definiert werden. Zufallswertsysteme
Das folgende einfache Beispiel soll nun die Funktion des Befehls feedback verdeutlichen. Betrachtet wird das folgende System aus einem Integrator im Vorwärtszweig (integrator), dessen Ausgang y mit einem Verstärkungsfaktor V (proportional) rückgekoppelt wird.
Verstär kungsfaktor:
TI V
Übertragungsfunktion:
G(s) =
Zeitkon8tante:
38
U
2 y
u
STI
--1 l+VsT1
Y
Die Befehle rss bzw. drss erzeugen stabile zeitkontinuierliche bzw. zeitdiskrete LTIModelle in Zustandsdarstellung, deren Matrizen mit Zufa.llswerten besetzt werden.
sys
rss (n[,p, mj»
sys = drss (n[,p,mj)
Mit den Befehlen rmodell bzw. drmodell können zufallswertige zeitkontinuierliche bzw. zeitdiskrete TF-Modelle n-ter Ordnung und SS-Modelle n-ter Ordnung mit m Eingängen und p Ausgängen erzeugt werden:
[num,denJ
rmodel (n)
[num,denJ
drmodel Cn)
[A,B,O,DJ
rmodel (n[,p,mj)
[A,B,O,DJ
drmodel (n[,p,mj)
5 Regelungstechnische Funktionen - Control System Toolbox
124
Wird ein zeitdiskretes Modell mit ZOR in ein zeitkontinuierliches konvertiert, so gelten folgende Einschränkungen:
System 2. Ordnung Ein System 2. Ordnung mit der Übertragungsfunktion
C(s) -
• Es dürfen keine Pole bei z = 0 liegen.
1
s2
+ 2 Wo D
125
5.2 Arbeiten mit LTI-Modellen
(5.21)
. s + w&
mit der Kennkreisfrequenz Wa und dem Dämpfungsfaktor D wird als TF- bzw. als SSModell wie folgt definiert: [num,den]
ord2 (wo,D)
[A,B,C,m
ord2 (wa,D)
GI
Negative reelle Pole im z-Bereich werden zu komplex-konjungierten Polpaaren im s-Bereich, d.h. die Ordnung erhöht sich dort.
Halteglied 1. Ordnung (First Order Hold FOH): Die FOH interpoliert linear zwischen den beiden Abtastwerten und ist für stetige Systeme in der Regel genauer als ZOH, aber nur für die Diskretisierung geeignet. u(t)
u [kJ
+
t kT ~. (u [k
+ 1J -
kT.:S t :S (k
u [kJ)
+ l)Ts
(5.23)
Spezielle LTI-Modelle drmodel, drss rmodel, rss ord2 (wa,D)
Tustin-Approximation (Trapezmethode, Bilineare Methode):
Stabiles zeitdiskretes Modell mit Zufallswerten Stabiles zeitkontinuierliches Modell mit Zufallswerten System 2. Ordnung (Kennkreisfrequenz Wa, Dämpfung D)
Die Tustin-Approximation [22J verwendet zur Berechnung von u [kJ den Mittelwert der Ableitungen am linken und rechten Intervallrand. Sie ist nicht definiert für Systeme mit Polen bei z = -1 und schlecht konditioniert für Systeme mit Polen nahe z = -1. Es ergibt sich als Zusammenhang zwischen sund z:
Umwandlung zwischen zeit kontinuierlichen und zeitdiskreten Systemen
5.2.9
z -
Oft ist es erforderlich, ein zeitkontinuierliches System in ein zeitdiskretes umzuwandeln oder umgekehrt. So z.B. wenn Ergebnisse aus einer Simulation mit (abgetasteten) Messdaten verglichen werden sollen oder mit der Abtastung einhergehende Probleme selbst von Interesse sind. MATLAB
stellt dazu für TF-, ZPK- oder SS-Modelle die beiden Befehle
e sT.
sysc = d2c (sysd [,methode]) zur Verfügung, wobei c2d ein zeitkontinuierliches Modell sysc in ein zeitdiskretes sysd und d2c ein zeitdiskretes in ein zeitkontinuierliches Modell umwandelt.
F(s) =
_
~
»sysc
tf ( [1] ,[1 .7 1])
(5.24)
1
Transfer function: 0.6844 z + 0.4704
Die Berechnungsvorschrift ist denkbar einfach, der abgetastete Wert wird einfach bis zur nächsten Abtastung gehalten:
z'2 - 0.1951 z + 0.3499
(5.22)
%PT_2
1
Halteglied O. Ordnung (Zero Order Hold ZOH):
+ 1) T.
z-l
Transfer function: s-2 + 0.7 s + 1
k T. :S t :S (k
2
l:lt . z + 1
Im folgenden Beispiel wird die kontinuierliche Übertragungsfunktion eines PT 2 -Gliedes
Anzugeben ist die Abtastzeit T. bei der Diskretisierung und der optionale Parameter methode, der festlegt, mit welcher Diskretisierungsmethode umgewandelt werden soll: Ralteglied O. Ordnung (ZOR), Ralteglied 1. Ordnung (FOR), Tustin-Approximation (Trapezmethode) u.a. Standardwert ist hier das Halteglied O. Ordnung.
u [kJ
s
definiert und dann mittels verschiedener Methoden diskretisiert: Ralteglied O. Ordnung (zoh), Ralteglied 1. Ordnung (foh) und Tustin-Approximation (tustin) . Anschließend wird die Sprungantwort geplottet (Abb. 5.3 links).
sysd = c2d (sysc, TB [, methode])
u(t)
l+s,%l-s,%-
»sysd
c2d(sysc,1.5)
Sampling time: 1.5
% Halteglied O.-Ordnung
5 Regelungstechnische Funktionen - Contral System Toolbox
126 »sysd1
c2d(sysc,1.5,'foh')
5.2 Arbeiten mit LTI-Modellen
% Halteglied 1.-0rdnung
127
Step Response
Transfer function: 0.2654 z"2 + 0.7353 z + 0.1542 z"2 - 0.1951 z + 0.3499 Sampling time: 1.5 »sysd2
!
c2d(sysc,1.5,'tustin')
% Tustin-Approximation
l
Transfer function: 0.2695 z"2 + 0.5389 z + 0.2695 z"2 - 0.4192 z + 0.497
-sysc .... .. sysd (ZOH)
o!
Sampling time: 1.5
5
I '-'~'SYSdd (ZOHreS~mpled)1 I
Time (sec)
»
Abb. 5.4: Abtastung mit geänderter Abtastzeit
step(sysc,'r-',sysd,'c--',sysd1,'g-.',sysd2,'k-',20) »sysc
=
tf(l,[l 1])
%PT_1
Step Response
Transfer function: 1 s + 1
»sysd
c2d(sysc,2)
% Halteglied O.-Ordnung
Transfer function: 0.8647
~
t
z - 0.1353 Sampling time: 2 » sysdd = d2d(sysd,0.7)
%Neue Abtastzeit
Transfer function: 0.5034
"
Time (sec)
Abb. 5.3: Verschiedene Diskretisierungsmethoden
z - 0.4966 Sampling time: 0.7
Abtastung mit geänderter Abtastzeit
Soll ein bestehendes zeitdiskretes TF-, ZPK- oder SS-Modell mit einer neuen Abtastzeit abgetastet werden, so kann dies natürlich über die Befehlsfo!ge c2d(d2c(sys) ,TB) geschehen. Die Contra! System TB bietet hierfür aber den einfacheren Befehl d2d(Sys, TB) an, der ein ZOH-System erwartet. Hierbei muss die neue Abtastzeit keineswegs ein Vielfaches der alten Abtastzeit sein, außer die Pole im z-Bereich sind komplex: Dann muss die neue Abtastzeit ein geradzahliges Vielfaches der alten sein. Für die Übertragungsfunktion F(s) = l/(s + 1) ergibt sich (Abb. 5.4):
»
step(sysc,'r-',sysd,'c--',sysdd,'g-.',10)
Umwandlung zeitkontinuierlicher und zeitdiskreter Systeme
c2d (sysc, T s [, methode]) Zeitkontinuierliches in zeitdiskretes System wandeln d2c (sysd[, methode]) Zeit diskretes in zeitkontinuierliches System wandeln d2d (sys, TB) Abtastung mit geänderter Abtastzeit methode Diskretisierungsmethode: 'zoh', 'foh', 'tustin' , 'imp', 'prewarp', 'matched'
5 Regelungstechnische Funktionen - Control System Toolbox
128
5.3
Analyse von LTI-Modellen
Ist ein regelungstechnisches System modelliert, so folgt als zweiter Schritt die Untersuchung der Systemeigenschaften. Um Aussagen über das Verhalten eines Systems zu machen, stellt die Contral System Toolbox ein umfangreiches Spektrum von AnalyseFunktionen bereit: Von den allgemeinen Systemeigenschaften über Modelldynamik im Zeit- und Frequenzbereich bis zur Überprüfung der Regelbarkeit.
5.3.1
Allgemeine Eigenschaften
Die allgemeinen Eigenschaften sind vor allem nützlich für die Programmierung komplexer Skripts und Funktionen, die möglichst allgemein gehalten sein sollen, z.B. für Auswertepragramme, die je nach übergebenem Modell-Typ verschiedene Werte retournieren, unterschiedliche Analyse-Funktionen aufrufen oder verschiedene Darstellungsarten wählen sollen. So gibt class (objekt) den Typ von objekt zurück, der unter anderem cell, double oder char lauten kann. Gegenteiliges erledigt der Befehl isa (objekt, ' classname'): Er überprüft, ob objekt vom Typ classname ist. »
sys = ss([ 1 2 ; 34 ],[ 1 1 ;
» class(sys)
° 1 ],[ 3 1 ],0)
ans =
5.3 Analyse von LTI-Modellen
Ein wichtiger Befehl zur Ermittlung von Systemeigenschaften ist der Befehl size. Abhängig von den übergebenen Parametern liefert er die Anzahl der Systemein- und -ausgänge, der Dimensionen von LTI-Arrays, Angaben über die Systemordnung bei TF-, ZPK- und SS-Modellen und Anzahl der Frequenzen eines FRD-Modells: size Csys):
Anzahl der Systemein- und -ausgänge für ein einfaches LTI-Modell; für LTI-Arrays zusätzlich die Länge ihrer Dimensionen. d =size Csys): Zeilenvektor d mit Anzahl der Ein- und Ausgänge [Ny Nu] für ein einfaches LTI-Modell, [Ny Nu 81 82 .. , 8p ] für ein 81 x 82 x ... x 8p LTI-Array mit Nu Systemein- und Ny Systemausgängen size Csys, 1): Anzahl der Systemausgänge size Csys, 2): Anzahl der Systemeingänge size Csys, ' order'): Systemordnllngj Anzahl der Zustände bei SS-Modellen size Csys, ' frequency'): Anzahl der Frequenzen eines FRD-Modells »
sys = tf([l 3],[2 1 5])
» size (sys)
Transfer function with 1 output and 1 input. »d = size (sys) d =
»Ns Ns
size(sys, 'order') 2
» sys = [ tf([1 3], [2
S8
» isa(sys,'cell') ans
° Mit isct Csys) und isdt Csys) wird getestet, ob sys zeitkontinuierlich bzw. zeitdiskret ist, während issiso Csys) eine logische 1 liefert, wenn sys ein SISO-System ist.
1 5]) , zpk([l -1], [2 2] ,2)
Zero/pole/gain from input 1 to output: 0.5 (s+3) (s-2 + 0.5s + 2.5) Zero/pole/gain from input 2 to output: 2 (s-1) (s+1)
» isct (sys) ans
=
1
» issiso(sys)
°
Mit isempty (sys) wird das Fehlen von Ein- und Ausgängen ermittelt; hat das System Verzögerungen, liefert hasdelay Csys) eine 1. isproper Csys) liefert eine 1, wenn der Rang des Zählerpolynoms von sys kleiner oder gleich dem des Nennerpolynoms ist. »
sys = tf([l 3] ,[2 1 5])
» isempty(sys) ans
°
» hasdelay(sys) ans
°
» isproper(sys) ans
»
(s-2)-2 d = size(sys)
d =
1
ans
129
2
Allgemeine Eigenschaften class Csys) isa Csys, ' classname' ) hasdelay Csys) isct Csys) isdt Csys) isempty Csys) isproper Csys) issiso Csys) size Csys)
Gibt den Modell-Typ von sys aus Wahr, wenn sys vom Typ classname ist Wahr, wenn sys Zeitverzögerungen hat Wahr, wenn sys zeitkontinuierlich ist Wahr, wenn sys zeitdiskret ist Wahr, wenn sys keine Ein- oder Ausgänge hat Wahr, wenn Rang(Zähler) :<; Rang(Nenner) Wahr, wenn sys ein SISO-Modell ist Liefert die Dimensionen von sys
5 Regelungstechnische Funktionen - Control System Toolbox
130
Ohne einen Zeitverlauf oder Antworten auf verschiedene Testsignale zu kennen, können anhand verschiedener Kennwerte schon wichtige dynamische Systemeigenschaften angegeben werden, wie z.B. stationäre Verstärkungen und Einschwingverhalten, Resonanzfrequenzen und Systemstabilität.
Ein weiterer interessanter Wert eines Systemes ist seine Bandbreite, die in MATLAB definiert ist als die erste Frequenz (in radis), bei der die Verstärkung auf 70,79% ihres stationären Wertes (Gleich-Verstärkung) fällt, bei der also die Verstärkung um 3dB abgenommen hat. Ermittelt wird dieser Wert in MATLAB mit dem Befehl bandwidth (sys) fb = bandwidth(sys,dbdrop)
Stationäre (Gleich- )Verstärkung Mit dem Befehl dcgain (sys) ermittelt man die Verstärkung des Systems sys für Frequenzen s = 0 (kontinuierliche Systeme) bzw. für z = 1 (diskrete Systeme). Systeme mit dominierendem integrierendem Verhalten haben die Gleichverstärkung unendlich.
Zusätzlich zum System sys kann auch noch der Verstärkungswert dbdrop (in dB) angegeben werden, an dem die Bandbreite ermittelt werden soll. Das folgende Beispiel erläutert die Funktion des Befehls bandwidth. Für das System sys wird zuerst die Bandbreite fb ermittelt. Anschließend wird die Verstärkung in dB für die Gleichverstärkung und mittels des Befehls freqresp (siehe Kap. 5.3.4) die Verstärkung bei der Bandbreiten-Frequenz fb berechnet. 3 ) Diese unterscheiden sich um 3 dB, und auch der Vergleich der linearen Verstärkungswerte ergibt Gleiches.
» sys = [ tf(zpk([-1], [1 0] ,2)) , tf([2 1 -6], [2 1 1 -4]) ] Transfer function from input 1 to output: 2 s + 2 s-2 - s
» sys
Transfer function from input 2 to output: 2 s-2 + s - 6
=
tf([2 1 -6],[2 1 1 -4 ])
Transfer function: 2 s-2 + s - 6
2 s-3 + 8-2 + 8 - 4
» dcgain(sys)
2 s-3 + s-2 + s - 4
ans = Inf
» fb
1.5000
= bandwidth(sys) fb = 1.76299380692774
Natürliche Frequenzen und Dämpfungen Die natürlichen Frequenzen W n und die zugehörigen Dämpfungen D eines Systems werden bestimmt aus den konjungiert komplexen Polen a ± j ß durch: Wn
-a
Ja 2 +ß2
D =-2 +ß2
Ja
(5.25)
Für reelle Eigenwerte wird die Dämpfung noch mit sign(Eigenwert) multipliziert. Im zeitdiskreten Fall werden über z = esT, den Polen z entsprechende kontinuierliche Pole s berechnet (natürlicher Frequenzvektor W , Dämpfungsvektor d, Polstellenvektor p). damp (sys) [w, d] = damp (sys) [w,d,p] = damp (sys) » sys
=
131
Bandbreite
Modell-Dynamik
5.3.2
5.3 Analyse von LTI-Modellen
» dB_dc = 20*log10(dcgain(sys)) dB_dc = 3.52182518111363 » dB_fb = 20*log10(abs(freqresp(sys,fb))) dB_fb = 0.52183436632361 » dB_dc - 3 ans = 0.52182518111363 » abs(freqre8p(sys,fb))/0.7079 ans = 1.50009860084947 » dcgain(sys)
tf(1,[2 -3 1 2])
» damp(sys)
ans
Eigenvalue
Damping
Freq. (radis)
-5.83e-001 1.04e+000 + 7.94e-001i 1.04e+000 - 7.94e-001i
1.00e+000 -7.95e-001 -7.95e-001
5.83e-001 1.31e+000 1.31e+000
= 1.50000000000000
3)
Zur Erinnerung: Der dB-Wert von x wird berechnet nach X dB = 20 .loglO(x).
5 Regelungstechnische Funktionen - Control System Toolbox
132
Polstellen und Nullstellen eines LTI-Modells 4 ) Die Pole eines Systems werden ermittelt mit pole (sys) und stellen bei SS-Modellen die Eigenwerte der Systemmatrix Adar, bei TF- und ZPK-Modellen sind es die Wurzeln des Nennerpolynoms, die auch mit dem MATLAB-Befehl roots berechnet werden können (Polstellenvektor p und Vektor r mit den Wurzeln des Polynoms c). p = pole (sys) r =
roots (c)
Der Befehl zero (sys) gibt die Nullstellen des Systems an. Wird das Ergebnis von zero dem Vektor [z, k] zugewiesen, enthält z den Nullstellenvektor und k die Verstärkung des Systems bei Nullstellen-Polstellen-Darstellung:
5.3 Analyse von LTI-Modellen
133
Im Zusammenhang mit den Nullstellen- und Polstellenvektoren sind die Befehle esort und dsort zwei nützliche Sortierfunktionen: s
=
esort (p)
[s, ndx] = esort (p)
s = dsort (p) [s,ndx] = dsort(p)
esort ordnet die im Vektor p abgespeicherten Pole eines kontinuierlichen Systems, zuerst die instabilen Pole und dann, nach Realteil in absteigender Reihenfolge, die anderen Pole. ndx bezeichnet den Index der Pole im Vektor p. » pe
=
pole(sys);
» [se,ndxe] = esort(pe); » [ pe , sc , ndxe ] ans
zero (sys) [z,k] = zero (sys)
z
=
-0.5000 -0.7000 - 0.8000i -0.7000 + 0.8000i 0.3000
0.3000 -0.5000 -0.7000 + 0.8000i -0.7000 - 0.8000i
4.0000 1.0000 3.0000 2.0000
Im Beispiel werden zuerst die Polstellen des ZPK-Modells berechnet, dann aus diesem Zähler und Nenner des entsprechenden TF-Modells extrahiert und anschließend die Wurzeln des Nennerpolynoms ermittelt, die natürlich zu den Polstellen identisch sind. Zu guter Letzt wird noch der Nullstellenvektor und die ZPK-Verstärkung ermittelt.
dsort ordnet die im Vektor p abgespeicherten Pole eines diskreten Systems, zuerst die instabilen Pole und dann, nach Betrag in absteigender Reihenfolge, die anderen Pole.
» sys = zpk([-0.2'0.6],[-0.5 -0.7-0.8*i -0.7+0.8*i 0.3],2) Zero/pole/gain: 2 (s+0.2) (s-0.6)
» pd = pole(c2d(sys,1)); » [sd,ndxd] = dsort(pd) » [ pd , sd , ndxd ] ans =
0.3460 + 0.3562i 0.3460 - 0.3562i 0.6065 1.3499
(s+0.5) (s-0.3) (s-2 + 1.4s + 1.13) » pole(sys) ans =
-0.5000 -0.7000 - 0.8000i -0.7000 + 0.8000i 0.3000 » [num,den] = tfdata(tf(sys),'v') » den den = 0.0160 1.2600 1.6000 1.0000 » roots (den)
Die Aufgaben von pole und zeros vereinigt die Funktion pzmap. Mit ihr lässt sich die Null- und Polstellenverteilung grafisch anzeigen bzw. als NullstelIenvektor z und Polstellenvektor p abspeichern. -0.1695
-0.7000 + 0.8000i -0.7000 - 0.8000i -0.5000 0.3000 » [z,k] = zero(sys) =
-0.2000 0.6000 k
2
MATLAB enthält bereits den Befehl [V,Dl = eig(A), mit dem die Eigenwertmatrix D und die Eigenvektormatrix V der Matrix A berechnet werden, SQ dass gilt: A V = V D (Eigenwertproblem 4)
A.x ~ .xx).
4.0000 3.0000 1.0000 2.0000
N ullstellen-Polstellen-Verteilung
ans =
z
1.3499 0.6065 0.3460 + 0.3562i 0.3460 - 0.3562i
pzmap (sys) [p,z] = pzmap (sys) Für die Achsenskalierung stehen die beiden Befehle sgrid und zgrid zur Verfügung. sgrid sgrid (z, wn)
zgrid zgrid (z, wn)
Für den kontinuierlichen Fall erzeugt sgrid in der s-Ebene ein Gitternetz mit konstanten Dämpfungen (Bereich von 0 bis 1 mit Schrittweite 0,1) und konstanten natürlichen Frequenzen (Bereich von 0 bis 10 radis mit Schrittweite 1 radis). In der (diskreten) z-Ebene erzeugt zgrid ein Gitternetz mit konstanten Dämpfungen (Bereich von 0 bis 1 mit Schrittweite 0,1) und konstanten natürlichen Frequenzen (Bereich von 0 bis 7r mit Schrittweite 7r110).
5 Regelungstechnische Funktionen - Control System Toolbox
134
5.3 Analyse von LTI-Modellen »
Z = {
135
0 [-6 1 1] ; [1 2] -1 };
Für das folgende Beispiel zeigt Abb. 5.5 die Null- und Polstellenverteilung der definierten ZPK-Übetragungsfunktion für den zeit kontinuierlichen Fall in der s-Ebene (links) und für den zeit diskreten Fall (Abtastzeit 1 s) in der z-Ebene (rechts). Nullstellen werden durch 0 und Polstellen durch x gekennzeichnet.
» K = [23 ; 1 -1]; » H = zpk(Z,P,K)
»sys
Zero/pole/gain from input 1 to output ...
zpk([-0.2 0.6],[-0.5 -0.7-0.8*i -0.7+0.8*i 0.3],2)
» P
Zero/pole/gain: 2 (s+0.2) (s-0.6)
#1:
[-1 -1+i -1-i] };
2 -----------
(s+2) (s-1)
(s+0.5) (s-0.3) (s"2 + 1.4s + 1.13) »sysd
= { [-2 1] [-5 1] ; [-4 -1]
(s-l) (s-2) #2:
c2d(sys,1)
-----------
(s+4) (s+1)
Zero/pole/gain: 0.47509 (z+0.5171). (z-0.8187) (z-1.827)
Zero/pole/gain from input 2 to output ... 3 (s+6) (s-1)"2 #1 :
(z-0.6065) (z-1.35) (z"2 - 0.6919z + 0.2466)
(s+5) (s-1)
Sampling time: 1 » subplot(121) , pzmap(sys) , sgrid » subplot(122) , pzmap(sysd), zgrid
- (s+l) #2:
(s+l) (s"2
» iopzmap(sys,H)
Pole-Zero Map
Pole-Zero Map
+ 2s + 2)
Pole-Zero Map From:ln{1)
~
~
~
~
'g
.~
:g
:g
""K""'O
0.5
oS
oS
~
~
-1' -1
~.",~,
-~~
-0.5
_....
,,-,";.~-
0
0.5
1.5
Real Axis
From:ln(2)
01·,·""·"",,
~
-0.5
c
-1
~
.~
'x."",."""~"""
'x··"",
""ac"""""""", •• """"""".",,
..
'
.§
Abb. 5.5: Nullstellen-Polstellen- Verteilung (pzmap): s-Ebene (links), z-Ebene(rechts)
Da die Funktion pzmap nur für SISO-Systeme geeignet ist, erweitert der Befehl iopzmap diese Funktionalität auch auf MIMO-Systeme, wobei jeweils für jede Ein-/ Ausgangskombination in einem Subplot die Null-Polstellenverteilung angezeigt wird. iopzmap (sys[,sys2,oo.j) Auch lassen sich Null-PolsteJlenverteiJungen von Systemen mit unterschiedlichen Anzahlen von Ein- und Ausgängen anzeigen. Anhand der MIMO-ZPK-Übertragungsfunktion aus Kap. 5.1.2 wird dies in Abb. 5.6 dargestellt:
0.5
~ ~
-0.5
-:~3
-2
~
-!
Real Axis
-4
-2
n
Abb. 5.6: Nullstellen-Polstellen- Verteilung für MIMO-Systeme (iopzmap)
5 Regelungstechnische Funktionen - Control System Toolbox
136
5.3 Analyse von LTI-Modellen
137
Normen eines LTI-Modells (H2 und Hry;:,)
Kovarianz mit weißem Rauschen
Mit Normen lassen sich bei der Stabilitätsanalyse Aussagen über die Entfernung der Systemzustände vom Ruhezustand machen. Die Control System Toolbox unterstützt zwei Normen: Die H 2-Norm und die Hoo-Norm. Während die H2-Norm nicht für FRDModelle geeignet ist, bearbeitet die Hoo-Norm sämtliche Modell-Typen.
Mit dem Befehl covar Csys, W) lässt sich schließlich die Ausgangs-Autokorrelations_ funktion des Systems sys auf Anregung mit weißem Rauschen (Amplitude W) bestimmen. Bei SS-Modellen gibt es zusätzlich die Zustands-Autokorrela:tionsfunktion.
Die Befehls-Syntax lautet:
[P,Q] = covarCsys,W)
P ist hierbei die Autokorrelationsfunktion onsfunktion i!>xx der Zustände.
norm Csys) norm Csys,2) norm Csys, in/[, tal]) [nin! , jpeak] =: norm Csys, in!)
»
i!>yy
des Ausgangs und Q die Autokorrelati-
sys = tf(l,[l 1])
Transfer function:
Standardnorm ist die H 2-Norm, die mit normCsys) bzw. normCsys,2) kalkuliert wird.
1
Die Hoo-Norm wird mit normCsys,in![,tol]) aufgerufen, der optionale Parameter tal legt die Berechnungsgenauigkeit fest. Sie liefert die maximale Verstärkung nin! des Frequenzgangs zurück, wobei fpeak die zugehörige Frequenz ist. So wird z.B. die H oo Norm für die Berechnung des Phasenrandes (siehe Kap. 5.3.4) verwendet.
s + 1
Die Hoo-Norm der folgenden Übertragungsfunktion wird berechnet und der Frequenzgang in Abb. 5.7 gezeigt.
»
p = covar(sys,1)
p =
»
0.5000 sys = tf(1,[eps 1])
Transfer function: 1
» sys
tf(l,[l 2 100]) Transfer function: =
2.22e-016 s + 1 »p p
s-2 + 2 s + 100 »[ninf,fpeak] ninf = 10.0504 fpeak = 9.8995 » bode (sys)
2.2518e+015 norm(sys,inf)
Modell-Dynamik dcgain Csys) bandwidth Csys) damp Csys) zero Csys) pole Csys) roots Ce) eig CA) esortCp) dsortCp) pzmap Csys) iopzmap Csys) sgrid, zgrid
Bode DIagram
,
~_~
____ ___ ~
covar(sys,l)
~~~L....~.
__
.~_.
_~_~~~_
Abb. 5.7: Bode-Diagramm für sys = tf(1, [1 2 100})
norm Csys) covar Csys, W)
stationäre (Gleieh-)Verstärkung Bandbreiten-Frequenz bei Verstärkung -3 dB natürliche Frequenz und die Dämpfung Nullstellen eines LTI-Modells Pole eines LTI-Modells Wurzeln eines Polynoms c (MATLAB) Eigenwerte und Eigenvektoren der Matrix A (MATLAB) Ordnet die zeitkontinuierlichen Pole Ordnet die zeitdiskreten Pole Nullstellen-Polstellen-Verteilung (SISO-Systeme) Nullstellen-Polst ellen-Verteilung (MIMO-Systeme) Gitternetz in der s- bzw. z-Ebene (Wurzelortskurvenj Nullstellen- und Polstellen-Verteilung) Normen eines LTI-Modells (H2 und H oo ) Kovarianz mit weißem Rauschen
5 RegelungRtAr.hnische Funktionen - Control System Toolbox
138
Für den Regelungstechniker ist es sehr wichtig, das Verhalten eines Systems im Zeitbereich zu kennen. Zur Erinnerung: Das Ausgangssignal im Zeitbereich (zeitkontinuierlich und zeitdiskret) ergibt sich aus (siehe auch [8],[17])
J (Ce t
y("t) = CeAtxo
+
ACt - T )
B+ D) u(r) dr
(5.26)
7=0
k-l
y[k] = CAkxo
+
2..= (CAk-i-1B+D)
139
Sowohl die über den Zeitvektor t als auch die über die Dimension von y gemachten Aussagen gelten allgemein für alle Antwortfunktionen ini tial, impuls, step und lsim.
Systemantwort im Zeitbereich
5.3.3
5.3 Analyse von LTI-Modellen
u[i]
(5.27)
So wurden die Verläufe in Abb. 5.8 erzeugt mit: » systf = tf(5,[1 1 10]) ; »sys = ss(systf) ; » [y,t,x] = initial(sys,'r-',[4 -1],12) » subplot (221) » plot(t,x(:,1),'r-',t,x(:,2),'g--') » subplot (122) » plot(t,y) » subplot(223) » plot(x(:,1),x(:,2»
%Anfangswertantwort
i=O
mit dem Anfangswertvektor Xo und dem Eingangssignalvektor u sowie der freien Bewegung (linker Term) und der erzwungenen Bewegung (rechter Term). In der Regel interessieren vor allem die Antworten auf bestimmte Eingangssignale, wie z.B. die Impulsantwort oder Sprungantwort. Die Control System Toolbox stellt unter anderem folgende Funktionen bereit: Anfangswertantwort (initial), Impulsantwort (impulse), Sprungantwort (step). Mittels gensig können bestimmte Eingangssignale generiert werden und lsim berechnet den Zeitverlauf für beliebige Eingangssignale.
Freie Bewegung
~:~ -5
0
5 Zeitt
Anfangswertantwort Die Anfangswertantwort beschreibt das Verhalten des Systems auf bestimmte Anfangswerte des Zustandsvektors Xo und wird als die freie Bewegung bezeichnet (linker Term in Gleichung (5.26) bzw. (5.27)), der Einfluss der Eingänge wird also zu null gesetzt. Sie wird berechnet mit dem Befehl initial: initial (sys,Xo,[,tj) [y,t,x] = initial (sys,xo,[,tj)
Zustandstrajektorien
4
4~\
3
I 10 •
'--x1,1 , - - - x2 1i
(\j
2
~
0 -1
><
x
-2
2[VJ
-4 0
5
10
Zeitt
-3 -4
-2
0 x1
2
4
Hierbei ist sys ein SS-Modell (MIMO) und Xo der Vektor mit den Anfangswerten. Der optionale Parameter t bestimmt den Zeitvektor: Ist t skalar, so gibt es das Ende der Berechnungsperiode an, ist es definiert als t = 0: dt: Tf, so reicht der Zeitvektor von Obis Tf mit der Schrittweite dt. Ist sys zeitdiskret, so sollte dt gleich der Abtastzeit TB sein, ist sys zeitkontinuierlich, so sollte dt ausreichend klein sein, da für die Berechnung der Antworten das System mit ZOH bzw. FOH diskretisiert wird und anschließend mit dt abgetastet wird. Wird die zweite Variante gewählt, so ist y der Ausgangsvektor, t der Zeitvektor und x der Zustandsvektor der Zustände. Für den Fall eines SIMO-Modells hat der Ausgangsvektor y so viele Zeilen wie t Elemente und so viele Spalten wie das System Ausgänge, also die Dimension length(t) xNy. Bei MIMO-Modellen erweitert sich y um eine dritte Dimension, nämlich die Anzahl der Eingänge Nu: SIMO:
Dim(y)
length (t) x Ny
MIMO:
Dim(y)
length Ct) x Ny x Nu
Abb. 5.8: Anfangswertantwort (initial); Zeitverläufe lind Zustandstrajektorien
Impulsantwort Die Impulsantwort eines Systems ist definiert als die Antwort auf die Anregung des Systems mit einem Dirac-Impuls o(t) bzw. einem Einheitsimpuls bei diskreten Systemen o[k]. Die zugehörigen Befehle lauten: impulse Csys[, tj) y = impulse (sys[,t]) [y, t[, x]J = impulse (sys[, tj) Hier kann sys ein beliebiges LTI-Modell sein, für den optionalen Zeitvektor t und MIMO-Modelle gilt das bereits oben Gesagte. Die Rückgabe von x ist nur bei SSModellen möglich, hier wird der Anfangswertvektor auf null gesetzt.
140
5 Regelungstechnische Funktionen - Control System Toolbox
Sprungantwort Die Sprungantwort ergibt sich, wenn das System mit einem Einheitssprung O"(t) beaufschlagt wird. Die Befehle lauten analog denen bei der Impulsantwort: step (sys[, t]) y = step(sys[,t]) [y, t[, x]J = step (sys[, t])
»sys2in = [tf(5,[1 1 10]) , tf(l,[l 1]) ] ; » subplot(211) , impulse(sys2in); % Impulsantwort % Sprungantwort » subplot(212) , step(sys2in); Impulse Response
i ~;~_ -1
o
2
4
6
I~ c_~
8
10
12
0
2
4
I
•
a
6
10
2
·3
4
5
6
Testsignal erzeugen:
7
8
0
[u,t]
=
gensig(typ,tau[,TI,Ts])
Mit dem Parameter typ kann gewählt werden zwischen Sinussignal ('sin'), einem periodischen Rechtecksignal (, square') und einer periodischen Pulsfunktion (, pulse'). Die Periodendauer ist tau, TI bestimmt die Dauer des Signals und Ts die Abtastzeit. Abb. 5.10 zeigt die Antwort der unten stehend definierten PT l und PT2-Modelle auf das mit gensig erzeugte Rechtecksignal.
» sys2in = [tf(1000,[1 3.1000]) ; tf(1,[2 1]) ] » [u,t] = gensig('square',3,10,0.01) %beliebiges Eingangssignal » [y,t] = lSim(sys2in,'r-',u,t) %Antwort auf beliebiges Eingangssignal » plot(t,y(:,1),t,y(:,2),t,u) Antwort auf beliebiges Eingangssignal I ___
2
3
4
I
,-,-,PT 1 _ _ PT
1.5
1
u(t)
12
2
i~E?3V:~ 1
Ist die Abtastzeit dt des Zeitvektors zu groß gewählt, würde also unterabgetastet werden, erkennt lsim dies und gibt eine Warnung aus.
21
Time (sec) 8tep Response
o
141
Um Standardtestsignale nicht selber programmieren zu müssen, weist die Control System Toolbox den Befehl gensig auf, der ein Testsignal u und den zugehörigen Zeitvektor t erzeugt.
Ein Beispiel für ein SIMO-Modell mit einer PT1- und einer PT 2-Übertragungsfunktion zeigt Abb. 5.9, der entsprechende Programmeode steht nachfolgend:
I
5.3 Analyse von LTI-Modellen
I
.,
0.5
01
.~.",
",.",.0"'" . '
.'
.;;
., ........'
o'
"
-0.5 5
6
7
8
Time (sec)
-1
- L____- L____- L____- L____- L____- L____
L I_ _ _ _
o
2
3
sys ist ein LTI-Modell (Anfangswertvektor Xo nur bei SS-Modellen), u ist eine beliebige Eingangssignalmatrix, die so viele Zeilen wie t Elemente und so viele Spalten wie das System Eingänge hat (Dimension length(t) x Nu).
6
~
____
7
~
____
~
8
____
9
~
10
Abb. 5.10: Antwort auf beliebiges Eingangssignal (gensig und lsim)
Eine sehr hilfreiche Funktion ist lSim(sys,u,t): Mit ihr kann die Systemantwort auf ein mehr oder weniger beliebiges Eingangssignal u getestet werden. Die Befehls-Syntax lautet: lsim (sys ,u, t, [,xo]) [y,tJ = lSim(sys,u,t) [y,t[,x]J = lSim(sys,u,t,[,xo])
5
Zeit!
Abb. 5.9: Impulsantwort (impulse) und Sprungantwort (step)
Systemantwort auf beliebiges Eingangssignal:
4
Systemantwort im Zeitbereich
(sys, xo, [, tj) impulse (sys[, tp step (sys[, t]) lsim (sys, u, t, [, xo]) gensig (typ, tau) ini tial
Anfangswertantwort berechnen Impulsantwort berechnen Sprungantwort berechnen Systemantwort auf beliebiges Eingangssignal Testsignal erstellen
5 Regelungstechnische Funktionen - Control System Toolbox
142
Systemantwort im Frequenzbereich
5.3.4
Für den Regelungstechniker interessant ist auch das Systemverhalten im Frequenzbereich: Oft sind die Testsignale sinusförmig oder die Parameter des Systems sind nicht genau bekannt. Mittels der Methoden zur Frequenzganguntersuchung können sehr umfangreiche Aussagen über frequenzabhängige Systemeigenschaften gemacht werden: stationäre Gleichverstärkung, Bandbreite, Amplituden- und Phasenrand, Stabilität des geschlossenen Regelkreises. Erinnert werden soll an dieser Stelle, dass der Frequenzgang F(jw) definiert ist als die Übertragungsfunktion eines LTI-SISO-Systems auf der imaginären Achse [17]. Voraussetzung hierfür ist also, dass das System asymptotisch stabil ist, die Realteile aller Eigenwerte kleiner null sind. Es wird nur der eingeschwungene Zustand betrachtet, die Anteile der Realteile lJi sind bereits asymptotisch abgeklungen.
5.3 Analyse von LTI-Modellen Bode-Diagramm
Das Bode-Diagramm stellt den F'requenzgang von F(jw) getrennt nach Betrag und Winkel dar (Kap. 5.1.4), übereinander aufgetragen über der logarithmischen Frequenzachse. Oben wird der Amplitudengang logarithmisch in Dezibel (1 dB = 20 ·loglOl F(jw) J) und unten der Phasengang in Grad angezeigt. Diese Darstellung hat den großen Vorteil, dass sich der Gesamtfrequenzgang F(jw) der Serienschaltung mehrerer LTI-Systeme (Produkt der einzelnen Frequenzgänge F;(jw)) n
jrsp = evalfr(sys,j) H = freqresp (sys, w) Soll die Frequenzantwort eines Systems sys lediglich für eine einzelne Frequenz j ermittelt werden, so geschieht dies mit evalfr. Anzumerken ist, dass j auch eine komplexe Frequenz sein "kann. Die Frequenzantworten für mehrere Frequenzen berechnet freqresp, wobei w der Frequenzvektor ist. Die Ergebnisvariable H ist in jedem Fall ein dreidimensionaler Array der Dimension Ny x Nu x length(w), so dass die einzelnen Elemente mit H(i,j ,k) angesprochen werden müssen: k-te Frequenzantwort der Übertragungsfunktion von Eingang j nach Ausgang i. » sys
=
tf( [3 -1] , [-2 1 1])
Transfer function: -3 s + 1 2 s-2 - s - 1
» w=
w = [-j , -2-j , -1+j]
o-
1.0000i
» [ evalfr(sys,w(l» ans
o - 1.0000i 0.5846 - 0.3231i 0.6000 + 0.8000i
-2.0000 - 1.0000i -1.0000 + 1.0000i ; evalfr(sys,w(2» ; evalfr(sys,w(3»]
» H = freqresp(sys,w) H(:,:,l) =
o-
1. OOOOi
IIIF;(jw)l·ejI;~
F(jw)
(5.28)
ergibt aus der Summation der logarithmierten Teilbeträge I Fi (jw) I und der Summation der einzelnen Winkel 'Pi(jW):
Frequenzantwort berechnen Zur schnellen Berechnung von Frequenzantworten dienen die Befehle evalfr und freqresp.
143
Amplitudengang :
IF(jw) I
Phasengang : In
MA'I'LAB
'P(w)
I + loglOl F2 (jw) 1+··· + IOglOl Fn(jw) I 'Pl(W) + 'P2(W) + ... + 'Pn(w) loglOl F1(jw)
wird ein Bode-Diagramm des LTI-Modells sys erstellt mit den Befehlen
bode (sys[, w]) [mag,phase,wJ
=
bode (sys)
Es kann der Frequenzvektor w mit der Untergrenze wmin und der Obergrenze wmax explizit angegeben werden (in radis und in geschweiften Klammern!). Auch kann mit logspace (Kap. 2.2.2) ein Frequenzvektor mit logarithmischem Abstand der Frequenzpunkte erzeugt werden:
w w w
wmin: schr'ittweite: wmax wmin , wmax } logspace (start, ziel, anzahl)
= { =
Wird die dritte Version des Befehlsaufrufes ausgeführt, so speichert bode den Amplitudengang in mag, den Phasengang in phase und den zugehörigen Frequenzvektor in w. Zu beachten ist, dass mag und phase dreidimensionale Arrays der Dimension Ny x Nu x k mit k = length(w) sind. Im Fall eines MIMO-8ystems stellen mag(i,j ,k) und mag(i,j ,k) die Werte von Amplituden- und Phasengang für die Übertragungsfunktion von Eingang j nach Ausgang i dar. Auch im Fall eines 8180-Modells sys müssen die Werte für die Frequenz Wk angesprochen werden mit mag (1, 1 , k) bzw. phase (1 , 1 , k) ! Bei zeitkontinuierlichen Systemen werden nur positive Frequenzen w auf der ima.ginären Achse berechnet, bei zeitdiskreten Systemen wird die Übertragungsfunktion a.uf dem (oberen) Einheitskreis ausgewertet gemäß z = e jwT,
0::; w::; WN
7r
= TB
(5.29)
H(:,: ,2) =
0.5846 - 0.3231i H(:,: ,3) =
0.6000 + 0.8000i
mit der Nyquist-Frequenz WN (Die untere Hälfte des Einheitskreises entspricht wegen der Periodizität der z-Übertragungsfunktion mit 2WN der oberen).
5.3 Analyse von LTI-Modellen
5 Regelungstechnische Funktionen - Control System Toolbox
144
Anmerkung: Sollen mehrere Systemantworten in ein Bode- bzw. Nyquist-Diagramm geplottet werden, so können die Befehle bode bzw. nyquist wie folgt aufgerufen werden: bode (sys1,sys2, ... ,sysN[,wj) nyquist (sys1,sys2, ... ,sysN[,wj)
Die Erzeugung des rechten Teilplots (subplot (122)) von Abb. 5.11 gestaltet sich umfangreicher: Die Übertragungsfunktion sysPT2 soll für verschiedene Dämpfungen in ein Bode-Diagramm mit verschiedenen Linieristilen geplottet werden:
bode (sys1, 'still' , ... , sysN , , stilN') nyquist (sys1, 'still' , ... , sysN, , stilN')
In der ersten for-Schleife wird ein TF-Modell mit vier (size(sysPT2)=length(d)+1) Eingängen und einem Ausgang definiert, wobei der jeweilige Dämpfungswert aus dem Vektor d genommen wird. Da die Anzahl der Parametervariationen für d beliebig wählbar sein soll, werden mit der zweiten for-Schleife die Bode-Diagramme übereinander gelegt, was den vorherigen Befehl hold on erfordert (aktiviert Haltefunktion des Teilplots). Die Linienstile sind in dem Cell Array stil gespeichert und werden mit stil {np) aufgerufen.
Hierbei sind sys1, sys2 etc. die einzelnen Systeme, die alle die gleiche Anzahl an Einsowie Ausgängen haben müssen. Werden Linienarten (, still', ' stil2' etc.) angegeben, so muss dies für alle Systeme geschehen, es kann dann aber kein Frequenzvektor w übergeben werden. Soll dies trotzdem geschehen, so müssen die entsprechenden Diagramme "von Hand" erstellt werden, z.B. mit loglog und sernilogx (Kap. 3.5.3). Das Beispiel soll die Möglichkeiten des Befehls bode verdeutlichen: Es wird eine Übertragungsfunktion sysPTi definiert und dann mit der Abtastzeit 0,05 diskretisiert (sysPTid). Die beiden Übertragungsfunktionen werden in den linken Teilplot (subplotC121)) in Abb. 5.11 mit bode (sysPT1, 'r-' ,sysPTld, 'b--') geplottet.
» sysPT1 » sysPTid
145
» sysPT2 = tf(10,[1 0.05 10]); » d = [sqrt(2)!2 1.6 3] » for n = 1:1:length(d) » sysPT2 = [sysPT2 tf(10,[l den) 10]) ] » end; » subplot(122) » hold on; » stil = {'r-' 'b-.' 'k-' 'g--'} » for n = 1:1: (length(d) +1) , » bode(sysPT2(n),stil{n}); » end;
tf( 1, [0.05 1]) ; c2d(sysPT1,0.05)
Transfer function: 0.6321 z - 0.3679
Wie aus dem Vergleich der beiden PT1-Frequenzgänge in Abb. 5.11 links sofort zu sehen, stimmen die beiden Verläufe aufgrund der viel zu großen Abtastzeit nur schlecht überein, was sich in der Sprungantwort deutlich zeigt (Abb. 5.12). Eine geringere Abtastzeit führt dann zu besserem Ergebnis (sysPTldneu).
Sampling time: 0.05 » subplot(121) , »'bode(sysPT1,'r-',sysPT1d,'b--')
Bode Diagram
I
Bode Diagram
!'"I N!" 40
:::::l
!
-20
» sysPT1dneu = d2d(sysPT1d,0.01) ; » step(sysPT1,'r-',sysPT1d,'b-.',sysPTldneu,'g--') » legend('sysPT1','sysPT1d','sysPTldneu',4) Step Response
::::I
!-
~
~
1-
1_
-40
-60 0
o
ru
~
E
0)
-45
'@
-45
u -;
-90
u -;
-90
ru
~ ~
ru
~
«
(1.6
sysPT1 ,-" sysPTld - - sysPT1 dneu
~
a.. -135 -180 10-1
:""--_,_.1 0.8
Ci
0. -135
10
0
10'
2
10
Frequency (rad/sec)
10
3
-180 1 10-
0
10
10'
2 10
Frequency (rad/sec)
Abb. 5.11: Bode-Diagramme: sysPTl (-) und sysPTld (--) (links), sysPT2 für unterschiedliche Dämpfungen (rechts)
Time (sec)
Abb. 5.12: Sprungantworten von sysPT1, sysPTld und sysPTldneu
5) Genau genommen müsste bei beliebiger Zahl von Dämpfungswerten d und ergo beliebiger Zahl von Eingängen der Befehl zur Auswahl des Linien-Stils stil {1 +mod(n-1, size (sysPT2, 1»} lauten, so dass die vier Linienarten für n > 4 zyklisch wiederholt würden.
5 Regelungstechnische Funktionen - Control System Toolbox
146
5.3 Analyse von LTI-Modellen Bode Diagram Gm = 6.02 dB (at 1.73 rad/sec), Pm = 27.1 deg (at 1.23 rad/sec)
Amplituden- und Phasenrand Eine weitere Hilfe im Rahmen von Stabilitätsuntersuchungen stellen die beiden Befehle margin und allmargin dar, die die Stabilitätsreserven Amplitudenrand und Phasenrand für geschlossene Regelkreise berechnen. Der Amplitudenrand (Amplitudenreserve) ist definiert als die Verstärkung FR, die zusätzlich in die Übertragungsfunktion des offenen Regelkreises eingebracht werden muss, damit der geschlossene Regelkreis gerade instabil wird: Der Wert. ergibt sich aus der Inversen des Betrags I F(jw) I bei der Phasen-Durchtrittsfrequenz w
147
20
ii.l "0
--
-20
Cl)
"0
:Ec
-40
g>
::;;:
-60 -80
Der Phasenrand (Phasenreserve) 'PR ist definiert als der Winkelabstand zu -180°, bei dem der Wert des Betrags I F(jw) I der Übertragungsfunktion des offenen Regelkreises 1 ist, die zugehörige Frequenz wird Amplituden-Durchtrittsfrequenz WA genannt. Für die Stabilität des geschlossenen Regelkreises muss gelten: gleichbedeutend
WA <w
An der Stabilitätsgrenze gilt:
WA = w
FR> 1
gleichbedeutend
und
FR = 1 und 'PR = 0
\
'PR> 0 Abb. 5.13: Bode-Diagramm mit Amplituden- und Phasenrand
Die gen aue Befehls-Syntax für den Befehl margin lautet: margin (sys) [Gm,Pm,Wcg,WcpJ = margin(sys) [Gm,Pm, Weg, WepJ = margin (mag,phase,w) Dabei ist Gm der Amplitudenrand mit der Phasen-Durchtrittsfrequenz Weg und Pm der Phasenrand mit der Amplituden-Durchtrittsfrequenz Wep. Die Werte mag, phase und w entsprechen den Rückgabewerten des Befehls bode. Wird der Befehl ohne Rückgabe-Variable aufgerufen, so plottet er ein Bode-Diagramm mit den Amplituden- und Phasenrändern wie in Abb. 5.13. Erzeugt wurde der Plot in Abb. 5.13 mit den folgenden Zeilen: »sys
=
zpk( [] , [-1 -1 -1] ,4)
Zero/pole/gain:
Der Befehl allmargin greift etwas weiter als margin: Er berechnet für das System mit offener Rückführschleife verschiedene Kenngrößen zur Stabilität und liefert diese in eine Struct-Variable stabil zurück.
stabil = allmargin (sys) Die einzelnen Felder der Struktur stabil lauten wie folgt (Frequenzen in radis): GainMargin GMFrequency PhaseMargin PMFrequency DelayMargin
4
(s+1)"3
» margin(sys) » [Gm,Pm,Weg,Wepl Gm
=
margin(sys)
DMFrequency Stable
Amplitudenrand: inverse Amplitude bei den Frequenzen GMFrequency Frequenzen, bei denen der Phasenwinkel -180° durchläuft. Phasenrand: positiver Winkelabstand von -180° an den Stellen PMFrequency in Grad Frequenzen, bei denen die Amplitude 0 dB6) durchläuft. Totzeitrand: Bei noch größerer Totzeit ist. das System instabil (Sekunden bei zeitkontinuierlichen, Vielfache der Abtastzeit bei zeitdiskreten Systemen) Zu De1ayMargin gehörige Frequenz 1 bei Stabilität des geschlossenen Regelkreises, 0 bei Instabilität.
2.0003
Pm
= 27.1424
Weg 1.7322
Wep 1.2328
Anhand des obigen Beispiels soll die Bedeutung der einzelnen Felder erläutert werden. Zuerst wird der Variablen stabil das Ergebnis von allmargin(sys) zugewiesen: Das System ist stabil, der Amplitudenrand beträgt 2,0003, der Phasenrand 27,1424° und 6) Entspricht Verstärkung 1.
5 Regelungstechnische Funktionen - Control System Toolbox
148
der Totzeitrand 0,3843 Sekunden. Diese Werte können auch aus Abb. 5.13 abgelesen werden.
5.3 Analyse von LTI-Modellen
Dabei darf die Übertragungsfunktion - Fo(p) folgenden - auch einen Totzeitanteil enthaltenden - Aufbau haben
» stabil ; allmargin(sys) stabil = GMFrequency: GainMargin: PMFrequency: PhaseMargin: DMFrequency: DelayMargin: Stable:
-Fo(p)
1.7322 2.0003 1.2328 27.1424 1.2328 0.3843 1
=
no>mo,
T, 2: 0,
Der geschlossene Regelkreis ist stabil, wenn die Ortskurve des offenen Regelkreises den kritischen Punkt -1 + j 0 im Gegenuhrzeigersinn so oft umkr'eist, wie F( s) positive reelle Pole besitzt.
Für das Erzeugen eines Nyquist-Diagramms lautet die Befehls-Syntax wie folgt: nyquist (sys[,w]) [r'e,im] = nyquist (sys,w) [re,im,w] = nyquist (sys)
Zero/pole/gain: 4
exp(-0.39*s) * (s+1)-3
Für den Frequenzvektor w sowie das Übereinanderlegen von Ortskurven mehrerer Systeme in ein Nyquist-Diagramm gilt das bereits unter dem Bode-Diagramm Gesagte.
» allmargin(sys) ans
[lx8 double] [lx8 double] 1.2328 -0.7063 1.2328 -0.0100 0
Wiederum soll ein Beispiel den Befehl nyquist anschaulich machen: Aus dem ZPKModell sys werden drei diskrete ZPK-Modelle mit verschiedenen Abtastzeiten gemacht und anschließend in ein Nyquist-Diagramm geplottet. »sys = zpk( [], [-1 -1 -1] ,4) » sysd1 = c2d(sys,0.3) » sysd2 ; c2d(sys,1.5) » sysd3 = c2d(sys,4.0) ; » nyquist(sys, 'r-' ,sysdl, 'b-.' ,sysd2, 'k-' ,sysd3, 'g--')
Nyquist-Diagramm Eine andere Möglichkeit, den Frequenzgang darzustellen, ist das Nyquist-Diagramm. Aufgetragen werden Real- und Imaginärteil der komplexen Übertragungsfunktion des offenen Regelkreises -Fo(jw) für Werte von w = Obis w = 00. Die entstehende Kurve wird als Ortskurve von -Fo(jw) bezeichnet. Auf Basis des Nyquist-Stabilitäts-Kriteriums kann die Stabilität des geschlossenen Regelkreises (bei Einheitsrückführung und negativer Rückkopplung) im NyquistDiagramm abgelesen werden [26]: 'Der geschlossene Regelkreis ist stabil, wenn der vom kritischen Punkt -1 + j 0 zum laufenden Ortspunkt -F(jw) (2 Ortskurve des aufgetrennten Regelkreises) weisende Fahrstrahl für wachsendes w von +0 bis +00 eine Winkeländerung w=+oo /:;.
;
Diese Aussage kann auch so formuliert werden:
stabil.DelayMargin + 0.01
GMFrequency: GainMargin: PMFrequency: PhaseMargin: DMFrequency: DelayMargin: Stable:
Zo(p) ,e- pTt No(p)
wobei mo und no den Grad des Zähler- und Nennerpolynoms von Fo angeben undnr , n a und nl jeweils die Anzahl der Wurzeln von No(p) rechts (instabil), auf (grenzstabil) und links (stabil) der der imaginären Achse der p-Ebene, [. .. j, bezeichnen.
Nun wird dem System eine Totzeit von stabil. DelayMargin+O. 01 zugefügt, der Totzeitrand also um 0,01 Sekunden überschritten. Die erneute Berechnung mit allmargin gibt nun neue Werte zurück und verifiziert die Instabilität des neuen Systems. » sys.ioDelay
149
7r
rPsoll
n r '7r+n a
'2
Nyquist Diagram
~ ::d=--~.::: ~
}iil' :r""":",,,,·, I
.E
-1
-2 -3
-43~1--~_2~--~_1~--~--~,----~--~----~---J Real Axis
w=+o
erfährt. '
Abb. 5.14: NyqUlst-Diagramm: sys und sysdl-sysd3 mit verschiedenen Abtastzeiten
5 Regelungstechnische Funktionen - Control System Toolbox
150
Für die oben definierten PT 1- und PT2-Funktionen sind die Nyquist-Diagramme in Abb. 5.15 dargestellt. » subplot(121) » nyquist(sysPT1, 'r-' ,sysPTld,'b--') » subplot (122) » hold on; » stil = {'r-' 'b-.' 'k-' 'g--'} ; » for n = 2:1:size(sysPT2,1) , » nyquist(sysPT2(n),stil{1+mod(n-l,size(sysPT2,1»}); » end;
:. . . _)0_ . . ,-
",..
r
,-
/ Cf)
'x « C co
0.2 0+""
C
-
I I
C
I
'g> -0.2 E
~
I
0.4
"6>
I
co:
.s
\
,
-0.6 -1
~
.. ·1
-0.4
" ,.:.... "
-_
-0.5
Interaktive Modellanalyse mit dem LTI-Vi ewer
Neben den oben gezeigten Möglichkeiten bietet MATLAB einen interaktiven LTI-Viewer an, mit dem auf schnelle und einfache Weise ein System innerhalb einer Figure untersucht werden kann. Aufgerufen wird dieser Viewer mit dem Befehl Itiview, wodurch sich ein leerer LTIViewer öffnet. Mit dessen Menü-Befehlen und den Kontextmenüs (rechte Maustaste) können dann unterschiedliche Systeme geladen und exportiert werden, verschiedene Ausgabetypen, wie Sprungantwort, Bode-Diagramm etc., gewählt und gleichzeitig im LTI-Viewer angesehen werden, wie z.B. in Abb. 5.16) dargestellt.
2\..... ,.... , -1
/
",. ."".
....-.... '
I.
,
/
,.,,'
. '"'' ;::<....., , .. ,
\..
.... - . . .
/
..... , .....
-2 ,.
~
.....
[3' ,;
"-1;:::
o·
" "
\
I
" -2
0.5
....... -':-~_._' .... , ....
.",.'
I
-4
....
....' ... ,-,=- ...-,-1
~.""
"
0
Real Axis
Real Axis Abb. 5.15: Nyquist-Diagramme schiedliche Dämpfungen (rechts)
5.3.5
151
Nyquist Diagram
Nyquist Diagram 0.6
5.3 Analyse von LTI-Modellen
sysPT1 (-) und sysPT1d (--) (links), sysPT2 für unterAbb. 5.16: Interaktive Modellanalyse mit dem LTI-Viewer
Systemantwort im Frequenzbereich Antwort bei einer komplexen Frequenz f Antworten für ausgewählte Frequenzen w das Bode-Diagramm Amplitudenrand und Phasenrand Stabilitätskenngrößen
evalfr (sys, j) freqresp (sys, w) bode (sys[,wj) margin (sys) allmargin (sys)
Berechnet Berechnet Berechnet Berechnet Berechnet
nyquist (sys[,wj)
Berechnet das Nyquist-Diagramm
Schon beim Aufruf gibt es verschiedene Möglichkeiten, um bestimmte Voreinstellung('ln festzulegen: lti view (sys) lt i view (plottype , systems, extras) Iti view (open, systems, viewers) Wird nur ein System sys übergeben, so wird der LTI-Viewer standardmäßig mit denen der Sprungantwort geöffnet. Mittels des Parameters ploitype kann man eine oder mehrere Darstellungsarten für die übergebenen Systeme wählen. Der Parameter extras enthält die zusätzlichen Eingabeparameter der verschiedenen Zeit- und Frequenzantworten. Für einen bereits geöffneten LTI-Viewer (Handle vi ewer s) kann nun mit dem Wert 'clear' für den Parameter open und weglassen von systems der LTI-Viewer zurückgesetzt werden, mit ' current' werden dem LTI-Viewer Systeme hinzugefügt. Der Parameter extras enthält die zusätzlichen Eingabeparameter der verschiedenen
5 Regelungstechnische Funktionen - Control System Toolbox
152
5.3 Analyse von LTI-Modellen
153
Zeit- und Frequenzantworten, z.B. die Angabe des Eingangssignals u, des Zeitvektors t und des Anfangswertvektors xO bei Aufruf von ltiview('lsim' ,sysl,sys2,u,t,xO). Im folgenden Beispiel.(Abb. 5.17) wird zuerst ein schwingungsfähiges PT2-System sys erzeugt, das in einem LTI-Viewer mit der Darstellung als Bode-Diagramm und als Nullstellen-Polstellen-Verteilung geöffnet wird, wobei der Handle des LTI-Viewers in h gespeichert wird. Anschließend wird im offenen LTI-Viewer noch ein PT1-System angezeigt.
I
Oltalir: Dllafir:
Dltalic Dllollr;
i
.'
» [num,den] = ord2(10,O.2); » sys = tf(num,den); » h = ltiview({'step';'pzmap'},sys); » ltiview('current',tf(dcgain(sys),[O.3 l]),h) .'!'fts IIStyla RespoMe Chnnu:teristics "
Compensator format ""
shoWSeUlingllmewlthln[J% S!1llwrlsellme trom
§] 10 Ei %
o Tlmecons1w1:
DCx(1 +Tzs)f(1 + Tps)
ONmurallrequenoy: DCx(1 +slwx)/(1 +slwp) OZerofpole/galn
l(x(s+z)/(s+p)
,PhaSeWNPI)[ng"
l...0
,BQileOIlUnns
Unwrop phase
!0ShOWPlanllsensorpOlesandzeros
Abb. 5.18: "Contral System Toolbox Preferences"-Tool zur Festlegung von Grundeinstellungen der Contra I System Toolbox
Im Fenster "Style" können Einstellungen zu den Gitterlinien, der Schriftauswahl für die Beschriftung und der Achsen-Farbe getroffen werden.
Abb. 5.17: LTI- Viewers
Im Fenster "Characteristics" können Angaben zur Anstiegs- und zur Abklingzeit bei den Zeitantwort-Darstellungen, also Impulsantwort (Befehl impulse) und Sprungantwort (Befehl step), sowie zur Phasendarstellung im Bodediagramm (Befehle bode und margin) eingestellt werden.
Die Grundeinstellungen des LTI-Viewers sowie einige andere Grundeinstellungen der Control System Toolbox lassen sich mittels des interaktiven Tools "Control System Toolbox Preferences" einstellen, der mit dem Befehl
Im Fenster "SISO Tool" können für das SISO Design Tool Angaben zur Struktur des dort verwendeten Reglers sowie für die Darstellung des dort gezeigten Bodediagramms getroffen werden (siehe hierzu Kap. 5.4.2).
ctr1pref Interaktive Modellanalyse mit dem LTI-Viewer
gestartet wird. Die insgesamt vier Einstell-Fenster zeigt Abb. 5.18. So können im Fenster "Units" Einstellungen zu den standardmäßig verwendeten Einheiten getroffen werden: Für die Frequenz entweder 'Hz' oder 'rad/sec' (Standard), wobei für die Darstellung lineare 'lin sca1e' oder logarithmische Skalierung 'log scale' (Standard) eingestellt werden kann. Für die Verstärkung kann' dB' (Standard) oder der Absolutwert mit 'absolute' angegeben werden. Die Phase kann entweder in 360°-Einteilung mit 'degree' (Standard) oder in rad 'radians' erfolgen.
h
= ltiview (systems)
ctr1pref
Öffnet einen LTI-Viewer mit den Systemen systems und weist seinen Handle der Variablen h zu Öffnet das "Contral System Toolbox Preferences"Tool zur Festlegung von Grundeinstellungen der Control System Toolbox
154
5 Regelungstechnische Funktionen - Control System Toolbox
5.3.6
Ordnungsreduzierte Darstellung
Für die Analyse der Systemeigenschaften kann es hilfreich sein, eine reduzierte Systemdarstellung zu verwenden: So lässt sich z.B. oft das tief- und hochfrequente Verhalten eines Systems getrennt untersuchen, ohne wichtige Eigenschaften außer Acht zu lassen. Automatische Ordnungsreduktion Mit dem Befehl minreal lassen sich in der Zustandsdarstellung nicht beobachtbare und nicht steuerbare Zustände eliminieren bzw. bei Übertragungsfunktionen (TF und ZPK) identische Nullstellen und Pole kürzen. Der optionale Parameter tal gibt die Toleranz für die Zustands-Elimination bzw. Nullstellen-Polstellen-Kürzung an. Diese liegt standardmäßig bei tal = sqrt (eps), bei größeren Toleranzen werden mehr Zustände eliminiert. sysr = minreal (sys[, tal]) msys = sminreal (sys) Für LTI-Systeme in Zustandsdarstellung eliminiert der Befehl sminreal alle Zustände, die aufgrund struktureller Gegebenheiten vorhanden sind, aber keinen Einfluss auf das Ein-/ Ausgangsverhalten haben. Wie im folgenden Beispiel leicht zu erkennen ist, führt erst die Angabe der Toleranz 0.01 zur gewünschten Kürzung der Nullstelle bei -0.999 mit dem Pol bei -1.001. » sys = zpk([-0.999 1],[-1.001 2],0.5) Zero/pole/gain: 0.5 (s+0.999) (s-l) (s+1.001) (s-2) » minreal (sys) Zero/pole/gain:
0.5 (s+O. 999) (s-1) (s+1.001) (s-2) » minreal(sys,O.Ol) Zero/pole/gain: 0.5 (s-l) (s-2) Im Beispiel für sminreal wird das System sys, dessen zweiter Zustand weder mit dem Eingang noch mit dem Ausgang verknüpft ist, auf das Teilsystem sys (1,1) minimiert.
I
»sys = ss ([12; 03 ],[4; 0],[50],0) ; » msys = sminreal(sys); » [ msys.a msys.b msys.c msys.d ans 4
'5
o
5.3 Analyse von LTI-Modellen
155
Explizite Ordnungsreduktion Soll ein System hoher Ordnung vereinfacht werden oder unterschiedlich "schnelle" Zustände getrennt untersucht werden, so ist modred 7) das geeignete Werkzeug. rsys rsys
modred Csys, elim) modred Csys,elim[,methodej)
Neben dem System sys muss dem Befehl modred im Parameter el im der Vektor mit den Indizes der zu eliminierenden Zustände übergeben werden. Als Berechnungsvorschrift methode gibt es zwei grundsätzlich voneinander verschiedene Methoden: 'mde' (matching dc-gain) erzeugt ein reduziertes Modell, das die gleiche stationäre Gleichverstärkung (Kap. 5.3.2) aufweist wie das Originalmodell. Die Ableitungen (linke Seite) der in elim angegeben Zustände werden zu null gesetzt und damit diese Zustände in den restlichen Gleichungen eliminiert. (Standard) 'deI' (delete) entfernt einfach die in el im übergebenen Zustände aus dem Originalmodell, was zwar nicht zu übereinstimmender stationärer Gleichverstärkung führen muss, aber in der Regel zu besserer Übereinstimmung im Frequenzbereich führt. Beispiel Aus den PT 1 - und PT 2 -Übertragungsfunktionen sysPTl und sysPT2 wird das Gesamtsystem sys erzeugt und jeweils mit 'deI' und 'mde' zwei reduzierte Darstellungen syslmdel und sys2mdel bzw. syslmmde und sys2mmde berechnet. »T = 0.2 ; V = 0.8 » wn = T/O.OOl ; d = 0.05 ; » sysPT1 = ss(tf(V,[T 1])) ; » sysPT2 = ss(tf(wn-2,[1 2*d*wn wn-2])) » sys = sysPT1 + sysPT2 ; » sys1mdel = modred(sys, [2,3] ,'del') » sys2mdel = mOdred(sys,[l],'del') ; » sys1mmdc = modred(sys, [2,3] ,'mdc') » sys2mmdc = mOdred(sys, [1] ,'mdc') » sys.a ans = -5.0000 0 0 o -20.0000 -78.1250 o 512.0000 0 » [sysPT1.a , syslmdel.a , syslmmdc.a ] ans -5 -5 -5 »[sysPT2.a sys2mdel.a, sys2mmdc.a ] ans = -20.0000 -78.1250 -20.0000 -78.1250 -20.0000 512.0000 0 512.0000 0 512.0000
-78.1250 0
7) Dieser Befehl wird gerne mit dem Befehl balreal verwendet, der mittels der Gram'schen Steuerbarkeits- und Beobachtbarkeitsmatrizen eine verbesserte Zustandsdarstellung berechnet [17, 37],
5 Regelungstechnische Funktionen - Control System Toolbox
156
5.3 Analyse von LTI-Modellen
Abschließend werden die Sprungantworten in Abb. 5.19 und die Bode-Diagramme in Abb. 5.20 geplottet.
» figure(1) » subplot(221) » subplot(222) » subplot (223) » subplot (224)
» figure(2)
~
Bode Diagram
10r'~~~-~~or--_--
40r'~-,~~--~~~~-------
.- '-'~:7::-' ""' ..... '''''!'?:.~.~ ....;..;:.;.;
-5
<1l
:2:
-15
'e
-20
:2:
-20
~ -40
-25 -30
20
"3
.~ -10
5
iil
~
TI
bOde(sysPT1,'r-' ,sys1mdel,'b-',syslmmdc, 'g--') bOde(sysPT2,'r-' ,sys2mdel,'b-' ,sys2mmdc, 'g--')
» subplot (121) » subplot (122)
Bode Diagram
iil
step(sys,'r-') step(sysPT1,'b-',sysPT2,'g--') step(sys1mdel,'b-' ,sys1mmdc,'g--') step(sys2mdel,'b-',sys2mmdc,'g--')
157
.:~
I
-60 _00 1
.••• j
Or
Step Response
Step Response
(b)
(a)
g>
Oi
~
~
Ci.
Ci.
::l ±:!
::l ±:!
~
E
«
!
0.2
0.4
0.6
---"'Y"
-90
gj
.c
n..
_90l.· 1 10-
. ':;:::1 100
1 10
2 10
Frequency (rad/sec) 1 o
-45
~ n..
TI
0
A....
-135 - 1BO l
10
.~··I
1
10
2
10
3
10
4
Frequency (rad/sec)
II 0.2
0.8
0.4
0.6
O.B
Abb. 5.20: Bode-Diagramm Modellreduktion: sysPT1 (-), syslmdel (-) und sys1mmdc (--) (links); sysPT2 (-), sys2mdeL (-) und sys2mmdc (--) (rechts)
Time (sec)
Time (sec)
Step Response
Step Response
(d)
(c)
5.3.7
Zustands beschrei bungsformen
1II"""';,':..;.':.,.",.l.II.,j,'..... '.. '_' ___ '_'
TI
.-E
Ci.
~
1.st
,"
;"
TI
g
Ci.
Je nach Untersuchungsziel können unterschiedliche Darstellungsformen eines Systems erwünscht sein. So lassen sich im Zustandsraum durch geeignete MatrixTransformationen verschiedene Darstellungen eines Systems erzeugen, z.B. die Beobachtbarkeits- und Steuerbarkeitsmatrizen für die Untersuchung von Beobachtbarkeit und Steuerbarkeit.
1,1,
2.5 ('
21111,' t I 1.5
"I 'I~\
,I ,
6~.llll"
1\"'" ... '-,- -,-,-
~
-_sys2mdel
0.5 0
0.2
0.4
0.6
Time (sec)
0.8
j---sys2mmdcll
o "
0.1
0.2
0.3
004
0.5
0.6
Time (sec)
Abb. 5.19: Sprungantworten Modellreduktion: (a) sys, (b) sysPTl (-) 1Lnd sysPT2 (--); (c) syslmde L (-) und syslmmdc (--), (d) sys2mdeL (-) und sys2mmdc (--)
Ordnungsreduktion minreal (sys, [tal]) modred (sys, elirn) sminreal (sys)
Zustands-EliminationjNullstellen-Polstellen-Kürzung Ordnungsreduktion Strukturierte Ordnungsreduktion
Kanonische Zustandsbeschreibungen Mit dem Befehl canon bietet die Control System Toolbox die Möglichkeit, in Abhängigkeit des Parameters type zwei kanonische Zustandsbeschreibungen zu realisieren: csys = canon (sys, 'type') [csys, T] = canon (sys, 'type' ) Bei SS-Modellen wird für beide Typen in der Variablen T die Transfol'mationsmatl'ix gespeichert, die den transformierten Zustandsvektor Xc = Tx erzeugt. Wird als type 'modal' übergeben, so wird eine Zustandsbeschreibung erstellt, bei der in der Diagonalen der Systemmatrix die reellen Eigenwerte Ai des Systems und die komplexen Eigenwerte a±jw jeweils in 2 x 2-Untermatrizen stehen (A diagonalisierbar):
5 Regelungstechnische Funktionen - Control System Toolbox
158
Beispiel: .\1 0 (]"0 W0 00 0 -w (]" 0 [ o 0 0.\2
A _ -
reelle Eigenwerte '\1, .\2 konj. lmmplexer Eigenwert (]" ± jw
1
x(s)
sn
+ Cl Sn-1 + ... + Cn -1 S + Cn
A
0 , ..... 1 0 o ... o 1 o ... 0 0 ...... 1 0 ...... 0
0 0
ist die Matrix der unbeobachtbaren Zustände und B no die Matrix der unbeobachtbaren Eingänge, A o , B o und Co sind die Matrizen des beobachtbaren Teilsystems.
(5.30)
-C n
-Cn -1
: 0 1
(5.31 )
In MATLAB wird die Beobachtbarkeitsform erzeugt durch:
[Abar, Bbar, Cbar, T , kJ = obsvf (A, B , C, [tal]) Die drei Variablen Abar, Bbar und Cbar enthalten die auf Stufenform transformierten Matrizen A, Bund C. Der Vektor k hat als Länge die Dimension von A: In jedem Element wird die Anzahl der beobachtbaren Zustände während der iterativen MatrixTransformation gespeichert. Die Anzahl der Einträge ungleich null von k gibt also die Anzahl der Iterationsschritte an, die Summe der Vektorelemente von k die Anzahl der beobachtbaren Zustände. Auch hier ist T die Transformationsmatrix, der optionale Parameter tal gibt die Toleranz bei der Berechnung der Beobachtbarkeitsform an. Ein Beispiel soll die beiden Befehle ob sv und obsvf veranschaulichen.
» A=
-C2 -Cl
A
=
6 1
Beobachtbarkeit Bei der Systemanalyse ist es zunächst wichtig zu wissen, ob und welche Zustände eines Systems beobachtbar sind. Dies geschieht entweder über die Beobachtbarkeitsmatrix Ob oder mittels der Beobachtbarkeitsform des Systems. Die Beobachtbarkeitsmatrix Ob (Observability Matrix) wird gebildet aus der Systemmatrix A und der Ausgangsmatrix C nach:
»B B=
r
g1, 1
CA n -
=
-2 2 ]
0
o1
2 2
1
1 0
]
0
1
» Ob = obsv(A,C)
=
1
0
6
-1
1
4
o
1
2
Wie bereits an der Ausgangsmatrix C zu erkennen, ist das System vollständig beobachtbar. Gleiches liefert die Stufenform der Beobachtbarkeitsform (k=2): » [Abar,Bbar,Cbar,T,kJ Abar
Sollen auch Aussagen gemacht werden darüber, welche Zustände nicht beobachtbar sind, so gelingt dies mittels der Beobachtbarkeitsform. Ist ein System nicht vollständig beobachtbar, so existiert eine Ähnlichkeitstransformation auf Stufenform, für die gilt: = TAT T
13
=
C
TB
= CT T
(5.33)
-A [A0 A A
12 ]
o
- [B B =
no Bo ]
6 1
-1 4
-2 -2
2 2
1 0
0
1 0
0 1
2
0
Bbar Cbar 1
T =
Das transformierte System stellt sich wie folgt dar: =
2
ans
obsv (A,C) obsv (sys)
no
4
» rank (Ob)
1
In MATLAB wird die Beobachtbarkeitsmatrix berechnet mit:
A
1 4 ]
-1 -2
» C= C
(5.32)
Hat die Beobachtbarkeitsmatrix vollen Rang, so ist das System vollständig beobachtbar, andernfalls entspricht der Rang von Ob der Anzahl der beobachtbaren Zustände.
Ob Ob
6 -1
-2 -2
Ob
Ob =
159
A no
Eine zweite Darstellungsart ist die Steuerbarkeitsform, für die als type' companion' angegeben wird. Voraussetzung für die Darstellung in Steuerbarkeitsform ist die Steuerbarkeit des Systems. Die Systemmatrix des steuerbaren Systems wird aus den Koeffizienten des charakteristischen Polynoms X(s) wie folgt gebildet (n: Anzahl der Zustände):
o
5.3 Analyse von LTI-Modellen
C
[0
Co]
(5.34)
k
obsvf(A,B,C)
5 Regelungstechnische Funktionen - Control System Toolbox
160
161
5.3 Analyse von LTI-Modellen
Steuerbarkeit
Anhand des folgenden Beispiels wird die Funktion von ctrb und ctrbf gezeigt.
Eine weitere interessante Eigenschaft ist die Steuerbarkeit eines Systems. Sollen bestimmte Zustände eines Systems geregelt werden, so müssen sie steuerbar sein. Um Aussagen über die Steuerbarkeit eines Systems zu machen, eignen sich sowohl die Steuerbarkeitsmatrix Co als auch die Steuerbarkeitsform der Zustandsdarstellung.
A=
Die Steuerbarkeitsmatrix Co (Controllability Matrix) eines Systems mit n Zuständen ist definiert als: Co = [B
AB
A2 B
An-1B
1
(5.35)
Hat die Steuerbarkeitsmatrix vollen Rang, so ist das System vollständig steuerbar, andernfalls entspricht der Rang von Co der Anzahl der steuerbaren Zustände. Die Befehls-Syntax lautet: Go = ctrb CA,B) Go = ctrb Csys)
6
»B B=
14]
-1 4 -2 2
-2 2 ]
-2 -2
2 2
»C C=
1
o1
0
0
0 1
-2 -2
2 2
]
» Co = ctrb(A,B) Co -10 -10
10 10
B = TB
C
=
CT T
(5.36)
Der Rang der Steuerbarkeitsmatrix Co ist nicht voll, deshalb ist das System nicht vollständig steuerbar. Das gleiche Ergebnis erhält man, wenn man die Steuerbarkeitsform aufstellt.
» [Abar,Bbar,Cbar,T,k] Abar = 5.0000 -2.0000
Das transformierte System stellt sich wie folgt dar:
Bbar
ne A = [A A 21 A0 e ]
6 -1
» rank (Co) ans
Sollen auch Aussagen gemacht werden über die Zustände, die nicht steuerbar sind, so gelingt dies mittels der Steuerbarkeitsform. Ist ein System nicht vollständig steuerbar, so existiert auch hier eine Ähnlichkeitstransformation auf Stufenform, für die gilt:
A = TAT T
» A=
B =
[~e]
C = [C ne Ce]
(5.37)
Alle nicht steuerbaren Zustände befinden sich in der Teilmatrix A ne , die nicht steuerbaren Eingänge enthält C ne , das steuerbare Teilsystem hat die Matrizen A e , Be und Ce.
0.0000 5.0000
=
0.0000 2.8284
Cbar
ctrbf(A,B,C)
-0.0000 -2.8284
=
0.7071 -0.7071
-0.7071 -0.7071
0.7071 -0.7071
-0.7071 -0.7071
T = k =
o
In MATLAB erhält man die Steuerbarkeitsform durch: [Abar,Bbar,Gbar,T,k] = ctrbf CA,B,G,[tolj)
Für die zurückgegebenen Variablen gilt analog zur Beobachtbarkeitsform: Die drei Variablen Abar, Bbar und Gbar enthalten die auf Stufenform transformierten Matrizen A, Bund C, k die Anzahl der steuerbaren Zustände während der iterativen MatrixTransformation. Die Anzahl der Einträge ungleich null von k gibt wiederum die Anzahl der Iterationsschritte an, die Summe der Vektorelemente von k die Anzahl der steuerbaren Zustände. Für T und tal gilt Analoges wie bei der Berechnung der Beobachtbarkeitsform.
Zustandsbeschreibungsformen canon Csys, 'type') obsv
CA, G),
obsv Csys)
obsvf CA,B ,G, [tolj) ctrb CA,B), ctrb Csys) ctrbf CA, B ,G , [tolj)
Kanonische Zustandsbeschreibungen Beobachtbarkeitsmatrix Stufenform der Beobachtbarkeitsmatrix Steuer bar keitsmatrix Stufenform der Steuerbarkeitsmatrix
5 Regelungstechnische Funktionen - Control System Toolbox
162
5.4
Reglerentwurf
Das abschließende Ziel einer regelungstechnischen Untersuchung stellt der Entwurf eines Reglers dar, mit dem ein gewünschtes Systemverhalten eingestellt werden soll. Erster Schritt ist dabei die Auswahl eines geeigneten Reglers, der in einern zweiten Schritt parametriert wird. Bei guten Simulationsergebnissen des geschlossenen Regelkreises folgt dann die Implementierung am realen System mit anschließenden Tests. Sind die so erzielten Ergebnisse von ausreichender Güte, ist die regelungstechnische Aufgabe abgeschlossen. In der Regel werden aber noch Verbesserungen erforderlich sein, so dass einige oder auch alle Stufen der Untersuchung, angefangen von der ModelIierung des Systems über die Systemanalyse bis hin zur Reglersynthese, ein oder mehrere Male durchlaufen werden müssen. Für den Entwurf und die Auslegung eines Reglers stellt die Control System Toolbox nun einige Verfahren zur Verfügung:
5.4 Reglerentwurf
Im Rahmen der Control System Toolbox setzt sich die Übertragungsfunktion - Go des offenen Regelkreises nach Abb. 5.21 zusammen aus den Übertragungsfunktionen der Strecke Gs, des Reglers G R, eines Mess-Sensors GM und des Rückführverstärkungsfaktors k (n Zählerpolynome, d Nennerpolynome): -Go
~~
G
k. no do
(5.38)
nRnsdM dRdsdM + k·nRnSnM
l+k.G R GsG M
(5.39)
Die Pole des geschlossenen Regelkreises entprechen den Wurzeln des Nennerpolynoms von G nach der Gleichung do
+
k·no
dRdSdM
+
k·nRnsnM
O.
(5.40)
Die Control System Toolbox stellt für das WOK-Verfahren für SISO-LTI-Modelle den Befehl rlocus zur Verfügung mit der Befehls-Syntax:
.. S1S0 Design Tool .. Polplatzierung in Verbindung mit Zustandsrückführung und -beobachtung .. Linear-quadratisch optimale Regelung .. KaIman-Filter als Zustandsbeobachter für verrauschte Größen
Reglerentwurf mittels Wurzelortskurve
Ein klassisches Verfahren zum Einstellen der Reglerparameter von SISO-Systemen ist der Entwurf mithilfe von Wurzelortskurven (WOK). Eine Wurzelortskurve beschreibt das Verhalten der Pole des geschlossenen Regelkreises in Abhängigkeit eines Rückführverstärkungsfaktors k und stellt diese Abhängigkeit in der komplexen Nullstellen-Polstellen-Ebene mit den Realteilen Re{.\} = (J als x-Achse und den Imaginärteilen Im{.\} = wals y-Achse dar.
u
nRnSnM k· dRdsdM
k·GR"GS·GM
Die Übertragungsfunktion des geschlossenen Regelkreises nach Abb. 5.21 lautet bei negativer Rückkopplung (n Zählerpolynome, d Nennerpolynome):
.. Wurzelortskurven-Verfahren
5.4.1
163
y
rlocus (sys[, k]) [r, kJ = rlocus (sys) r = rlocus(sys,k) Das übergebene LTI-Modell sys ist hierbei die positive Übertragungsfunktion des offenen Regelkreises Go
G R ·Gs· GM
sys= sysM
*
sysS
*
sysR
ohne den Verstärkungsfaktor k, der optional übergeben werden kann. Somit wird sys gebildet durch das entsprechende Verknüpfen der Einzelmodelle (Achtung auf die Reihenfolge der Modelle, siehe auch Kap. 5.2.6 und 5.2.7): Der erste Aufruf mit rlocus (sys[, kj) ohne Variablenrückgabe erzeugt die Wurzelortskurve von sys in einem Plot. Werden nicht explizit Verstärkungsfaktoren mit dem Vektor k angegeben, so wählt MATLAB passende Werte. In diesem Zusammenhang sei an das Plotten einer Nullstellen-Polstellen-Verteilung mit dem Befehl'pzmap erinnert (Kap. 5.3.2). Auch hier stehen die Befehle sgrid bzw. zgrid zur Verfügung, mittels derer ein Gitternetz mit Linien gleicher Dämpfung (Geraden vorn Ursprung) und gleicher natürlicher Frequenz (Kreise um den Ursprung) eingeblendet werden können.
Abb. 5.21: Signa!fiussplan Regelkreis
Wird als Befehlsaufruf [r, kJ = rlocus (sys) gewählt, so werden in der Matrix r die komplexen Wurzelorte zu den entsprechenden Verstärkungsfaktoren im Vektor k rückgeliefert. Die Matrix r hat length(k) Spalten, wobei in der n-ten Spalte jeweils die dem Wert k(n) zugehörigen Pole abgelegt sind.
5 Regelungstechnische Funktionen - Control System Toolbox
164
5.4 Reglerentwurf
165
Im Beispiel wird die Wurzelortskurve von sys in Abb. 5.22 gezeigt. Ausgegeben werden weiter der minimale und maximale Wert für k und die zugehörigen Ortskurvenpunkte.
Punkt p = [-0.9-0. 6i] der Verstärkungsfaktor kff und die Wurzeln rff berechnet und dann p (0) sowie die zugehörigen rff (0) in Abb. 5.23 rechts geplottet.
» sys
» [kf,rf]
= rlocfind(sys) %K-Werte durch Mausklick ermitteln Select a point in the graphics window -0.7725 - 0.6273i kf 0.6598 rf -0.6960 + 0.8544i -0.6960 - 0.8544i -0.7080 » sgrid » p = [-0.9-0.6i] % k-Werte für permitteln
= zpk([] , [-0.1 -l-i -1+i] ,1) Zero/pole/gain:
1
(s+0.1) (s-2 + 2s + 2)
» rlocus(sys) »
[r,k] = rlocus(sys) ,k(max(find(k
» [k(1) ans:::
1.0e+005
o
*
p =
4.5575
-0.9000 - 0.6000i = rlocfind(sys,p) kff 0.6610
» [ r(: ,1) , r(: ,max(find(k
» [kff,rff]
ans
-1.0000 + 1.0000i 37.7765 +66.6487i -1.0000 - 1.0000i 37.7765 -66.6487i -77.6529 -0.1000
rff
-0.6952 + 0.8544i -0.6952 - 0.8544i -0.7096 » hold on » plot(p, 'ks' ,rff, 'kd')
Roollocus
RootLocus
ROOILocus
~
~
f ~.,
Abb. 5.22: Wurzelortskurve für sys
ReßIAxls
Verstärkungsfaktoren auslesen Sehr hilfreich im Zusammenhang mit rlocus ist der Befehl rlocfind, der den Verstärkungsfaktor k und die entsprechenden Pole r für eine durch Mausklick bestimmte Polstelle im mit rlocus erzeugten WOK-Diagramm ausgibt. [k,r] = rlocfind
(sys[,pj)
Durch Angabe des Vektors p mit frei gewählten Polstellenorten berechnet rlocfind Ortskurvenpunkte, die nahe den angegebenen Werten in p liegen. Die k- Werte werden berechnet nach k = 1den(p)/num(p) I, die Pole sind wieder die Wurzeln nach GI. (5.40). Abb. 5.23 zeigt links die Pole des per Mausklick markierten Punktes -0.2534 + 1.1667i als +. Zusätzlich wurde mit sgrid ein Gitternetz erzeugt. Weiter wurde für den
Abb. 5.23: k- Wert ermitteln mit rlocfind (links); Pole für p- Wert ermitteln (rechts)
Wurzelortskurven-Verfahren rlocus Csys[, kj) rlocfind Csys[,pj)
Berechnet die Wurzelortskurve Gibt Verstärkung und Pole der WOK zurück
5 Regelungstechnische Funktionen - Control System Toolbox
166
5.4.2
Interaktiver Reglerentwurf: Das 8180 Design Tool
Für den Reglerentwurf von SISO-Systemen bietet die Control System Toolbox auch ein interaktives Werkzeug an, mit dem die Untersuchung des Systems und der komplette Reglerentwurf in einem vorgefertigten Formular abläuft: Das 8180 Design Tool. Gestartet wird das SISO Design Tool mit dem Befehl sisotool bzw. folgenden Befehlen: sisotool (sys[, comp]) sisotool (view ,sys ,comp, options)
5.4.3
167
Zustandsregelung und Zustandsbeobachtung
Die im Folgenden vorgestellten Verfahren basieren auf der Darstellung der Systeme im Zustandsraum und wenden die Theorie der Zustandsregelung und Zustandsbeobachtung an, die im Rahmen dieses Skriptums nur kursorisch und ohne Herleitungen dargestellt wird. Für die vertiefte Auseinandersetzung mit den theoretischen Voraussetzungen sei auf die einschlägige Literatur verwiesen (z.B. [17, 18, 27]). Zustandsregler
Ohne Parameter wird ein leeres SISO Design Tool geöffnet, mit sys kann ein SISO-LTIModell übergeben werden, comp ist ein SISO-LTI-Modell für den Regler. Der Parameter view kann auf 'rlocus' für Wurzelortskurven-Kriterium oder 'bode' für Auslegung im Bode-Diagramm gesetzt werden. options ist eine Struct-Variable mit zwei Feldern: options. feedback gibt an, ob der Regler im Vorwärtspfad (, forward', Standard) oder im Rückwärtspfad (, feedback') sitzt; options. sign bestimmt, ob die Rückkopplung negativ (-1, Standard) oder positiv (1) ist. 8 ) Das in Abb. 5.24 gezeigte SISO Design Tool wurde erzeugt mit:
I
5.4 Reglerentwurf
Ein Zustandsregler basiert auf dem Prinzip der vollständigen Zustandsrückführung über die Rückführmatrix K, wie sie in Abb. 5.25 dargestellt ist. Der Zustandsregler stellt somit einen Proportional-Regler im Rückfiihrzweig dar. Für den Reglerentwurf wird beim Zustandsregler die Sollwertvorgabe w zu null gesetzt.
w
y
» options.Ioeation = 'forward' ;
» options.sign = -1 ; » sisotool(zpk([],[-ü.1 -1-i -1+i],1),1,options)
Abb. 5.25: Zustandsregler
Zustands-DGL Strecke:
x
Ax
+
Bu
(5.41)
Ausgangsgleichung:
y
Cx
+
Du
(5.42)
Regelgesetz (w = 0):
u
-Kx
(5.43)
Geschlossener Regelkreis:
x
(A-BK) ·x
(5.44)
Grundvoraussetzung für einen Zustandsregler ist die Rückführung aller Zustände, d.h. alle Zustände müssen gemessen werden, was in praxi meist nicht möglich ist. Deshalb werden Zustandsbeobachter erforderlich, die aus den vorhandenen Messgrößen die fehlenden Zustände schätzen. Abb. 5.24: Interaktiver Reglerentwurf mit dem 8180 Design Tool Da eine tiefer gehende Beschreibung den Rahmen dieses Buches sprengen würde, wird auf das Handbuch [37J und die sehr umfangreiche Online-Hilfe verwiesen. 8)
Zustandsbeobachter (Luenberger-Beobachter) Der klassische Beobachteransatz nach Luenberger verwendet ein zur Strecke identisches Modell, wobei über die Rückführmatrix L der Ausgangsfehler zwischen realem Ausgang y und geschätztem Ausgang Sr das Modellverhalten an das Streckenverhalten heranfiihrt.
5 Regelungstechnische Funktionen - Control System Toolbox
168
5.4 Reglerentwurf
5.4.4
Reglerentwurf mittels Polplatzierung
Ein gängiges Verfahren zur Auslegung eines Zustandsreglers ist die Polplatzierung, bei der die Zustandsregler-Rückführmatrix K so berechnet wird, dass die Pole des geschlossenen Regelkreises den Polen eines vorgegebenen Wunsch-Polynoms entsprechen.
y
u
169
Zustandsregler-Rückführvektor k/Rückführmatrix K berechnen Die Control System Toolbox bietet hierzu zwei Befehle: acker und p1ace. Beide Befehle berechnen den Rückführvektor k bzw. die Rückführmatrix K so, dass die Streckenpole mit den im Vektor p übergebenen Polen übereinstimmen, wobei die Wunsch-Pole nicht mehrfach sein sollten:
k
acker (A,b,p) (A,B ,p) [K,prec,messageJ = place (A,B,p)
y
=
K
= p1ace
Die beiden Befehle unterscheiden sich dadurch, dass acker nur für SISO-Systeme geeignet ist, place hingegen auch für MIMO-Systeme. Zudem wird acker schnell numerisch instabil. Abb. 5.26: Zustandsbeobachter
Zustands-DGL Beobachter:
x
Ax+Bu+Le
(5.45)
Ausgangsgleichung:
y
Cx+Du
(5.46)
Ausgangsfehler:
e
y-y
Neue Zustands-DGL:
x
(A- LC)x+ (B - LD) u+Ly
=
(5.47)
C(x-x)
(A -LC) x+ [B - LD L]·
[~]
(5.48)
[:] e
A-BK [
o
x -
x
BK ]. [x] A-LC e
Zustandsbeobachter-Rückführmatrix L berechnen Ebenso wie für die Berechnung der Zustandsregler-Rückführmatrix K können acker und place auch für die Berechnung der Rückführmatrix L des Zustandsbeobachters verwendet werden. Hierbei wird die Systemmatrix A transponiert und statt der Eingangsmatrix B die transponierte Ausgangsmatrix C an die Befehle übergeben (Ausgangsvektor c bei acker). Die Rückführmatrix L ergibt sich dann aus dem Transponierten des Ergebnisses von acker bzw. p1ace.
L L
Zustandsregler mit Luenberger-Beobachter Wird für den Zustandsregler der geschätzte Zustandsvektor die Gleichung des geschlossenen Regelkreises zu:
Zusätzlich gibt place an, wie nahe die Eigenwerte des geschlossenen Systems bei den gewünschten Polen liegen (prec) und speichert bei Abweichungen größer als 10% eine Warnungsmeldung in message. Das Handbuch [37] empfiehlt den Befehl place.
x verwendet, so ergibt sich (5.49) (5.50)
Für die Auslegung des Zustandsreglers (Rückführmatrix K) und des Zustandsbeobachters (Rückführmatrix L) wird in der Regel das Verfahren der Polplatzierung (Kap. 5.4.4) gewählt. Ifierbei ist zu beachten, dass die Beobachterdynamik schneller sein sollte als die Reglerdynamik!
= acker = p1ace
(A' ,c' ,p) .' CA' ,C' ,p) .'
Zustandsbeobachter erstellen Ist die Rückführmatrix L berechnet, so kann auf einfache und schnelle Weise der Beobachter erstellt werden. Der Befehl estim erzeugt die Systemgleichungen des Zustandsbeobachters est wie folgt:
est = estim (sys,L) = estim (sys, L, sensors, known)
est
Im ersten Fall wird angenommen, dass alle Eingänge stochastische Größen (Prozessrauschen wund Messrauschen v) sind und alle Ausgänge gemessen werden. Die Systemgleichungen von Strecke (links) und Beobachter (rechts) lauten:
5 Regelungstechnische Funktionen - Control System Toolbox
170
:k
Ax+Bw
x
y
Cx+Dw
[~]
Zustand 1
Ax+L (y - Cx)
Ausgang
FYl
[i] x
~
Werden zusätzlich noch die Indexvektoren sensors und known angegeben, so bestimmen diese die gemessenen Ausgänge y bzw. die bekannten Eingänge u. Die nicht gemessenen Ausgänge stehen in z; w und v sind wieder Prozess- und Messrauschen. Die Systemgleichungen lauten (Strecke links, Beobachter rechts):
2
3
Zustand 2
i = Ax+B 2u + L(y - C 2x - D 22 U)
X =Ax+B 1 w+B 2 u [; ] =
171
5.4 Reglerentwurf
[~~] x + [~~:] w + [~~:] u
[: ] =
[~2] X + [D;2 ]
-0.5 L[ --~--~--~----' 2 3 o
U
2 Zeitt
Zeit!
Das durch estimerhaltene Beobachtermodell est mit den Eingängen [ u den Ausgängen [ Sr ; x ] zeigt Abb. 5.27. U (known)
y (sensors)
est
y ] und
y
Zustandsregler mit Zustandsbeobachter erstellen
X
Sind die Rückführmatrizen L und K berechnet, so kann der komplette Zustandsregler mit Beobachter erstellt werden mit dem Befehl reg.
Das folgende Beispiel soll die einzelnen Befehle verdeutlichen: Aus den Streckenpolen von sys werden die Beobachterpole polo berechnet und mittels place der Rückführvektor 1 bestimmt, mit dem dann der Beobachter est erzeugt wird. Anschließend wird die Sprungantwort von sys in y gespeichert, das als zweites Eingangssignal für das Beobachtermodell est dient. Dessen Sprungantwort wird mit lsim erzeugt, wobei xoO die Anfangswerte des Beobachters sind. Das Ergebnis zeigt Abb. 5.28. sys = ss(tf(100, [1 2 100])) ; polo = 3*real(pole(sys)) + imag(pole(sys))/3*i ; [ pole(sys) polo]
anS =
-1.0000 + 9.9499i -1.0000 - 9.9499i »1
4
Abb. 5.28: Zustände und Ausgänge bei Zustandsbeobachtung
Abb. 5.27: Modell est des Zustandsbeobachters
» » »
3
-3.0000 + 3.3166i -3.0000 - 3.3166i
rsys = reg Csys, K ,L) rsys = regCsys,K,L,sensors,known,controls) Hierbei sind Kund L die mit acker oder pI ace kalkulierten Rückführmatrizen von Zustandsregler und -beobachter, sensors die Indizes der gemessenen Ausgänge y, known die Indizes der bekannten Eingänge Ud und controls die Indizes der Steuereingriffe u. Die Gleichungen von Strecke und komplettem Regler lauten wieder:
x
Ax+Bu
x
( A - L C - (B - L D)
y
Cx+Du
u
-Kx
K) x + L y
Das Gesamtreglersystem rsys ist in Abb. 5.29 dargestellt:
place(sys.a',sys.c',polo).'
1
-1.7600 2.5600 » est = estim(sys,1,1,1) » t = 0:0.01:4 ; » [y,t,x] = step(sys,t) ; » xoO = [0.5 -0.4] ; » [yo,to,xo] = lsim(est,[ones(size(t)) y],t,xoO)
Ud (known)
est
y (sensors)
(L)
u
Abb. 5.29: Gesamtreglersystem rsys (Zustandsregler und -beobachter)
Auch hier soll ein Beispiel die Funktionsweise von reg verdeutlichen: Das System sys soll zustandsgeregelt werden. Hierzu werden die Wunsch-Pole des Beobachters und des Reglers anhand der Streckenpole festgelegt, wobei die Beobachterpole "schneller" und stärker bedämpft sind als die des Reglers.
5 Regelungstechnische Funktionen - Control System Toolbox
172
I
» sys = ss(tf(100, [1 2 100])) »polo 10*real(pole(sys)) + imag(pole(sys))/10*i » pole = 5*real(pole(sys)) + imag(pole(sys))/ 5*i Mit dem Befehl place werden nun die Rückführvektoren 1 und k bestimmt. Zum späteren Vergleich wird neben dem Gesamtsystem rsys (Regler mit integriertem Beobachter) noch der Beobachter est erzeugt. »I
173
5.4 Reglerentwurf
Dieser stationäre Regelfehler hängt mit der geänderten Übertragungsfunktion des geschlossenen Regelkreises zusammen [17, 18]. Abhilfe kann hier durch eine Sollwertanpassung geschaffen werden, die durch Einfügen einer Konstanten im Sollwertpfad den stationären Regelfehler für eine Führungsgröße zu null macht. Dies führt aber zu einem bleibendem Regelfehler bei Störungen, was nur durch einen Zustandsregler mit Führungsintegrator behoben werden kann. Zu dieser Problematik findet sich ein ausführliches Beispiel in der Übungsaufgabe Kap. 5.6.7.
plaee(sys.a',sys.e',polo).'
I
Polplatzierung
-0.7002 11. 5200 » k = plaee(sys.a,sys.b,pole)
acker CA,b,p) place CA, B ,p)
k =
4.0000 -1.1100 » est estim(sys,I,1,1) »rsys reg (sys,k,l) ;
Zustandsbeobachter und Zustandsregler erstellen estim Csys, L) reg (sys ,K ,L)
Die Sprungantwort von sys wird in y gespeichert, das als zweites Eingangssignal für est dient. Die Sprungantwort wird sowohl für est als auch für reg mit lsim kalkuliert, xoO und xcO sind die Anfangswerte des Beobachters und des Reglers. » t = 0:0.01:4 ; » [y,t,x] = step(sys,t) » xoO = [0.5 -0.04] ; » [yo,to,xo] = lsim(est,[ones(size(t)) y],t,xoO) » xeO = [0 0] ; » [ye,te,xe] = Isim(rsys,ones(size(t)),t,xeO) Zustand 1
5.4.5
11
Zustandsbeobachter erstellen Zustandsregler mit Zustandsbeobachter erstellen
Linear-quadratisch optimale Regelung
Eine weiteres Verfahren zum Auslegen eines Zustandsreglers ist die linear-quadratisch optimale Regelung, die zur Berechnung der Reglerparameter ein quadratisches Gütekriterium minimiert und nicht ein bestimmtes Einschwingverhalten vorgibt.
Ausgang
--xl 1- - -x l011 ,-,-,x 1C
0.5f \
Polplatzierung mit Ackermanns Formel Polplatzierung nach [14]
Für ein zu regelndes LTI-System mit der Zustandsbeschreibung (zeitkontinuierliches System links, zeitdiskretes System rechts)
2 1.5
x=Ax+Bu
Xk+l = AXk+Buk
(5.51)
y=Cx+Du
Yk = CXk +DUk
(5.52)
und der Zustandsrückführung 2
3
4
Zustand 2
o:E=:+:3:i
_0.5L....-~--~--~---"
o
1
234 Zeit!
u=-Kx
(5.53)
Uk = - KXk
0.5 soll die Rückführmatrix K so bestimmt werden, dass das quadratische Gütekriterium
o _0.5'L...._~~_~~--~_---.l
o
J 00
J (x, u)
Abb. 5.30: Zustände und Ausgänge bei Zustandsregelung und -beobachtung
Wie sich aus Abb. 5.30 ablesen lässt, schwingt der Beobachter jetzt sehr schnell auf das Systemverhalten ein. Der Zustandsregler regelt sehr schnell und ohne Überschwingen auf einen konstanten Wert aus, der allerdings nicht dem gewünschten Wert von 1 entspricht.
(5.54)
t=O
234
Zeit!
(xT Qx+uT Ru+2xT Nu)dt
minimal wird. Die Lösung dieses Minimierungsproblems wird in der Regel durch das Lösen der zugehörigen algebraischen Matrix-Riccati-Gleichung für S berechnet. 9 )
o 9)
= AT S + S A - (S B + N ) R -1 (B T S + NT) + Q
In der Control System Toolbox mit den Befehlen care bzw.
(5.55)
dare, siehe auch Online-Hilfe und [37].
5 Regelungstechnische Funktionen - Control System Toolbox
174
175
Für den Fall, dass statt der Zustände die Systemausgänge Ziel der Optimierung sein sollen, minimiert lqry die quadratische Gütefunktion:
Die Rückführmatrix ergibt sich mit S zu: K
5.4 Reglerentwurf
R- I (BTS+N T )
(5.56)
J
J (y, u)
Für den zeitdiskreten Fall lauten die Gleichungen wie folgt:
(yTQy+u T Ru+2yT Nu)di
(5.60)
t=O
J (Xk, Uk)
L
(Xk
T
QXk +
Uk
T
R Uk + 2XkTNuk)
(5.57) Kaiman-Filter
n=l
0= ATSA - S - (ATSB +N) (BTXB+R)-I (BTSA+N T ) + Q K = (BTXB
+ R)-I (BTSA + NT)
(5.58)
Das Kaiman-Filter berücksichtigt den Umstand, dass sowohl das System als auch das Ausgangssignal y in der Regel einen Rauschanteil w bzw. v haben, für deren Erwartungswerte bzw. Varianzen gilt:
(5.59)
Hierbei ist Q die Gewichtungsmatrix der Zustände und R die Gewichtungsmatrix der Eingänge. Die Matrix N gewichtet die Verknüpfung von Eingängen und Zuständen und ist wichtig für den Fall, dass die Durchgriffsmatrix D # 0 ist. Das System muss stabilisierbar sein, d.h. alle nicht steuerbaren Teilsysteme müssen asymptotisch stabil sein. LQ-optimale Regler-Rückfiihrmatrix K berechnen
E{w} E{ww
T
}
=
=
E{v} = 0
0
Q
E{vv
T
}
(5.61)
= R
E{wv
T
}
= N
Optimierungsziel ist es nun, den Zustandsvektor x so zu schätzen (x), dass der quadratische Mittelwert des Fehlers x - x minimal wird: P
!im E{(x - x)(x -
t-+oo
xl}
~ min
(5.63)
Abb. 5.31 zeigt das KaIman-Filter für den zeitkontinuierlichen Fall.
Die Contral System Toolbox stellt für die Berechnung der Rückführmatrix Keines LQ-optimalen Zustandsreglers die folgenden vier Befehle bereit: [K,8,e] [K,8,e] [Kd,8,e] [K,8,e]
lqr (A,B,Q,R[,Nj) dlqr (A,B ,Q,R[,Nj) lqrd (A,B ,Q,R[,NJ,Ts) lqry (sys,Q,R[;Nj)
Yv
Immer eingegeben werden müssen die System-Matrizen A und B bzw. das ganze System sys bei lqry und die Gewichtungsmatrizen Q und R. Die Gewichtungsmatrix N hingegen wird standardmäßig zu null gesetzt. Bei lqrd kommt noch die Abtastzeit Ts hinzu. Der Ausgabevaria.blen K wird die Regler-Rückführmatrix zugewiesen, 8 ist die Lösung der zugehörigen Riccati-Gleichung und e = eig(A-B*K) enthält die Eigenwerte des geschlossenen Regelkreises. Die Befehle im Einzelnen: lqr berechnet die Rückführmatrix K für ein kontinuierliches System anhand von Gleichungen (5.54-5.56), dlqr führt Gleiches für ein diskretes System mittels Gleichungen (5.57-5.59) durch. Der Befehl lqrd hingegen ermittelt für ein kontinuierliches System die Rückführmatrix Kd des diskreten Reglers für das dem kontinuierlichen System entsprechende, mit Ts und ZOH abgetastete diskrete System (Kap. 5.2.9).
(5.62)
y
Abb. 5.31: Kalman-Filter
5 Regelungstechnische Funktionen - Control System Toolbox
176
Strecke:
5.4 Reglerentwurf
177
y
U (known)
X
Ax+Bu+Gw
(5.64)
Yv
Cx+Du+Hw+v
(5.65)
x
Ax+Bu+Le
(5.66)
y
Cx+Du
(5.67)
Basierend auf einer PT 2 -Übertragungsfunktion wird das System strecke mit Prozessrauschen VI definiert.
e
Yv
-y
(5.68)
» » » »
Yv
(sensors)
kest
X Abb. 5.32: Modell kest des Kaiman-Filters
I
Beobachter:
Ausgangsfehler:
Die Rückführmatrix L wird durch das Lösen einer algebraischen Matrix-RiccatiGleichung ermittelt, im diskreten Fall wird zusätzlich noch die Matrix M benötigt, die den Schätzwert des vorangegangenen Abtastschritts neu berechnet. Für eine ausführliche Einführung sei auf die Literatur (z.B. [18]) und das Handbuch [37J verwiesen.
Weiter werden die (skalaren) Varianzen Qn und Rn mit dem Wert 1 belegt und mittels kaIman die komplette Systemdarstellung des Kaiman-Filters kest erzeugt.
Für die Auslegung des Kaiman-Filters wird üblicherweise das Verfahren der linearquadratischen Optimierung (Kap. 5.4.5) verwendet.
» »
Kaiman-Filter erstellen Ein Kaiman-Filter lässt sich mit den Befehlen kaIman bzw. kalmd generieren: kaIman erstellt, abhängig vom Typ des Systems, ein kontinuierliches oder diskretes KaIman-Filter. Ist schon ein kontinuierliches Filter entworfen und funktioniert zufrieden stellend, so ist kalmd sehr nützlich, um das entsprechende diskrete KaIman-Filter mit der Abtastzeit Ts zu erzeugen.
[kest,L,PJ = kaIman (sys,Qn,Rn[,Nn,sensors,known]) [kest,L,P,M ,ZJ kalman (sys ,Qn,Rn,Nn) [kest,L,P,M ,ZJ= kalmd (sys,Qn,Rn,Ts) Das System sys wird gebildet mit der Systembeschreibung aus Gleichung (5.64) und Gleichung (5.65):
sys.a
=
A
sys. b
=
[
B G ]
sys.c
C
sys.d = [ D H J
Obligatorisch sind auch die Varianzmatrizen Qn und Rn, die das Prozess- bzw. Messrausehen beschreiben, die Matrix Nn ist standardmäßig null. Zusätzlich können noch die Indexvektoren sensors und known spezifiziert werden: Sie enthalten die Indizes der Messausgänge bzw. der bekannten Eingänge (analog zum Befehl estim, Kap. 5.4.4, Seite 169). Bei kalmd muss noch die Abtastzeit Ts angegeben werden. In kest wird die Zustandsdarstellung des Kaiman-Filters (SS-Modell) zurückgeliefert, wobei [ u ; Yv ] seine Eingänge und [ y ; x ] seine Ausgänge sind (Abb. 5.32). Die Matrix L ist wieder die Beobachter-Rückführmatrix L (KaIman-Verstärkung) und P ist die Kovarianzmatrix des stationären Fehlers. Im diskreten Fall wird noch die Matrix NI und die Fehlerkovarianzmatrix Z ausgegeben [37J. Im folgenden umfangreichen Beispiel wird der Entwurf eines Kaiman-Filters für ein System mit Prozess- und Messrauschen gezeigt.
sys = ss(tf(1000,[1 10 1000]» ; strecke = ss(sys.a,[sys.b sys.b],sys.c,sys.d) strecke.inputname {'u' 'w'} strecke.outputname = {'y'} ;
Qn = 0.1 ; Rn = 0.2 ; [kest,L,P] = kalman(strecke,Qn,Rn)
Um die Systemantworten des Systems mit Prozess- und Messrauschen testen zu können, wird das System rausch so definiert, dass es drei optimale Eingänge für u, VI und v hat, wobei Letzterer den Prozess nicht beeinflusst, aber direkt auf den Ausgang wirkt.
I
»rausch » »
ss(sys.a,[sys.b sys.b O*sys.b], ... [sys.c ; sys.c ],[0 001] ); rausch.inputname {'u' 'w' 'v'} rausch.outputname = {'y' 'yv'} ; =
°° ;
Schließlich müssen zur Simulation mit lsim ein Eingangssignal u sowie die Rauschsignale und v erzeugt werden, in diesem Fall als Rechteckfunktion mit der Amplitude 2 und der Periode 3.
VI
I
» [u,tt] = gensig('square',3,6,0.01) » u = 2 *u ; » randn('seed',O) ; » W = sqrt(Qn) * randn(length(tt),l) » v = sqrt(Rn) * randn(length(tt),l)
Zuerst wird nun mit lsim die Systemantwort ohne Rauschen berechnet (yideal), dann die Systemantwort yrausch mit den Rauschsignalen VI und v. Der Beobachter wird nun mit dem Eingangssignal u und dem verrauschten Ausgangssignal yrausch(: ,2) (=yv) beaufschlagt, wodurch das geschätzte Ausgangssignal yestim erzeugt wird. Die nachfolgenden Zuweisungen dienen nur zum einfacheren Ansprechen der einzelnen Systemantworten.
5 Regelungstechnische Funktionen - Control System Toolbox
178 »[yideal,t] »[yrausch,t] »[yestim,t]
Analog zum Befehl reg kann mit Iqgreg ein LQ-optimaler Zustandsregler mit KaImanFilter erstellt werden. Als Parameter werden hier die Systemgleichung des KaImanFilters kest und die Rückführmatrix K übergeben, die zuvor mit kaIman und einem der Befehle Iqr, dIqr, Iqrd oder lqry berechnet wurden.
%System-Ausgang %Verrauschter System-Ausgang % Geschätzter Ausgang
rlqg
Um eine Aussage über die Güte der Signale machen zu können, wird der Messfehler emess und der Schätzfehler des KaIman-Filters ebeob definiert und" die Kovarianzen berechnet.
%Messfehler % Schätzfehler
I
» emess = y - yv ; » ebeob = y - ye ; » [ cov(emess) cov(ebeob) ans 0.0145 0.2082
I
» figure (1) » subplot (311) , plot(t,yideal(:,1» » subplot (312) , plot (t,yv,'k:',t,y,'r-',t,ye,'b--') plot(t,emess,':',t,ebeob,'k-') » subplot (313)
179
LQ-optimalen Zustandsregler mit KaIman-Filter erstellen
lsim(rausch,[u,O*w,o*v],tt); lsim(rausch,[u,w,v],tt); lSim(kest,[u,yrausch(:,2)],t)
»y = yrausch(:,1) ; » yv = yrausch(:,2) ; » ye = yestim(:,l) ;
5.4 Reglerentwurf
=
lqgreg Ckest,K[,controlsj)
Wird zusätzlich noch der Indexvektor conlrols angegeben, so hat das KaIman-Filter zusätzliche Eingänge Ud, die nicht als Steuergrößen verwendet werden. Die Indizes bezeichnen dann die Steuereingriffe u. Die Gleichungen von Strecke und komplettem Regler lauten:
Letzter Schritt ist der Plot einer Figure, wie sie sich in Abb. 5.33 darstellt.
x
Ax+Eu+Gw
x
( A - L C - (B - L D) K)
Y
Cx+Du+Hw+v
u
-Kx
x + L Yv
Das Gesamtreglersystem rlqg im geschlossenen Regelkreis zeigt Abb. 5.34. w
y
u
----------
Ausgangssignal yideal ohne Rauschen
:~
'A;-
,~
J
·
kest
~
j
\t'-, __ . ....-----I'
X
Ud
(L)
____________ IL...rlqg
_
, Yv
v
Abb. 5.34: Geschlossener Regelkreis mit LQ-optimalem Regler und Kaiman-Filter (rigg)
Auf ein Beispiel sei an dieser Stelle verzichtet und auf die ausführlichen Fallbeispiele ("Design Case Studies") im Handbuch der Control System Toolbox [37] verwiesen.
Verrauschte Ausgangssignale
:~"'" ,JW1'=f~ O;;;C=~~#~=---y,
Linear-quadratisch optimale Regelung Iqr CA,B,Q,R[,Nj) dIqr CA,B,Q,R[,Nj) lqrd CA,B ,Q,R[,N],Ts)
2"--------,--------,---------,--------y--------,--------~
lqry Csys,Q,R[,Nj)
LQ-optimaler Regler für kontinuierliches System LQ-optimaler Regler für zeit diskretes System LQ-optimaler diskreter Regler für zeitkontinuierliches System LQ-optimaler Regler mit Ausgangsgewichtung
o~
lqgreg Ckest, k)
LQ-optimalen Regler erstellen
""!:
-;-
~
o!"~
":
~
_
-2
Schätz- und Messfehler
KaIman-Filter
-2 1
'
Zeit t Abb. 5.33: Kaiman-Filterung: Ausgangssignale, Schätz- und Messfehler
I
kaIman Csys,Qn,Rn,Nn) kalmd Csys,Qn,Rn,Ts)
KaIman-Filter berechnen Diskretes KaIman-Filter für zeitkontinuierliches System berechnen
5 Regelungstechnische Funktionen - Control Sy~tem Toolbox
180
5.5.2
Probleme der numerischen Darstellung
5.5
Bereits bei der Modellierung realer Probleme müssen Vereinfachungen getroffen werden, z.B. Linearisierung um einen Arbeitspunkt oder Ordnungsreduktion. Das so erstellte mathematische Modell gibt zwar nur das Verhalten des vereinfachten Systems wieder, ist aber in sich exakt. Die rechnerinterne Umsetzung stellt nun eine weitere, an sich unerwünschte Vereinfachung dieses exakten Modells dar. Diktiert wird diese Vereinfachung z.B. durch die ZahlendarsteIlung und den eingeschränkten Zahlenbereich des Rechners oder durch die vorhandene begrenzte Rechenleistung und Speicherkapazität. Die Wissenschaft, die sich auf theoretischer Ebene mit diesen Problemen beschäftigt, ist die numerischen Mathematik. Sie stellt die Algorithmen zur näherungsweisen Lösung mathematischer Probleme aus den verschiedensten Arbeitsgebieten (Naturwissenschaften, Technik etc.) zur Verfügung und bewertet die Lösungsverfahren nach verschiedenen Gesichtspunkten, z.B. nach dem Rechenaufwand oder dem Speicherplatzbedarf. Dem Anwender stellt sich also die Frage, was er bei der Umsetzung am Rechner beachten muss, um eine möglichst gute und zuverlässige Lösung seines Problems zu erhalten. Ohne allzu tief in die Theorie der numerischen Mathematik einzusteigen, werden im Folgenden einfache Bewertungsmaßstäbe aufgezeigt und die LTI-Modelle Zustandsdarstellung, Übertragungsfunktion und Nullstellen-Polstellen-Darstellung verglichen.
5.5.1
5.5 Probleme der numerischen Darstellung
Zur Unterscheidung der möglichen Ursachen für fehlerhafte Lösungen von numerischen Problemen werden die Fehler beim Übergang zur numerischen Darstellung üblicherweise in folgende Klassen unterteilt:
Der Begriff der Kondition eines Problems behandelt die Auswirkung von Datenfehlern auf die Berechl,1Ungsergebnisse. Hierbei heißt ein Problem gut konditioniert, wenn geringe Änderungen in den Eingangsdaten auch nur geringfügig Änderungen in den Ergebnissen zeitigen, und schlecht konditioniert, wenn schon kleine Änderungen in den Eingangsdaten zu großen Abweichungen der Ergebnisse von der richtigen Lösung führen. IO ) So kann ein schlecht konditioniertes Problem auch mit einem sehr guten und numerisch stabilen Lösungsalgorithmus nicht befriedigend gelöst werden. Zur Abschätzung der Konditionierung eines Problems werden in der numerischen Mathematik Konditionszahlen bezüglich unterschiedlicher Probleme definiert, die angeben, wie stark sich die Änderung eines Eingangswertes auf einen Lösungswert auswirkt. So stellt das Lösen von linearen Gleichungssystemen Ax = b und das Ermitteln von Eigenwerten und -Vektoren eine wichtige Aufgabe in der numerischen Simulation dar. Da lineare Gleichungssysteme oft sehr schlecht konditioniert sind, wird zur Fehlerabschätzung die Kondition der Matrix A wie folgt definiert [10]: Aus dem gestörten linearen Gleichungssystem
A· (x + Llx)
II.6.xll
2. Verfahrensfehler entstehen durch nicht vollständige Modellierung eines Problems, insbesondere durch die Diskretisierung des Problems oder die endliche Anzahl von Schritten bei Iterationsverfahren.
IILlxl1
liXlf Definition:
(5.70)
Wichtig im Zusammenhang mit dem Fehlerbegriff ist auch die Definition des absoluten Fehlers ek und des relativen Fehlers 6k (falls Xk # 0) für die Näherungswerte x = (:h, ... ,xn) an die exakten Werte x = (Xl, ... ,Xn) mit 1 ::; k::; n: K
Uk
=
Xk -
Xk
(5.69)
Xk
Die beiden Fehler können sich für ein Problem durchaus unterschiedlich verhalten. Die Problematik der Daten- oder Eingangsfehler wird durch die Konditionierung des Problems beschrieben und in Kap. 5.5.2 erläutert, die Verfahrens- und Rundungsfehler werden in Kap. 5.5.3 dargestellt.
::;
IIA -111·II.6.bll
(5.71)
::;
IIA -lll.IIAII' IILlbl1 Ilbll
cond(A):= IIA -lll·IIAII
(5.72)
heißt die Konditionszahl der Matrix A.
Die Konditionszahl cond(A) ist für eine natürliche Norm größer oder gleich eins. MATLAB bietet zur Überprüfung der Kondition von Matrizen verschiedene Befehle an:
3. Rundungsfehler folgen aus der Art der ZahlendarsteIlung und dem begrenzten Zahlenbereich im Rechner und stellen ein nicht zu unterschätzendes Problem dar.
Xk - Xk
b+Llb
Der relative Fehler ergibt sich dann zu:
1. Datenfehler oder Eingangsfehler resultieren aus fehlerhaften Eingangsdaten, z.B. verrauschten Messdaten. Ihre Auswirkungen auf die Lösung lassen sich nicht vermeiden, doch kann und muss ihr Einfluss auf das Ergebnis minimiert werden.
=
Kondition eines Problems
mit der Störung .6.b ergibt sich der Fehler .6.x = A -1 Llb, der mittels der beliebigen Vektor- bzw. Matrixnormen 11· 11 abgeschätzt werden kann durch:
Fehler begriff
ek
181
cond (A[,pj) condest CA) condeig CA) Der Befehl cond CA ,p) berechnet die Konditionszahl der Matrix A bezüglich der Inversion mit dem Typ der Norm p, der sein kann: 1 für die natürliche Norm, 2 für die Spektralnorm (Standardwert), 'fro) für die Frobenius Norm und inf für die UnendlichNorm. Die natürliche Norm (I-Norm) verwendet der Befehl condest CA), der einen anderen Algorithmus zur Abschätzung verwendet als cond CA, 1). Der Befehl condeig CA) schließlich bestimmt einen Vektor von Konditionszahlen für die Eigenwerte der Matrix A. Eine Matrix kann für die Berechnung der Eigenwerte und bezüglich der Lösung eines 10)
Es werden auch die Begriffe gutartig und bösartig verwendet.
182
5 Regelungstechnische Funktionen - Control System Toolbox
linearen Gleichungssystems (Matrix-Inversion) durchaus unterschiedlich gut konditioniert sein. In der Anwendung ist eine gängige Regel, dass der Wert von log10 (cond(A)) die Anzahl der Dezimalstellen angibt, die bei der Lösung des linearen Gleichungssystems durch Rundungsfehler verloren gehen. Ein weiterer Anhaltspunkt für schlechte Kondition ist, wenn cond (A) sehr viel größer als 1/ sqrt (eps) ist. Konditionzahlen cond (A[,pP condest (A) condeig (A)
5.5.3
Konditionszahl der Matrix A bezüglich Inversion mit Norm p Konditionszahl der Matrix A bezüglich Inversion (I-Norm) Konditionszahl der Matrix A bezüglich Eigenwerten
Numerische Instabilität
Im Gegensatz zum Konditionsproblem l l ) beschreibt die numerische Stabilität bzw. Instabilität die Auswirkungen des verwendeten Läsungsalgorithmus auf das Ergebnis. Da in einem Digitalrechner in der Regel mit Gleitkomma-Arithmetik gerechnet wird und die Menge der darstellbaren Zahlen durch die endliche Zahl von den hierfür zur Verfügung stehenden Stellen 12 ) im Rechner begrenzt ist, müssen die berechneten Zahlen oft gerundet werden. Durch diese Rundungsvorgänge kann es zum Problem der Ausläschung von Stellen kommen. Tritt dies bei einer mehrstufigen Berechnung in mehreren Zwischenergebnissen auf, so können sich diese Fehler aufschaukeln und zur numerischen Instabilität führen. Dieses Verhalten wird auch als Fehlerfortpjlanzung bezeichnet.
5.6 Übung§ufgaben
5.5.4
183
Bewertung der LTI-Modell-Typen nach numerischen Gesichtspunkten
Die Zustandsdarstellung (SS-LTI-Modell) ist für die numerische Berechnung grundsätzlich am besten geeignet! Deshalb sind auch viele Algorithmen in MATLAB und in der Control System Toolbox für SS-LTI-Modelle implementiert, Modelle in anderen Darstellungsarten werden automatisch umgewandelt oder müssen explizit konvertiert werden (Kap. 5.2.5). Nichtsdestoweniger müssen auch SS-LTI-Modelle gut konditioniert sein, um eine sinnvolle Lösung zu liefern. Hierzu kann der Befehl ssbal von Nutzen sein, mit dem eine normierte bzw. austarierte Zustandsdarstellung erzeugt wird, die starke Größenunterschiede in den Vektor- und Matrixelementen vermeidet. Die Übertragungsfunktion (TF-LTI-Modell) ist in der Regel nur für Systeme niedriger Ordnung « 10) geeignet und vor allem bei sehr unterschiedlich großen Koeffizienten oft schlecht konditioniert. Ein weiteres Problem der TF-LTI-Modelle ist, dass bei der Konvertierung in ein SS-LTI-Modell eine möglichst austarierte Zustandsdarstel13 lung ) erzeugt wird, die oft eine schlecht konditionierte Systemmatrix bezüglich der Eigenvektoren hat, vor allem bei Systemen höherer Ordnung. Wenn möglich, ist die Nullstellen-Polstellen-DarstelJung (ZPK-LTI-Modell) der Übertragungsfunktion vorzuziehen, da insbesondere die Polst ellen bei eier Konvertierung in die Zustandsdarstellung nicht verfälscht werden! Probleme können in diesem Fall jedoch bei mehrfachen Polstellen und bei Polstellen bei null auftreten. Zusammenfassend können folgende Empfehlungen gegeben werden: .. Wenn möglich, Modelle in Zustandsdarstellung als SS-LTI-Modell beschreiben.
Da die arithmetischen Grundoperationen Addition, Subtraktion, Multiplikation und Division unterschiedlich empfindlich gegenüber der Auslöschung sind, kann die Reihenfolge der Operationen in einem Algorithmus einen wesentlichen Einfluss auf das Ergebnis haben. Für die arithmetischen Grundoperationen zwischen zwei Zahlen gelten folgende Grundregeln:
.. Eine normierte bzw. austarierte Beschreibung bei SS-LTI-Modellen verwenden. e Die Probleme, die bei der numerischen Simulation auftreten können, immer im Hinterkopf behalten und die gewonnenen Ergebnisse auf ihre Verlässlichkeit überprüfen.
.. Multiplikation und Division sind "gutartige" Operationen. .. Addition und Subtraktion sind "gutartig", wenn die beiden Zahlen gleiches (Addition) bzw. entgegengesetztes (Subtraktion) Vorzeichen haben. Dies entspricht der Addition der Beträge beider Zahlen und der Multiplikation mit dem resultierenden Vorzeichen. .. Addition und Subtraktion sind "bösartig" und führen zur numerischen Instabilität, wenn die beiden Zahlen ungleiches (Addition) bzw. gleiches (Subtraktion) Vorzeichen haben und ungefähr gleich groß sind. Dies entspricht der Subtraktion der Beträge beider Zahlen und der Multiplikation mit dem resultierenden Vorzeichen. 11) 12)
Dieses wird auch als Problem der natürlichen Stabilität bzw. Instabilität bezeichnet. Üblicherweise als Wortlänge bezeichnet.
5.6
Übungsaufgaben
5.6.1
Erstellen von LTI-Modellen
Erstellen Sie für die folgenden Übertragungsfunktionen jeweils ein TF-LTI-Modell und speichern Sie den entsprechenden Namen in der Objekt-Eigenschaft Notes ab. Wählen Sie dazu geeignete Werte für die Parameter. Plotten Sie in eine Figure in tabellarischer Form jeweils zeilenweise für die verschiedenen Übertragungsfunktionen den Namen, die Sprungantwort, das Bode-Diagramm und das Nyquist-Diagramm, wie in Abb. 5.35 dargestellt. 13)
Siehe auch den Befehl ssbal in [37].
5 Regelungstechnische Funktionen - Control System Toolbox
184
5.6.2
P-Glied:
F(s)
Kp
mit
Kp=l
I-Glied:
F(s)
K] s
mit
K[ = 1
D-Glied:
F(s)
KD'S
mit
KD=l
PI-Glied:
F(s)
K p+K[ s
mit
Kp = 1,K[ = 1
PD-Glied:
F(s)
K (1 +sTv)
mit
K = 1,Tv = 1
P-Glied
~
=
~
«
Bode Diagram
21
!€J
1 0
g>
o
"0
li .S:
.11 -1
I
0
10
Frequency (rad/sec)
~
I
J 1
o
~
0.5
1
-901
2
10
Frequency (rad/sec)
D-Glied
l
'" c:
'"
.~
I
901
o
10
10
2 -
1.2
'"
" i[
OJ
o
0.5
0 -90
1
'-2
10
Time (sec)
PD-Glied
-1
-1
10
Frequency (rad/sec)
-0
'c:" 'g>
j
0
10
DTI-Glied:
F(s)
TrGlied:
F(s) = e- Tt8
1
10
Frequency (rad/sec)
.§
PT1-Glied
o
PT2-Glied
Wo = T /0.001; D = 0.05, V, Twie PT 1
mit
K[ = 1, V = 1, T = 0.2
mit
K D = 1, V = 1, T = 0.2
mit
Tt = 1 Bode Diagram
0.5
1
-40
'"
r-=:::;;
o -90
~~
E «
0 _1 80
Cl
~ 1
2
IT1-Glied
I
0 _1 00
Tt-Glied
<
3
10
I: '0
-90~ -180 1 10" 10
Time (sec)
,§
r::
I'g> 2,§ 10
-4
-2
~
2QF
O~
.~'"g'
90
10
2
4
-3'----'" ""
" - - - "- L, . - J "
-0.5
-1
102
,§
o
-:'[[~=>I o
2
4
Real Axis
Frequency (rad/sec)
-~20 I
o
Real Axls
-2~ ' - - - - - - - - '
1
0.5
IlE3 H
'" :::;ol ~ iij
100
1; 0.5
-0.5
Real Axis
.«1
~=
0
-1
Frequency (rad/sec)
0.5
i o.:~
2
10
I
Time (sec)
o
\ Frequency (rad/sec)
Time (sec)
o
=~U""""'()l Real Axis
J
10
o
i:~
2.E
10
1~1
1
3
i:I~; < 0
.~
Frequency (rad/sec)
~2~!€J o
10
iJ!
I
1
100
'5.. 1 0
Nyquist DIagram
~ ~
o I
Time (sec)
Real Axis
Anmerkung: In den Abb. 5.35-5.37 wurden zum Teil die Achsbeschriftungen wie Bode Diagramm, Phase etc. nachträglich mit dem Property Editor entfernt, da sie wegen der vielen Subplots teilweise überlappen.
mit
Time (sec)
- 3,-------" .... , -..-, -. .1 .. J ,11
Abb. 5.35: Eigenschaften von Übertragungs/unktionen
V = 0.8,T = 0.2
J0.:V?=J ;
DT1-Glied
-1
mit
Step Response
0 Real Axis
~
_____
10
F(s)
-0.5
.~
d
0 -1
!Tl-Glied:
Real Axis
0
10
g> 90 I
F(s)
'" .8,
--==:==
!€J ~Of
PT 2 -Glied:
o
=~H""'" ".... ,,11 i §
0
"C
1.1
-0.5
~C
40&
~ 11~ ~
~
F(s)
1
-:~f"'" """ ",1,1
Frequency (rad/sec)
PI-Glied
0
V l+sT VW5 s2 + s 2Dwo + w5 K[ V ._s l+sT V KDS'--l+sT
PT I-Glied:
Real Axis
!!!
---, J(
-5~
'0
-1
10
5 QIO";;
'"
Verzögerte Übertragungsglieder
Real Axis
-~H" """, "'" 11 11
0
Time (sec)
-1
~c '"c
-5ti
-0
~ . . . . .] 1,. . . . '.--'
0.
'"
'"" 2------=-1 '" 5Q E
-0
Nyquist Diagram
g'E - 0 . 1 -
2-
10
Time (sec)
I-Glied
.!:Q
JI
0.5
185
Erzeugen Sie wiederum TF-Modelle für die folgenden verzögerten Übertragungsfunktionen und stellen Sie sie wie in Aufgabe 5.6.1 grafisch dar (Abb. 5.36),
Warum dürfen beim D- und PD-Glied keine Sprungantworten ausgegeben werden? Step Response
5.6 Übungsaufgaben
:::;! 10°
10
Frequency (rad/sec)
Abb. 5.36: Eigenscha/ten von verzögerten Übertragungs/unktionen
2
11:13 -1
Real Axis
5 Regelungstechnische Funktionen - Control System Toolbox
186
5.6.3
Verzögerte Übertragungsglieder zeitdiskretisiert
Diskretisieren Sie nun die in Aufgabe 5.6.2 erzeugten Übertragungsfunktionen mit der Abtastzeit 0.1 s und stellen Sie diese grafisch dar (Abb. 5.37).
i':k?:'- ~ o
~
0.5
0 _1 80
f
d o
10
0.5
Ol
-l!l
1
0.5
HS:= o
1
!1J
i ':[
0.5 Time (sec)
x
1
@
2
fg
~ [-1~ -}]x+ [~l" =
10
1
10
2
Frequency (rad/sec)
JI -1
10
10
1
N
Frequency (rad/sec)
Abb. 5.37: Eigenschaften von verzögerten zeitdiskreten Übertragungsfunktionen
det (AE - A )
2 b c A +-'A+a a
o
10
A1,2
b 1 I ± - . vb 2 -4ac 2a 2a
Abhängig von den Parametern a, bund c existieren nun eine reelle doppelte Lösung, zwei reelle Lösungen oder eine Lösung mit konjugiert komplexen Eigenwerten.
I "=3
~ _~20f 10
[OIJ·X
lautet bekanntlich:
~ ~Lr:~==~;;~::[:::J o
y
Die Lösung des charakteristischen Polynoms von A
x
_~~ EE:::::=~~L~ 10
und
10
Frequency (rad/sec)
!1J
.Jj)L-_______
10
k
as 2 + bs + c
lässt sich in Zustandsdarstellung beschreiben durch:
Cl
10
0.5
L..
o
x u
2
~ ':-:~of o
(5.73)
Die folgende Übertragungsfunktion 2. Ordnung
10
-1~0 f
Time (sec)
Tt-Glied
2
"'I'
0 f -360 0 10
Time (sec)
DT1-Glied
10
C(sE-A)-lB
Stabilitätsanalyse
Frequency (rad/sec)
J':1 :;.;::::J o
10
_~ ~~ EI==::::T::=;;;;:;;;;J
!1J
Time (sec)
ITi-Glied
Wandeln Sie beide TF-Modelle für das PT 1 - und PT 2 -Glied aus Aufgabe 5.6.2 in SSLTI-Modelle um und überprüfen Sie die Korrektheit der Umwandlung anhand der Formel
5.6.5
Frequency (rad/sec)
i:~ o
s;;;a 1
187
Typumwandl ung
y(s) u(s)
_~of
!1J
Time (sec)
PT2-Glied
5.6.4
Bode Diagram
Step Response
PT1-Glied
5.6 Übungsaufgaben
2
1. Definieren Sie zuerst das SS-LTI-Modell in Abhängigkeit von a, b, c und k. Variieren Sie nun die Werte von a, bund c jeweils zwischen -1, 0 (nicht für a) und +1 und ermitteln Sie die Art der Eigenwerte, wie z.B. in der MATLAB-Ausgabe in Tab. 5.1 gezeigt.
2. In einem weiteren Schritt soll nun für zwei feste Werte von a und b nur noch c zwischen -1 und 1 variiert werden und untersucht werden, wie sich die Polst ellen verändern. Hierzu soll eine Polstellenmatrix P erzeugt werden, in der für die verschiedenen Werte von c die entsprechenden Polstellen abgespeichert werden. 3. Anschließend soll der Verlauf der Polstellen in eine Figure geplottet werden, wie sie Abb. 5.38 zeigt. Hierbei markiert ein 0 den Anfang bei c = -1 und ein x das Ende für c = 1. Achtung: Die Pole bestehen zum Teil aus komplexen Variablen.
5 Regelungstechnische Funktionen
188
Control System Toolbox
Tab. 5.1: Stabilitätstabelle einer PT2-Übertragungsjunktion 1 b
a
c
1
-1
-1 0 1 -1 0
-1 -1 0 0 0
-1 -1 -1 -1 -1
1 -1 0 1
11 11 11 11 11 11 11 11 11
2
1 1 0 0
1 0 0
1 1 1 1 1 1 1 1 1
0
1 0 0 2 0 0
0 0 1 0 0
1 1 1 1 1 1 1 1 1
1 2
1
11 11 11 11 11 11 11 11 11
0 0 1 0 0
1. Streckenverhalten: Untersuchen Sie das Streckenverhalten der PT 2-Übertragungsfunktion mit den geeigneten MATLAB-Befehlen, z.B.
• Nullstellen- und Polstellenverteilung
1
• stationäre Gleichverstärkung
0 1 0 1 0 -1 -----------------------------------------------0 1 0 -1 1 -1 11 11 0 0 1 -1 1 0 11 11 -1 0 0 0 1 1 1
1 1 1 1 1
1 1 1 1 1 1 1
1 -1 0 1 -1 0
11 11 11 11 11 11 11
0 1 0 0 1 1 2
0 0 2 0 0
2 1 0 0 1 0 0
• Eigenfrequenzen • Dämpfungsverhalten Verwenden Sie den LTI-Viewer zur Untersuchung des Streckenverhaltens im Zeitund Frequenzbereich, z.B. Impuls- und Sprungantwort, Bode-Diagramm.
1 0 0 1 0 0
11 11 11 11 11 11 11
2. Regelung: Nun soll eine Regelung für die PT 2-Übertragungsfunktion erstellt werden. Entwerfen sie Regler mit unterschiedlichen Charakteristika:
1 0 1 1 -----------------------------------------------Polstellen (a=1, b=1;
0.8
0
Regelung der stabilen PT 2- Übertragungsfunktion
5.6.6
Wie aus Tab. 5.1 abzulesen ist, verhält sich die PT2-Übertragungsfunktion aus Aufgabe 5.6.5 mit den Parametern a = 1, b = 0.5, c = 1 und K =1 stabil.
1 1 ReO 1 1 konj 1
------------------------------------------------1 -1 -1
189
5.6 Übungs aufgaben
P-Regler:
Vp
PI-Regler:
Vp
PID-Regler:
I VDS+ Vp+ VI-
Anfang, x Ende)
INSTABIL
Stabil
0.6
VpS+ VI
1
+ VI-S
S
VDS 2 + Vps
S
+ VI
S
Verwenden Sie sowohl die MATLAB-Befehle als auch das SISO Design '1'001. Plotten Sie Sprungantworten und Stabilitätsgrenzen wie in Abb. 5.39 und Abb. 5.40. Step Response
DA ID
'C
:.g
~
0.2
.ru c:
~------.
G
.~
1.5
'5..
..;;J:,j;t'!; ... ;....
.\'
B
E
-Il
-0.4
.e0.
,/\.~.~q.:;
.\'
-0.6
12
8
....,.,-...--~~--,I 10
12
SteB~ee~p~nse
-0.8 _1~1------~~------~--------~------~L-------~------~
-2
10
SteB~ee~~g)nse
- -0.2
-1.5
-1
-0.5
0
0.5
Realteil
i li§:=='~' «
Abb. 5.38: Eigenschaften von verzögerten Übertragungsjunktionen
0.5
oo
2
4
6
8
10
TIme (sec)
••. . 1 ___
16
~:~~~~{jlerl J 20
Abb. 5.39: Sprungantworten der geschlossenen Regelkreise
190
5 Regelungstechnische Funktionen - Control System Toolbox
191
5.6 Übungsaufgaben
Bode Diagram Gm = lnf dB (at Inl rad/sec), Pm = 9.49 deg (at 3.3 rad/sec)
irn _:::to~~:=~ ,,, """;.,,:",, "':":" ""': ",:":,',,',: "':" ""': :~': ::':':':"""':"";"';":"'d ____~~==~::::=:::::: f-~:;1)
10-'
Abb. 5.41: Zustandsregler mit Sollwertanpassung
j
p-Regler!:S:
10'
10'
10'
Frequency (rad/sec)
Bode Diagram Gm;;:: lnf dB (at tnf rad/sec), Pm = 7.75 deg (at 3.3 rad/sec)
.• ,,]
!:~f,:; L~:;J,!
p,;:,er!::::.::,: ::::: 10-"
1
::~:s: ~
j
10'
10'
10-
Frequency (rad/sec) Bode Diagram Gm = Inf, Pm 75.2 deg (at 5.46 rad/sec)
Berechnen Sie den Rückführvektor K des Regelgesetzes u = - K . x (ni = 0) mit acker oder place (Wunsch-Pole z.B. -1.1 und -1). Welche Eigenschaften müssen die Wunsch-Pole aufweisen, damit das Überschwingen vermieden wird? -1 Berechnen Sie den Sollwertanpassungsfaktor K v = C (A _ BK)-l B Erzeugen Sie das LTI-Modell sys_z des zustands geregelten Systems mit der Zustands-DGL x = (A - B K) . x + B . n I und überprüfen Sie, ob die Pole dieses Systems tatsächlich den gewünschten Polen entsprechen. Plotten Sie die Sprungantworten des Systems mit P-Regler (sys_r), mit Zustandsregler ohne (sys_z) und mit Sollwertanpassung (sys_z*Kv) wie in Abb. 5.42.
=
iT':::'·····:',,·] &
-J
,er
1 - pI0-&9 l'
10-~
10-~
::==: 10- 1
':S ,L: 10'
8lep Response
,:: ,:]
10'
.~"I li ! I
1.81-
10'
1.61-
Frequency (rad/sec)
~
i~
I,
OJ
"0
5.6.7
Regelung der instabilen PT 2-Übertragungsfunktion
~ i
1.41-
Abb. 5.40: Stabilitätsgrenzen der offenen Regelkreise :E
15.
~
I
I
I
I
10
i~.
i'"
, :. :·IJFL:,~'::~:'~~:~::~~-~::~:-:~--:-~::
1.21-.
O.81-!
1. Regelung mit P-Regler
.,,.
I~ i'
I
I
i! ) . .;.... i "
-I
~i
Nun wird der Parameter c der PT 2 -Übertragungsfunktion auf -1 gesetzt, das Verhalten der Strecke wird also instabil. Entwerfen Sie nun einen P-Regler, der das Streckenverhalten im geschlossenen Regelkreis stabilisiert und erstellen Sie das LTI-Modell sys_r des geschlossenen Regelkreises.
, - , - , P-Regler - - - Zustands-Regler
- - Soliwertanpassung
2. Regelung mit Zustandsregler mit Sollwertanpassung Nun soll das Überschwingen ganz unterdrückt und der stationäre Regelfehler des P-Reglers vermieden werden. Hierzu dient ein Zustandsregler mit Sollwertanpassung nach Abb. 5.41.
10
15
20
25
Time (sec)
Abb. 5.42: Regelung instabile PT2-Jilunktion: Sprungantworten mit P-Regler (- ), Zustandsregler ohne (--) und mit Soll11lertanpassung (-)
192
5 Regelungstechnische Funktionen - Control System Toolbox
3. Regelung mit Zustandsregler mit Führungsintegrator
Die Parameter der PT 2 -Übertragungsfunktion lauten nun a = 1, b = -0.5, c = 1 und K = 1, d.h. die Übertragungsfunktion ist weiter instabil, kann aber nicht mehr mit einem P-Regler stabilisiert werden. Zusätzlich wirkt nun die Stör größe z auf den Zustand Xl.
5.6 Übungsaufgaben
193
Simulation und Ausgabe: Der Sollwert ist eine Sprungfunktion bei 0 Sekunden, die Störung soll nun nach 15 und nach 35 Sekunden wirken (Abb. 5.44). Erzeugen Sie den Zeitvektor t (0 bis 50 s) und die beiden Sprungfunktionen für Sollwert wund Störgröße z und simulieren und plotten Sie mit lsim die Zeitverläufe für die beiden Systeme sys_s und sys_zf.
Entwerfen Sie wieder einen Zustandsregler mit Sollwert an passung wie in Punkt 2. Erstellen Sie das System sys_s, das sys_z aus Aufgabe 2 ergänzt um einen zweiten Eingang für die Störung: sys_s. b = [sys. b [2; 0]] .
Führungs- und Störverhalten
~-~-~ ~~~~~~anpassung
Da die Rückführung mit K proportional erfolgt, kann eine Störung nicht ausgeglichen werden, es muss ein Zustandsregler mit Führungsintegrator entworfen werden, wie ihn Abb. 5.43 zeigt.
l;
- - Führungsintegrator l
>~--------------\
,,,,,',
l
I
1.2
'/'
~
:E
f
w
,
..
r-------------~
.
... L ______________ _
-0.2
o
Abb. 5.43: Zustandsregler mit Führungsintegrator
Der Integrator mit dem Zustand XI und der Verstärkung KI wird der Strecke zugeschlagen, so dass sich für die Berechnung des erweiterten Rückführvektors [K KI j folgende Zustandsdarstellung der Strecke (Führungsübertragungsfunktion von u nach XI) ergibt:
~]
=
[_AC
~] . [~]
+
[~]. u
y
C·x
(5.74)
Für die geregelte Strecke mit Störung lautet die Zustands-DGL (von w nach y):
[
~]
=
[A =~K B:I] .[~] + [~ ~] . [: ]
y
10
15
20
25 30 Time (sec)
35
40
45
Kondition und numerische Instabilität
Betrachtet wird das folgende lineare Gleichungssystem (aus [5]):
[! :].x
[~ ]
[C üj·x (5.75)
Erzeugen Sie das System sys_f nach Gleichung (5.74) und berechnen Sie damit den erweiterten Rückführvektor [K K[ ]. Erstellen Sie damit das geregelte System sys_zf nach Gleichung (5.75) mit F = [2
of.
5
50
Abb. 5.44: Regelung instabile PT2-Funktion mit Störung: Sprungantworten Zustandsregler mit Sollwertanpassung (-) und Zustandsregler mit Führungsintegrator (--)
5.6.8 [
.~,.,..--------,
mit seiner Lösung
Xl
1 1 - a2
X2
- a· Xl
-a 1 - a2
194
5 Regelungstechnische Funktionen - Control System Toolbox
1. Kondition (Natürliche Instabilität) Berechnen Sie nun für Werte von a = 1 + lO-n für n = 1, ... ,9 die Konditionszahl cond(A), den Wert für log10(cond(A)) sowie die Lösung des linearen Gleichungssystems x = A\b bzw. xe = CA-E) \b mit der Störung E = [ 0.0001 0.0001 ; 0.0001 -0.0001 J.
6
Vergleichen Sie die Lösungsvektoren x und xe des ungestörten und des gestörten Systems!
2. Numerische Instabilität Die Addition der beiden Komponeneten rechnerisch:
Xl +X2
1 1 -a2
Xl
und
a 1 - a2
X2
des Lösungsvektors x ergibt
1 l+a
Berechnen Sie nun wie oben für Werte von a = l+IO- n für n = 1, ... ,9 die Summe Xl + X2, und zwar zum einen als Summe der Elemente des Lösungsvektors des linearen Gleichungssystems und zum anderen mit der (mathematisch korrekten) Formel 1/(1 + a) und vergleichen Sie die Ergebnisse.
Signalverarbeitung Signal Processing Tool box
Methoden der Signalverarbeitung im Zeit- und Frequenzbereich ermöglichen die Aufbereitung, Filterung und Analyse von Daten. In der Regel liegen diese in Form abgetasteter Messwerte vor und können zur weiteren Bearbeitung in MATLAB als Vektor eingelesen werden. Zur Vertiefung sei auf weiterführende Literatur verwiesen. [24] [31]
6.1
Interpolation, Approximation und Abtastung
Messungen werden meist zu diskreten Zeitpunkten durchgeführt. Bei der Auswertung kann es notwendig sein, die Abtastzeitpunkte verschiedener Datenkanäle zu synchronisieren. Dafür werden Befehle zur Interpolation und zur Änderung der Abtastrate eingesetzt. Zudem können Daten mit einer mathematischen Funktion approximiert werden.
6.1.1
Interpolation und Approximation
Durch Interpolation lassen sich Zwischenwerte zu vorhandenen Daten erzeugen. Für eindimensionale Interpolation steht in MATLAB der Befehl interp1 Cx-werte, 1J-werte, x-auswertung, methode) zur Verfügung sowie analog die Befehle interp2 und interp3 für höhere Dimensionen. Die Messdaten müssen dabei jeweils in der Reihenfolge aufsteigender Koordinaten vorliegen. Das Beispiel in Abb. 6.1 links wird mit den folgenden Zeilen erzeugt. Dabei fällt auf, dass eine Extrapolation (d.h. über den Bereich der gegebenen Testpunkte hinaus) nur mit Splines und kubischer Interpolation möglich ist. Lineare Interpolation liefert in diesem Fall nur NaN. x_grob -0.6:2.4; x_fein = -1:0.1:3; daten exp (-x_grob.-2/2); inter_linear interpl (x_grob, daten, x_fein, 'linear'); inter_cubic interpl (x_grob, daten, x_fein, 'cubic'); inter_spline interpl (x_grab, daten, x_fein, 'spline');
figura plot hold plot plot plot plot
(x_grOb, on (x_fein, (x_fein, (x_fein, (x_fein,
daten, 'ko') exp (-x_fein.-2/2), 'k:') inter_linear, 'b-.') inter_cubic, 'g--') inter_spline, 'r-')
6 Signalverarbeitung - Signal Processing Toolbox
196
Liegen insbesondere zweidimensionale Messdaten unsortiert vor, erzeugt griddata (x...werte, y-werte, z...werte, x...ausw, y_ausw, methode) daraus ein gleichmäßiges Raster aus interpolierten Datenpunkten. Diese Funktion eignet sich auch zur grafischen Darstellung eines Kennfeldes aus ungleichmäßig verteilten Messpunkten (siehe Abb. 6.1 rechts), wie es mit den folgenden Befehlen erzeugt wird. x = rand (100, 1) * 4 - 2; Y = rand (100, 1) * 4 - 2; z = x .* exp (-x.~2 - y.~2);
% Erzeugt Zufallszahlen-Vektor
,0 4th degree polynomfaf D 5th degree polynomlai
':10o
% Koordinaten-Raster
~0
% Kennfeld aus Testpunkten
6th degree polynomi€ll 7th degree polynomlai 81h degree polynomlCiI sth degree polynomi€ll
% Kennfeld zeichnen %Testpunkte zeichnen Abb. 6.2: Interpolation mit dem Basic Fitting- Tool
griddata
interp1 o Testpunkte - - - ideal --linear " kubisch Splines
0.5
o
Für genauere Ergebnisse oder für die Abarbeitung in Skripts ist der Befehl polyfit jedoch besser geeignet. ..j"~~~~?~~·!<~S,;;""
OA -0.5 2
0.2
2
o o
splinelmerpolant
!O shepe-preserving inlerpolant ';0CUbic
figure mesh (XI, YI, ZI) hold on plot3 (x, y, z, '0')
-1
197
"jE' lIlO'" F~qUadraljC
%Testpunkte
[XI, YI] = meshgrid (-2:.25:2, -2:.25:2); ZI = griddata (x, y, z, XI, YI, 'v4');
01
6.1 Interpolation, Approximation und Abtastung
-"""" d
2
3
Ein ähnliches Tool stellt das GUI Data Statist-ics dar. Es wird durch das Menü Tools/Data Statistics der entsprechenden Figure gestartet. Damit lassen sich sehr leicht Mittelwert, Standardabweichung, Median und weitere statistische Größen anzeigen. Das Data Statistics-GUI ist in Abb. 6.3 dargestellt.
o -2 -2
Abb. 6.1: Verschiedene Interpolationsverjahren
Wenn Messdaten durch ein Polynom approximiert werden sollen, bietet sich das Basic Fitting- Tool an. Dazu werden die Messdaten zuerst in einer normalen Figure geplottet und anschließend das Basic Fitting-Tool im Figure-Menü Tools gestartet. Beim Basic Fitt'ing- Tool handelt es sich um ein GUI zur einfachen Visualisierung von Approximationsfunktionen, Es können verschiedene Typen von Funktionen ausgewählt werden, die auch sofort in der Figure mit Legende angezeigt werden. Bei Auswahl der Check Box Show Equations werden zusätzlich die Gleichungen der Funktionen angezeigt. Die folgenden MATLAB-Befehle erzeugen Datenpaare und stellen sie in einer Figure dar (siehe Abb, 6,2), Diese zeigt die Datenpaare als Kreise und die vom Basic Fitting-Tool erzeugten Approximation inklusive der zugehörigen Gleichungen. x_grob = -0.6:2.4; daten = exp (-x_grob.~2/2); plot (x_grob, daten, 'ko')
Der Vorteil dieses Tools besteht in der schnellen grafischen Beurteilung des Resultats.
Abb. 6.3: Data Statistics CU!
Interpolation und Approximation
y_int = interp1 (x, y, x...auswertung, methode) Interpola.tion koeff = polyfit (x, y, ordnung) Polynom-Approxima.tion z_int = griddata (x, y, z, x...ausw, y_ausw, methode) Daten rastern
6 Signalverarbeitung - Signal Processing Toolbox
198
6.1.2
Änderung der Abtastrate
interp (y, 4);
z
%Erhöhung der Abtastrate Abtastrate reduziert
5
Abtastrate wieder erhöht
, I- - - - - - - - - - - - - - ,
(ji
~
',!lI
:::J
o~
~
o~
zy
~
iS" ~
-5' 20
40
0
Sam pies
%Erhöhung
z = upsample (y, 4); subplot (133) plot (z, '.-') title ('Abtastrate wieder erhöht')
Abtastrate wieder erhöht
51
.•.
5
I 10
Sampies
-5
L I_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
0
20
~
40
Sampies
Abb. 6.5: Originalsignal (links), mit decimate reduzierte (Mitte) und mit interp wieder erhöhte Abtastrate (rechts) - jeweils zum Vergleich zusätzlich das abgetastete Signal (0)
Schließlich existiert auch die Kombination aus Up- und Downsampling zur Änderung der Abtastrate mit einem rationalen Faktor zaehler/nenner. Der Befehl resample (daten, zaehler, nenner) erhöht zunächst die Abtastrate um den Faktor zaehler, filtert die Daten mit einem Anti-Aliasingfilter (FIR-Tiefpass) und reduziert anschließend die Abtastrate um den Faktor nenner, wobei beide Faktoren ganzzahlig sein müssen. Beginnen oder enden die Daten nicht mit Werten na.he Null, ist das Ergebnis dort ungenau, da resample intern die Daten mit Nullen ergänzt.
der Abtastrate
Abtastrate reduziert
5.
der Abtastrate, FIR-Filter 8. Ord.
Der Befehl interp (daten, faktor) (nicht zu verwechseln mit interpl!) erhöht die Abtastrate, indem er die Zwischenpunkte mit einem speziellen Interpolationsfilter erzeugt. Abb. 6.5 zeigt das vorige Beispiel mit diesen beiden Befehlen.
Originalsignal
Der Befehl upsample (daten, faktor [,offset]) tastet die Daten um einen ganzzahligen Faktor höher ab, indem er zwischen zwei Datenpunkten eine entsprechende Anzahl Nullen einfügt (siehe Abb. 6.4 rechts).
Originalsignal
%Reduzierung
decimate (x, 4, 8, 'fir');
y
% Zeitvektor % Datenvektor ("Messwerte") %Reduzierung der Abtastrate
t 0.025:0.025:1; x = 4*sin (2*pi*t) + cos (pi!4 + 16*pi*t); y downsampIe (x, 4); figure subplot (131) plot (x, '. - , ) title ('Originalsignal') subplot (132) plot (y, '. -,) title ('Abtastrate reduziert')
199
direkt angegeben werden. Bei großen Datensätzen ist es ratsam, mit der Option' fir' ein schnelleres FIR-Filter zu verwenden. Details zu digitalen Filtern siehe ab Kap. 6.4.2.
Zur Erhöhung der Abtastrate eines Signals sowie zu deren Reduzierung (Upsampling bzw. Downsampling) stellt MATLAB jeweils zwei Befehle bereit. Der Befehl downsample (daten, faktor [, offsetj) tastet die Daten um einen ganzzahligen Faktor langsamer ab. So greift z.B. faktor = 4 jeden vierten Datenpunkt heraus (siehe Abb. 6.4 Mitte). Der optionale (und ebenfalls ganzzahlige) Offset muss kleiner sein als der Faktor und verschiebt die Abtastpunkte nach rechts. Wird als Daten eine Matrix übergeben, wendet MATLAB den Befehl auf jede Spalte separat an.
I
6.2 Spektralanalyse
(ti
"0
2
0.
Änderung der Abtastrate
~~~
~
_5'L---------------~
20 Sampies
40
0
5 Sampies
10
20
40
Sampies
Abb. 6.4: Originalsignal (links), mit downsamp Le reduzierte (Mitte) und mit upsamp Le wieder erhöhte Abtastrate (rechts) - jeweils zum Vergleich zusätzlich das abgetastete Signal (0)
downsample (daten, faktor [, offsetj) upsample (daten, faktor [, offsetj)
Reduktion ohne Filterung Erhöhung ohne Filterung
decimate (daten, faktor[, ordnung] [, 'fir'j) interp (daten, faktor)
Reduktion mit Filterung Erhöhung mit Filterung
resaJl)ple (daten, zaehler, nenner)
Änderung mit Filterung
In beiden Fällen muss der Anwender dafür Sorge tragen, dass er beim Downsampling das Abtasttheorem nicht verletzt (wie in Abb. 6.4 der Falll) bzw. beim Upsampling die Daten zusätzlich geeignet filtert und skaliert.
6.2
Die folgenden Befehle berücksichtigen beide Aspekte: decimate (daten, faktor) arbeitet analog zu downsample, filtert die Daten zuvor jedoch mit einem Anti-Aliasingfilter (Tschebyscheff-Tiefpass Ster Ordnung). Optional kann eine andere Filterordnung auch
Grundlage der Spektralanalyse ist die Fouriertransformation. Dazu kommen Methoden wie Averaging oder Fensterung, mit denen sich das Ergebnis der Analyse verbessern lässt. Darauf aufbauend bietet MATLAB Funktionen zur Bestimmung von Leistungsspektren eines Signals.
Spektralanalyse
6 Signalverarbeitung - Signal Processing Toolbox
200
6.2.1
Diskrete Fouriertransformation (DFT)
Die Diskrete Fouriertransformation (DFT) eines Zeitsignals x(t) leitet sich von der kontinuierlichen Fouriertransformation ab:
X(jw)
=
i:
(6.1)
x(t) exp (-jwt) dt
Um die DFT zu erhalten, wird das Integral durch eine Summe von N Rechtecken der Höhe x(nTs) angenähert. l ) Dabei entspricht T s der Abtastzeit, Fs = I/Ts der Abtastfrequenz und N der Anzahl der Messwerte: N-l
Xd(Wk)
.L x(nTs )
(6.2)
exp (-jwknTs)
n=O
Die DFT Xd existiert nur für diskrete Frequenzen Wk = kL).w.Die Frequenzauflösung L).w = 27r/(NTs) bzw. L).F = l/(NTs ) ist umgekehrt. proportional zur Messdauer NTs· Aufgrund des Abtasttheorems entspricht die höchste messbare Frequenz Fmax = Fs /2 = 1/(2Ts ) der halben Abtastfrequenz. Je nach Phasenlage der einzelnen Frequenzkomponenten treten in der Regel komplexe Spektralkoeffizienten auf. Sollen die reellen Fourierkoeffizienten ai, bi der Fourierreihe
x(t) = ao
+
t
6.2 Spektralanalyse
201
Als Nächstes werden daraus die Abtastzeit T" die Anzahl der Messwerte N und der Frequenzvektor f zur späteren Anzeige des Spektrums bestimmt. Die Fouriertransformierte X wird normiert und auf den Bereich< F max begrenzt (die Indizes werden mit floor auf ganze Zahlen abgerundet). Abb. 6.6 zeigt Mess-Signal und Spektrum. Ts ~ diff (t(1:2»); N ~ length (x); f ~ [0:floör«N-l)/2)] / (N*Ts);
% Abtastzeit 'l. Länge des Datenvektors %Frequenzvektor für Plot
x~
% Fouriertransformation %Normierung %Begrenzen auf< F_max
fft (x);
X ~ X / N; X
~
[X(l) 2*X(2:floor«N-l)/2)+1)];
figure subplot (121) plot (t, x, ' .-') title ('Signal') subplot (122) stern (f, abs (X)) xlabel ('Frequenz [Hz]') title ('Spektrum') Signal
Spektrum
25
10
1
20
(ak COS(kwkt)
+
8
(6.3)
bk Sin(kwk t ))
k=l
Q)
ao =
1
:N Re {Xd(O)}
.a
6
E
4
'0
mittels der DFT bestimmt werden, muss die Abtastzeit T s berücksichtigt und das Ergebnis auf die Messdauer NTs normiert werden. Dazu werden die Elemente von Xd durch N geteilt. 2 ) Ebenso werden alle Frequenzen ab Fmax ausgeblendet (Index k 2: N /2) und dafür die verbleibenden Elemente - mit Ausnahme des Gleichanteils (Index k = 0), der nur einmal vorkommt - verdoppelt.
ak>O
=
2
N Re {Xd(k)}
bk>O
=
2
~
«
2
-10
-15 ,L --------~--~--~~--~
o
0.1
0.2
0.3
0.4
Zeit [si
-:N Im {Xd(k)}
0.5
0
0
10
20 30 Frequenz [Hz]
40
50
Abb. 6.6: Zeitsignal und Spektrum
Die in MATLAB iinplementierte Funktion fft (x) verarbeitet einen Datenvektor x und gibt einen Vektor X derselben Länge mit den Spektralkoeffizienten zurück. Daher sind die Koeffizienten mit Index k = 2,3, .. , symmetrisch zu denen mit Index k = N, N-1, .... Die Indizes werden im Weiteren, wie bei MATLAB üblich, von 1 bis N gezählt und nicht von 0 bis N-1. Im folgenden Beispiel wird zunächst ein "Messvektor" x mit dem zugehörigen Zeitvektor t erzeugt. t 0.01:0.01:0.5; x ~ 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); 1) 2)
%Zeitvektor (Fs
~
100 Hz)
'l. Datenvektor ("Messwerte")
Die Breite TB der Rechtecke ist dabei nicht in der Definition der DFT berücksichtigt. Dies schließt die Berücksichtigung der Rechteckbreite TB ein.
In diesem Beispiel beträgt die Abtastzeit T s = 10 ms und die höchste messbare .Frequenz demnach F max = 50 Hz. Es werden N = 50 Messwerte ausgewertet; die Frequenzauflösung ist somit L).F = 2 Hz. Das Spektrum wird für alle Frequenzen 0, L).F, 2L).F, ... bis F max berechnet. Liegt ein Frequenzanteil des Mess-Signals dazwischen (wie der Anteil mit 33 Hz im Beispiel), tritt der so genannte Leakage-Effekt auf: Die Amplitude verteilt sich auch auf Nachbarfrequenzen. Dies ist immer dann der Fall, wenn die gesamte Messzeit NTs kein ganzzahliges Vielfaches der Periodendauer der zu analysierenden Frequenz ist. Eine feinere Frequenzauflösung L).F ist als Abhilfe gegen Leakage nur bedingt geeignet, da sich dadurch Rauschen stärker auswirkt. Bessere Möglichkeiten sind die Verwendung von Fensterfunktionen oder eine Mittelwertbildung im Frequenzbereich (so genanntes
A veraging ).
6 Signalverarbeitung - Signal Processing Toolbox
202
6.2.2
Averaging
Steht ein ausreichend langer Messdatensatz zur Verfügung, kann dieser in Sequenzen zerlegt werden, die einzeln mittels DFT transformiert werden, um anschließend den Mittelwert der einzelnen Spektren zu berechnen. Das folgende Beispiel verwendet ein "Mess-Signal" über 25 s, zu welchem Rauschen hinzugefügt wird. Die Länge einer Sequenz wird mit N_seq = 50 Messpunkten vorgegeben. t = 0.01:0.01:25; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); x = x + 5*(randn (l,length(t»);
% Zeitvektor (Fs
Ts = diff (t(1:2»; N_seq = 50; N = length (x); f = [0:N_seq/2-1] / (N_seq*Ts);
%Abtastzeit %Länge einer Sequenz %Länge des Datenvektors % Frequenzvektor für Plot
x = zerOS (1, N_seq); for k = l:N/N_seq x_seq x (l+(k-l)*N_seq:k*N_seq); X = X + abs (fft (x_seq»; end X = [X(l) 2*X(2:N_seq/2)] 1 N;
%Leeres Array erzeugen
=
100 Hz)
203
6.2 Spektralanalyse
langen periodischen Zeitsignals stellt mathematisch gesehen die Multiplikation des Zeitsignals mit einer Rechteck-Fensterfunktion dar. Diese hat nur während der Aufzeichnung den Wert 1, ansonsten O. Im Frequenzbereich faltet sich somit das Spektrum des Zeitsignals mit dem des Rechteckfensters. Für das Auftreten des Leakage-Effekts ist das langsame Abklingen des Rechteckspektrums, also die steilen Flanken des l:<ensters im Zeitbereich verantwortlich. Verwendet man stattdessen ein Fenster mit flachen Flanken, d.h. Messwerte in der Mitte des Fensters werden höher gewichtet als Messwerte am Rand, dann kann der Leakage-Effekt verringert werden. Für die Erzeugung verschiedener Fensterfunktionen der Datenlänge n stehen in MATLAB unter anderem die Befehle rectwin (n), triang (n), bartlett (n), hamming (n), hann (n) und blackman (n) zur Verfügung, siehe Abb. 6.8. Eine gute Übersicht bietet zudem das Window Design and Analysis Tool, das mit wintool gestartet wird.
% Datenvektor ("Messwerte")
%Rauschen hinzufügen
Fensterfunktionen
1"
"\'\.
0.8
%Sequenz ausschneiden, % DFT und Summation
&: 0.6
% Begrenzen, Normieren
.... Dreieck
0.4
'~;l\\\.
' \ ':::'; ' ..
Hamming
Abb. 6.7 zeigt links zum Vergleich das Spektrum der ersten Sequenz sowie rechts das Spektrum mit 50fachem Averaging. Das Rauschen wird dabei zu einem gleichmäßigen "Teppich" gemittelt. Spektrum mit 50fachem Averaging
Spektrum ohne Averaging
10r,--------------~----------
10r,------------------------8
8 Q)
-g
(j)
~ 6
.!i
4
10
20 30 Frequenz [Hz]
40
'", "" ..... 't
'-,.-
15
10 n
20
Abb. 6.8: Fensterfunktionen der Datenlänge 21
Die DFT wird nun nicht mehr auf den Datensatz direkt, sondern auf den gefensterten Datensatz angewandt. Der Aufruf für einen Datensatz x (Zeilenvektor) unter Verwendung des Hamming-Fensters lautet dann:
.*
x);
Ein ausführlicheres Beispiel ist in den folgenden MATLAB-Befehlen gegeben. Der Leakage-Effekt tritt bei den Frequenzen 11Hz nnd 33Hz auf (Abb. 6.9 links).
4
50
5
X = fft (hamming (length (x»,
6
~
Ci.
.!i
o o
"~"
\
Hann Blackman
10
20 30 Frequenz [Hz]
40
50
t = 0.01:0.01:0.5; x = 8*sin(2*pi*11*t) + 4*cos(2*pi*33*t);
% Zeitvektor (Fs = 100 Hz) % Datenvektor ("Messwerte")
Ts = diff (t(1~2»; N = length (x); f = [0: floor «N-l) 12)] 1 (N*Ts);
% Abtastzeit %Länge des Datenvektors %Frequenzvektor für Plot
X = fft (hamming (N)' .* x); X = X 1 N; X = [XCi) 2*X(2:floor«N-l)/2)+1)];
%Fouriertransformation % Normierung %Begrenzen auf< F_max
Abb. 6.7: Spektrum ohne und mit 50fachem Averaging
6.2.3
Fensterung
Zur Verminderung des Leakage-Effekts kann neben Averaging auch eine Fensterung des Datensatzes vor ·der diskreten Fouriertransformation erfolgen. Die grundlegende Idee kann folgendermaßen beschrieben werden: Die endliche Aufzeichnung eines unendlich
Durch eine Datenfensterung kann die Aufweitung des Spektrums verringert werden. Allerdings wird durch die Fensterung auch die Amplitude reduziert (Abb. 6.9 rechts). Es muss je nach Anwendung entschieden werden, ob dies zulässig ist oder nicht.
6 Signalverarbeitung - Signal Processing Toolbox
204
10 8
8 <1l
"0
..2
<1l
6
"0
:E
205
Der Befehl pwelch 5 ) (x, fenster, ueberlappung, Nfft, Fs) gibt das Leistungsdichtespektrum aus. Durch eine Überlappung der einzelnen Sequenzen von 50% wird der Verlust relevanter Information minimiert; die Daten werden standardmäßig mit einem Hammingfenster beaufschlagt. Parameter, die nicht geändert werden sollen, können leer ([]) gelassen werden. Ohne Rückgabeparameter wird das Spektrum grafisch ausgegeben. Abb. 6.10 wird mit den folgenden Zeilen erstellt. 6 )
Spektrum mit Hamming-Fenster
Spektrum ohne Fensterung 10
6.2 Spektralanalyse
6
0.
0. E
~
t 0.01:0.01:25; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t); x = x + 5*(randn (l,length(t)));
4
2
10
20 30 Frequenz [Hz]
40
o
50
10
20 30 Frequenz [Hz]
50
40
% Zeitvektor (Fs = 100 Hz) %Datenvektor ("Messwerte") %Rauschen hinzufügen
[Pxx, F] = pwelch (x, [], [], 256, 100); plot (F, 10*log10(Pxx))
Spektrum mit "pwelch"
Abb. 6.9: Spektrum ohne und mit Datenfensterung mit Hamming-Fenster
20
rectwin (laenge) Rechteck triang (laenge) Dreieck (Rand> 0) bartlett (laenge) Dreieck (Rand = 0) wintool
6.2.4
N
15
~
10
iJj
Fensterfunktionen
11
hanuning (laenge) Hamming hann (laenge) Hann blackman (laenge) Blackman
{)
'ö (f) C ::I
.~
Window Design and Analysis Taal
...J
10
Leistungsspektren
In der Messtechnik werden anstelle der oben behandelten Amplitudenspektren meist Leistungsdichtespektren verwendet. Das Leistungsdichtespektrum iPxx erhält man durch Quadrieren der DFT und anschließender Normierung auf N und Fs . Als Einheit wird üblicherweise W / Hz bei linearer bzw. dB / Hz bei logarithmischer Darstellung verwendet, wobei 10 dB einem Faktor 10 der Leistung entsprechen. 3 ) 2
2
1 1Xd(27rf) 1 iPxx(f) = NF s
1 1 N~ -1 x(nTs) exp(-j27rfnTs) 1 NF s
(6.4)
Die gesamte Leistung4 ) P des Signals erhält man daraus und mit der Frequenzauflösung /:::,.F = Fs/N wie folgt. N-1
P
=
flF
5
0>
12
N-1
~ c'flxx(nflF) = ~2 ~
Xd(27rnflF) 1
(6.5)
3) Da sich die Leistung als Quadrat der Amplitude berechnet, entsprechen 10 dB nur dem Faktor VIO der Amplitude; 20 dB entsprechen Faktor 10 der Amplitude und somit Faktor 100 der Leistung. 4) Die Äquivalenz mit der aus dem Zeitsignal berechneten Leistung gilt bei Verwendung von Fensterung oder Averaging nur näherungsweise.
20 30 Frequenz [Hz]
40
50
Abb. 6.10: Spektrum mit pwelch
Weitere Methoden zur Berechnung (eigentlich Abschätzung) des Leistungsdichtespektrums können der MATLAB-Hilfe zu pwelch entnommen werden. Eine interaktive Analyse ist mit dem Spectrum Viewer möglich, der mittels sptool aufgerufen wird (siehe Abb. 6.11). Im Startfenster muss zunächst über das Menü File/Import ein Signal aus dem Workspace oder einer Datei importiert werden; dabei sollten auch Abtastfrequenz und Name (zur Verwendung im sptool) eingegeben werden. Anschließend wird im sptool mit dem Button Create (bzw. View) in der rechten Spalte der Spectrum Viewer aufgerufen. Nach Einstellen der gewünschten Analyseparameter kann mit dem Button Apply das Spektrum ausgegeben werden (siehe Abb. 6.12). Vielfältige Einstellmöglichkeiten bestehen über die Buttonleiste und das Menü. Der Befehl cpsd (x, y, fenster, ueberlappung, Nfft, Fs) bestimmt das Kreuzleistungsd'ichtespektrum der Signale x und y. Er verwendet dieselben Sta.ndardeinstellungen wie pwelch. Der Befehl specgram (x, Nfft, Fs) schließlich eignet sich zur Spektralanalyse nichtperiodischer Signale, deren Komponenten sich also in Amplitude oder Frequenz über der Benannt nach einer Veröffentlichung von P.D. Welch, 1967 Der Rauschanteil besitzt die Leistungsdichte 52 W / 50 Hz = 0.5 W / Hz = -3 dB / Hz. Die s,nKomponente besitzt die Leistung von 8 2 W /2 = 32 W = 15 dB, siehe auch y-Achse in Abb. 6.10. 5) 6)
6 Signalverarbeitung - Signal Processing Toolbox
206
6.3 Korrelation
6.3
207
Korrelation
Korrelationsfunktionen dienen der Analyse der Ähnlichkeit bzw. der Übereinstimmung von Signalen. Korrelationsfunktionen sind sowohl für zeitkontinuierliche als auch für zeitdiskrete Signale definiert. Im Rahmen der Signalanalyse in MATLAB liegen alle Signale in abgetasteter Form vor, so dass hier nur zeitdiskrete Korrelationsfunktionen betrachtet werden. Die Kreuzkorrelationsfunktion (Pxy zweier Signale x(n) und y(n) im Zeitbereich ist definiert durch: 1
CPxy(k) = N
N-l
I: x(n + k) . y(n)
(6.6)
n=O
Die Korrelationsfunktion kann auch mit nur einem Signal gebildet werden. Dadurch entsteht die Autokorrelationsfunktion CPxx. Die Autokorrelationsfunktion ist stets eine gerade Funktion, daher gilt CPxx ( - k) = CPxx (k ). Abb. 6.11: sptooL: Startfenster
Abb. 6.12: sptooL: Spectrum Vi ewer
CPxx(k)
=
1 N
N-l
I: x(n + k) . x(n)
(6.7)
n=O
Zeit ändern (z.B. Sprachsignale). Optional können Fensterung (standardmäßig hann) und Überlappungsbereich der DFT-Sequenzen (standardmäßig N /2) geändert werden. Die folgenden Zeilen erzeugen und analysieren ein nichtperiodisches Signal. Abb. 6.13 zeigt das Resultat.
% Zeitvektor (Fs ~ 100 Hz) %Datenvektor frequenzvariabler Anteil % amplitudenvariabler Anteil %Spektralanalyse mit specgram
t x
0.01:0.01:25; ~ 5 + 8 * sin (2*pi*(8+t).*t) + t .* cos (2*pi* 33 *t); specgram (x, 64, 1/diff(t(1:2)))
6' c
40
CPxx(O)
=
1 N
2a
N-l
x(n)
1
2
=
P
(6.8)
1
Zur exakten Berechnung der Korrelationsfunktionen wäre es eigentlich notwendig, einen unendlich langen Datensatz zu verwenden, d.h. N --7 00. Die in den Gleichungen (6.6) und (6.7) angegebenen Berechnungsvorschriften stellen also nur Näherungen dar, die sich mit steigendem N immer mehr dem Idealfall annähern. Genauere Informationen zur Korrelationsmesstechnik können [31] entnommen werden. Die Kreuzkorrelationsfunktion zweier Signale x und y (Abtastwerte der zugehörigen Zeitfunktionen) wird in MATLAB durch den Befehl xcorr berechnet:
(])
:::>
g
Für k = 0 erhält man die Leistung P des Signals.
20
LL
cxy = xcorr (x, y, 'options') 5
10
15
20
Time
Abb. 6.13: Spektralanalyse eines nichtperiodischen Signals mit specgram
Spektralanalyse fit (x)
Diskrete Fouriertransformation
pwelch (x, jenst, ueb, Njjt, Fs) cpsd (x, y, jenst, ueb, Njjt, Fs) specgram(x,Njjt, Fs)
Leistungsdichtespektrum Kreuzleistungsdichtespektrum Spektralanalyse nichtperiodischer Signale
sptool
Signal Processing Taol
Wird options weggelassen, so wird die Korrelationsfunktion nicht auf die Signallänge N bezogen, d.h. der Faktor l/N in Gleichung (6.6) entfällt. Wird die Option 'biased' angegeben, erhält man die Kreuzkorrelationsfunktion gemäß Gleichung (6.6). Die Autokorrelationsfunktion CPxx kann durch Angabe nur eines Signalvektors bestimmt werden. cxx = xcorr (x,' options' ) xcorr liefert einen Vektor der Länge 2N - 1. Bei einer Datensatzlänge von N sind nur Verschiebungen im Bereich - N + 1 ::; k ::; N -1 sinnvoll. Bei Verschiebungen außerhalb dieses Bereichs sind die Korrelationsfunktionen null. Innerhalb der Vektoren cxx bzw.
6 Signalverarbeitung - Signal Processing Toolbox
208
cxy sind die Elemente der Korrelationsfunktionen wie folgt angeordnet: CPxx(-N + 1)
=
cxx(l)
CPxx( -N + 2)
=
cxx(2)
CPxx(O)
=
cxx(N)
6.3 Korrelation
Die gesuchte Laufzeit der Echosignale kann direkt an der Zeitachse der Autokorrelationsfunktion in Abb. 6.14 abgelesen werden. Bei der grafischen Darstellung mit den folgenden Befehlen werden nur die Daten auf der positiven Zeitachse geplottet:
Gesamtsignal (Ausschnitt)
Autokorrelation Kreuzkorrelation
_:;:l:'It~MW -2
-3
Beispiel zur Autokorrelation
Zunächst wird das Nutzsignal als Zufallsfolge über einen Zeitraum von 0.5 s mit der Abtastfrequenz F s erzeugt. Anschließend werden zwei Echosignale aus dem ursprünglichen Signal durch Zeitverzögerung um 30 ms bzw. 100 ms und durch Dämpfung generiert. Das Gesamtsignal wird schließlich der Autokorrelation unterzogen.
t N
signal
%Abtastfrequenz [Hz] %Abtastzeit % Zeitvektor %Länge des Datensatzes %Nutzsignal als Zufallszahlen erzeugen
%Verzögertes und abgeschwächtes Echo 1 echol zeros (1, N); %Verzögerung Echo 1 [s] delayl 30e-3; % Index-Verschiebung Echo 1 delayIndexl round (delayl / Ts); echol (delayIndexl+1:end) = 0.5 * signal (l:end-delayIndexl);
=
%Verzögertes und abgeschwächtes Echo 2 echo2 zeros (1, N); %Verzögerung Echo 2 [s] delay2 100e-3; % Index-Verschiebung Echo 2 delayIndex2 round (delay2 / Ts); echo2 (delaylndex2+1:end) = 0.1 * signal (1:end-delayIndex2); compound = signal + echol + echo2; cxx = xcorr (compound, 'biased');
% zusammengesetztes Signal % Autokorrelation
I
0.8 0.6 004
0.2 0
0
1
2
3 Zeit [SI
Als Beispiel für die Anwendung der Autokorrelationsfunktion wird eine einfache Übertragungsstrecke betrachtet. Das Nutzsignal (z.B. Sprache, Messwerte) wird durch abgeschwächte Echos gestört. Mithilfe der Autokorrelationsfunktion sollen die Laufzeiten der Echos bestimmt werden.
44.1e3; l/Fs; = 0:Ts:0.5; = length (t); = randn (1, N);
1.2
2
Korrelation
=
Autokorrelation
3
CPxx(N - 1) = cxx(2N - 1)
Fs Ts
% Nur positive Zeitachse plotten
plot (t, cxx (N:2*N-l» title ('Autokorrelation') xlabel ('Verschiebung [s]')
CPxx(1) = cxx(N + 1)
xcorr (x, ' options' ) xcorr (x, y, 'options')
209
4
5 x 10-3
-0.2
0
0.1
0.2 0.3 Verschiebung [sI
004
0.5
Abb. 6.14: Autokorrelationsfunktion zur Bestimmung der Echolaufzeit
Beispiel zur Kreuzkorrelation Als Beispiel für die Anwendung der Kreuzkorrelation soll nun mithilfe von vier Sendern im Raum die Position eines Empfängers bestimmt werden; die Position der Sender sei bekannt. Die Sender strahlen verschiedene, dem Empfänger bekannte zyklische Signalfolgen bestehend aus -1 und +1 aus. Der Empfänger empfängt alle vier zeitverzögerten Signale und zusätzliches Rauschen. Mithilfe von vier Kreuzkorrelationsfunktionen sollen die Laufzeiten (d.h. Abstände zu den Sendern) bestimmt werden. Zunächst werden die spezifischen Signalfolgen der Sender erzeugt. Entsprechend der Laufzeiten werden diese Signalfolgen dann verzögert. Zu dem entstehenden Summensignal wird noch Rauschen hinzugefügt. Zur Bestimmung der Signallaufzeiten werden die Kreuzkorrelationsfunktionen jeweils zwischen der gesendeten Signalfolge und dem empfangenen Signal gebildet. Daraus kann direkt die Laufzeit vom jeweiligen Sender abgelesen werden (Abb. 6.15). Die MATLAB-Befehle zur Extraktion der Signallaufzeiten und zur grafischen Darstellung gemäß Abb. 6.15 sind im Folgenden aufgeführt. Fs Ts t N
10e3; l/Fs; 0:Ts:0.5; = length (t); = =
%Abtastfrequenz
%Abtastzeit % Zeitvektor %Länge des Datensatzes
6 Signalverarbeitung ~ Signal Processing Toolbox
210 seql seq2 seq3 seq4
sign sign sign sign
(randn (randn (randn (randn
delayl delay2 delay3 delay4
100e-3; 200e-3; 150e-3; 400e-3;
(1, N»; N»; (1, N»; (1, N»;
(1,
(delayl (delay2 (delay3 (delay4
/ / / /
round round round round
delayedSeql delayedSeq2 delayedSeq3 delayedSeq4
[seql(end-delayIndexl+l:end) [seq2(end-delayIndex2+1:end) [seq3(end-delayIndex3+1:end) [seq4(end-delayIndex4+1:end)
Ts); Ts); Ts); Ts);
N_min N_max
(compound, (compound, (compound, (compound,
seql, seq2, seq3, seq4,
%Laufzeit %Laufzeit %Laufzeit %Laufzeit
Sender Sender 2 Sender 3 Sender 4
von von von von
6.4
'biased'); 'biased'); 'biased'); 'biased');
% Rauschen %Summensignal
H(s) = y(s) _ B(s) x(s) - A(s)
0.05
l
0.1
0.15
chebyl (ordnung, welligkeit, omega, , s') cheby2 (ordnung, welUgkeit, omega, , s' ) ellip (ordnung, welligkeit, daempfung, omega, , s') Bei chebyl und cheby2 wird die Welligkeit im Durchlass- bzw. im Sperrbereich angegeben. Bei ellip (auch Cauer-Filter) wird zusätzlich die Dämpfung im Sperl'bereich spezifiziert. Welligkeit und Dämpfung werden in dB angegeben. 9 )
'1 ~~~
I
---
83, 150ms
~~~
I
0.2
0.25
(6.9)
besselt (ordnung, omega) butter (ordnung, omega, 's')
oVU#'(1~;:lIj~\'I~i~ID,fII~i~WIIt\i~~\ .I1~rIA\it~~'~,\llt'~11I~1H\W~jh,II.!PI,w~~~,\'II,~111\l1\l,\I\)WI,m~ 1~1I'\I!JIII'·Jl).!111~1!,I<"Nl'jl~I~i\w'II"llo'~,\\l,)\j~"'1'""M'.,""" ... " '" o
+ b2 sn-l + .. , + bn S + bn+1 + a2 sm 1 + ... + am s + am+l
Konkurrierende Kriterien für die Auslegung sind neben der gewünschten Flankensteilheit die Welligkeit im Durchlass- und im Sperrbereich. Daher werden verschiedene Filtertypen unterschieden, die jeweils auf bestimmte Kriterien hin optimiert sind. Die folgenden Standardfilter stehen als MATLAB-Befehle zur Verfügung,s)
81,100ms I I I
bl sn al sm
% Kreuzkorrelation Sender 1
%Kreuzkorrelation Sender 2 %Kreuzkorrelation Sender 3 % Kreuzkorrelation Sender 4
Kreuzkorrelation
0.5 f-
Analoge Filter
Analoge Filter werden zur Auslegung oder Simulation physikalischer Systeme benötigt; eine Anwendung auf abgetastete Daten ist nur mithilfe von Integrationsalgorithmen möglich, wie z.B. in Simulink. Die Übertragungsfunktion 7 ) eines analogen Filters im Laplace-Bereich lautet allgemein für die Eingangsgröße x und die Ausgangsgröße y wie folgt. Die Zählerterme mit b1 ... bn haben dabei differenzierenden, die Nennerterme mit al ... am integrierenden Charakter.
plot (t, cxyl (N_min:N_max), t, cxy2 (N_min:N_max), t, cxy3 (N_min:N_max), t, cxy4 (N_min:N_max» legend (, Si, 100ms', 'S2, 200 ms', ' S3, 150ms', 'S4, 400 ms') xlabel ('Laufzeit es]') title ('Kreuzkorrelation')
I
Analoge und Digitale Filter
6.4.1
%Min Index für Plot %Max Index für Plot
(length (cxyl) - 1) / 2 + 1; length (cxy1);
211
Filter dienen dazu, bestimmte Frequenzbereiche aus Daten hervorzuheben oder zu dämpfen, um z.B. ein Nutzsignal vom Rauschen zu trennen. Soweit nicht anders ange· geben, wird im Folgenden unter der Grenzfrequenz (oder auch Eckfrequenz) diejenige Frequenz verstanden, bei der der Amplitudengang des Filters gegenüber dem Durchlassbereich um 3 dB abfällt; dies entspricht einer Reduzierung der Amplitude um Faktor v'2 bzw. einer Halbierung der Ausgangsleistung.
seql(l:end-delayIndexl)]; seq2(1:end-delayIndex2)]; seq3(1:end-delayIndex3)]; seq4(1:end-delayIndex4)];
noise ~ randn (1, N); compound ~ delayedSeql + delayedSeq2 + delayedSeq3 + delayedSeq4 + noise; xcorr xcorr xcorr xcorr
Sender Sender 2 Sender 3 Sender 4
%Index-Verschiebung % Index-Verschiebung 2 % Index-Verschiebung 3 %Index-Verschiebung 4
delayIndexl delayIndex2 delayIndex3 delayIndex4
cxyl cxy2 cxy3 cxy4
%Zufallsfolge % Zufallsfolge % Zufallsfolge % Zufallsfolge
6.4 Analoge und Digitale Filter
0.3
0.35
Laufzeit [s1
Abb. 6.15: Kreuzkorrelationsj~tnktionen zur Laujzeitbestimmung
0.4
0.45
0.5
[E, A]
butter (4, 1000*2*pi, 's');
%Eutterworth-Tiefpass 4. Ord., Fg
1 kHz
Die Grenzfrequenz omega wird in radjs angegeben und kann einen beliebigen positiven Wert annehmen. Anders als bei den übrigen Filterfunktionen ist die Dämpfung bei der Grenzfrequenz eines mit besself ausgelegten Filters größer als 3 dB! Als Abhilfe kann die Grenzfrequenz omega mit einem Korrekturfaktor lO ) skaliert werden (siehe auch folgendes Beispiel in Abb. 6.16). 7) Die Indizes beginnen hier nach MATLAB-Konvention bei 1, nicht bei 01 8) Die Option' s' dient zur Unterscheidung von digitalen Filtern; besself ist nur analog verfügbar. 9) Eine Dämpfung von 20 dB entspricht 1/10 der ungefilterten Signalamplitude. 10) Korrekturfaktor für die Grenzfrequenz bei der Auslegung von Bessel-Tiefpässen 1. bis 12. Ordnung: 1.000, 1.272, 1.405, 1.514, 1.622, 1.728, 1.832, 1.932,2.028,2.120, 2.209, 2.295.
6.4 Analoge und Digitale Filter
6 Signalverarbeitung - Signal Processing Toolbox
212
6.4.2
Abb. 6.16 zeigt die Übertragungsfunktion einiger analoger Tiefpässe mit der Grenzfrequenz 1 kHz jeweils für die Ordnung 2, 4 und 8. Der Frequenzgang H wird mit freqs (zaehler, nenner) bestimmt. Der ebenfalls zurückgegebene Frequenzvektor W besitzt dabei die Einheit rad/si alternativ kann er mit freqs (zaehler, nenner, W) explizit vorgegeben werden. Ohne Rückgabeparameter plottet freqs Betrag und Phase der Übertragungsfunktion.
Bessel (korrigiert)
Butterworth
Tschebyscheff Typ 1
H(Z-l)
-40
-40
Elliptisch (Cauer)
aly(k)
10 Frequenz [kHz]
0.1
10 Frequenz [kHz]
1
10
Frequenz [kHz]
0.1
1
Die Parameter des Filters können wahlweise als Zähler und Nenner der Übertragungsfunktion, als Nullstellen und Pole sowie in Zustandsdarstellung (jeweils im s-Bereich) ausgegeben werden. Die Unterscheidung erfolgt über die Anzahl der zurückzugebenden Parameter. Das folgende Beispiel erzeugt zunächst einen Tschbyscheff-Hochpass 6. Ordnung mit 3 dB Welligkeit oberhalb von 1 kHz; es werden die Nullstellen z, die Pole p und der Verstärkungsfaktor k ausgegeben. Die zweite Zeile erstellt ein elliptisches Filter (Cauer) als Bandsperre zwischen 100Hz und 200Hz, das zusätzlich eine Dämpfung von 20dB im Sperrbereich besitzt; das Filter wird in Zustandsdarstellung berechnet.
fir1 firl fir1 firl
butter (ordnung, omega, , s') chebyl (ordnung, welligkeit, omega, , s') cheby2 (ordnung, welligkeit, omega, , s') ellip (ordnung, welligkeit, daempj, omega, , s')
Bessel-Filter (nur analog) Butterworth-Filter Tschebyscheff-Filter Typ 1 Tschebyscheff-Filter Typ 2 Elliptisches Filter (Cauer)
[H, W] = freqs (zaehler, nenner [, Wj)
Frequenzgang analog
b1 -I- b2 z-l -I- ... -I- bn+1 z-n al
(6.10)
-I- a2 z-l -I- ... -I- am+1 z-m
b1 x(k) -I- b2 x(k-l) -1- ... -I- bn+1x(k-n)
(6.11)
(20, (20, (20, (20,
0.2); 0.2, 'high'); [0.2 0.4]); [0.20.4], 'stop');
% Tiefpass, Durchlassbereich %Hochpass, Durchlassbereich %Bandpass, Durchlassbereich %Bandsperre, Sperrbereich
< 0.2 F_max > 0.2 F_max 0.2 0.4 F_max 0.2 ... 0.4 F_max
Die Filter-Übertragungsfunktion kann mit freqz (zaehler, nenner, N, Fs) berechnet werden; der Befehl wertet Gleichung (6.10) für z-k = exp(-jkwTs ) aus. Das Argument N bestimmt die Auflösung; die Abtastfrequenz F s wird in Hz angegeben. Der nenner ist in diesem Fall skalar al = 1. Bei der Auslegung des Filters (hier mit Rechteckfenster) ist zu beachten, dass die Länge der Fensterfunktion stets n-l-l beträgt.
% Hochpass % Bandsperre
Analoge Filter besself (ordnung, omega)
=
Ein FIR-Tiefpassfilter wird mit dem Befehl fir1 (ordnung, grenzfrequenz) ausgelegt, der einen Koeffizienten-Vektor der Länge n-l- 1 zurückgibt (siehe Abb. 6.17 links, x). Die normierte Grenzfrequenz muss im Bereich 0 ... 1 liegen, wobei der Wert 1 der halben Abtastfrequenz entspricht. Hochpass, Bandpass und Bandsperre werden wie bei analogen Filtern erstellt.
Um einen Hochpass zu erzielen, wird an die Befehle die Option 'high' angehängt. Enthält die Variable omega zwei Frequenzen, wird ein Bandpass erstellt bzw. nach zusätzlichem Anfügen der Option' stop' eine Bandsperre.
chebyl (6, 3, 1000*2*pi, 'high', 's'); ellip (6,.3, 20, [100 200]*2*pi, 'stop', 's');
B(z-l) A(Z-l)
FIR-Filter besitzen eine endliche Impulsantwort und sind daher stets (im regelungstechnisehen Sinn) stabil. Sie bewirken eine lineare Phasenverschiebung des Eingangssignals (mittlere Totzeit T t = nTs /2 bei Abtastzeit T s ). Nachteilig ist die im Vergleich zu UR-Filtern höhere benötigte Ordnung (d.h. große Anzahl an Koeffizienten).
10
Frequenz [kHz]
Abb. 6.16: Übertragungsjunktion einiger analoger Filter der Ordnung 2, ;, und 8
[z, p, k] [a, b, c, d]
=
Bei digitalen Filtern unterscheidet man UR-Filterll) und FIR-Filter. 12 ) Bei FIR-Filtern sind die Koeffizienten a2, ... , am+l = 0, da der Ausgangswert nur aus den Eingangswerten berechnet wird, es entfällt also die zweite Zeile von (6.11) .
\ \ ' \ -40
0.1
y(z-l) x(Z-l)
- a2 y(k-l) - ... - am +1 y(k-m)
..: 0.1
=
Der k-te Ausgangswert y(k) wird demnach als gewichtete Summe vergangener Eingangswerte (Zähler B) und Ausgangswerte (Nenner A) berechnet:
I-':[]"'~ -~[]~ -,:rn'" . K\ -2: [E'''-' \ E -40
Digitale FIR-Filter
Die Übertragungsfunktion eines digitalen Filters im z-Bereich lautet allgemein für die Eingangsgröße x und die Ausgangsgröße y:
% Frequenzgang und Frequenzvektor berechnen %Frequenzgang ausgeben
[H, W] = freqs (B, A); semilogx (W/(2*pi), abs (H»;
213
I
B = firl (20, 0.2, rectwin (20+1); % FIR-Tiefpass mit RechtecIdenster [H, F] = freqz (B, 1, 200, 100); %Übertragungsfunktion und Frequenzvektor plot (F, abs (H» % Plotten
Abb. 6.17 zeigt die Koeffizienten (links) und die Übertragungsfunletion (rechts) eines FIR-Filters der Ordnung n = 20, der Abtastfrequenz Fs = 100 Hz und der Grenzfrequenz Fg = F s /2· 0.2 = 10Hz. Es sind die Ergebnisse ohne Fensterfunktion (d.h. mit Rechteckfenster rectwin) und mit Hamming-Fenster dargestellt. 11) 12)
Infinite Impulse Response Finite Impulse Response
6 Signalverarbeitung -.Signal Processing Toolbox
214
Bei der Filter-Übertragungsfunktion ohne Fensterung (rechts, - -) fällt dabei die deutliche Welligkeit in der Nähe der Grenzfrequenz auf, das so genannte Gibbs'sche Phänomen.13) Dieser Effekt kann durch verschiedene Fensterfunktionen verringert werden, die das Zeitsignal skalieren. Die Funktion firl verwendet standardmäßig ein HammingFenster (siehe auch Kap. 6.2).
(J)
0.3f
x 0
0.2
x xOx x O °x 0 0
"0
:E
Ci E
0.1
«
x 0
x 0
-0.1 -10
0)
"0
"0
«
~
x 0
I"
x
0
°0009 x x x
[\\. -'_
5 0 -5 Nummer der Koeffizienten
10
~ 0.6 0.4
01
0.1
\
--'
o
o
10
20 30 Frequenz [Hz]
40
Ein Filter mit frei vorgegebenem Frequenzgang erstellt der Befehl fir2 (ordmmg, frequenz vektor, amplitudenvektor ). Der Frequenzvektor enthält normierte Frequenzen in aufsteigender Folge und muss mit 0 beginnen und mit 1 enden (= Fsl2); doppelte Werte sind möglich. Zu jeder Frequenz gibt ein zweiter Vektor die zugehörigen Amplituden vor. Abb. 6.1.9 zeigt im Vergleich den vorgegebenen Sollverlauf und die mit fir2 approximierte Übertragungsfunktion. Wie bei fir1 kann optional ein Fenster spezifiziert werden (Standard ist ein Hamming-Fenster).
%Normierte Frequenzen % Amplituden % FIR-Filter mit Ordnung
0.2 0.3 Zeit [SI
o
0.5
0.4
Abb. 6.18: Ungefiltertes sowie mit FIR-Filter 20. Ordnung gefiltertes Signal
'sI
10
20 30 Frequenz [Hz]
40
50
Abb. 6.19: Übertragungsjunktion mit fir2 sowie vorgegebener SoUverlau/
FIR-Filter
50
Die genannte Verzögerung bzw. Phasenverschiebung kann mit dem Befehl filtfilt vermieden werden (siehe Abb. 6.18, - -). Dabei wird das FIR-Filter zunächst wie gewohnt und danach zusätzlich rückwärts auf die Daten angewandt. Durch diese doppelte Filterung erhöht sich natürlich auch die effektive Ordnung des Filters.
frequenz = [0.00.30.30.6 1.0]; amplitude = [1.0 1.00.50.50.0]; B = fir2 (50, frequenz, amplitude);
\
0.8
::J
\
x_fir = filter (B, 1, x);
fir1 (ordnung, grenz frequenz) fir2 (ordmmg, frequenz, amplitude)
FIR-Standardfilter FIR-Filter nach Übertragungsfunktion
filter Czaehler, 1, daten) filtfilt (zaehler-, 1, daten)
Diskrete Filterung von Daten Diskrete Filterung, phasenkorrigiert
[H, F] =freqz (zaehler, 1, N, Fs)
Frequenzgang diskret
6.4.3
Digitale IIR-Filter
Im Gegensatz zu FIR-Filtern arbeiten UR-Filter rekursiv, da zur Berechnung auch vergangene Ausgangswerte zurückgeführt werden. Dadurch wird die gleiche Flankensteilheit eines Filters bei deutlich niedriger Ordnung erreicht. Sie werden z.B. im Zusammenhang mit abgetasteten Systemen eingesetzt (siehe Kap. 10). UR-Filter werden mit den gleichen Befehlen wie analoge Filter ausgelegt, wobei die Option 's' entfällt; ein Besselfilter steht nicht zur Verfügung. Die Frequenzen werden wie bei FIR-Filtern auf die halbe Abtastfrequenz Fmax = F s /2 normiert; die Erstellung von Hochpass-, Bandpassfiltern und Bandsperren erfolgt ebenso wie bei analogen Filtern. Die Filter können wahlweise als - jeweils zeitdiskrete - Übertragungsfunktion, Pole und Nullstellen oder Zustandsdarstellung ausgegeben werden. Hier folgen Beispiele einiger Filter 6. Ordnung: [B, A] = butter (6, 0.6); %Tiefpass, Grenzfrequenz O.6*Fs/2 [z, p, k] = cheby1 (6, 3, 0.6, 'high'); %Hochpass, 3 dB Durchlass-Welligkeit [a, b, c, d] = ellip (6, 3, 20, [0.3 0.6], 'stop'); % Bandsperre
50
Ein begrenztes Zeitsignal entsteht durch die Multiplikation eines beliebig langen Signals mit einem Rechteckfenster. Die Fouriertransformierte dieses Fensters, die Spaltfunktion, tritt daher in der FilterÜbertragungsfunktion auf. 13)
0)
~ :;,
0.2
In Abb. 6.18 (-) wird ein FIR-Filter (Tiefpass mit Fg = 20Hz und Hamming-Fenster) auf die Daten aus Abb. 6.6 angewandt. Dies geschieht mit dem Befehl filter (zaehler, nenner, daten). Zu Beginn ist dabei das Einschwingen des Filters zu erkennen, ebenso die deutliche Verzögerung des Signals um fast eine Periode (Tt = 20·0.01 s/2 = 0.1 s).
I
FIR-Filterdesign mit fir2
\
Abb. 6.17: Koeffizienten und Übertragungs/unktion eines FIR-Filters ohne Fenster/unktion (= Rechteck/enster) und mit Hamming-Fenster (Standard)
I
Diskrete Filterung mit FIR 20. Ordnung
\- - - FIR --:--::::::- FIR + Hamming
FIR FIR + Hamming
9 0 00° x x x
215
'"CiE
Filter-Übertragungsfunktion
Filter-Koeffizienten
6.4 Analoge und Digitale Filter
Die Filter werden wieder mit den Befehlen filter (zaehleT, nenne1', daten) und allalog filtfilt auf Daten angewandt (siehe Kap. 6.4.2). Als Beispiel sollen die folgenden MATLAB-Befehlszeilen dienen. Die hohe Frequenz von 33 Hz wird durch ein
6 Signalverarbeitung ~ Signal Processing Toolbox
216
Butterworth-Tiefpass 2. Ordnung mit einer Grenzfrequenz von 20 Hz unterdrückt. Das Beispiel zeigt, dass bei UR-Filtern schon niedrige Filterordnungen zur Erzielung guter Ergebnisse ausreichen (Abb. 6.20). t 0.01:0.01:1; x = 5 + 8*sin(2*pi*8*t) + 4*cos(2*pi*33*t);
%Zeitvektor Fs = 100 Hz %Beispiel-Signal
[B, A] = butter (2, 20/50); x_filt = filter (B, A, x); x_filtfilt = filtfilt (B, A, x);
% Auslegung IIR-Filter %Filtern mit filter %Filtern mit filtfilt
6.4 Analoge und Digitale Filter
217
Neben den beschriebenen Befehlen zur Filterauslegung steht mit fdatool ein interaktives Filter Design and Analysis Tool zur Verfügung. Ähnliche Funktiona.lität bietet auch der Filter Designer, der über den Button New oder Edit im sptool aufgerufen wird (siehe Abb. 6.22). Filterübertragungsfunktionen lassen sich gut mit dem Filter Visualization Tool fvtool (zaehler, nenner) darstellen und analysieren (siehe Abb. 6.23 mit der Darstellung der Sprungantwort). Das kann ebenso aus dem sptool heraus mit dem Button View der Filter-Spalte aufgerufen werden. Die Abtastfrequenz lässt sich im Menü AnalysisjSampling Frequency und die Achsenskalierung im Menü AnalysisjAnalysis Parameters einstellen.
plot (t, x , ' k: ' ) hold on plot (t, x_filt , 'r-') plot (t, x_filtfilt '.'b--') axis ([0 0.5 -10 30]) xlabel ( , Zeit Es]' ) title ('Diskrete Filterung') legend ('ungefiltert', 'IIR filter', 'IIR filtfilt', 1) Der Befehl yule1iTalk (ordnung, frequenzvektor, amplitudenvektor ) approximiert einen frei vorgegebenen Frequenzgang mittels Least-Squares-Verfahren. yule1iTalk lässt sich wie fir2 verwenden, gibt jedoch neben dem Zähler auch den Nenner der Übertragungsfunktion zurück. Der Frequenzvektor muss ebenfalls mit 0 beginnen und mit 1 enden (= Fs/2); doppelte Werte sind möglich. Zu jeder Frequenz gibt der zweite Vektor die Amplituden vor. Abb. 6.21 zeigt Sollverlauf und die mit yulewalk approximierte Übertragungsfunktion.
I
%Normierte Frequenzen
frequenz = [0.0 0.3 0.3 0.6 1.0]; amplitude = [0.5 0.5 0.2 0.2 1.0]; [B, A] yule1iTalk (4, frequenz, amplitude); [H, F] = freqz (E, A, 200, 100);
% Amplituden % IIR-Filter mit Ordnung 4 %Übertragungsfunktion Fs = 100 Hz Abb. 6.22: sptooL: Filter Designer
30 1
,I
IIR-Filter butter (ordnung, grenzfrequenz) chebyl (ordnung, welligkeit, grenz frequenz) cheby2 (ordnung, welligkei"t, grenz frequenz) ellip (ordnung, welligkeit, daempj, grenzfreq)
Butterworth-Filter Tschebyscheff-Filter Typ 1 Tschebyscheff-Filter Typ 2 Elliptisches Filter (Cauer)
M
yule1iTalk (ordnung, frequenz, amplitude)
Beliebige Übertragungsfunktion
~2
fil ter (zaehler, nenner, daten) filtfilt (zaehler, nenner, daten)
Diskrete Filterung (Daten) Diskr. Filt., phasenkorrigiert
[H, F] =freqz (zaehler, nenner, N, Fs)
Frequenzgang diskret
sptool fdatool fvtool (zaehler, nenner)
Signal Processing Tool Filter Design and Analysis Taol Filter Visualization Tool
20 ",M
"0
'"
"0
~
lM
::J
::J
E
~
C
_10LI----~--------~--~----~
o
0.1
0.2
0.3
~4
Abb. 6.23: jvtooL
IIR-Filterdesign mit yulewalk
Diskrete Filterung mit IIR 2. Ordnung
~5
Zeit [sI
Abb. 6.20: Ungefiltertes sowie mit FIR-Filter 20. Ordnung gefiltertes Signal
0
0
10
~
M
40
~
Frequenz [Hz]
Abb. 6.21: Soll- und Istverlauf der Übertragungsfunktion mit yuLewaLk
6 Signalverarbeitung - Signal Processing Toolbox
218
Filterentwurf mit Prototyp-Tiefpässen
6.4.4
Die beschriebenen Standardbefehle für analoge und digitale IIR-Filter basieren auf analogen Prototyp-Tiefpässen, deren Grenzfrequenz und Charakteristik entsprechend transformiert werden. Mithilfe der im Folgenden beschriebenen Transformationen lassen sich zudem auch benutzerdefinierte Filter (z.B. mit aperiodischem Einschwingen) elegant erstellen. Entsprechend der Standardbefehle stehen die folgenden Prototyp-Tiefpässe mit der normierten Grenzfrequenz 1 radis zur Verfügung, die jeweils Nullstellen z, Polstellen p und Verstärkung kausgeben. [z, [z, [z, [z, [z,
6.4 Analoge und Digitale Filter
p, p, p, p, p,
kJ
besselap buttap cheblap cheb2ap ellipap
k]
kJ kJ kJ
(ordnung) (or'dnung) (ordnung, welligkeit) (ordnung, welligkeit) (ordnung, welligkeit, daempf'ung)
wird dabei durch direkte Vorgabe der Pole erstellt:
I
ordnung = 4; z = []; p -ones (ordnung, 1); k
1;
Ca, Ca, Ca, Ca,
b, b, b, b,
c, c, c, c,
dJ dJ dJ dJ
omega korrektur [a, b, c, d] [a, b, c, d] [a, b, c, d] [B, A]
(a, (a, (a, (a,
b, b, b, b,
c, c, c, c,
d, d, d, d,
omega) omega) omega, bandbreite) omega, bandbreite)
Abschließend muss die Zustandsdarstellung des Filters noch mit ss2tf in eine Übertragungsfunktion (transfer function) umgerechnet werden. Der Entwurf eines ButterworthBandpasses 4. Ordnung mit einem Durchlassbereich von von 40 ... 80 Hz sieht damit folgendermaßen aus:
I
[z, [a, [a, [B,
p, k] b, c, d] b, c, d] A]
100 * 2 * pi; 1 I sqrt (2 '(1 I ordnung) -1); zp2ss (z, p, k); lp21p (a, b, c, d, korrektur); Ip21p (a, b, c, d, omega); ss2tf (a, b, c, d);
[40 80] * 2 * pi; %Grenzfrequenzen buttap (4); % Prototyp-Tiefpass 4. Ordnung zp2ss (z, p, k); %Umrechnung in Zustandsform lp2bp (a, b, c, d, sqrt(prod(omega)), diff(omega)); %Bandpass ss2tf (a, b, c, d); % Analoges Filter
Wie bei der Standardfunktion besself gilt auch für besselap, dass die Dämpfung bei der Grenzfrequenz größer als 3 dB ist. Soll dies korrigiert werden, muss die Frequenz des Prototyp-Tiefpasses erhöht werden (siehe J.l'ußnote zu Korrekturfaktoren auf Seite 211). Ebenso ist eine Korrektur bei Filtern mit aperiodischem Einschwingen erforderlich. Im folgenden Beispiel wird ein Tiefpass 4. Ordnung mit aperiodischem Einschwingverhalten für eine Grenzfrequenz von 100 Hz ausgelegt. Der zugehörige Prototyp-Tiefpass
-
1. Abb. 6.24 zeigt
%Grenzfrequenz 100 Hz %Korrekturfaktor > 1 %Umrechnung in Zustandsform %Korrektur %Transformation % Übertragungsfunktion
Übertragungsfunktion
Sprungantwort
01-1----
0.8
m
Q)
:; -20
TI
.Cl 0.6
TI
Ip2lp lp2hp lp2bp lp2bs
Die Frequenz omega (in radis) ist bei Tief- und Hochpass die Grenzfrequenz, bei Bandpass und -sperre die Mittenfrequenz, welche durch das geometrische Mittel omega = v'omega1 . omega2 aus den beiden Grenzfrequenzen omegal und omega2 bestimmt wird. Die Bandbreite ist die Differenz beider Grenzfrequenzen.
omega
% Ordnung des Filters %Keine Nullstellen %Polstellen bei s=-l entsprechend der Filterordnung %Verstärkung 1
Bei dieser Art Filter lautet der Korrekturfaktor 1/v'2T!ordnun g Übetragungsfunktion und Sprungantwort des Filters.
Zur weiteren Verarbeitung wird die Zustandsdarstellung (state space) der Filter benötigt. Die Umrechnung erfolgt mit dem Befehl zp2ss. Um die gewiinschte Filtercharakteristik zu erhalten, müssen nun die Prototypen für die entsprechende Grenzfrequenz skaliert und gegebenenfalls in einen anderen Filter-Typ (z.B. Hochpa.ss) transformiert werden. Beides erledigen die folgenden vier Befehle.
219
0..
::J
'"Ci E
«
E
«
-40
0.4
- - - Übertragungsfunktion -3 dB
10
100
1000
Frequenz [Hz]
5
10
15
20
Zeit [ms]
Abb. 6.24: Übertragungsjunktion mit 3dB-Linie sowie Sprungantwort eines lOOHz-Tiejpasses
4. Ordnung mit aperiodischem Einschwingverhalten. Um aus analogen digitale Filter zu erstellen, müssen entsprechende analoge Prototypen erzeugt und anschließend in eine zeitdiskrete Form transformiert werden. Dies geschieht meist mit der Bilinearen Transformation (auch Tustin-Approximation). Diese führt den s-Bereich (Laplace) abhängig von der Abtastfrequenz Fs mit der folgenden Rechenvorschrift in den z-Bereich über. s
2Fs
·
1 z+l
z
(6.12)
Dabei muss allerdings der Frequenzbereich -00 < omega< 00 in analoger Darstellung auf den durch die Abtastfrequenz begrenzten Bereich -Fs 12 < F < }<~/2 abgebildet werden. Diese Abbildung ist nur für die Frequenz 0 (d.h. s = 0 bzw. z = 1) exakt; alle anderen Frequenzen sind "verzerrt". Bei Filtern soll jedoch das Übertragungsverhalten im Bereich der Grenzfrequenz F g möglichst genau nachgebildet werden. Um dies
6 Signalverarbeitung - Signal Processing Toolbox
220
6.5 Übungsaufgaben
zu erreichen, muss die Grenzfrequenz für die Auslegung des analogen Filters mit so genanntem "Pre-warping" entgegengesetzt verzerrt werden.
Pre-warping mit "bilinear"
Über den Zusammenhang wg = 2'1rFg kann die Formel auch für Frequenzen in radjs angewandt werden (siehe auch nachstehendes Beispiel zum manuellen Pre-warping): CD '0
Fg pre-warped --
(6.13)
s
bilinear (a, b, c, d, Fs, 100); ss2tf (e, f, g, h);
% Fs ~ 300 Hz, Fp ~ Fg %Übertragungsfunktion
~
100 Hz
Die folgenden Zeilen greifen das Beispiel von Seite 218 auf. Da zwei Grenzfrequenzen vorliegen, muss hier das Pre-warping manuell auf beide angewandt werden. Anschließend wird der Prototyp-Tiefpass wie gehabt erstellt und dann mit bilinear (ohne F p ) transformiert. Abtastfrequenz ist 200 Hz. Abb. 6.25 zeigt rechts den Frequenzgang sowie zum Vergleich den des analogen Filters und des digitalen Filters ohne Pre-warping.
% Abtastfrequenz 200 Hz 200; %Grenzfrequenz [40 80] * 2 * pi; %Grenzfrequenz mit Pre-warping 2 * Fs * tan (omega / Fs / 2); %Prototyp-Tiefpass buttap (4); %Umrechnung in Zustandsform zp2ss (z, p, k); % Bandpass lp2bp (a, b, c, d, sqrt(prod(omega», diff(omega»; %Dig. Filter mit Pre-warping bilinear (a, b, c, d, Fs); %Übertragungsfunktion ss2tf (e, f, g, h);
Fs omega omega [z, p, Ca, b, Ca, b, [e, f,
k]
c, d]
c, d] g, h] [Bp, Ap]
0.8
~ E
0.2
(ordnung) (ordnung) (ordnung, welligkei-t) (ordnung, welligkeit) (ordnung, welligkeit, daempf)
Filterdarstellung zp2ss ss2tf
--+ --+
Zustandsdarstellung Übertragungsfunktion
~ E
Analog - - Digital ohne P. - - mit Pre-warping
0.6
0.2
50 100 Frequenz [Hz]
0 0
150
20
40 60 Frequenz [Hz]
80
100
Abb. 6.25: Digitale Filter ohne und mit Pm- Warping im Vergleich zum analogen Filter. Aperiodischer Tiefpass (links) und Butte'f'Worth-Bandpass (rechts)
6.5
Übungsaufgaben
6.5.1
Signaltransformation im Frequenzbereich
Transformieren Sie ein Rechtecksignal im Frequenzbereich in ein Dreiecksignal! Erzeugen Sie dazu mit der Funktion square (zeiL1Jektor) eine Periode des Rechtecksignals (Frequenz 20 Hz, Abtastzeit TB = 1 ms, siehe Abb. 6.26 links - -)! Wenden Sie die DFT auf dieses Signal an! Skalieren Sie anschließend die Fourierkoeffizienten, so dass Gleichung (6.14) in Gleichung (6.15) übergeht (siehe Abb. 6.26 rechts) und wenden Sie die inverse DFT ifft (x) auf die skaliertenKoeffizienten an! Kontrollieren Sie Ihr Ergebnis im Zeitbereich! sin(t) h Rechteck (t ) = - 1 -
gitalen Filter nachzubilden. Gegenüber der Bilinearen 'I\'ansformation ist allerdings die Amplitude im Durchlassbereich verfälscht sowie die Dämpfung im Sperrbereich deutlich reduziert. Praktisch eignet sich impinvar nur für Tiefpässe niedriger Ordnung. Analoge Prototyp-Tiefpässe
0.8
::J
-3 dB
0 0
Als alternative Transformationsvorschrift versucht der Befehl impinvar (zaehler, nenner, Fs), die Impulsantwort eines analogen Filters möglichst genau mit einem di-
besselap buttap cheb1ap cheb2ap ellipap
CD '0
0.6
Der Befehl bilinear (a, b, c, d, Fs [, Pp p führt die Bilineare Transformation durch. Wird die optionale Frequenz F p (meist = F g ) vorgegeben, wendet er zudem das Prewarping an, so dass eine exakte Übereinstimmung bei Fp vorliegt. Beide Frequenzen werden in Hz angegeben. Für das obige Filter mit aperiodischem Einschwingen lautet der Aufruf demnach wie folgt (Abb. 6.25 zeigt links das Resultat): Ce, f, g, h] [Bp, Ap]
Pre-warping manuell
::J
s g nFF- ) F g ·'IrFF· t a ('Ir g
221
hDre"eck(t) = sin(t)
12
+
sin(3t)
-3sin(3t)
-32 -
+
sin(5t)
-5sin(5t)
+ -5-2 -
+
sin(7t)
-7-
+ ...
sin(7t)
±
-72
(6.14) (6.15)
Filter-Transformationen Ip21p Ip2hp Ip2bp Ip2bs
Tiefpass Tiefpass Tiefpass Tiefpass
--+ --+ --+ --+
Tiefpass Hochpass Bandpass Bandsperre
Diskretisierung bilinear Bilineare Transformation impinvar Impulsinvarianz
6.5.2
Signalanalyse und digitale Filterung
Ein vorgegebenes Signal soll analysiert und der relevante Anteil herausgefiltert werden. Sie finden die Datei ueb_signal. dat (ASCII) bzw. ueb_signal.mat (MATLAB-Format) mit dem Datensatz auf der beigelegten CD-ROM. Laden Sie den Datensatz! Analysieren Sie das Spektrum des Signals und legen Sie ein FIR-Filter so aus, dass nur die beiden niedrigsten Frequenzanteile passieren können, die höheren jedoch gedämpft werden! Eliminieren Sie außerdem den Gleichanteil des Signals!
6 Signalverarbeitung - Signal Processing Toolbox
222
Fourierkoeffizienten bk
Zeitsignale
-----.< Rechteck --EJ Dreieck
0.5
7
o -0.5 -1
t
~
o
0.01
0.02 Zeit
- -- - - --j 0.03
0.04
at
I ®6®~)®6~~~~el
o
100
200
300
400
Frequenz [Hz]
[sI
Abb. 6.26: Rechteck- und Dreiecksignal (links) und zugehörige Fourierkoeffizienten bk (rechts)
Analoger Bandpass
6.5.3
Bestimmen Sie 'die Übertragungsfunktion eines mehrfachen Bandpasses im LaplaceBereich! Die Grenzfrequenzen des Filters seien 10, 20, 70 und 100 Hz (siehe idealisierte Übertragungsfunktion in Abb. 6.27 - -). Überlagern Sie dazu zwei Butterworth-Filter 8. Ordnung! Gesamt-Filter
~~II =-=-= ~~~~d.1 0.5
oI o
/
6.5.4
'-
Optimierung Optimization Toolbox
, ./ 50 100 Frequenz [Hz]
===' 150
Abb. 6.27: Idealisierte FilterÜbertragungsfunktion (- -) und Verlauf bei Teiljiltern 8. Ordnung (-)
Digitaler IIR-Bandpass
Bestimmen Sie die zeit diskrete Übertragungsfunktion des Bandpasses aus Aufgabe 6.5.3! Die Abtastfrequenz sei 300 Hz. Erstellen Sie das Filter alternativ unter Verwendung von Prototyp-Tiefpässen! Nähern Sie die ideale Übertragungsfunktion in Abb. 6.27 auch mittels des Befehls yulewalk an und vergleichen Sie die Übertragungsfunktion mit den vorigen Ergebnissen! Warum kann die Übertragungsfunktion aus Aufgabe 6.5.3 nicht direkt in ein UR-Filter transformiert werden? Wann ist dies trotzdem möglich?
Die Lösung vieler technischer Problemstellungen erfordert die Minimierung oder Maximierung mehrdimensionaler Zielfunktionen. Anschaulich betrachtet ist man in der Situation eines Wanderers, der das tiefste Tal oder die höchste Erhebung finden muss. Oftmals treten neben das eigentliche Minimierungsproblem zusätzliche Gleichungs- oder Ungleichungsnebenbedingungen, die eine Einschränkung der Lösungsmenge VOll Anfang an bedeuten. Man spricht dann von Optimierung unter Nebenbedingungen oder constrained optimization. Ein weit verbreitetes Verfahren zur angenäherten Lösung überbestimmter Gleichungssysteme ist die Methode der kleinsten Quadrate (least squares). Dieses Verfahren wird häufig zur Kurveninterpolation (curve fitting) eingesetzt, ist aber nicht auf diese Anwendung beschränkt. Auch hier existieren Varianten mit Nebenbedingungen sowie lineare und nichtlineare least squares-Verfahren. Eine Unterproblemstellung bei der Optimumsuche ist häufig die Nullstellenbestimmung von nichtlinearen Gleichungssystemen. Für diese Problemstellung bietet die Optimization Toolbox verschiedene Such algorithmen an. Ziel dieser Einführung in die Optimization Toolbox ist nicht die Erklärung oder Herleitung der verschiedenen Optimierungsalgorithmen, sonderen deren effiziente Anwendung. An geeigneter Stelle wird kurz auf charakteristische Eigenschaften und Besonderheiten einzelner Algorithmen hingewiesen, für detaillierte Informationen siehe [9, 23, 25, 41]. Im Folgenden wird nicht mehr zwischen Minimierung und Maximierung unterschieden, vielmehr werden wir uns auf das Minimierungsproblem beschränken. Alle Maximierungsprobleme mit der Zielfunktion F(x) lassen sich auf das zugehörige Minimierungsproblem mit der Zielfunktion -F(x) zurückführen. Es gelten die folgenden typografischen Konventionen: Vektorwertige Funktionen werden in Großbuchstaben, skalare Funktionen in Kleinbuchstaben, Vektoren in Kleinbuchstaben in Fettschrif't und Matrizen in Großbuchstaben in Fettschrift gedruckt. Die Optimization Toolbox erwartet die zu optimierende Zielfunktion und alle Nebenbedingungen als eine MATLAB-Funktion im M-File-Format oder als inline object. Das Verwenden von inline objects anstelle von MATLAB-Funktionen ka.nn vor allem innerhalb von MATLAB-Skripts von Vorteil sein. Das Erstellen von MATLAB-Funktionen wurde in Kap. 2.5 erklärt. Die Übergabe der zu optimierenden vunktionen an die entsprechenden MATLAB-Algorithmen erfolgt durch Function Handles (Kap. 2.5 und 4.1.1), die die gesamte Information der zugehörigen Funktion enthalten, die MATLAB zu deren Ausführung benötigt. Die Übergabe einer Funktion als String in einfachen Anführungszeichen ist aus Kompatibilitätsgründen zwar noch möglich, sollte aber vermieden werden. Ein Function Handle wird durch Voranstellen des @-Operators vor den Funktiol1s-
7.2 Algorithmensteuerung
7 Optimierung - Optimization Toolbox
224
Durch den Befehl inline können beliebige MATLAB-Ausdrücke als inline abject im Workspace abgelegt werden. Es können daher auch vektorwertige Funktionen erzeugt werden. Die vektorwertige Funktion F3ve k(Xl,X2) = [xi - x§ + 3XIX§ xi + X2 wird durch den Befehl
namen erzeugt. Eine Funktion mit dem Namen fkt wird durch das folgende Kommando als Handle an die Funktion fzerozur Nullstellenbestimmung (Kap. 7.3) übergeben:
-lf
fzero (@fkt, ... )
Auf die Möglichkeit der F\mktionsdefinition als inline abject wird in Kap. 7.1 kurz eingegangen.
Inline Objects
7.1
Anstelle eine MATLAB-Funktion als M-File auf der Festplatte zu speichern, kann die F\mktion auch im MATLAB-Workspace als inline abject abgelegt werden. Prinzipiell kann jede MATLAB-Funktion auch als inline abject erzeugt werden, besonders geeignet sind jedoch kleine Funktionen, die innerhalb eines MATLAB-Skripts wiederholt aufgerufen werden. Auf diese 'Weise kann der gesamte benötigte Programmtext innerhalb einer einzigen Skript-Datei untergebracht werden. Zur Definition der Funktion h(x) = x 2 + x-I ist folgende Befehls-Syntax nötig:
I I
I I
»fl fl
inline('x"2+x-l', 'x') Inline function: f1(x) = x"2+x-l
Das Ergebnis ist das inline abject fi im MATLAB-Workspace. Im Befehl inline können nach der Funktionsdefinition auch mehrere unabhängige Variablen definiert werden. Die ,zweidimensionale Funktion h(Xl, X2) = xi - x§ + 3XIX§ wird erzeugt durch >~ f2
inline('xl"2-x2"2+3*xl*x2"2', 'xl', 'x2')
225
I
» f3_vek = inline(' [xl"2-x2"2+3*xl*x2"2; xl"2+x2-1]', 'xl', 'x2') f3_vek = Inline function: f3_vek(xl,x2) = [x1"2-x2"2+3*x1*x2"2; x1"2+x2-1]
erzeugt. Die Auswertung erfolgt wieder durch einfachen Aufruf an der gewünschten Stelle. » y3 = f3_vek(3,2) y3 41 10
'Venn eine Funktion ganze Vektoren als Argument erhält und diese elementweise ausgewertet werden sollen (dadurch erspart man sich for-Schleifen), dann können generell statt der Operatoren *, /, - die elementweisen Punkt-Operatoren . *, . /, . - verwendet werden. Dadurch ist die Funktion sowohl mit Vektoren als auch mit Skalaren aufrufbar. Wird in den nachfolgenden Optimierungsalgorithmen statt einer M-File-Funktion ein inline abject als Zielfunktion verwendet, so wird kein Function Handle, sondern einfach der Name des inline abjects übergeben (ohne ©-Operator).
inline objects f
inl'ine ('Funktionsdef' , ' vari' , 'var2' , ... ) inline abject erzeugen
f2 Inline function: f2(xl,x2) = xl"2-x2"2+3*xl*x2"2
Die Auswertung erfolgt durch Aufruf des inline abjects an der gewünschten Stelle. Mehrere Funktionsargumente werden durch Komma getrennt. » yl = fl(3), y2 = f2(3,2) yl 11
y2 41
Die definierten inline abjects können einschließlich Speicherplatzbedarf wie Variablen über den Befehl whos angezeigt werden. Der Inhalt der inline abjects kann durch Eingabe des Objektnamens abgefragt werden.
» f2 f2 Inline function: f2(xl,x2) = xl"2-x2"2+3*xl*x2-2
7.2
Algorithmensteuerung
Alle Algorithmen der Optimization Toolbox verwenden eine Variable options (Datentyp structure) zur Steuerung der jeweiligen Berechnungen. Wird für options eine leere Variable [J angegeben oder wird options weggelassen, so werden Standardeinstellungen verwendet. Die Befehle optimget und optimset dienen zur Manipulation der Variablen options. Die Eingabe » options=optimset options = Display: MaxFunEvals: Maxlter: ToIFun: ToIX: FunValCheck : OutputFcn:
[] [] [] [] [] [] []
7 Optimierung - Optimization Toolbox
226
ActiveConstrTol: NoStoplfFlatlnfeas: BranchStrategy: DerivativeCheck: Diagnostics: Dif fMaxChange : DiffMinChange: GoalsExactAchieve: GradConstr: Gradobj: Hessian: HessMult: HessPattern: HessUpdate: InitialHessType: InitialHessMatrix: Jacobian: JacobMult: JacobPattern: LargeScale: LevenbergMarquardt: LineSearchType: MaxNodes: MaxPCGIter: MaxRLPIter: MaxSQPlter: MaxTime: MeritFunction: MinAbsMax: NodeDisplaylnterval: NodeSearchStrategy: NonlEqnAlgorithm: PhaseoneTotalScaling: Preconditioner: PrecondBandWidth: RelLineSrchBnd: RelLineSrchBndDuration: ShowStatusWindow: Simplex: TolCon: TolPCG: TolRLPFun: TolXlnteger: TypicalX:
[] [] [] [] [] []
[] []
[] []
[] [] [] [] [] [] [] [] [] []
227
Alle Felder innerhalb von options können, wie bei jeder Struktur im v'lorkspace, durch Eingabe von options angezeigt werden. Die Extraktion einzelner Felder aus options erfolgt mit dem Befehl optimget. » par = optimget (options , 'TolX') par = 1. 0000e-006 Nicht alle Felder werden für jeden Befehl aus der Optimization Toolbox auch tatsächlich verwendet. Eine Übersicht über die von einem Befehl verwendeten Felder kann mit der Eingabe optimset (I!lbefehlsname) erzeugt werden. Gleichzeitig werden dabei die Standardwerte mit ausgegeben. Ein wichtiges Feld, das für fast alle Algorithmen der Optimization TB verwendet werden kann, stellt Display dar. Die zulässigen Werte sind 'off', 'final', 'notify' und 'iter'.Bei 'off' erfolgt keine Ausgabe, bei 'notify' erfolgt eine Ausgabe nur, wenn der Algorithmus nicht konvergiert ist, bei 'final' wird nur das Endergebnis ausgegeben und bei ' iter' wird schließlich Information zu jedem Iterationsschritt ausgegeben. Der Standardwert ist nicht bei allen Algorithmen identisch.
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
erzeugt die leere Struktur options, wobei [] bedeutet, dass jeweils die Standardeinstellung verwendet wird. Einzelne Felder werden durch den Befehl options=optimset(oldopts, 'param1', value1, 'param2', value2, ... ) verändert. Um die momentanen Optionen TolX und MaxIter zu verändern, ohne explizit eine Variable oldopts anzulegen, dient folgende Eingabe: »options
7.2 Algorithmensteuerung
optimset(options, 'TolX', 1e-6, 'Maxlter' , 30);
Mit der Option FunValCheck kann überprüft werden, ob eine zu optimierende F\mktion gültige Werte liefert. FunValCheck kann die Werte On und Off annehmen. Bei aktivierter Option wird eine Warnung angezeigt, wenn die F\mktion einen komplexen Rückgabewert, Inf oder NaN liefert. Die Variable options kann für alle Befehle der Optimization TB zur Algorithmensteuerung benutzt werden. Wenn für unterschiedliche Befehle jedoch unterschiedliche Optionen verwendet werden sollen, so müssen auch verschiedene Variablen (z.B. optionsi, options2) erzeugt werden. Abbruchkriterien: Bei allen Algorithmen der Optimization Toolbox lassen sich Abbruchkriterien und Informationen zum berechneten Ergebnis über zusätzliche Rückgabewerte abfragen. Dies geschieht über den Aufruf: [ ... , eXitflag, output]
optim(@funktion, xO, ... );
Der Platzhalter optim steht für ein Kommando der Optimization Toolbox. Im Rückgabewert exi tflag wird Information zum Abbruch des Algorithmus, in output werden detaillierte Informationen zum Ergebnis geliefert. Die Werte und Bedeutungen variieren für unterschiedliche Algorithmen. Die Bedeutungen für exi tflag werden bei der Beschreibung der Algorithmen tabellarisch zusammengefasst, die Bedeutungen von output können in der Online-Hilfe nachgelesen werden. Optionseinstellungen options=optimset leere Variable options erzeugen opt ions=opt ims et (oldopt s, 'par 1 ' , val1) Manipulation einzelner Felder optimset Cl!lbefehlsname) von befehlsname verwendete Felder anzeigen optimget (options, 'pari') Wert des Feldes pari anzeigen
7 Optimierung - Optimization Toolbox
228
7.3
Nullstellenbestimmung
funktion1.m 11
10'"
?
o -10~1--~~--~--~----~~~
-3
-2
-1
0
x
2
Abb. 7.1: Gmph der Punktion fex) x 6 + x 5 _ 3x4 - x 2 - 6x + 1
=
Skalare Funktionen
Zuerst soll die Nullstellenbestimmung einer skalaren Funktion mit dem Befehl fzero untersucht werden. Dieser Befehl implementiert einen numerischen Algorithmus' zur Nullstellensuche. Der Begriff Nullstelle ist im Zusammenhang mit fzero physili:alisch motiviert, d.h. es geht hier um die Frage, an welchen Stellen x eine Funktion f(x) für reellwertiges x das Vorzeichen wechselt. Dies bedeutet zweierlei: Zum einen werden komplexe Nullstellen von Polynomen nicht erfasst, zum anderen sind Berührpunkte von f(x) und der x-Achse keine Nullstellen in diesem Sinne. fzero kann in den folgenden zwei Varianten angewandt werden:
I
229
20 1
Viele Unterproblemstellungen bei Optimierungsaufgaben erfordern das Lösen nichtlinearer Gleichungssysteme und die Nullstellenbestimmung nichtlinearer Funktionen. Im Allgemeinen lassen sich für nichtlineare Funktionen die Nullstellen nur numerisch bestimmen, da allgemeingültige Lösungsformeln nicht existieren. Das Lösen einer nichtlinearen Gleichung kann stets in eine Nullstellensuche umgewandelt werden, so dass hier nur die Nullstellensuche behandelt wird. MATLAB bietet zur Nullstellenbestimmung die Befehle fzero für skalare und fsolve für vektorwertige nichtlineare Funktionen bzw. Gleichungssysteme an.
7.3.1
7.3 Nullstellenbestimmung
nullst = fzero(@funktion, xO, options) [nullst, f_wert] = fzero(@funktion, xO, options)
funktion gibt den Funktionsnamen der M-Funktion oder des inline objects an, dessen Nullstelle bestimmt werden soll. Wenn xO als skalare Zahl angegeben wird, verwendet fzero den Wert xO als Startwert für die Nullstellensuche. Das Suchintervall wird ausgehend vom Startwert xO so lange vergrößert, bis ein Vorzeichenwechsel der Funktion auftritt. Das tatsächlich verwendete Suchintervall hängt also davon ab, in welcher Richtung zuerst ein Vorzeichenwechsel auftritt. Um das Suchintervall genau zu spezifizieren, kann für xO ein Vektor der Länge 2 angegeben werden, wobei die Vorzeichen der Funktion J(x) an den Intervallgrenzen unterschiedlich sein müssen (dann existiert sicher mindestens eine Nullstelle). Als Beispiel wird die Funktion
f(x) = x 6
+ x5 -
3x4
-
x2
-
6x + 1
(7.1)
und die verschiedenen Anwendun'gsmöglichkeiten des MATLAB-Befehls fzero betrachtet. Um anschaulich zu zeigen, wie der Befehl fzero arbeitet, wird der Graph der Funktion J(x) betrachtet (Abb. 7.1). Zuerst wird die M-Funktion fnnktion1.m, mit folgendem Inhalt erzeugt: % funktion1,m function y = funktion1(x) y = x."6 + x."5 - 3*x."4 - x."2 - 6*x + 1;
Die Nullstelle in der Nähe von x ::::; 0,2 wird ausgehend vorn Startwert xO=O durch folgenden Befehl berechnet.
» xO = 0; [nullst fwert] nullst = 0.1620 fwert =
fzero(@funktion1, xO)
o Wird der Startwert zu xO=-O.8 gewählt, so findet fzero eine andere Nullstelle. » xO = -0.8; [nullst fwert] = fzero(@funktion1, XO), nullst = -1.2766 fwert = -8.8818e-016
Ausgehend von der Grafik in Abb. 7.1 führt die Spezifikation eines, Suchintervalls zielgerichteter zum gewünschten Ergebnis. Alle vier Nullstellel1 der Funktion f (x) können durch eine Befehlsfolge bestimmt werden. » x01=[-2.5 -2]; x02=[-1.5 -1]; x03=[0 0.5J; x04=[1.5 2];
» options=optimset(@fzero); options=optimset('Display','final'); » [nullst1 fwert1] = fzero(@funktion1, xOl, options) Zero found in the interval [-2.5, -2] nullst1 = -2.1854 fwert1 = 2.1316e-014 » [nullst2 fwert2J = fzero(@funktion1, x02, options) Zero found in the interval [-1.5, -1] nullst2 = -1. 2766 fwert2 = -8.8818e-016 » [nullst3 fwert3] = fzero(@funktionl, x03, options) Zero found in the ,interval [0, 0.5] nullst3 = 0.1620 fwert3
o
230
7 Optimierung - Optimization Toolbox
» [nullst4 fwert4] = fzero(@funktionl·, x04, options) Zero found in the interval [1.5, 2] nullst4 = 1.6788 fwert4
o
fzero bricht nach einer erfolgreichen Nullstellensuche immer ab und sucht nicht nach weiteren. Mehrere Nullstellen können nur durch Vorgabe mehrerer Suchintervalle bestimmt werden. Wenn die Nullstelle nicht exakt bestimmt werden muss, kann die Rechengenauigkeit von fzero verändert werden. Die Genauigkeit wird durch den Parameter TolX in der Variablen options gesteuert. Es handelt sich dabei um die maximale Abweichung in x-Richtung. Standardmäßig wird TolX=eps verwendet, was der Floating-Point-Genauigkeit von MATLAB entspricht. Die Auswirkung der Veränderung . der Genauigkeit wird anhand von nullst4 untersucht. Wird die Genauigkeit auf 1e-6 verringert, so liefert fzero ein schlechteres Ergebnis zurück. Die Anzahl der Iterationsschritte ist dafür geringer. Der Funktionswert ist bei verringerter Genauigkeit weiter von null entfernt. » tol=le-3; options=optimset(@fzero); » options=optimset(options,'TolX',tol,'Display','final'); » [nullst4 fwert4] = fzero(@funktionl, x04, options)
Zero found in the interval [1.5, 2] nullst4 = 1. 6781 fwert4 = -0.0372
» funktion2 = inline('atan(x)-0.5.*x','x'); » options=optimset(@fzero); options=optimset('Display','final'); » x01 = [-3 -1]; nullst1 = fzero(funktion2, x01, options) Zero found in the interval [-3, -1] nullst1 = -2.3311 » x02 = [-1 1]; nullst2 = fzero(funktion2, x02, options) Zero found in the interval [-1, 1] nullst2 =
o
» x03 = [23]; nUllst3 = fzero(funktion2, x03, options) Zero found in the interval [2, 3] nullst3 = 2.3311 Parameterübergabe: Oftmals ist es wünschenswert, neben den Funktionsargumenten noch weitere Parameter an die zu optimierende Funktion zu übergeben. Dies geschieht für alle Befehle der Optimization Toolbox nach dem selben Schema: Nach dem Optionsargument können beliebig viele Parameter an die Funktion übergeben werden. Die zu optimierende Funktion wird dann nach dem Funktionsargument x auch mit den Parametern pl, p2, ... als zusätzliche Argumente aufgerufen. Dies soll mit dem Befehl fzero an einem Beispiel verdeutlicht werden. Es werden die Nullstellen der Funktion
f(x)
=
eP1 • X
-
P2·
(7.3)
X
gesucht, wobei die Parameter PI und P2 mit an die Funktion übergeben werden sollen. Die zugehörige MATLAB-Funktion mit zusätzlichen Parametern lautet:
Da es sich bei funktionl um ein Polynom in x handelt, steht noch ein weiterer Befehl zur Bestimmung aller Nullstellen (einschließlich komplexer) zur Verfügung. Der Befehl roots erhält in einem Vektor alle Polynomkoeffizienten als Argument und liefert alle Nullstellen zurück. » poly = [1 1 -3 0 -1 -6 1]; nullst = roots(poly)
nullst = -2.1854 1.6788 -1.2766 0.3106 + 1.1053i 0.3106 - 1.1053i 0.1620
% f_param.m function y = f_param(x,pl,p2) y=exp(pl.*x) - p2.*x; An die Funktion Cparam werden die Werte pl=l und p2=3 übergeben. Eine Nullstelle im Intervall 1 ::; x ::; 2 wird bestimmt durch die folgenden Befehle, wobei die Parameter nach den Optionen im Aufruf von fzero angegeben werden: » xO=[1 2]; options=optimset(@fzero); pl » x = fzero(@f_param,xO,options,pl,p2)
1; p2
3;
x =
1. 5121
Bei allgemeinen nichtlinearen Funktionen führt nur die Verwendung von fzero zum Ziel. Als weiteres Beispiel soll nun die Lösung der Gleichung arctan(x) = 0.5x
231
7.3 Nullstellenbestimmung
(7.2)
dienen. Definiert man sich das inline object funktion2, so la.ssen sich mit einer einfachen Befehlsfolge die drei Lösungen bestimmen.
Durch die Übergabe von Parametern an die zu optimierende Funktion ka.nn dieselbe MATLAB-Funktion für verschiedene Parameterlcombinationen verwendet werden. Abbruchkriterium: Wird die Funktion fzero mit vier Rückgabewerten aufgerufen, so erhält man Information über das Abbruchkriterium in der Variablen exitflag und detaillierte Informationen zum Ergebnis in der Variablen output (siehe Online-Hilfe). Der Aufruf lautet dann: [nUllst, f_wert, exitflag, output]
fzero(@funktion, xO, options)
Die Bedeutung von exitflag ist in Tab. 7.1 zusammengefasst.
7.3 Nullstellenbestimmung
7 Optimierung - Optimization Toolbox
232
I
Tab. 7.1: Bedeutung von eXitfLag bei fzero Wert Beschreibung
-3 Funktion lieferte NaN oder Inf -4 Funktion lieferte einen komplexen Wert -5 Konvergenz auf einen singulären Wert
= 1
2Xl
+ 3X2 + 6X3 =
3
3Xl
+ 2X2 + 7X3
=
0 (7.4)
lässt sich durch Einführen der Matrix-Schreibweise
A·x=b
mit
x=
[Xl X2 X3
f
(7.5)
durch die nachfolgenden Befehle lösen. » A A=
[1 2 3; 2 3 6; 3 2 7] 2 3
2 3
»b b =
2
°
(7.6)
zur Verfügung, wobei F(x) eine vektorwertige Funktion mehrerer Veränderlicher ist. Die Syntax lautet:
Das numerische Lösen von Gleichungssystemen erfolgt mit dem Befehl fsolve für nichtlineare Gleichungssysteme und mit dem Befehl \ (slash) für lineare GleichungssysteJ.11e. Zunächst sollen Gleichungssysteme betrachtet werden, die weder über- noch unterbestimmt sind, die also entweder keine oder eine endliche Anzahl an Lösungen besitzen. Im Falle eines linearen Gleichungssystems bedeutet das, dass es keine oder genau eine Lösung gibt. Das lineare Gleichungssystem
+ 2X2 -1- 3X3
2
F(x) =
Vektorwertige Funktionen / Gleichungssysteme
Xl
det(A)
Bei nichtlinearen Gleichungssystemen kann es neben keiner auch mehrere Lösungen geben. Der Befehl fsolve stellt Algorithmen zur Lösung von Gleichungssystemen der Form
1 Konvergenz auf eine eindeutige Lösung -1 Abbruch durch die Output-Funldion
7.3.2
»determinante determinante
233
3 6 7
[1; 3; 0]
3 0 » x A\b x = -7.5000 -1.0000 3.5000
Der Befehl A\b liefert prinzipiell dasselbe Ergebnis wie inv(A) *b (zu inv siehe Kap. 2.2.2), nur wird statt der Berechnung der inversen Matrix das GaußEliminationsverfahrEm [20] verwendet. Dies ist in vielen Fällen numerisch günstiger. A\b wird auch als Matrix-Linksdivision bezeichnet. Über die eindeutige Lösbarkeit des linearen Gleichungssystems kann vorab durch Berechnung der Determinante von A entschieden werden.
I
x = fsolve(@funktion, xO, options) [x fval] = fsolve(@funktion, xO, options) [x fval exitflag] = f'Solve(@funktion, xO, options) [x fval exitflag,output] = fsolve(@funktion, xO, options)
Mit der Variablen options können verschiedene Algorithmen ausgewählt werden, es kann die von den Algorithmen verwendete Jacobi-Matrix durch den Benutzer vorgec geben und die Toleranz für die Lösungssuche eingestellt werden. Es wird prinzipiell zwischen Large-Scale- und Medium-Scale-Algorithmen unterschieden. Large-ScaleAlgorithmen sind besser für Gleichungssysterne mit einer hohen Anzahl an freien Variablen geeignet, während Medium-Scale-Algorithmen für nieclerdimensionale Probl~ me a,usreichend sind. Diese Auswahl wird durch das Feld LargeScale der Optionsstruktur mit den Werten on oder off getroffen. Der Standardwert ist off. Mit dem Feld NonlEqnAlgori thm kann der Medium-Scale-Algorithmus explizit gewählt werden; beim Large-Scale-Algorithmus hat dieses Feld keine Bedeutung. Standardmäßig wird der Trust-Region dogleg Algorithmus gewählt; dies kann durch die Werte gn oder 1m auf Gauß-Newton bzw. Levenberg-Marquart geändert werden. Genauere Informationen hierzu und zu den verwendeten Algorithmen finden sich in [41]. \iVird options im Argument weggelassen, werden Standardeinstellungen verwendet. Das zu lösende Gleichungssystem F(x) muss in einer M-Funktion oder einem inhne object als vektorwertige Funktion definiert werden. xO wird als Startwert für den Optimierungsalgorithmus verwendet, x ist das Ergebnis der Optimierung und fval gibt den Funktionswert bei der Lösung x an. exi tflag gibt die Bedingung an, unter der der Optimierungsalgorithmus beendet wurde. Eine Zuordnung der Werte von exi tflag zu den Bedeutungen enthält Tab. 7.2. output enthält detaillierte Informationen zum Ergebnis (siehe Online-Hilfe). Zur Veranschaulichung soll folgendes Gleichungssystem betrachtet werden: 2
F(x) =
. Xl -
[
sm(XI)
x 3X2 e- , X2 _ e-X2
+
+
]
(7.7)
= 0
Die Definition von F in MATLAB erfolgt durch die M-Funktion funktion3.m. Diese wertet fsolve bei jedem Iterationsschritt aus.
%funktion3.m function F = funktion3(x) F = [x(1)~2 - 3*x(2) + exp(-x(l»), sin(x(l»
+ x(2) - exp(-x(2»]; '11:'
\.
'I"
:n" i,' r,
'I
li'
234
7 Optimierung - Optimization Toolbox
Tab. 7.2: Bedeutung von \1,
;il
exitf~ag
bei
(unbekannten) Lösung entfernt, so steigt die Iterationszahl und damit auch der R.echenaufwand. Die Zahl der notwendigen R.echenoperationen bis zur gesuchten Lösung kann also nie exakt vorherbestimmt werden.
fso~ve
Wert Beschreibung
l
~!, \
» xO = [10 10]; » options = optimset(@fsolve);
1 Konvergenz auf eine eindeutige Lösung 2 Änderung in x kleiner als vorgegebene Toleranz
!'i
»options = optimset(options, 'Display', 'iter'); » [x, fval, eXitflag] = fsolve(@funktion3, xO, options) Norm of First-order f (x) step optimality Iteration Func-count
3 Änderung der Funktion kleiner als vorgegebene Toleranz 4 Betrag der Suchrichtung kleiner als vorgegebene Toleranz o Anzahl der Iterationen oder Funktionsauswertungen überschritten -1 Abbruch durch die Output-Funktion -2 Konvergenz auf ein Ergebnis ungleich null -3 Vertrauensbereich wurde zu gering -'1 Linienoptimierung nicht erfolgreich
:::: I!i II~
i';i
:ii :'i 'I;!
o
3
1
6 9
2
12 15 18 21 24 27 30
3
4 5 6
::1
7
!il 'I
I, ,11
;!
Nun kann die Optimierungsroutine fsolve mit .der MATLAB-Funktion funktion3 als Argument gestartet werden. In den Optionen wird im nachfolgenden MATLAB-Code angegeben, dass jeder Iterationsschritt angezeigt werden soll. Der Startwert wird zunächst auf Xa = [1 1] festgelegt. » xO = [1 1]; » options = optimset(@fsolve); » options = optimset(options, 'Display', 'iter'); » [x, fval, eXitflag] = fsolve(@funktion3, xO, options) Norm of First-order Iteration Func-count f (x) step optimality
o
3 6
1 2
9
3 4
12 15
4.83529 0.198145 4. 24063e-005 1.72925e-009 9.571ge-020
0.126672 0.00565829 1.90387e-005
=
exitflag
6.91 1.57 0.0134 0.000136 1.06e-009
1
2.5 2.5 2.5
0.2840
=
1.0e-009 0.2911
0.4879
* -0.1048
exitflag 1
Neben der Lösung x und dem Funktionswert fval zeigt exitflag = 1 an, dass der Optimierungsalgorithmus erfolgreich konvergiert ist. Die zusätzliche Ausgabe zu den Iterationsschritten 1 bis 5 gibt Auskunft über den Verlauf der Nullstellensuche. Es wird jeweils die Anzahl der Funktionsauswertungen (Func-count), der Funktionswert (f (x) ) und der Betrag der Schrittweite (Norm of step) ausgegeben. Da bei den Algorithmen Ableitungen 1. Ordnung (Jacobi-Matrix) verwendet werden, ist die Anzahl der Funktionsauswertungen größer als die Anzahl der Iterationsschritte. Die Jacobi-Matrix wird numerisch in der Nähe der aktuellen Position x bestimmt. Die Zahl der Iterationsschritte hängt vom gewählten Anfangswert ab. Wählt man den Anfangswert weiter von der
2.5 6.25 4.95502 1.53276 0.714296 0.141307 0.0072647 1.00765e-005
1. 3ge+003 905 157 39.4 19.4 9.34 1.16 0.0636 0.00012 7 . l1e-Ol1
1
2.5 6.25 6.25 6.25 6.25 6.25 6.25 6.25
0.2840
*
0.0149
Trust-region radius
4989.42 2687.41 241.483 36.3099 20.1537 6.11052 0.118046 0.000355241 1.2034e-009 1.44578e-021
Trust-region radius
Optimization terminated: first-order optimality is less than .options.ToIFun. X =
1. Oe-Ol0
Optimization terminated: first-order optimality is less than options.ToIFun. 0.4879
8 9
fval
x =
fval
235
7.3 Nullstellenbestimmung
-0.3799
=
1
Bei nichtlinearell Gleichungssystemen kann es auch mehr als eine Lösung geben. Wenn man die ungefähre Lage der Lösungen kennt, so sollte der Anfangswert in deren Nähe. gewählt werden. Die zweite Lösung des Gleichungssystems in (7.7) kann durch Wahl der Anfangswerte des Optimierungsalgorithmus zu Xo = [-2 2] gefunden werden.
» xO = [-2 2]; » options = optimset(@fsolve); » options = optimset(options, 'Display', 'final'); » [x, fval, exitflag] = fsolve(@funktion3, xO, options) Dptimization terminated: first-order optimality is less than options.TolFun. x =
-0.9229
fval
=
1.0e-007 0.4070
1.1227
* 0.0576
exitflag = 1
Aus diesen Ausführungen sollte vor allem Folgendes klar geworden sein: Der Optimierungsalgorithmus kann immer nur eine Lösung finden. Weitere Lösungen können durch Variation der Anfangswerte berechnet werden. Wenn eine spezielle Lösung benötigt wird, so sollte man sich vorab ein grobes Bild über deren Lage machen (z.B. durch grafische Methoden), damit die Anfangswerte entsprechend gesetzt werden können.
7 Optimierung - Optimization Toolbox
236
Bei Problemstellungen hoher Ordnung oder bei rechenzeitkritischen Anwendungen kann die Anzahl der Funktionsauswertungen (Func-count) dadurch reduziert werden, dass die für die Algorithmen benötigte Jacobi-Matrix nicht numerisch approximiert wird, sondern in der zu optimierenden Funktion als zweiter Ausgabewert bereitgestellt wird. Dazu muss die Jacobi-Matrix entweder von Hand oder mit der Symbolic-Toolbox bestimmt werden. Damit der Optimierungsalgorithmus fsolve die bereitgestellte JacobiMatrix verwenden kann, muss die Option options. Jacobian auf' on' gesetzt werden. Die Jacobi-Matrix ist definiert als:
äFi Jij =
% funktion4.m function [F, J] = funktion4(x) F = [x(U-2- 3*x(2) + exp(-x(1», sin(x(1» + x(2) - exp(-x(2»]; J = [ 2*x(1)-exp(-x(1», -3; cos(x(1», 1+exp(-x(2» ]; Die F\mktion funktion4 muss jetzt nur noch einmal pro Iterationsschritt ausgewertet werden. Der Aufruf der Optimierungsroutine lautet dann: » xO = [-2 2]; options = optimset(@fsolve); » options = optimset(options, 'Display', 'iter', 'Jacobian', 'on'); » [x, fval, exitflag] fsolve(@funktion4, xO, options) Norm of First-order Trust-region Iteration Func-count fex) step optimality radius
o
1 2 3 4 5 6
1 2 3 4 5
29.9547 2.63653 0.0877609 0.000731682 9.46897e-008 1. 69041e-015
0.879018 0.373429 0.131078 0.0141595 0.000163722
61.8 10.7 1.42 0.116 0.0013 1. 74e-007
1 2.2 2.2 2.2 2.2
Optimization terminated: first-order optimality is less than options.ToIFun. x
=
-0.9229
fval = 1.0e-007 0.4071
237
Nullstellenbestimmung [nullst, fwert]=fzero(@funktion, xO, options) Nullstelle einer skalaren Funktion bestimmen \ (slash) Lösung eines linearen Gleichungssystems Ax = b [x,fval,exitflag]=fsolve(@funktion,xO,options) Lösung eines nichtlinearen Gleichungssystems
(7.8)
äXj
Die neu zu definierende Funktion funktion4 wird nun für das Beispiel in Gleichung (7.7) um die Jacobi-Matrix erweitert.
I
7.4 Minimierung nichtlinearer Funktionen
1.1227
*
7.4
Minimierung nichtlinearer Funktionen
Die Optimization Toolbox bietet zahlreiche Algorithmen zur Minimierung nichtlinearer Funktionen. In diesem Abschnitt wird die Minimierung skalarer F\mktionen einer und mehrerer Veränderlicher ohne Nebenbedingungen behandelt (unconstmined optimization). Der einfachste Fall ist die Minimumsuche einer skalaren Funktion einer Variablen in einem vorgegebenen IntervalL Diese Aufgabe könnte durch Nullsetzen der Ableiturig der Funktion gelöst werden. Dabei handelt es sich dann aber normalerweise um das Problem, die Nullstelle einer nichtlinea.ren Funktion zu finden. Dies muss sehr häufig durch numerische Verfahren gelöst werden. Außerdem muss der so gefundene Punkt kein Extremwert sein, es kann sich auch um einen Sattelpunkt handeln. Die Algorithmen der Optimization Toolbox tragen all diesen Problemstellungen Rechnung. Die Minimumsuche einer skalaren Funktion einer Variablen in einem vorgegebenen Intervall erfolgt durch den Befehl fminbnd. Der Algorithmus liefert ein lokales Minimum innerhalb der Grenzen Xl < X < X2. Der Aufruf erfolgt durch [x, fval, eXitflag]
fminbnd(@funktion, xl, x2, options)
wobei die Variablen fval, exitflag und options nicht zwingend notwendig sind. funktion muss eine kontinuierliche Funktion ohne Sprungstellen sein. Ferner ist das Konvergenzverhalten der Optimierungsroutine umso langsamer, je näher die Lösung an einem der Randbereiche liegt. Die Bedeutungen der verschiedenen Rückgabewertefür exitflag sind in Tab. 7.3 zusammengefasst.
0.0576
exitflag 1
Das Ergebnis ist identisch wie im Fall ohne Verwendung der Jacobi-Matrix, nur sind wesentlich weniger F\mktionsauswertungen nötig.
Tab. 7.3: Bedeutung von exitflag bei fminbnd
Wert Beschreibung 1 Konvergenz zu einer Lösung auf der Basis
VOll
options. TolX
o Anzahl der Iterationen oder Funktionsauswertungen überschritten -1 Abbruch durch die Output-Funktion -2 Inkonsistentes Suchinterval (xi> x2)
238
7 Optimierung - Optimization Toolbox
Es sollen nun die Minima und Maxima der Funktion
j(X)
=
O.5x 3 - x 2 - X + e G. I ",
(7.9)
bestimmt werden. Zur Eingrenzung der Suchintervalle wird der Graph der :Funktion . in Abb. 7.2 herangezogen. Die Funktion aus Gleichung (7.9) wird in der M-Funktion funktion5. m definiert. Das Minimum wird durch folgenden Aufruf bestimmt. funktion5.rn
2
I
Zur Minimierung skalarer Funktionen mehrerer Veränderlicher ohne Nebenbedingungim (unconstrained optimization) steht der Befehl fminunc zur Verfügung. Der Aufruf erfolgt durch fminunc(@funktion, xO, options)
wobei fval und exitflag optionale Ausgabewerte sind. Die Bedeutung des Rückgabewerts eXitflag ist in Tab. 7.4 zusammengefasst . Standardmäßig geht fminunc von Tab .. 7.4: Bedeutung von exi tfLag bei fminunc
L
-2
-1
0
2
x
3
Abb. 7.2: Graph der Punktion fex) =
O.5x 3 _
x2 _ X
+
eO. 1"
» options = optimset(@fminbnd); options = optimset(options,'Display','final'); » xl = 1; x2 = 2; » [x, fval, exitflag] = fminbnd(@funktion5, xl, x2, options) Optimization terminated: the current x satisfies the termination criteria using OPTIONS.ToIX of 1.000000e-004 x = 1.6826 fval = -0.9487 exitflag 1
'Neben dem Ergebnis x = 1.6826 wird hier auch der Funktionswert am Minimum (fval) und zu jedem Iterationsschritt der verwendete Algorithmus angegeben ·(Procedure). Das lokale Maximum erhält man durch Minimierung von funktion6 = -1*funktion5. Der nachfolgende Aufruf startet die Optimierung. » options = optimset(@fminbnd); options = optimset(options,'Display','final'); » xl = -1; x2 = 0; » [x, fval, exitflag] = fminbnd(@funktion6, xl, x2, options) Optimization terminated: the current x satisfies the termination criteria using OPTIONS.ToIX of 1.000000e-004 x =
-0.3565 fval = -1.1717 exitflag 1
239
Der verwendete Algorithmus in' fminbnd basiert auf dem Goldenen-Schnitt-Suchverfahren und parabolischer Interpolation. Der Befehl fminsearch stellt dieselbe Funktionalität wie fminbnd zur Verfügung, verwendet aber als Optimierungs algorithmus die Simplex-Methode. Diese verwendet weder numerisch noch analytisclL berechnete Gradienten und liefert daher auch häufig für unstetige Funktionen das gewünschte Ergebnis.
[x, fval, exitflagJ
~ 0 -2
7.4 Minimierung nichtlinearer Funktionen
Wert Beschreibung 1 Konvergenz auf eine eindeutige Lösung 2 Änderung in x kleiner als vorgegebene Toleranz 3 Änderung der Funktion kleiner als vorgegebene Toleranz 4 Betrag der Suchrichtung kleiner als vorgegebene Toleranz o Anzahl der Iterationen oder Funktionsauswertungen überschritten -1 Abbruch durch die Output-Funktion - 2 Linienoptimierung nicht erfolgreich
einem so genannten Large-Scale-Optimierungsproblem aus. Das, bedeutet, die Anzahl der zu optimierenden Parameter Xl ... X n ist sehr groß. In diesem Fall muss der Gradient der zu optimierenden Funktion als zweites Ausgabeargument analytisch mit angegeben werden, damit die numerischen Berechnungen nicht zu aufwendig werden. Hier sollen nur Medium-Scale-Optimierungsprobleme betrachtet werden, so dass die Large-ScaleOptimierung in der Variablen options mit dem Befehl options = optimset (options, 'LargeScale', 'off') deaktiviert werden sollte. In diesem Fall werden die vom Optimierungsalgorithmus verwendeten Gradienten durch Funktionsauswertungen numerisch bestimmt. Der Optimierungsalgorithmus verwendet eine Quasi-Newton-Methode mit einer gemischt quadratischen und kubischen Abstiegsmethode (für Details siehe [41]). Die Minimierungsprozedur soll wieder an einem Beispiel vorgestellt werden. Betrachtet wird die Funktion:
j(XI,X2) = 2Xf +x~ - 2XI - 2x§ +4sin(xlx2)
(7.10)
Der Graph von f(XI,X2)'ist in Abb. 7.3 dargestellt. Ziel ist die Bestimmung der beiden Minima. Das erste Minimum in der Nähe der Werte x = [1 -1] wird ohne Anzeige bei jedem Iterationsschritt durch die folgende Befehlsfolge bestimmt:
7 Optimierung - Optimization Toolbox
240
10 5
Um manuell in den Verlauf einer Optimierung ei.ngreifen zu können, gibt es bei vielen Befehlen der Optimization Toolbox die Möglichkeit, bei jedem Iterationsschritt eine selbstdefinierte Output-Funktion aufzurufen. Typischerweise werden dort Aktionen wie die Überwachung von Abbruchkriterien oder die Aufzeichnung des Verlaufs der Optimierung durchgeführt. Die Output-Funktion wird durch die Option' OutputFcn' aktiviert. Im folgenden Beispiel wird der Verlauf der Optimierung in der Variable verlauf protokolliert und am Ende ausgegeben. In den ersten beiden Spalten der Variablen verlauf ist das Optimierungsergebnis nach jedem Iterationsschritt enthalten, die dritte Spalte enthält den jeweils zugehörigen Funktionswert.
~
2
0
)(2
o
-1 )(1
Abb. 7.3: Graph der Funktion f(xl, X2) = 2xf + x~ - 2xr - 2x~
+ 4sin(xlx2)
» options ~ optimset(@fminunc); » options = optimset(options~'DisplaY','final','LargeScale','off')j » xO ~ [1 -lJ; » [x, fvalJ ~ fminunc(@funktion7, xO, options) Optimization terminated: relative infinity-norm of gradient less than options.ToIFun. x
~
0.9039 fval ~ -4.6476
-1.1732
Das zweite Minimum in der Nähe von x = [-11] wird durch die Vorgabe entsprechender Anfangswel'te ermittelt. Die Befehlsfolge lautet: » options ~ optimset(@fminunc); » options ~ optimset(options,'Display','final','LargeScale','off'); » xO ~ [-1 lJ; » [x, fvalJ ~ fminunc(@funktion7, xO, options) Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x
~
-0.9039 fval ~ -4.6476
241
Optimierungsalgorithmus innerhalb seiner Toleranzen einen Ergebniswert liefert, obwohl gar kein Minimum vorliegt. Dieses Verhalten kann durch die Wahl der Startwerte xo = [0.01 0.01] erzeugt werden. Man darf also nie blind auf das Ergebnis der Optimierungsroutine vertrauen, sondern muss sich immer von der Plausibilität überzeugen.
Zielfunktion
~C\J
7.4 Minimierung nichtlinearer Funktionen
1. 1732
Die Genauiglceit, aber auch der Rechenaufwand kann durch Verringerung von TolX oder TolFun in der Variable options erhöht werden. Grundsätzlich hat die Wahl der Anfangswerte auf das Konvergenzverhalten des Optimierungsalgorithmus einen entscheidenden Einfluss. In der Nähe des Ursprungs ist die Funktion (7.10) sehr flach, wodurch ihre Ableitungen 1. und 2. Ordnung sehr klein werden. Das kann dazu führen, dass der
»
options~optimset(@fminunc);
»
options~optimset(options,'OutputFcn',@outfcn,'Display','final',
... 'LargeScale','off'); » xO ~ [-1 1]; » [x, fval] ~ fminunc(@funktion7, xO, options) Optimization terminated: relative infinity-norm of gradient less than options.ToIFun.
x =
-0.9039 fval ~ -4.6476 » verlauf verlauf ~ -1. 0000 -1. 0000 -0.8626 -0.9039 -0.9042 -0.9039 -0.9039
1.1732
1.0000 1.0000 1.1615 1.1800 1.1722 1.1732 1.1732
-4.3659 -4.6290 -4.6473 -4.6476 -4.6476 -4.6476 -4.6476
Die Aufzeichnung des Verlaufs der Optimienmg erledigt die Output-Funktion outfen. Die drei obligatorischen Argumente x, OptimValues und state beschreiben den Fortschritt der Optimierungsroutine zum aktuellen Iterationsschritt. x ist der Ergebnisvektor, OptimValues ist eine Struktur, die den Funktionswert, die Iterationszahl, den Gradienten, die Schrittweite, etc. enthält und state ist ein String, der die Werte ini t, iterrupt, iter und done annehmen kann. Die Felder in OptimValues hängen vom verwendeten Algorithmus ab. Eine genaue Beschreibung der Felder ist im MATLAB Helpdesk unter Optimization Toolbox/Optimization Options/Output Punction enthalten. Der Zustand ini t wird bei der Initialisierung des Algorithmus erreicht, i ter wird bei jedem Ende einer normalen Iteration und done nach Abschluss aller Iterationen erreicht. Im Zustand interrupt werden gerade umfangreiche Zwischenrechnungen durchgeführt und der Algorithmus ist innerhalb der aktuellen Iteration unterbrechbar. Die Unterbrechung wird über den Rückgabewert stop gesteuert. Wird stop nicht gesetzt oder auf false gesetzt, arbeitet der Algorithmus normal weiter. Wird stop auf true gesetzt, bricht der Algorithmus mit der aktuellen Iteration ab. Die Funktion outf cn
242
7 Optimierung - Optimization Toolbox
kann noch weitere Argumente besitzen, die z.B. durch übergebene Parameter belegt werden (siehe S. 231). Die folgende Funktion outfen speichert den Verlauf des Optimierungsvorgangs (Zwischenergebnisse und zugehörige Funktionswerte) in der Matrix suehfolge ab und weist das Ergebnis nach Beendigung der Optimierung der Variablen verlauf im MATLAB-Workspace zu. function stop = outfcn(x, OptimValues, state) persistent suchfolge; switch state
7.5 Minimierung unter Nebenbedingungen
zeichnet. Die Funktionsweise za.hlreicher Algorithmen wird in [9, 25] beschrieben. Die Optimization Toolbox bietet für diese Problemstellung den Befehl fmineon an, welcher eine Funktion f(x) unter mehreren Nebenbedingungen minimiert. Diese werden in lineare und nichtlineare Nebenbedingungen aufgeteilt, so dass sich der Optimierungsalgorithmus fmineon auf die folgende Problemstellung anwenden lässt: unter den Nebenbedingungen
minf(x) x
c(x) ::; 0
case 'init'
suchf olge= [] ; case 'iter'
243
=
(7.11) (7.12)
0
(7.13)
A·x::; b
(7.14)
ceq(x)
suchfolge = [suchfolge; x, OptimValues.fvaIJ; case 'done'
end stop
assignin('base','verlauf',suchfolge);
A eq · x
false;
=
b eq
Ib::; x ::; ub Minimierung ohne Nebenbedingungen [x,fval,exitflagJ=fminbnd(@funktion,xl,x2,options) Minimierung einer Funktion einer Variablen im Intervall
Xl
< X < X2
[x,fval,exitflag]=fminunc(@funktion,xO,options) Minimierung einer Funktion mehrerer Variablen mit dem Startwert Xo
7.5
:'1
Minimierung unter Nebenbedingungen
Bei vielen Optimierungsproblemen ist man nicht nur an einem Minimum der Zielfunktion interessiert, vielmehr muss die unabhängige Variable x auch verschiedene Nebenbedingungen erfüllen. Diese Nebenbedingungen können vom Anwender willkürlich festgelegt sein oder durch physikalische Begrenzungen bedingt sein (z.B. Obergrenze der PKW-Geschwindigkeit). Man unterscheidet zwischen Gleichungs- und Ungleichungsnebenbedingungen, die beide gleichzeitig vorkommen können. Die Optimierung unter Nebenbedingungen wird als constrained nonlinear optimization bezeichnet. Neben der allgemeinen Minimierung unter Nebenbedingungen wird in Kap. 7.5.2 der Spezialfall einer quadratischen Zielfunktion mit ausschließlich linearen Gleichungs- und Ungleichungsnebenbedingungen behandelt (quadratische Programmierung). Unter bestimmten Voraussetzungen ist dann ein lokales Minimum immer auch das globale Minimum. Einen weiteren wichtigen Spezialfall stellt die lineare Progra.mmierung in Kap. 7.5.3 dar. Hier liegt eine lineare Zielfunktion mit linearen Nebenbedingungen zugrunde, deren globales Minimum in einer endlichen Zahl von Iterationsschritten erreicht wird.
7.5.1
Nichtlineare Minimierung unter Nebenbedingungen
Der allgemeine Fall der numerischen Minimierung nichtlinearer F\mktionen unter linearen und nichtlinearen Nebenbedingungen wird als nichtlineare Programmierung be-
(7.15) (7.16)
C und c eq sind vektorwertige nichtlineare Funktionen, A und A eq sind konstante Matrizen, bund b eq sind konstante Vektoren und Ib und ub sind die unteren bzw. oberen Grenzen für den Ergebnisvektor x. Der Aufruf des Optimierungsalgorithmus unter Berücksichtigung von Nebenbedingungen erfolgt durch: .
[x,fval,exitflagJ=fmincon(@funktion,xO,A,b,Aeq, ... beq,lb,ub,@nonlcon,options) Beim Aufruf von fmineon müssen nicht a.lle Para.meter angegeben werden. Nicht verwendete Einträge müssen dann lediglich durch ein leeres Element [] ersetzt werden. funktion ist die zu minimierende Funktion, Xo ist der vom Optimierungsalgorithmus verwendete Startwert und Abis ub beschreiben die linearen Nebenbedingungen gemäß den Gleichungen (7.14) bis (7.16). Über die Variable options wird in gewohnter Weise der Optimierungsalgorithmus gesteuert. In der MATLAB-Funktion nonlcon werden die nichtlinearen Ungleichungs- und Gleichungsnebenbedingungen gemäß den Gleichungen (.7.12) und (7.13) definiert. Die nichtlinearen Nebenbedingungen müssen exakt wie in den obigen Gleichungen definiert werden, d.h. sie müssen insbesondere auf ,,= 0" bzw. ,,:<:; 0" enden. Allgemein hat eine M-Funktion für die nichtlinearen Nebenbeelingungen dann folgendes Aussehen:
%Nichtlineare Nebenbedingungen function [c, ceqJ = nonlcon(x) % nichtlineare Ungleichungs NB c ceq = ... %nichtlineare Gleichungs NB Die Ungleichungsnebenbedingung muss das erste, die Gleichungsnebenbedingung das zweite Funktionsergebnis von nenleen sein. Im Lösungsvektor ist x die Lösung des Optimierungsproblems, fval der Funktionswert an dieser Stelle und exi tflag gibt Auskunft über die Abbruchbedingung des Algorithmus. Die Bedeutung der Werte von exi tflag ist in Tab. 7.5 zusa.mmengefasst. Auch hier wird unterschieden zwischen LaTge-Scale(hochdimensionale Probleme) und Medium-Scale- (niederdimensionale Probleme) Optimierung. Bei Large-Scale-Optimierung muss die Zielfunktiol1 zusätzlich elen Gra.dienten
7 Optimierung - Optimization Toolbox
244
7.5 Minimierung unter Nebenbedingungen
245 Gleichungs NB
Zielfunktion
Tab. 7.5: Bedeutung von exi tfLag bei fmincon
5
Wert Beschreibung
-;'"
§'O
1 Konvergenz auf eine Lösung 2 Änderung in x kleiner als vorgegebene Toleranz 3 Änderung der Funktion kleiner als vorgegebene Toleranz 4 Betrag der Suchrichtung und Verletzung der Nebenbedingungen innerhalb der Toleranzen 5 Betrag der Richtungsableitung und Verletzung der Nebenbedingungen innerhalb der Toleranzen o Anzahl der Iterationen oder Funktionsauswertungen überschritten -1 Abbruch durch die Output-Funktion -2 Keine plausible Lösung gefunden
I
-5 1
o X
x1
o
X 2
-1
-0.5
o
Abb. 7.4: Graph der Ziel/unktion /(Xl, X2) = 2xf + x~ - 2x1 - 2x~ Nebenbedingung au/ die Ziel/unktion projeziert (rechts)
x1
0.5
+ 4sin(xlxz)
1.5
(links) 1md
bei jeder Funktionsauswertung zurückliefern. Der Gradient wird analog zur JacobiMatrix in Kap. 7.3 definiert. Allgemein hat die Zielfunktion dann die folgende Form:
Wie aus Abb. 7.4 ersichtlich ist, existieren zwei lokale Minima. Das erste Minimum in der Nähe von x = [0,5 - 1J wird durch die Befehlsfolge
% Zielfunktion mit Gradientenangabe
» options = optimset(@fmincon);
function [f, g] = funktion(x) f % Zielfunktion von x g = [ ... ] % Gradient als Vektor von x Wird der Medium-Scale-Algorithmus verwendet, muss dieser in der Variablen options durch den Befehl options=optimsetCoptions, 'LargeScale', 'off') aktiviert werden. In diesem Fall kann die Angabe des Gradienten in der Zielfunktion unterbleiben, der Gradient wird dann bei jedem Iterationsschritt numerisch bestimmt. Für beide Algorithmen gilt die Einschränkung, dass sowohl die Zielfunktion als auch alle nichtlinearen Nebenbedingungen stetig sein müssen. Ferner werden immer nur abhängig vom Startwert xO lokale Minima geliefert. Zur Darstellung der Funktionsweise von fmincon soll wieder die Funktion in Gleichung (7.10) auf Seite 239 betrachtet werden. Jetzt soll jedoch die Nebenbedingung beachtet werden, dass der Ergebnisvektor nur auf dem Kreis mit der Gleichung
(Xl - 0.5)2 + x~
=
1
(7.17)
liegen darf. Es handelt sich also um eine nichtlineare Gleichungsnebenbedingung. Abb. 7.4 links zeigt nochmals die Funktion aus Gleichung (7.10), Abb. 7.4 rechts zeigt die Nebenbedingung (7.17) in der Ebene z = -5 und auf die Zielfunktion projiziert. Die Optimierungsaufgabe besteht nunmehr im Auffinden des Minimums der Kurve im Raum in Abb. 7.4 rechts. Die Definition der Nebenbedingung erfolgt durch:
I
2
-1
% Nebenbedingung (xl-0.5)-2+x2-2=1; Datei neben.m function [c, ceq] = neben(x) c = [];
ceq = ( x(1)-0.5 )-2 + x(2)-2 -1;
» options ; optimset(options,'Display','final','LargeScale','off'); » xO = [0.5 -1]; » [x, fval] = fmincon(@fnnktion7, xO,[],[],[], [],[],[],@neben,options) Optimization terminated: magnitude of directional derivative in search direction less than 2*options.ToIFnn and maximum constraint violation is less than options.TolCon. x = 0.8523 -0.9359 fval = -4.2450 bestimmt. Large-Scale-Optimierung wurde deaktiviert, so dass die Angabe von Gradienten entfallen kann. Das zweite Minimum in der Nähe von x = [-0.2 1J (abzulesen aus Abb. 7.4) kann durch Abändern der Anfangswerte berechnet werden. » options = optimset(@fmincon); » options = optimset(options,'Display' ,'final' ,'LargeScale' ,'off') ; » xO = [0.5 1]; » [x, fval] = fmincon(@funktion7, xO, [], [], [], [], [], [],@neben,options) Optimization terminated: first-order optimality measure less than options.TolFun and maximum constraint violation is less than options.ToICon. x =
-0.2868 fval = -1. 4721
0.6172
In der Ausgabe wird neben dem Ergebnisvektor x das Abbruchkriterium und der Funktionswert an der Stelle x angegeben. Wenn das lokale Minimum innerhalb des Bereichs liegt, der durch die Nebenbedingungen begrenzt wird, so sind auch die Nebenbedingun-
246
7 Optimierung - Optimization Toolbox
gen unwirksam. Dies ist meist nur für Ungleichungsnebenbedingungen möglich. Als Beispiel für eine lineare Ungleichungsnebenbedingung soll wieder die Funktion aus Gleichung (7.10) verwendet werden. Die Nebenbedingungen lauten nun: Xl 2:
und
X2
X2
2: -1
(7.18)
In der XI-x2-Ebene ist dies der mit B gekennzeichnete Bereich in Abb. 7.5. Um die Ungleichungs NB
o
B
N
><
-11
,,/
-2
-2
-1
0
Abb. 7.5: Begrenzung des Lösungsmumes durch Gleichung (7.18)
xl
7.5 Minimierung unter Nebenbedingungen
ohne Berücksichtigung von Nebenbedingungennicht im Bereich Bin Abb. 7.5 liegt. In (liesem einfachen Fall kann man auch anhand der Lösung X2 = -1 schließen, dass die Nebenbedingung X2 2: -1 die Beschränkung bei der Lösungssuche darstellt. Die Lösung liegt also auf der Geraden X2 = -1. Der Befehl fmincon kann beliebig viele Gleichungs- und Ungleichungsnebenbedingungen gleichzeitig berücksichtigen. Es muss jedoch beachtet werden, dass überhaupt noch ein gültiger Lösungsraum bestehen bleibt. Die Nebenbedingungen dürfen sich nicht vollständig gegenseitig ausschließen. Auch hier ist, genauso wie bei den bisherigen Optimierungsalgorithmen, zu beachten, dass immer nur ein lokales Minimum in der Nähe des Startwerts gefunden wird. Wenn die Zielfunktion nicht skalar, sondern vektorwertig ist, dann spricht man von einem Optimierungsproblem mit mehreren Zielgrößen (multiobjective optimization problem). Es müssen also mehrere Funktionen gleichzeitig bestimmte Optimalitätsbedingungen einhalten (goal attainment problem). Die Optimization Toolbox bietet hierfür den Befehl fgoalattain an. Eine weitere typische Problemstellung bei vektorwertigen Zielfunktionen ist die Minimierung des schlechtest möglichen Ergebnisses (warst case). Es soll also das Maximum der einzelnen Komponenten der Zielfunktion minimiert werden. Diese Form von Optimierungsproblem wird üblicherweise als Minimax-Problem bezeichnet. Für diesen Zweck enthält die Optimization Toolbox den Befehl fminimax. Für genauere Informationen zu fgoalattain und fminimax konsultieren Sie bitte die Online-Hilfe zu MATLAB oder [41].
Darstellung gemäß Gleichung (7.14) zu erreichen, muss die Matrix A und der Vektor b gemäß Gleichung (7.19) definiert werden. -1 1 ] A= [ 0-1
i,.1
i'i Lil I·! ::1 ,':1
':1,
1I 1
:'1J :'1:
:1
[n
(7.19)
MiniInierung unter Nebenbedingungen
[x,fval]=fmincon(@funktion,xO,A,b,Aeq,beq,lb,ub,@nonlcon,opt) Minimierung einer Funktion mehrerer Variablen unter Gleichungs- und Ungleichungsnebenbedingungen
A und b werden anschließend dem Optimierungsalgorithmus übergeben. Der Aufruf erfolgt durch die Befehle:
[x,fval]=fminimax(@funktion,xO,A,b,Aeq,beq,lb,ub,@nonlcon,opt) Lösung eines Minimax-Problems
» A = [-1 1; 0 -1]; b
[x,fval]=fgealattain(@funktion,xO,@goal,weight,A,b,Aeq,beq,lb, ... ub,@nonlcon,options) Lösung eines goal attainment-Problems
= [0; 1]; » options = optimset(@fmincon); » options = optimset(options,'Display','final','LargeScale','off'); » xO = [1 0]; » [x, fval] = fmincon(@funktion7, xO,A,b,[]'[]'[J.[],[],options)
Optimization terminated: magnitude of directional derivative in search direction less than 2*options.TolFun and maximum constraint violation is less than ·options.ToICon. Active inequalities (to within options.TelCen = le-006): lewer upper ineqlin ineqnonlin 2
x =
I: ';:i:
b=
0.9135 fval = -4.4428
-1.0000
Aus der Ausgabe ist ersichtlich, dass für die Minimumsuche die zweite Nebenbedingung in Gleichung (7.18) relevant war (Active inequalities: 2), da das lokale Minimum
247
7.5.2
Quadratische Programmierung
Einen wichtigen Spezialfall der nichtlinearen Minimierung stellt die quadratische Programmierung dar, der eine quadratische Zielfunktion mit linearen Gleichungs- und Ungleichungsnebenbedingungen zugrunde liegt. Die Problemstellung lautet: min ~xT Q x x 2
+ gT X
A·x:Sb
unter den Nebenbedingungen
(7.20) (7.21)
7 Optimierung - Optimization Toolbox
248 A eq · x = beq
(7.22)
lb S x S ub
(7.23)
7.5 Minimierung unter Nebenbedingungen
249
Gleichungen (7.20) bis (7.23). Das Argument xo ist der Startwert der Minimumsuche, und mit der Struktur options kann die übliche Algorithmus-Steuerung vorgenommen werden. Über den Rückgabewert output lassen sich Informationen über den verwendeten Algorithmus, Zahl der Iterationen und ein Maß der Optimalität abfragen.
Die Matrix Q und der Vektor g sind konstant und beschreiben die quadratische Form der Zielfunktion, wobei Q symmetrisch sein muss. Dies stellt keine Einschränkung dar, da bei nicht symmetrischer Matrix Q einfach eine symmetrische Matrix Q' = 0.5·(Q+QT) generiert werden kann, die den Wert der quadratischen Form (7.20) unverändert lässt. I) Die Matrix A und der Vektor b kennzeichnen die Ungleichungsnebenbedingungen, die Matrix A eq und der Vektor beq die Gleichungsnebenbedingungen und die Vektoren lb und ub sind untere bzw. obere Schranken für die Zielvariable x. Die Nebenbedingung in Gleichung (7.23) kann ohne Probleme in die Nebenbedingung in Gleichung (7.21) integriert werden, die Bedienung des Algorithmus wird durch die explizite Angabe von Schranken für x aber komfortabler. Die Effizienz des zugehörigen MATLAB-Algorithmus wird jedoch gesteigert, wenn keine Nebenbedingungen in Form von Gleichung (7.23) angegeben werden. Für eine positiv semidefinite, symmetrische Matrix Q ist die Problemstellung in Gleichung (7.20) konvex, und damit ist jede lokale Lösung auch eine globale Lösung. Der Algorithmus zur quadratischen Programmierung arbeitet viel effizienter als allgemeine nichtlineare Optimierungsalgorithmen und sollte bei entsprechender Problemstellung bevorzugt eingesetzt werden. Quadratische Programme treten im Bereich der Regelungstechnik häufig bei der Online-Optimierung von Stellgrößen linearer Systeme mit quadratischen Gütefunktionalen und linearen Nebenbedingungen auf. Ein typisches Beispiel ist die modellbasierte prädiktive Regelung von LTI-Systemen [7].
Nun soll ein einfaches Beispiel mit symmetrischer Matrix Q und Ungleiclmngsnebenbedingung mittels quadprog gelöst werden. Die Problemstellung lautet:
In MATLAB wird ein quadratisches Programm durch den Befehl quadprog gelöst. Seine Syntax lautet:
%Optionen und Anfangswert
[x,fval,exitflag,output]
quadprog(Q,g,A,b,Aeq,beq,lb,ub,xO,options)
In x und fval wird der Lösungsveletor und der zugehörige Funktionswert zurückgegeben. exi tflag gibt Auskunft über die Art des Abbruchs des Algorithmus (siehe Tab. 7.6). Die Argumente Q bis ub von quadprog entsprechen den Vektoren und Matrizen aus den Tab. 7.6: Bedeutung von exitflag bei quadprog
vVert Beschreibung
min (2xi + 5x~ + 10x~ + x
4X1XZ
+ 6X1X3 + 12xzx3 + 3XI - 2X2 + X3) (7.24)
unter der Nebenbedingung:
Xl
+ Xz -
(7.25)
X3 :2:: 4
Die folgenden MATLAB-Befehle lösen das quadratische Programm mit dem Anfangswert Xo = [111]. Da die entstehende Matrix Q positiv definit ist, ist das Optimierungsproblem streng konvex, und das berechnete Minimum ist das globale Minimum.
%quadprog_bsp.m %Matrizen der quadratischen
Form
Q = 2.*[2 2 3; 256; 3610]; g = [3 -2 1];
% Matrizen der Nebenbedingung A = [-1 -1 1]; b=[-4]; options optimset(@quadprog); options = optimset(options,'LargeScale','off'); xO = [1 1 1]; % Optimierung starten [x,fval,exitflag] = quadprog(Q,g,A,b,[],[],[],[],xO,options) Optimization terminated. x = -0.1000 2.4667 -1.6333 fval = 1.9000 exitflag 1
1 Konvergenz auf eine Lösung 3 Änderung der Funktion kleiner als vorgegebene Toleranz 4 Lokales Minimum gefunden o Anzahl der Iterationen überschritten -2 Problemformulierung ist unplausibel -3 Problemformulierung ist unbegrenzt -4 Aktuelle Suchrichtung führt zu keiner Verkleinerung des Funktionswerts -7 Betrag der Suchrichtung kleiner als Toleranz 1)
Diesen Schritt führt quadprog automatisch aus, wenn keine symmetrische Matrix angegeben wird.
Quadratische Programmierung [x,fval,exitflag,output] = quadprog(Q,g,A,b,Aeq,beq,lb,ub,xO,opt) Lösen eines quadratischen Programms
250
7.5.3
7 Optimierung - Optimization Toolbox
Lineare Programmierung
Tab: 7.7: Bedeutung von exitjlag bei linp'rog
Ein weit;erer wichtiger Spezialfall der Minimierung unter Nebenbedingungen ist die Minimierung einer linearen Zielfunktion unter linearen Gleichungs- und Ungleichungsnebenbedingungen. Dies bezeichnet man als lineare Programmierung. Diese Optimierungsmethode wird oft bei wirtschaftlichen, Produktions- und Transportproblemen eingesetzt und ist das in der Praxis am weitesten verbreitete Verfahren. Es verdankt seinen häufigen Einsatz sowohl seiner Einfachheit als auch dem Vorhandensein zuverlässiger numedscher Lösungsalgorithmen. Die Problemstellung der linearen Programmierung lautet: min f(x) = gT X x
unter den Nebenbedingungen
A·x:Sb
(7.27)
A eq • x = b eq
(7.28)
lb :S x :S ub
(7.29)
Die folgenden Eigenschaften eines linearen Programms seien festgehalten [25]: Ohne Nebenbedingungen besitzt es keine Lösung, da die lineare Zielfunktion f auf einem unbeschränkten Bereich keinen Extremwert besitzt. Sofern eine Lösung existiert, liegt diese aufgrund der Linearität von Zielfunktion und Nebenbedingungen immer auf dem Rand des durch die Nebenbedingungen definierten zulässigen Bereichs, und zwar entweder an einer Ecke (eindeutige Lösung) oder auf einer Kante (mehrdentige Lösung). Der bekannteste numerische Algorithmus zur Lösung eines linearen Programms ist die Simplex-Methode. Diese liefert in einer endlichen Anzahl von Iterationsschritten das globale Minimum der Zielfunktion auf dem zulässigen Bereich. Die maximal nötige Iterfj,tionszahl ist gleich der Zahl der Eckpunkte des zulässigen Bereichs. Der MATLAB-Befehl linprog zur Lösung eines linearen Programms basiert ebenfalls auf einer Variante der Simplex-Methode. Seine Syntax lautet: [x ,fval,exitflag,output]
Wert Beschreibung
1 Konvergenz auf eine Lösung
oAnzahl der Iterationen überschritten -2 Problemformulierung ist unplausibel -3 Problemformulierung ist unbegrenzt -4 Der Funktionswert NaN ist aufgetreten -5 Aktuelle und duale Problemformulierung sind unplausibel -7 Betrag der Suchrichtung kleiner als Toleranz
(7.26)
Der Vektor g definiert die lineare Zielfunktion. Die Matrizen und Vektoren A, b, A eq und b eq beschreiben die Ungleichungs- und Gleichungsnebenbedingungen. Zur einfachen Angabe von Schranken für den Lösungsvektor x existieren die unteren und oberen Schranken Ib und ub.
m.
251
7.5 Minimierung unt(lr Nebenbedingungen
Anfangswerts zulässt, da dieser vom Algorithmus selbst berechnet wird. Ein trotzdem angegebener Anfangswert xO wird in diesem Fall ignoriert. Die Anwendung der linearen Programmierung soll nun anhand eines Transportproblems gezeigt werden. An den Angebotsorten Al, A 2 und A 3 stehen jeweils 4, 5 und 6 Mengeneinheiten eines Gutes zur Verfügung. An den Nachfrageorten BI, B 2 , B3 und B 4 werden jeweils 1, 3, 2 und 5 Mengeneinheiten des Gutes benötigt. Die Transportkosten VOll Ai nach B j betragen Cij und sind proportional zur transportierten Menge. Es gelten folgende Werte:
=1 C21 = 5 e31 = 2 Cu
Cl3
=4
Cl4
2
C24
=7
C34
C23 = C33
(7.30)
=3 =6 =1
Gesucht sind die vom Ort i zum Ziel j transportierten Mengen Xij, die die Transportkosten f(x) minimieren. Die gesuchten Mengen fasst man im Vektor x zusammen. x
(7.31)
= [Xl! Xl2 Xl3 X14 X2I X22 X23 X24 X3I X32 X33 X34f
Durch Definition des Vektors g ergibt sich die Zielfunktion als Transportkostenfunktion gemäß Gleichung (7.33). g = [cu
linprog(g,A,b,Aeq,beq,lb,ub,xO,options)
Die Rückgabewerte x und fval enthalten den Lösungsvektor und den zugehörigen Wert der Gütefunktion. Das Flag exi tflag gibt Auskunft über die Art des Abbruchs des Algorithmus (siehe Tab. 7.7). Über den Rückgabewert output lassen sich Informationen über den verwendeten Algorithmus und die Zahl der Iterationen abfragen. Die Argument.e g bis ub entsprechen den Vektoren und Matrizen der Gleichungen (7.26) bis (7.29). Mit xO kann ein Startwert vorgegeben werden, und mit der Struktur options können Optionen für linprog vorgegeben werden. Durch Setzen der Option Simplex auf on wird der ursprüngliche Simplex-Algorithmus verwendet, der keine Angabe eines
=2 C22 = 1 C32 = 3
Cl2
f(x) =
(7.32)
C12 CI3 CI4 C21 C22 C23 C24 C31 C32 C33 C34f
(7.33)
gT x
An den Nachfrageorten BI bis B4 ist zu beachten, dass die nachgefragte Menge auch der tatsächlich transportierten Menge entspricht. Dies führt auf die folgenden Gleichungsnebenbedingungen: 3
3
LXiI = i=l
1
LXi2 =3 i=l
3
3
LXi3 i=l
=2
LXi4 = ß=l
5
(7.34)
7 Optimierung - Optimization Toolbox
252
An den Angebotsorten ist zu beacht.en, dass die abtransportierte Menge höchstens der verfügbaren Menge entspricht. Dies führt auf die folgenden Ungleichungsnebenbedingungen: 4
4.
7.6 Methode der kleinsten Quadrate (Least Squares)
253
mierung dar. Es handelt sich dabei um ein lineares Programm mit der zusätzlichen Nebenbedingung, dass die Elemente des Ergebnisvektors nur aus 0 oder 1 bestehen dürfen. Eine Lösung dieser Optimierungsprobleme erfolgt mit dem Befehl bintpr.og, dessen Syntax lautet:
4
I>lj:::; 4
2::>2j:::; 5
I:>3j : :; 6
j=l
j=l
j=l
Ferner ist zu beachten, dass keine negativen Transportmengen also alle Xij ::=:: 0 sind.
(7.35) Xij
zugelassen sind, dass
Das folgende MATLAB-Skript löst das beschriebene Transportproblem mittels linprog. Man kann sich am· Ergebnis x zumindest von der Einhaltung der Nebenbedingungen leicht überzeugen.
%linprog_bsp.m % Angebote al = 4; a2 = 5; a3 6; % Nachfragen bl = 1; b2 = 3; b3 2; b4 5' %Transportkostenmatrix c = [1 243; 5 1 26; 237 1]; % Vektor g der Zie'lfunktion g = [c(l,:).'; c(2,:).'; c(3,:).']; % Matrix der Gleichungsnebenbedingungen Aeq = [1 0 0 0 1 0 0 0 1 0 0 0; o 1 0 0 0 1 0 0 0 1 0 0; o 0 1 0 0 0 1 0 0 0 1 0; 000 1 0 0 0 1 000 1]; beq = [bl b2 b3 b4] .'; %Matrix der Ungleichungsnebenbedingungen A = [1 1 1 1 0 0 0 0 0 0 0 0; o 0 0 0 1 1 1 1 0 0 0 0; o 0 0 0 0 0 0 0 1 1 1 1; -1. *eye(12)]; b [al a2 a3 zeros(1,12)].'; % Lösung des Transportproblems als lineares Programm x = linprog(g,A,b,Aeq,beq) Optimization terminated. x
1.0000 0.0000 0.0000 0.0000 0.0000 3.0000 2.0000 0.0000 0.0000 0.0000 0.0000 5.0000
[x,fval,exitflag]=bintprog(g,A,b,Aeq,beq,xO, options)
Der Algorithmus erzeugt einen binären Suchbaum durch wiederholt es Hinzu1ligen von Nebenbedingungen. An jedem Punkt des Suchbaums wird ein lineares Programm gelöst. Die Bedeutung der Rückgabewerte für exitflag ist in Tab. 7.8 zusammengefasst. Tab. 'l.8: Bedeutung von exi tfLag bei bintprog
Wert Beschreibung 1 Konvergenz auf eine Lösung
o Anzahl der Iterationen überschritten -2 Problemformulierung ist unplausibel
-4 Die Anzahl der Knoten des Suchbaums wurde überschritten -5 Die max. Laufzeit des Algorithmus wurde überschritten -6 Die Anzahl der LP-Iterationen wurde überschritten
Lineare Programmierung [x,fval,exitflag,output] = linprog(g,A,b,Aeq,beq,lb,ub,xO,options) Lösen eines linearen Programms [x,fval,exitflag]=bintprog(g,A,b,Aeq,beq,xO,options) Lösen eines Binary Integer Programms
7.6
Methode der kleinsten Quadrate (Least Squares)
Unter den Begriff Methode der kleinsten Quadrate fallen verschiedene Optimierungsverfahren, die jedoch alle zum Ziel haben, eine quadratische Fehlersumme zu minimieren. Es wird unterschieden zwischen linearen und nichtlinearen least squares-Verfahren, jeweils ohne und mit Nebenbedingungen. Da least squares-Verfal1fen häufig zur Bestimmung von Ausgleichspolynomen angewandt werden, hat sich auch eier Begriff curve fitting durchgesetzt. Das lineare least squares-Verfahren ohne Nebenbedingungen kann auf das Lösen von überbestimmten Gleichungssystemen angewandt werden. Das Gleichungssystem C·x=d
Eine spezielle Form der linearen Programmierung stellt die Binary Integer Progmm-
~
C·x-d=O
(7.36)
~ ','I ~
I~ ~
v·~·I", r~ ~
'li
~
'1'1.' ~ ;11
~
~i
~h, I li
!!I
254
7 Optimierung - Optimization Toolbox
7.6 Methode der kleinsten Quadrate (Least Squares)
mit e E IR und d E IRnxl sei über bestimmt (n > m) und besitze deshalb keine Lösung. Da keine exakte Lösung existiert, kann Gleichung (7.36) auch als Minimierungsproblem aufgefasst werden. Das Minimierungsproblem zur Bestimmung der bestmöglichen Lösung hat dann die Form
» load datensatz.rnat »d y; C = [ones(length(u),l), U, u.-2, u.-3]; »x=C\d x = 1.0008 2.0035 -0.0994 1.0008
nxm
Ile· x min x
dll;
(7.37)
wobei 11·· ·11; die quadratische euldidsche Norm eines Vektors ist. Setzt man F(x) = e . x - cl und führt die Berechnung der euklidschen Norm aus, so lautet das Minimierungsproblem:
~,
!l,:
minLFi (x)2 x
[,
I:
I: :'1 1 1
1
I:
(7.38)
i=l
lij(x) ist die Abweichung einer Komponenten in Gleichung (7.36) von der exakten Lösung des Gleichungssystems. Der Vektor x wird nun so bestimmt, dass die Fehlerquadratsumme minimal wird (daher stammt auch der Name Methode der kleinsten Q'uadrate). Ein typischer Anwendungsfall der linearen Methode der kleinsten Quadra, te ist die Bestimmung eines Ausgleichspolynoms durch vorgegebene Messpunkte. Zur Bestimmung einer Kennlinie Y = g(u) werden n Messpunkte aufgenommen. Die Eingangsgrößen Ui werden im Vektor u = [Ul .. , u n ] und die Messwerte Yi im Vektor Y = [YI ' .. Yn] abgelegt. Die Kennlinie soll durch ein Polynom m-ter Ordnung approximiert werden (m < n). Der Ansatz lautet:
+ alUi + a2uT +.,. + amur'
Yi = ao
(7.39)
Jeder Messpunkt soll möglichst gut auf dem zu bestimmenden Ausgleichspolynom liegen. Das lineare Gleichungssystem, das dieses Problem beschreibt, kann analog zu Gleichung (7.36) formuliert werden. Die benötigten Matrizen ergeben sich dann zu:
.!
UI.
1 1 U2
C=: [
.
U~
...
1!~]
u2 ... u 2
"
.
: .
1unu;",U~
x=[~~] d=[~~l am
(7.40)
Yn
Die Berechnung der optimalen Lösung des überbestimmten Gleichungssystems gemäß (7.38) erfolgt durch den MATLAB-Befehl \ (slash). Das Optimierungsproblem in Gleichung (7.37) kann auch analytisch gelöst werden [31] und ist immer eindeutig, solange 1i ;:0: m gilt, d.h. solange die Anzahl der Gleichungen größer als die Anzahl der Polynomkoeffizienten ist. Im folgenden Beispiel sind im Messvektor u die Eingangsgrößen einer Messreihe abgelegt. Die zugehörigen Messwerte sind im Vektor y abgelegt. Die Wertepaare sind aus der Funktion y = 1 + 2u- 0.lu 2 +u 3
(7.41)
durch Überlagerung eines Rauschsignals erzeugt worden und in der Datei datensatz . mat gespeichert. Die optimalen Polynomkoeffizienten ao bis a3 im Sinne von Gleichung (7.37) werden in MATLAB durch die folgenden Befehle berechnet.
255
Da es sich hier um ein lineares Optimierungsproblem handelt, existiert eine eindeutige, von Anfangswerten unabhängige Lösung. Die Abweichungen von den exakten Vierten sind auf die verrauschten Messdaten zurückzuführen. Für die Lösung der linearen Methode der kleinsten Quadrate zur Berechnung von Polynomkoeffizienten existiert der spezialisierte Befehl polyfit. Dieser bestimmt in absteigender Reihenfolge die Koeffizienten eines Ausgleichspolynoms n-ter Ordnung für die Datenpaare u und y(u). Die Lösung von Gleichung (7.41) mittels polyfit lautet: » load datensatz.rnat » x = polyfit(u, y, 3) x
= 1.0008
-0.0994
2.0035
1.0008
Wenn aus physikalischen Überlegungen oder sonstigen Gründen die Polynomkoeffizienten nur positiv sein dürfen, so erhält man eine erste Nebenbedingung. Die erweiterte Problemstellung ist in Gleichung (7.42) angegeben, Man bezeichnet dies auch als nonnegat'ive least squares. min lIe . x x
dll;
für
x;:O: 0
(7.42)
Die Berechnung der optimalen Lösung unter der Nebenbedingung x ;:0: 0 erfolgt mit dem Befehl lsqnonneg.Aufgrund der Nebenbedingung können in der zu minimierenden Fehlerfläche mehrere lokale Minima auftreten. Hier kann deshalb optional ein Startwert angegeben werden; entfällt die Angabe eines Startwertes, wird der Ursprung als Anfangsbedingung verwendet. Die Befehls-Syntax lautet: x = lsqnonneg(C,d,xO,options) [x,resnorrn, residual,exitflag]
lsqnonneg(C,d,xO,options)
x enthält den optimalen Ergebnisvektor, in der Variablen resnorm wird die quadrierte euklidsche Norm norm(C*x-d) -2 des Restfehlers ausgegeben, residual enthält den Restfeier d-C*x und exitflag gibt Aufschluss über die Abbruchbedingung des Algorithmu's. Die Bedeutung der Werte von exitflag ist in Tab, 7.9 zusammengefasst. Angewandt auf obiges Beispiel in Gleichung (7.41) ergibt sich als Optimum für die Polynomkoeffizienten unter Berücksichtigung der Nebenbedingung x ;:0: 0:
7 Optimierung - Optimization Toolbox
256
7.6 Methode der kleinsten Quadrate (Least Squares)
257
unter den Nebenbedingungen Tab. 1.9: Bedeutung von exitfLag bei Lsqnonneg
A·x::; b
Wert Beschreibung
A eq • x
> 0 Konvergenz auf eine Lösung
o Anzahl der Iterationen überschritten
= b eq
(7.45)
lb::; x ::; ub
(7.46)
C, d, A, b, A eq und b eq sind konstante Matrizen bzw. Vektoren. Ib und ub stellen untere und obere Grenzen für x dar. Der Aufruf der Optimierungsroutine erfolgt durch den Befehl:
» d = y; C = [ones(length(u) ,1), u, u.-2, u.-3]; » xO = [1 1 1 1]; options=optimset(@lsqnonneg); » options=optimset(options,'Display','final'); » [x,resnorm] = lsqnonneg(C,d,xO,options) Optimization terminated.
[x,resnorm,residual,exitflag]
lsqlin(C,d,A,b,Aeq,beq,lb,ub,xO,options)
Nicht benötigte Argumente von lsqlin werden dabei durch [] ersetzt. Die Bedeutung der Rückgabewerte entsprechen denen des Befehls lsqnonneg. Die Bedeutung der 'illerte von exitflag enthält Tab. 7.10. Als Beispiel soll wieder das Ausgleichspolynom 3.
x
0.6928 2.0035
o 1.0008 resnorm =: 4.7689
Tab. 1.10: Bedeutung von exitfLag bei lsqLin
Soll kein Anfangswert angegeben werden, kann xO= [] gesetzt werden. Die Beurteilung dieses Ergebnisses im Vergleich zum optimalen Ergebnis ohne Nebenbedingung lmnn durch Berechnung von dessen Norm erfolgen. » norm(C*lsqnonneg(C,d,xO,options)-d) Optimization terminated. MS=
2.1838
»
(7.'14)
norm(C*(C\d)-d)
Wert Beschreibung 1 Konvergenz auf eine Lösung 3 Veränderung des Residuums kleiner als Toleranz o Anzahl der Iterationen überschritten -2 Die Problemstellung ist unplausibel -4 Ungünstige Konditionierung verhindert weitere Optimierung -7 Betrag der Suchrichtung kleiner als Toleranz
ans
0.3779
In den vorstehenden MATLAB-Befehlen wurde die Norm des Ergebnisses der nonnegative least squares-Optimierung und die Norm des Ergebnisses ohne Nebenbedingung berechnet. Auf diese Weise steht ein Maß zur Beurteilung der Qualität des erzielten Ergebnisses zur Verfügung. norm berechnet die euklidsche Norm (nicht deren Quadrat); um den Wert von resnorm zu erhalten, muss das Ergebnis von norm noch quadriert werden. Zur Berücksichtigung von allgemeineren Gleichungs- und Ungleichungsnebenbedingungen kann der Befehl lsqlin verwendet werden. Dieser ist auf Optimierungsprobleme gemäß den Gleichungen (7.43) bis (7.46) anwendbar. min IIC· x x
dll;
(7.43)
Ordnung zum Eingangsvektor u und zum Messvektor y betrachtet werden. Zusätzlich wird die Nebenbedingung Xl +X2
=
(7.47)
3
berücksichtigt (dies ist für die exakte Lösung auch erfüllt). Mit den Matrizen A eq und b eq wird schließlich die Form (7.45) erreicht. A eq = [11 00
1
b eq = 3
(7.48)
Zu beachten ist hier, dass vier unbekannte Parameter gesucht werden, so dass die Matrix A eq mit Nullen ergänzt werden muss. Die Optimierungsroutine wird durch die nachfolgende Befehls-Sequenz gestartet.
» d = y; C = [ones(length(u) ,1), u, u.-2, u.-3]; » xO = [4 -1 1 1]; options=optimset(@lsqlin); » options=optimset(options,'Display','final','LargeScale','off'); » Aeq = [1 1 0 0]; beq = [3]; » [x,resnorm] = lsqlin(C,d, [], [] ,Aeq,beq, [], [] ,xO,options)
7 Optimierung - Optimization Toolbox
258 Optimization terminated. x = 0.9986 2.0014 -0.0990 1. 0011 resnorm = 0.1431
7.6 Methode der kleinsten Quadrate (Least Squares)
Tab. 7.11: Bedeutung von eXitfLag bei Lsqcurvefit
Wert Beschreibung
1 Konvergenz auf eine Lösung 2 Veränderung in X kleiner als Toleranz 3 Veränderung des Residuums kleiner als 'Thleranz 4 Betrag der Suchrichtung kleiner als Toleranz o Anzahl der Iterationen überschritten -1 Abbruch durch die Output-Funktion -2 Die Problemstellung ist unplausibel -4 Ungünstige Konditionierung verhindert weitere Optimierung
Die Polynomkoeffizienten Xl und X2 erfüllen die Nebenbedingung (7.47). Durch die Vorgabe von Gleichungs- oder Ungleichungsnebenbedingungen können gegebene physikalische Zusammenhänge mit in die Optimierungsroutine eingebracht werden. Wenn Messdaten nicht 'durch ein Polynom sondern eine beliebige nichtlineare Funktion approximiert werder). sollen, spricht man von nichtlinearem curve fitting. Allgemein handelt es sich dabei urp ein Problem der Form: n
min IIF(x, }(:data) x
259
-
2 Ydatall2
=
min" (F(x, Xdata i) ) - Ydata xL -t ) i)2
(7.49)
Einfachheit als inline object definiert. Die optimalen Parameter ]{, T und w sind im Vektor x zusammengefasst und werden durch die folgenden Befehle bestimmt.
i=l
sind' Messdatenvektoren, die durch die vektorwertige Fnnktion F(x, Xdata) approximiett werden sollen. Im Vektor x sind die zu optimierenden Parameter der Funktion F' zusammengefasst. Die Lösung des Optimierungsproblems aus Gleichung (7.49) erfolgt in MATLAB mit dem Befehllsqcurvefit. Der Aufruf erfolgt durch:
Xdata
,:','
und
Y data
111'
[x,resnorm,residual,exitflag]=lsqcurvefit(@funktion,xO,xdata,ydata,lb,ub,options)
:ji!
Die Definition der Ausgleichsfunktion funktion hat das folgende Format:
',n
'.i ti
~j:\'
di
1
1 1:
load datensatz_curve.mat
»f_fit = inline('x(1).*Cexp(-xdata./x(2)).*sin(x(3).*xdata))','x','xdata'); xO = [1 14]; options = optimset(@lsqcurvefit); » options = optimset(options,'LargeScale' ,'off' ,'Display','final'); » [x,resnorm] = lsqcurvefit(f_fit,xO,t,y,[] ,[] ,options) Optimization terminated: directional derivative along search direction less than TolFun and infinity-norm of gradient less than 10*(TolFun+TolX). x = 6.2752 1.9949 2.5158
»
resnorm
I
==
0.6391
function F = funktion(x,xdata) F = ... % abhängig vor den Parametern x und den Eingangsdaten xdata
,11 I1 ,l,. i ~ "I'
»
Zusätzlich können neben den Datenvektoren xdata und ydata und dem Startwert xO für die OptimierungsrOl.ltine auch die Nebenbedingungen Ib und ub als Bereichsgrenzen für den Parameter~ektor x übergeben werden. Über die Variable options erfolgt in gewohnter Weise die Steuerung des Optimierungsalgorithmus (siehe Kap. 7.2). Die Bedeutung der Werte vqn exi tflag ist in Tab. 7.11 zusammengefasst.
Es ergibt sich demnach ]{ = 2.499, T = 2.011 und w = 6.283 (die exakten Werte ohne Messrauschen wären J( = 2.5, T = 2 und w = 211"). Dieses Beispiel zeigt, dass mit der Optimierungsroutine Isqcurvefit die Parameter nichtlinearer Funktionen aus verrauschten Messdaten extrahiert werden können. Es ist zu beachten, dass sowohl die
':'j',
" "~i!
',i
Die Problemstellung und deren Lösung soll nun anhand eines praktischen Beispiels aufgezeigt werden. Ein technischer Prozess wird durch einen Impuls am Eingang angeregt. Zu den Zeitpunkten t = [tl ... t n ] wird der zugehörige Prozessausgang Y = [Y1 ... Yn] aufgezeichnet. Durch Messrauschen sind die Werte Y gestört. Es wird vorausgesetzt, dass ungefähre Kenntnis über den Prozessantwortverlauf vorliegt, z.B. durch grafische Analyse. Die betrachtete Prozessantwort ist in Abb. 7.6 dargestellt. Sie wird im Zeitbereich als abklingende ~inus-Schwingung mit den unbekannten Parametern J(, T und wangesetzt.
y(t) = i'l
J( .
e- t / T . sin(wt)
(7.50)
Die Messvektoren t und y sind bereits aus einer Messung vorhanden und in der Datei datensatz_curve. mat gespeichert. Die Ausgleichsfunktion wird hier aufgrund ihrer
2
~
0 -1
-2 ----~----~----~--~----~ o 2 4 6 8 10 LI
Zeit[s]
Abb. 7.6: Prozess antwort nach einer Impulsanregung
:.!:11
~I
: '!
7 Optimierung - Optimization Toolbox
260
7.7 Optimierung eines Simulink-Modells
261
I':
!(
Lösung als auch die Konvergenzgeschwindigkeit vom gewählten Startwert xO abhängen. Als Erweiterung der linearen Methode der kleinsten Quadrate gemäß Gleichung (7.37) soll nun ein nichtlineares least squares-Verfahren behandelt werden. Hierbei handelt es sich um den allgemeinsten Fall der Methode der kleinsten Quadrate. Ein ausführliches Anwendungsbeispiel hierzu folgt in Kap. 7.7. Ziel der nichtlinearen Methode der kleinsten Quadrate ist die Optimierung einer nichtlinearen vektorwertigen Funktion F(x) mit den freien Parametern x gemäß Gleichung (7.51). n
min IIF(x)ll; = min x
x
LF (x)2 i
(7.51)
'1.=1
Zur Lösung von Optimierungsproblemen wie in Gleichung (7.51) stellt die Optimiza,tion Toolbox den Befehl lsqnonlin zur Verfügung. Die quadratische Summe aus Gleichung (7.51) wird nicht explizit berechnet, stattdessen wird eine vektorwertige Funktion F(x) an lsqnonlin übergeben. Der Aufruf lautet [x ,resnorm,residual,exitflag]
lsqnonlin(@funktion,xO,lb,ub,options)
wobei funktion die vektorwertige Funktion darstellt. Neben dem Startwert xO der Optimierungsroutine und den Optionen, können untere und obere Grenzen für die Parameter x angegeben werden. Nicht benötigte Argumente werden durch [] ergänzt. Bei der Wahl der Anfangswerte muss auch berücksichtigt werden, dass immer nur lokale Minima bestimmt werden können. Die Bedeutung des Rückgabewerts exitflag ist in Tab. 7.12 erklärt. Tab. 7.12: Bedeutung von exitfLag bei LsqnonLin
Wert Beschreibung
1 Konvergenz auf eine Lösung 2 Veränderung in x kleiner als Toleranz 3 Veränderung des Residuums kleiner als Ibleranz 4 Betrag der Suchrichtung kleiner als Toleranz o Anzahl der Iterationen überschritten -1 Abbruch durch die Output-Funktion -2 Die Problemstellung ist unplausibel -4 Linienoptimierung kann Ergebnis nicht verbessern
Methode der kleinsten Quadrate (MKQ, Least Squares) \
(slash) lineare MKQ ohne Nebenbedingungen x=polyfit(u,y,n) Koeffizienten eines Ausgleichspolynoms [x,resnorm,res,exit]=lsqnonneg(C,d,xO,options) lineare MKQ mit x ~ 0 [x,resnorm,res·, exit] =lsqlin(C ,d, A, b ,Aeq, beq, lb, ub ,xO, options) lineare MKQ mit Nebenbedingungen [x,resnorm,res,exit]=lsqcurvefit(@funktion,xO,xdata,ydata, lb,ub,options) nichtlineares curve fitting [x,resnorm,res,exit] = lsqnonlin(@funktion,xO,lb,ub,options) nichtlineare MKQ
7.7
Optimierung eines Simulink-Modells
Alle Befehle zur Minimierung nichtlinearer vektorwertiger Funktionen sind grundsätzlich zur Optimierung von Parametern eines Simulink-Modells geeignet. Die Erstellung eines Simulink-Modells wird detailliert in den Kap. 8 bis 10 behandelt. Als Anwendung des Befehls 1sqnonlin soll die Optimierung der Reglerparameter J(p, J(I und J(d eines PID-Reglers mithilfe der Methode der kleinsten Quadrate behandelt werden. Die quadratische Fehlersumme der Systemantwort auf einen Einheitssprung soll innerhalb eines vorgegebenen Zeitintervalls möglichst klein werden. Die Sprungantwort g(t, x) des Systems ist nichtlinear von der Zeit und von den gesuchten Reglerparametern x abhängig. Wenn das System in Simulink simuliert wird, so kann man zu jedem Integrationsschritt den Systemausgang aufzeichnen lassen. Je nach eingestellten Reglerparametern x wird sich ein unterschiedliches Ausgangssignal y(t, x) ergeben. Fasst man die einzelnen Abtastschritte Yi(X) = y(ti, x) zum Ausgangsvektor y(x) zusammen, so erhält man eine vektorwertige Funktion, die von 1sqnonlin minimiert werden kann. Bei einem konstanten Sollwert Yre! und n Integrationsschritten ergibt sich die zu minimierende Funktion F(x) zu:
Yl (x) - Yre! Y2(X) - Yre!
F(x) =
1
.
[
(7.52)
Yn(X) '- Yrej
Die im Sinne der Methode der kleinsten Quadrate optimalen H.eglerpararneter x können dann mit lsqnonlin bestimmt werden. x = lsqnonlin(@funktion,xO,lb,ub,options) Die MATLAB-Funktion 'funktion' enthält die Definition von F(x) gemäß Gleichung (7.52). Als Beispiel wird das in Abb. 7.7 dargestellte schwingungsfähige System 3.
'il :il
262
7 Optimierung - Optimization Toolbox
Ordnung mit Sättigung und Anstiegsbegrenzung betrachtet. Die Sättignng ist auf ±8,
~~~ u
Saturation
83+2.55:+38+4.6
Rate Umiter
~
bei jedem Funktionsaufruf vou simopterror das Simulink-Modell simopt simuliert werden muss. Der Aufruf der Optimierung erfolgt durch das folgende MATLAB-Skript:
% opt_simopt.m %Optimierung des Simulink-Modells simopt.mdl durchführen xO=[1, 1, 1]; %Anfangswerte der Reglerparameter options = optimset('LargeScale','off','Display','final' •... 'TolX',0.05, 'TolFun' ,0.05); x = Isqnonlin(@simopterror,xO,[],[],options) %Optimierung starten
Abb. 7.7: Regelstrecke als Simulink-Modell
der Anstieg auf ±3 begrenzt. Der Prozess in Abb. 7.7 soll durch einen PID-Regler geregelt werden, wobei die Reglerkoeffizienten noch unbekannt sind. Die Regelungsstruktur ist in Abb. 7.8 dargestellt. Da die Optimization Toolbox nur Funktionen minimieren
reference
Plant
yout
% Variablen wieder umbenennen Kp = x(1); Kr = x(2); Kd = x(3);
Die Ausgabe des Befehls lsqnonlin lautet dann: » opt_simopt Optimization terminated: directional derivative along search direction less than TolFun and infinity-norm of gradient less than 10*(TolFun+TolX). x
= 2.2553
Abb. 7.8: Regelungsst'ruktur für die Strecke aus Abb. 7.7
,:1 ':,1 "'I
II!,
"11
:):1 .I!
I;
;!JI ,!.'.
'~{!
kann, muss nun eine Funktion erstellt werden, die den Fehler (Differenz zwischen Sollund Istwert) für alle Simulationszeitpunkte zurückliefert. Diese Funktion erhält als Argumente die drei Koeffizienten eines PID-Reglers, ruft das Simulink-Modell simopt .mdl ,(Abb. 7.8) auf und berechnet den Fehlervektor, welcher anschließend von lsqnonlin minimiert wird. Die entsprecheude Funktion lautet: function F simopterror(x) Kp x(1); % Variablennamen in die des Simulink-Modells umbenennen KI = x(2); Kd = x(3); %Optionen für Simulink-Modell setzen, Workspace auf den der Funktion
% simopterror.rn
263
7.7 Optimierung eines Simulink-Modells
setzen
opt=simset('solver' ,'ode5','SrcWorkspace','Current'); % Simulation von simopt.mdl im Intervall 0 .. 10 s starten [tout,xout,yout] = sim('simopt',[O 10],opt); F = yout - 1; %Fehlersignal berechnen; Sollwert ist 1
1.6059
1. 9917
Nach erfolgreicher Optimierung wird das Simulink-Modell nochmals gestartet, um das Regelergebnis ,mit dem des ungeregelten Systems zu vergleichen. Die Erhöhung der Dämpfung in der Sprungantwort des geregelten Systems ist in Abb. 7.9 deutlich erkennbar. Bei nichtlinearen Systemen wie in Abb. 7.7 muss man stets beachten, dass die 1.5r,- - - - - - - - - - - - - ,
'5
I
!<.
10
10
t[s]
t[s]
Abb. 7.9: Sprungantwort des ungeregelten (links) und des geregelten Systems nach der Optimierung der Reglerparameter (rechts)
11',1
';i
:j !I'
"
i/
!,
':) ,:1
,"
Die Umbenennung der Reglerparameter ist notwendig, da im Simulink-Modell ,die Bezeichnungen Kp, KI und Kd verwendet werden. Mittels simset werden Optionen an das Simulink-Modell übergeben. Insbesondere wird durch simset (, SrcWorkspace' , 'Current') erreicht, dass die Simulatiou im Workspace der Funktion simopterror abläuft. Dies ist für die Verwenduug der Variableu Kp, KI uud Kd durch das Simuliuk-Modell uötig. Die MATLAB-Fuuktion simopterror kann nun mit der Optimierungsroutine lsqnonlin bezüglich der Reglerparameter x(1)=Kp, x(2)=KI und x(3)=Kd minimiert werden. Hiusichtlich des Rechenaufwands ist zu beachten, dass
im Sinne der least squares-Optimierung berechueten Parameter von der Sprunghöhe des Sollwerts abhängen, da die Anstiegsbegrenzung und die Sättigung dann verschiedsn stark wirksam werden.
7 Optimierung - Optimization Toolbox
264
7.8
Übungsaufgab en
7.8.1
Nullstellenbestimmung
7.8.5
x2
Bestimmen Sie die Nullstellen der Funktion f(x) = e- - x 2 + x. Stellen Sie. zur Bestimmung der Suchintervalle die Funktion im Intervall x = [-1 ... 2] grafisch dar.
+ 5X3
= 1
-3XI +4X2 +X3
= 4
5XI - X2 - 3X3
= 0
Für Interessierte: Lösen Sie diese Aufgabe mit dem Befehl polyfit.
y = f(x, t)
Verwenden Sie bei der Lösung die Jacobi-Matrix, um die Zahl der Funktionsauswertungen zu reduzieren.
X2
7.8.3
e-x~
+ e-
x
,
0 (7.53)
= 0
7.8.7
=
e- t / T . (sin(wlt - 'PI)
+ sin(w2t -
\02)).
Lineare Programmierung
In dieser Aufgabe soll ein optimaler Terminplan für einen Produktionsprozess ermittelt werden (Netzplantechnik). Die Produktion besteht aus sieben Arbeitsschritten al bis a7, wobei al den Beginn und a7 das Ende mit den Ausführungszeiten d l = d7 = 0 kennzeichnet. Alle anderen Arbeitsschritte mit den jeweiligen Dauern di und Abhängigkeiten sind im Netzplan in Abb. 7.10 dargestellt.
Minimierung ohne Nebenbedingungen
t2 2
x2
1. Bestimmen Sie die Minima und Maxima der Funktion f(x) = _x - 5 . emithilfe des Befehls frninbnd. Stellen Sie zur Festlegung der Suchintervalle die Funktion im Bereich X = [-2.5 ... 2.5] grafisch dar. 2. Bestimmen Sie das Minimum und die drei Maxima der Funktion f(x) = 10· e-xi-x~ . (xr + x~ + 0.5)
ohne Berücksichtigung von Nebenbedingungen mittels des Befehls frninunc. Stellen Sie zur Festlegung der Startwerte der Optimierungsalgorithmen die Funktion im Bereich Xl = [-3 ... 3], X2 = [-3 ... 3] grafisch dar.
7.8.4
Curve Fitting
Hinweis: Verwenden Sie als Startwert für die Optimierung den Vektor Xo = [2 4 10 1 2].
2. Lösen Sie das folgende nichtlineare Gleichungssystem mit dem Befehl fsolve.
Xl
Ausgleichspolynom
Der Datensatz curve_daten .rnat (siehe beigefügte CD-ROM) enthält die Impulsantwort y(t) eines gedämpften schwingungsfähigen·Systems. Es ist bekannt, dass in der Impulsantwort genau zwei Frequenzen enthalten sind urid dass die Schwingung abklingend ist. Bestimmen Sie aus dem Messdatensatz mittels des Befehls lsqcurvefi t die Parameter x = [T WI W2 'PI 'P2] der Ausgleichsfunktion
1. Lösen Sie das lineare Gleichungssystem 3XI - 4X2
265
Der Datensatz ausgl_daten.rnat (siehe beigefügte CD-ROM) enthält verrauschte Messdaten einer Kennlinie y(u). Bestimmen Sie die Koeffizienten eines Ausgleichspolynoms 1., 3. und 5. Ordnung. Welche Ordnung ist Ihrer Meinung nach ausreichend? .
7.8.6
Lösen von Gleichungssystemen
7.8.2
7.8 ÜbunKsaufgaben
tj=O
~
t6
t7
t4
dj=O
d7=O
Minimierung unter Nebenbedingungen
Bestimmen Sie das globale Minimum der Funktion aus Aufgabe 7.8.3.2 unter der Gleichungsnebenbedingung xI!1.252+(x2+1)Z /2 2 = 1 mithilfe des Befehls frnincon. Stellen Sie die Nebenbedingung projiziert auf die Funktion aus Aufgabe 7.8.3.2 im selben Bild dar. Daraus lässt sich ein passender Startwert für die Optimierung ablesen. H.inweis: Bei der Nebenbedingung handelt es sich um eine Ellipse mit der Parameterdarstellung Xl (t) = 1.25· sin(t), X2(t) = 2· cos(t) - 1, t = 0 ... 27f.
Abb. 7.10: Netzplan des Produktionspmzesses
Es sollen mittels eines linearen Programms die optimalen Anfangszeitpunkte t; der einzelnen Arbeitsschritte ai ermittelt werden, so dass die Gesamtdauer der Herstellung
26G
7 Optimierung - Optimization Toolbox
minimal wird. Die Zielfunktion ergibt sich damit zu:
f(t)
= gT t = ty
mit
t = [tl t2 t3 t4 t5 t6 t 7 JT
(7.54)
Ferner ist zu beachten, dass alle Startzeitpunkte positiv sein müssen und ein Arbeitsschritt erst dann beginnen kann; wenn der vorhergehende Arbeitsschritt bereits abgeschlossen ist. Für den Arbeitsschritt a5 bedeutet dies, dass die Gleichung t5 - t3 2': d3 gelten muss. Allgemein müssen also noch Ungleichungsnebenbedingungen der folgenden . Form gelten: tj -
ti
2': dj
(7.55)
Berechnen Sie nun die optimalen Anfangszeitpunkte ti und die minimale PFOduktionszeit. Ist das Ergebnis eindeutig?
8
Simulink Grundlagen
Simulink ist eine Blockset-Erweiterung von MATLAB zur Modellierung, Simulation und Analyse dynamischer Systeme. Die grafische Bedienoberfläche erlaubt die Erstellung des betrachteten Systems in der übersichtlichen und intuitiv zugänglichen Form eines Signalffussplans bestehend aus verknüpften Funktionsblöcken. Eine textorientierte (und damit häufig auch unübersichtlichere) Programmierung der Differential- und Differenzengleichungen bleibt dem Benutzer somit erspart. In einer umfangreichen Bibliothek stellt Simulink eine große Anzahl vorgefertigter Funktionsblöcke für lineare, nichtlineare, diskrete und hybride Systeme zur Verfügung. Auch eigene Blöcke können erstellt werden. In diesem Kapitel werden die grundlegenden Eigenschaften von Simulink behandelt, wie das Erstellen und Arbeiten mit einem Simulationsmodell. Darüber hinaus werden die grundlegenden Simulink-Bibliotheken vorgestellt und deren wichtigste Blöcke besprochen. Nach der Erstellung des zu untersuchenden Modells in Simulink durch die Verlmüpfung der benötigten Funktionsbläcke wird die Simulation gestartet. Während der Simulation können die Signale an beliebigen Stellen im Signalflussplan des Modells abgegriffen und dargestellt werden. Genauso können Signale aber auch für die grafische Darstellung, Aufbereitung und Weiterbearbeitung in MATLAB gespeichert werden. Auch eine Belegung und Veränderung der Parameter aller Funktionsblöcke ist direkt oder von MATLAB 'aus möglich. Für die Analyse von Simulationsergebnissen können sowohl simulinkeigene Werkzeuge als auch jederzeit alle durch MATLAB und dessen Toolboxen zur Verfügung gestellten Analysewerkzeuge verwendet werden.
8.1
Starten von Simulink
Bevor mit Simulink gearbeitet werden kann, muss MATLAB, wie unter Kap. 2.1 beschrieben, gestartet werden. Unter LINUX erscheint nach Eingabe des Befehls simulink im. MATLAB-Command-Window das Fenster der Bausteinbibliothek Library: simulink, Abb. 8.1. Wer unter Windows arbeitet, startet Simulinlc entweder durch Linksldick auf das Simulink-Icon :~! im Toolbar des MATLAB-Command-Window oder durch Eingabe von simulink. Es öffnet sich der Simulink Library Bmwser, Abb. 8.2, von dem aus die Bausteinbibliothek aus Abb. 8.1 per Rechtsklick auf 'Simulink' in der linken Fensterhälfte geöffnet werden kann. Die Bausteine der Unterbibliotheken Sourees, Sinks, Math Operations, Logic and Bit Operators, Signal Routing, Signal Attributes und Ports & Subsystems (Signalerzeugung, -ausgabe, Mathematische Verknüpfungen und Operatoren, Signale und Subsysteme)
8 Simulink Grundlagen
268
8.1 Starten von Simulink
269
Simulink-Demos
-;,t, ~ ~ ~ [!§] ~ {ilij /1' ffiB ~1.~T,
ConlinuQ\!s
Sink:
iil~
.+, )f MaUl
Operations
lfr]. <' :11
loOic
an~
BII
Operations
Dlsc!et'l
G8 B
C>lsconllnulUes
Lool\up
Uscr·Deflned
lables
fundion"
SI(lnal
Signal
Roulill~
Aihlbules
10: ~ ~ Model
V
r;!::~~~,i~):.;,1
Subsystems
EJ ',:r~f'~', "'",','
Model·Wlde UtlUtles
SlmuUnkl'llo(klibrary6.1
Copyrlght(o)10g0·'2004 lila MalhWo~<s, In<>,
Abb. 8.1: Fenster der Simulink-Bausteinbibliothek
Um die Eigenschaften der verschiedenen Funktionsblöcke und die Einsatzmöglichkeiten von Simulink kennen zu lernen, steht dem Benutzer ein breites Spektrum an? Beispielmodellen (Simulink-Demos) aus vielen Anwendungsgebieten zur Verfügung. Die Simulink-Demos sind erreichbar durch Klick auf die Schaltfiäche !4J. sw'l im linken unteren Eck des MATLAB-Command-Window und Auswahl von SimulinkjDemos im erscheinenden Startmenü. Ebenso können sie über die Bausteinbibliothek aus Abb. 8.1 oder vom Simulink Library Browser aus über die Simulink Online-Hilfe (Menü HelpjSimulink Help) geöffnet werden. Es stehen zahlreiche, gut dokumentierte Modelle zu unterschiedlichsten AufgabensteIlungen u.a. aus den Bereichen Automotive und Aerospace zum Ausprobieren bereit. Eigenschaften der Funktionsbausteine
-;;.., Discontinuities
!
: ~Olscrete j" ~lO!lICandBitOperaUons 1·t:!LookupTllbles
::', ~ ~:~:Io:e~~f~::~:n
\. ·~lr~odel-WldeUllitle5
>~.~ Portsß:Subsystems r··~5IgnalAttribules j.. ~J5lgnalRQutln9
I
Alle Funktionsbausteine sind nach einem einfachen Muster, wie in Abb. 8.3 dargestellt, aufgebaut. Jeder Block hat einen oder mehrere Ein- und Ausgänge (Ausnahmen sind u.a. Blöcke der Sources- und Sinks-Bibliothek), einen Namen, und innerhalb des Block-Rechtecks wird das charakteristische Merkmal des Blocks dargestellt (Übertragungsfunktion, Kurvenverlauf, Dateiname et.c.). Der Name kann vom Benutzer geändert
~.~'@~
Slnl:s
,.. l!2sources
~~:: ~J ~~~:;I~~~~~!~u~~~:::ete ~lControlSystemTQolboX
r!J··ffilFuzzyLoglcToolbox Ii-J·§!GaUgeSBlockset [tl !il Model PredIdlve Control Toolbox ril·§J Neural Network61ockset ~. ~l Re51·Tlme Window5 Target
~t ~:l :I:~~~I;:C~:;i~gh;~~I~et
m §iI:! SlmPowerSystems
41
~J, Simulink Contra! Design !fJ'§JSlrnulmkExtras I+J- ~J SImulink Response Optlmizatlon
:.!i! Stateflow
Iil !.ijSystemldenUficaMnToolbox 1:fJ.·itJ xrCTarget
Abb. 8.2: Simulink Library Browser für MATLAB unter Windows
werden in diesem Kapitel behandelt. Die Bausteine unter Con tin uous, Discontinuities, Lookup Tables, User-Defined Functiol7s, Model Verification und Model- Wide Utilities folgen in Kap. 9, die Funktionsblöcke in Discrete werden in Kap. 10 behandelt.
>I
f(u)
~
Name des 810dG
Abb. 8.3: Simulink Funktionsbaustein
werden (Links-Doppelklick auf den Namen), jeder Name darf aber nur einmal pro Simulationsfenster vergeben werden. Bei Links-Doppelklick auf den Block wird die Block Parameters Dialogbox geöffnet (Ausnahmen sind z.B. Scope, Slider Gain, Subsystem, SFunction Builder) , in der die spezifischen Parameter des Blocks eingestellt werden können (Default-Werte sind vorgegeben). Zur Eingabe der Parameter können Zahlenwerte oder Namen von im MATLAB Workspace definierten Variablen verwendet werden. Auch al- . le zulässigen MATLAB-Ausdrücke sind verwendbar; sie werden während der Simulation ausgewertet. Geänderte Parameter-Einstellungen können durch Klick auf den OK-Button (Fenster wird geschlossen) oder den Apply-Button (Fenster bleibt erhalLen) übernommen werden. Source-Blöcke haben keinen Apply-Button, sie müssen vor Simulationsbeginn stets geschlossen werden. Ein Doppelklick auf den Help-Button öffnet das Fenster der OnlineHilfe. . Die spezifischen Parameter eines Blocks können darüber hinaus auch vom MATLABCommand-\;Yindow aus über den Befehl seLparam (siehe Kap. 8.3) eingestellt werden. Dies ist besonders bei der automatisierten Ausführung und Modifikation von SimulinkModellen nützlich. Ein Rechtsklick auf den Block öffnet das zugehörige Kontextmenii, in dem u.a. Befehle zum Editieren und Formatieren des Blocks, aber auch die Block Properties Dialogbox angewählt werden können. Die Block Properties Dialogbox ermöglicht es, jedem Block
270
8 Simulink Grundlagen
zusäi;zliche individuelle Eigenschaften zuzuweisen, wie beschreibender Text, Anmerkungen oder so genannte Callbacks, Funktionen oder Programme, die z.B. beim Initialisieren des Blocks oder Öffnen/Schließen der Block Parameters Dialogbox ausgeführt werden. Callbacks existieren auch auf Modell-Ebene und werden in Kap. 8.8.1 behandelt. Simulink-Modelle Vom Fenster der Bausteinbibliothek (Library: simulink) bzw. vom Library Browser aus können neue Simulationsfenster durch das Menü File/New/Model (im Library Browser alternativ über den Button oder bereits bestehende Simulink-Dateien durch das Menü File/Open (Button ['[Si) geöffnet werden. Nun können per "Drag & Drop" mit der linken Maustaste Funktionsbausteine aus den gewünschten Bibliotheken geholt und im Simulationsfenster abgelegt und zu einem Blockdiagramm verknüpft werden. Eine Simulink-Datei erhält beim Speichern (Menü File/Save bzw. File/Save As im Simulationsfenster) standardmäßig die Extension .mdl. Abb. 8.4 zeigt die Menüleiste eines
'al ),
8.2 Erstellen und Editieren eines Signalflussplans
271
Löschen: Markierte Blöcke und Linien werden über den Menübefehl Edit/Clear gelöscht (oder Taste DeljEntj). Mit Edit/Undo bzw. der Tastenkombination Ctrl+Z können einzelne Bearbeitungsschritte rückgängig gemacht werden. Subsysteme: Es können zusammenhängende Teilsysteme markiert und über den Menüpunkt EditjCreate Subsystem zu einem Subsystem zusammengefasst werden (siehe Kap. 8.9.1). Verbinden zweier Blöcke: Weg 1: Klicken Sie mit der linken Maustaste auf den Ausgang eines Blocks (außerhalb dessen Rand) und ziehen Sie die Maus - bei gedrückter Taste - bis zu einem Blockeingang. Nach dem Loslassen wird automatisch eine Verbindungslinie erzeugt. Weg 2: Aktuellen Block markieren, Taste Strg gedrückt halten und Zielblock mit linker Maustaste anklicken - die Blöcke werden automatisch verbunden. Signalverzweigung: Ein Signal kann verzweigt werden, indem man mit der rechten Maustaste auf eine bereits bestehende Verbindunglinie klickt und - bei gedrückter Taste - von dort eine Verbindungslinie zu einem Blockeingang zieht. Verschieben einer Linie: Für mehr Übersichtlichkeit kann eine Verbindungslinie nachträglich verschoben werden. Mit der linken Maustaste können Eckpunkte beliebig und Geradenstücke parallel verschoben werden.
Abb. 8.4: Menüleiste und Toolbar eines Simulink-Modells
neu geöffneten Simulationsfensters. Über die Menüs File, Edit etc. kann das erstellte Blockdiagramm vollständig kontrolliert werden. Die wichtigsten Menüpunkte sind im Toolbar als Icons besonders leicht zugänglich gemacht.
8.2
Erstellen und Editieren eines Signalflussplans
Erzeugen von Vektorlinien: Zur einfacheren Unterscheidung zwischen Pfaden, die skalare Signale führen und Pfaden, die Signale im Vektor (I-D)- oder Matrix bzw. Array (2-D)-Format (Kap. 8.4.1) führen, kann durch Auswahl des Menüpunkts Format / PorVSignal Displays / Wide nonscalar lines die Liniendicke der nichtskalaren Signale vergrößert werden. Anzeige von Signaldimension und -datentyp: Der Menüpunkt Format / PorVSignal Displays/Signal dimensions zeigt die Dimension (Kap. 8.4.1) des auf einer Verbindungslinie geführten Signals an, mit Format/ Por!/Signal Displays / Port data types wird zusätzlich der Datentyp (Kap. 8.4.1) des Signals an der Verbindungslinie mitangezeigt.
Simulink kann fast ausschließlich mit der Maus bedient werden. Durch einen Doppelklick auf eine der Unterbibliotheken des Library-Fensters werden die dort enthaltenen Funktionsblöcke in einem eigenen Fenster angezeigt. Ein Doppelklick auf die Unterbibliotheken (im rechten Fensterteil) des Library Browsers zeigt die enthaltenen Blöcke im gleichen Fenster an. Aus diesen Funktionsblöcken kann der gewünschte Signalflussplan aufgebaut werden. Zum Formatieren und Editieren stehen folgende Möglichkeiten zur Verfügung:
Formatieren eines Blocks: Nach Klick mit der rechten Maustaste auf einen Block erscheint das zugehörige Kontextmenü des Blocks. Unter Format finden sich Möglichkeiten zur Einstellung von Schriftart und -größe sowie zur Positionierung des Bloclmamens, Kippen und Drehen des Blocks. Mit Foreground Color und Background Color können ·Umrisse und Hintergrund der Blöcke farblich markiert werden.
Kopieren: "Drag & Drop" mit der rechten Maustaste kopiert einen Block (auch in ein anderes Fenster).
Formatieren einer Linie: Na.ch Klick mit der rechten Maustaste auf eine Verbindungslinie erscheint das zugehörige Kontextmenü der Verbindungslinie bzw. des auf ihr geführten Signals. Hier stehen Befehle zum Ausschneiden, Kopieren und Löschen der Linie zur Verfügung.
Verschieben: Mit der linken Maustaste kann ein Block innerhalb eines Fensters positioniert werden. lV[arkieren: Mit der linken Maustaste können Blöcke durch einzelnes Anklicken ausgewählt werden, oder es kann um mehrere Blöcke ein Auswahlrahmen gezogen werden. Vergrößern/Verkleinern: Markierte Blöcke können durch Ziehen an einer Ecke mit der linken Maustaste in ihrer Größe verändert werden.
Block Properties Dialogbox: Unter Edit/Block Properties im Simulationsfenster oder mit Block Properties aus dem Kontextmenü erhält man die Block Properties Dialogbox, in der einige allgemeine Blockparameter gesetzt werden können. Zum Beispiel kann unter GeneraljDescription eine kurze Angabe zum Verwendungszweck des Blocks gemacht werden, unter Callbacks kann zu vorgegebenen Callback-Routinen (z.B. OpenFcn, CloseFcn) MATLAB-Code eingetragen werden, der bei Ausführung der entsprechenden Aktion auf den Block (z.B. Öffnen, Schließen) ansgeführt wird.
272
8 Simulink Grundlagen
8.3 Simulations- und Parametersteuerung gesetzt.
Signal Properties Dialogbox: Die Signal Pmperties Dialogbox einer Verbindungslinie bzw. eines Signals kann z.B. über Auswahl von S'ignal Properties aus dem Kontextmenü der Verbindunglinie aufgerufen werden. Hier kann u.a. der Name der Verbindungslinie vergeben oder ein beschreibender Text eingegeben werden. Für die Vergabe eines Signal-Namens gibt es allerdings auch einen sehr viel einfacheren Weg: Links-Doppelklick auf die Verbindungslinie schaltet in den Texteingabemodus für den gewünschten Signal-Namen um. Mittels der Signal Pmperties Dialogbox kann das Signal auch während der Simulation auf den MATLAB-Workspace geschrieben werden (siehe Kap. 8.5.2).
8.3
2.73
Mit newopts
simset (oldopts, property, value, ... )
kann die bereits bestehende Optionenstruktur oldopts an den durch pl'operty bestimmten Stellen modifiziert werden. Bei Aufruf von simset ohne Argumente werden alle 'properties' und ihre möglichen Werte ausgegeben. Mit oldopts
simget ( , sys' )
erhält man in der Variable oldopts die aktuelle Optionenstruktur options des SimulinlcModells sys, die mit simset oder über die Configuration Pammeter-s Dialogbox eingestellt wurde.
Simulations- und Parametersteuerung
Durch Linksklick auf den Startbutton If; im Toolbar des Modells bzw. Auswahl des Menüpunktes Simulation/Start wird die Simulation des programmierten Modells gestartet. Während der Simulation kann über den Button l.lj! (bzw. Simulation/Pause) die Simulation angehalten oder über t~j (bzw. Simulation/Stop) abgebrochen werden.
Beispiel: sim('sys',[], simset(simget('sys'),'Solver','ode23','MaxStep',O.Ol));
setzt für sys den Integrationsalgorithmus auf ode23 mit größter Schrittweite von 0.01 Sekunden. Mit [ 1 für timespan werden die in der Configuration PammeteTs Dialogbox gesetzten Werte für Start- und Stoppzeit übernommen.
Alternativ besteht auch die Möglichkeit, eine Simulation von der MATLABKommandozeile aus zu kontrollieren. Dies ist besonders dann sinnvoll, wenn Simulationsläufe automatisch, also ohne manuelles Starten und Auswerten, abgearbeitet werden sollen. Dies kann mit den Befehlen sim oder set_param ausgeführt werden.
Bei Verwendung des Befehls set_param lautet der Aufruf: 'c~d')
Bei Verwendung des Befehls sim lautet der Aufruf:
set_param('sys', 'SimulationCommand',
[t,x,y]
Mit diesem Befehl kann das Simulationsmodell mit dem Namen sys mit staTt bzw. stop für emd gestartet und gestoppt werden. Nach einer Pause (pause) kann mit eontin7le fortgefahren werden. Mit update kann ein Modell aktualisiert werden. Der aktuelle Status der Simulation des Modells sys lcann mit
sim('sys')
Sollen auch Simulationsparameter übergeben werden, lautet der Aufruf: [t,x,y]
sim('sys', timespan, options, ut)
Mit diesem Befehl können alle Optionen, die standardmäßig in die Register Solver und Daia Import/Export der Configuration Parameters Dialogbox eingetragen werden, auch von MATLAB aus gesteuert werden. Über die Argumente auf der rechten Seite können die Simulationszeit (t), die Zustände (x) und die Ausgänge (y, Festlegung durch OutportBlöcke auf der obersten Modellebene, siehe S. 316) des Modells aufgezeichnet werden. Für die Parameter des sim-Befehls gilt: sys ist der Name des Simulink-Modells, [tStaTt tFinal] für timespan definiert Start- und Stoppzeit der Simulation. Der Parameter ut ermöglicht das Einlesen vorhandener Daten in die Inport-Blöcke des obersten Levels analog der Check Box Input im Register Data ImpoTt/ExpoTt der Configuration ParameteTs Dialogbox (siehe S. 300). Mithilfe des Arguments options können wichtige Simulationsparameter wie Integrationsalgorithmus, Schrittweiten, Fehlertoleranzen, Refine-Faktor, Ausgabeoptionen etc. übergeben werden. Die Erzeugung der Optionenstruktur options (Format: stmctuTe!) erfolgt durch den Befehl: options
simset (property, value, ... )
Die in der Configuration PammeteTs Dialogbox gesetzten Parameter werden dadurch nicht verändert, sondern nur beim durch sim angestoßenen Simulationslauf außer Kraft
geLparam(' sys', 'SimulationStatus' )
abgefragt werden. Neben der Steuerung des Simulationsablaufs ermöglicht der set_param-Befehl auch das Setzen von Simulations- und Blockparametern. Am Beispiel des Simulink-Modells bspmath.mdl (Abb, 8.19) soll verdeutlicht werden, wie mit set_param beliebige Blockparameter verändert werden können:
I
set_param('bspmath/Constant','Value','100') set_param('bspmath/Sine Wave','Bias','l') set_param('bspmath/Math Function','Function','log10')
setzt den Wert des Constant-Blocks von 80 auf 100 (vergl. Abb. 8.19!), im Sine Wave wird der Bias von 0 auf 1 gesetzt und in der Math Function wird anstelle der Exponentialfunktin die Logarithmusfunktion verwendet.
8 Simulink Grundlagen
274
8.4
Signale und Datenobjekte
8.4.1
Arbeiten mit Signalen
Simulink versteht unter dem Begriff Signale Daten, die während der Simulation eines Modells an den Ausgängen der Funktionsblöcke erscheinen. Die Verbindungslinien zwischen den Funktionsblöcken eines Blockdiagramms sind damit zu verstehen als grafische Repräsentation der mathematischen Beziehungen zwischen den Signalen (d.h. den Blocl,ausgängen) . Signale in Simulink haben charakteristische Merkmale, die vom Benutzer festgelegt werden können, wie einen Namen (Kap. 8.2), eine Dimension (siehe unten), einen Wertebereich, oder einen Datentyp(siehe unten). Zur übersichtlicheren Handhabung von Signalen bietet Simulink die Datenobjekt-Klasse Simulink.Signal an, mit der ein Signal assoziiert werden kann (Kap. 8.4.2). In Simulink werden bei Signalen drei Dimensionen unterschieden: .. Skalare Signale, bezeichnet auch als Ein-Element-Arrays, ~
Vektor-Signale, bezeichnet als I-D Arrays, da sie nur eine Dimension, ihre Länge n, besitzen
.. Matrix-Signale, bezeichnet als 2-D Arrays, da sie zwei Dimensionen, [m x n], besitzen. Darunter fallen auch Zeilen- ([1 x n]) und Spaltenvektoren ([n xI]). Je nach Art können die Funktionsblöcke Signale einer oder mehrerer Dimensionen an ihrem Eingang akzeptieren oder am Ausgang ausgeben.
8.4 Signale und Datenobjekte
275
In Abb. 8.5 werden die nichtvirtuellen Signale nvs1 und nvs2 (beide sind Vektoren der Länge 3) von den Blöcken Constant undConstantl erzeugt und mithilfe des Multiplexers Mux zum neuen Signal vs1 (Vektor der Länge 6) zusammengefasst. Durch die Wahl von Number 01 outputs = 2 spaltet der Demultiplexer Demux vs1 wieder in die ur~prünglichen Signalanteile auf. vs1 ist ein virtuelles Signal, da es lediglich eine grafische Zusammenfassung von nvs1 und nvs2 darstellt. Daher sind die Ausgangssignale vs2 und vs3 des Demux auch wieder virtuell. Mithilfe der Routine signal pmpagation kann Simulink sowohl erkennen, dass vs1 aus nvs1 und nvs2 besteht (automatische Erweiterung des Signal-Labels vsl um bzw.
So genannte virtuelle Signale werden von virtuellen Funktionsblöcken (z.B. Mux, Demux, Bus Selector, Subsystem) erzeugt und dienen wie diese ausschließlich der grafischen Organisation eines Simulink-Modells. Ein virtuelles Signal ist damit nichts anderes als eine rein grafische Zusammenfassung von einzelnen virtuellen und/oder nichtvirtuellen Signalen, die es dem Programmierer ermöglicht, sein Simulink-Modell übersichtlicher zu gestalten. Simulink verwendet während der Simulation die Routine signal propagation, um zu erkennen, welche nichtvirtuellen Signale in einem virtuellen Signal zusammengefasst sind, d.h. welche Funktionsblöcke am Ende tatsächlich verbunden sind. Folgendes Beispiel soll den Sachverhalt verdeutlichen:
vs:
virtuelles Signal
~
Constant
vs1
Mux,
Demux,
Ndm. of inputs=2
Num. 01 oulpuls=2, Bus selecUon mode = oll
Display2 nvs1 'I!P
..
""J;;;;;;-c:-~I
B 112
31
~c=:: ~
~ nvs1
3
Cons!an!
1
vs2
B(456)~
vs1
Cons!an!1
nvs2!~
2
Mux1, Num. of Inputs=2
I
s seJectlon mOd; =' on
~I 41 I 5
Display3
Abb. 8.6: Beispiel zu virtuellen Signalen und Signal-Bussen: sigbus.mdl
61I
I
Mux Demux
Number of oUlputs = 2 Bus selecUon mode: off nvs: nichtvirtueUes Signal vs: virtuelles Signal
EJ
Display
vs3
Number of Inputs::: 2
vs6 N Demux1 Bu um. of outp~ts-2
31
I
o
'--_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _~nv!§.siL2 ~H vs4
1----1]
01
2{4)
Display1
Abb. 8.5: Beispiel zU virtuellen Signalen: sigprop.mdl
besteht vs1 lediglich aus einer Aneinanderreihung der Elemente von nvs1 und nvs2. Das Vektor-Signal vs1 der Länge 4 kann vom Block Demllx in zwei Signale vs2 und vs3 der Länge 2 aufgespaltet werden. Im IvIATLAB-Command-Window erscheint allerdings eine Warnung, dass die signal propagation für vs2 und vs3 nicht durchgefiihrt werden konnte (automatische Erweiterung der Signal-Label mit <». Im Demultiplexer De-
8 Simulink Grundlagen
276
muxl ist der Bus seleäion mode aktiviert, wodurch Signal vs4 zum Signal-Bus wird. vs4 kann nun von Demuxl nicht mehr in zwei Vektor-Signale der Länge 2, sondern nur noch in seine ursprünglichen Komponenten, also nvsl und nvs2 (bzw. vs5 und .vs6) aufgespaltet werden. Zur allgemeinen Funktion von Mux und Demux, siehe Kap. 8.8.3.
Neben den bisher beschriebenen Eigenschaften ist jedem Signal in Simulink auch ein bestimmter Datentyp zugewiesen, der unter anderem bestimmt, wie viel Speicher für die Darstellung des Signals alloziert wird. Simulink unterstützt ebenfalls die von MATLAB unterstützten Datentypen " double (double-precision floating point) " single (single-precision floating point) .. int8, U'int8, int16, uint16, int32, uint32 (signedjunsigned 8-, 16- bzw. 32-bit integer). .. boolean (0 oder 1, wird intern als uint8 behandelt)
Der Default-Datentyp eines Simulink-Modells ist double. Die Möglichkeit, den Datentyp von Signalen und Blockparametern in Simulink zu spezifizieren ist hesonders dann sinnvoll, wenn aus einem Simulink-Modell ausführbarer Code für Echtzeitanwendungen erzeugt werden soll, da der Speicherbedarf und damit die Ausführungsgeschwindigkeit starl, vorn gewählten Datentyp abhängen.
8.4.2
Arbeiten mit Datenobjekten
Simulink bietet die Möglichkeit an, Signale und Blockparameter mithilfe von so genannten Datenobjekten leichter zu handhaben und zu verwalten. Solche Datenobjekte können unter Verwendung der von Simulink zur Verfügung gestellten DatenobjektKlassen Simulink.Signal und Simulink.Parameter leicht erstellt werden. Jedes Datenobjekt (hier die Variable paraml) kann z.B. mit dem Model Explorer (Kap. 8.4.3), aber auch durch Zuweisung im MATLAB-Command-Window erstellt werden: paraml~
Simulink.Parameter
paraml Simulink.Parameter RTWlnfo: [lx1 Simulink.ParamRTWlnfo] Description: DocUnits: Min: -Inf Max: Inf Value: [] DataType: 'auto' Complexity: 'real' Dimensions: [0 OJ
Durch Zuordnung zur Klasse Simulink.Pammeter können nun der Variable pamml nicht nur ein Wert, sondern auch wichtige zusätzliche Eigenschaften (Wertebereich,
8.4 Signale und Datenobjekte
277
Datentyp, Dimension usw.) zugewiesen werden. Die Eigenschaften von paraml wie z.B. Wert, Einheit, Wertebereich können nun z.B. durch einfache Zuweisung param1.value param1. Max ~
0.2; param1.DocUnits
'Hz'; param1.Min
0;
param1 Simulink.Parameter RTWlnfo: [lxi Simulink.ParamRTWlnfo] Description: " DocUnits: 'Hz' Min: 0 Max: 1 Value: 0.2000 DataType: 'auto' Complexity: 'real' Dimensions: [1 1]
gesetzt bzw. verändert werden. Die Verwendung des Simulink.Parameter-Datenobjekts paraml erfolgt wie eine gewöhnliche Variable, die in der Block Pammeters Dialogbox (Kap. 8.1) beim gewünschten Parameter anstelle eines numerischen Werts eingetragen wird. Die Erstellung von Simulink.Signals-Datenobjekten erfolgt analog. Die Zuordnung eines Signals zu einem Simulink.Signals-Datenobjekt (z.B. sig1) erfolgt hier jedoch über die Signal Properties Dialogbox (Kap. 8.2): Signal name = sigl, Check Box Signal name must resolve to Simulink signal object aktivieren.
8.4.3
Der Model Explorer
Der Model Explorer wird über das Menü View/Model Explorer aufgerufen. Es öffnet sich eine grafische Oberfläche, mit der der Benutzer zur jedem Zeitpunkt Überblick hat über alle geöffneten Simulink-Modelle und Stateflow Cha.rts (der Model Ex:plorer ersetzt den Stateflow Explorer) sowie Einfluss nehmen kann auf deren Simulationsparameter (Kap. 8.7), evtl. erzeugten C-Code, globale und lokale Variablen, Datenobjekte und Signale. Abb. 8.7 zeigt das Fenster des Model Explorer. Aus der links aufgelisteten Model Hiemrchy ist zu erkennen, dass nur ein Modell, untitled, geöffnet ist, welches als Signalquelle den Block Chirp Signal enthält. Durch Markierung von Base Workspace in der Model Hiemrchy erscheint im mittleren Fensterteil eine Inhaltsliste der im MATLAB-Workspace definierten MATLAB-Variablen (hier pamm2) und Datenobjekte (hier pamml, siehe Kap. 8.4.2). Im rechten Fensterteil, dem Dialog View, werden die Eigenschaften bzw. Parameter des in der Model Hiemrchy bzw. in der Inhaltsliste markierten Objekts (hier pamm1) dargestellt. Ein Vergleich von Abb. 8.7 mit Kap. 8.4.2 zeigt, dass die Eigenschaften des Simulink.Pammeter-Datenobjekts pamrnlauch über den Model Explorer überwacht bzw. verändert werden können. Durch eine integrierte Suchfunktion kann in allen geöffneten Charts, Modellen und ihren Subsystemen z.B. nach Blöcken (hier: Search: by Block 'I\Jpe) , Eigenschaften (von Variablen und Signalen wie z.B. Name oder Wert), Datenobjekt-Klassen oder Strings
8 Simulink Grundlagen
278
279 .
8.5 Signalerzeugung und -Ausgabe
Check Box Interpret vector parameters as l-D aktiviert ist. Ist die Check Box aktiviert, werden Zeilen- und Spaltenvektoren im Constant Value-Feld mit ihren Dimensionen, also [1 x n] bzw. [n x 1] als Matrizen berücksichtigt. Ist die Check Box nicht aktiviert, werden Zeilen- und Spaltenvektoren einfach als Vektoren der Länge n, also 1-D Signale, behandelt. Im Register Signal data types kann zusätzlich noch der Datentyp (Kap. 8.4.1) des erzeugten Signals angegeben werden,
[UD ,j..L_J .!.L-...._ _l :.!.lJ~.~~.i.a.!~~~~
Abb. 8.7: Fenster des Model Explorer
gesucht werden. 'Mittels des Menüs Add können globale (im MATLAB-Workspace) und lokale (im Model Workspace) MATLAB-Variablen, Datenobjekte, Stateflow Events und Daten erstellt werden ohne das MATLAB-Command-Window zu benutzen. Liegt für ein lVlodell oder Chart C-Code vor (z.B. erzeugt mit dem Real-Time Workshop), so können alle zugehörigen Files angezeigt (hier unter Code for untitled) und deren Inhalt im Dialog View dargestellt werden.
11
12]
I~
Constant, Constantvalue=[10 1112], Interpret vector param. as 1-0 = off
0
10] [3xl] 11 - 12
Constant1 Constant value = [10 ; 11 ; 12], Interpret vector param. as 1-0 = off
[(l~~UJ.2.Constant2, Constant value = [10 11 12], Interpret vector param. as 1-0 = 0[1
1
(10 11 12)
1.2.-
Constant3 Constant value = [10 ; 11 ; 12], Interpret vector param. as 1-0 = on
Abb. 8.8: Beispiele zum Constant-Block: bsp_constant.mdL
8.5
Signalerzeugung und -Ausgabe
Zur Signalerzeugung und -Ausgabe können entweder die Blöcke der Bibliotheken Sources und Sinl<s verwendet werden, oder der so genannte Signal €;I Scope Manager, der zwa,r eine globalere Handhabung bietet, jedoch bei eingeschränkten Möglichkeiten. Speziell zur Speicherung von Signalen auf den MATLAB-Workspace steht darüber hinaus auch noch die Option Signal Logging zur Verfügung.
Step
[TI Step
Alle drei Möglichkeiten werden im Folgenden vorgestellt.
8.5.1
Bibliothek: Sources - Signalerzeugung
Ein Doppelklick auf das Sources-Icon öffnet das Fenster der Unterbibliothek mit den zugehörigen Blöcken. Als Standardquellen stehen unter anderem verschiedene Signalgener'atoren zur Verfügung, aber auch andere Blöcke, die Eingaben aus einer Datei oder dem MATLAB- \~Torkspace ermöglichen.
Ramp
D Ramp
Im Unterschied zu den anderen Flmktionsblöcken besitzen die Block Parameters Dialogboxen aller Sources-Blöcke keinen Apply-Button. Sie müssen daher vor Simulationsstart unbedingt geschlossen werden. Im Folgenden werden die wichtigsten Blöcke kurz beschrieben. ",
~ i. '
::I!
Constant
[J Constant
'jl ;1:
,-li: ;'1
Der Constant-Block erzeugt einen zeitunabhängigen reellen oder komplexen \Vert. Dieser kann ein Skalar, Vektor oder eine Matrix sein, je nachdem welche Form für den Parameter Constant Value eingetragen wurde und ob die
Mithilfe des Step kann ein stufenförmiges Anregungssignal erzeugt werden. In der Block Parameters Dialogbox können Anfangs- und Endwert des Sprungsignals sowie der Zeitpunkt des Sprungs festgelegt werden. Wie beim Constani~Block können Zeilen- oder Spaltenvektoren mithilfe der Check Box Interpret vector parameters as l-D im Vektor- oder im Matrix-Format ausgegeben werden.
Der Ramp-Blocks generiert ein rampenförmiges Signal als Anregung für ein Simulink-Modell. In der Block ParameteTs Dialogbox können die Steigung der Rampe, Startzeit und -wert des Blockausgangs eingestellt werden. Zeilen- oder Spaltenvektoren können mithilfe der Check Box Interpr-et . vector parameters as l-D im Vektor- oder im Matrix-Format ausgegeben werden.
Signal und Pulse Generator
IODDO~ •• Signal Generator
Mit dem Signal Generator können Signale verschiedener Form (z.B. Sinus, Sägezahn) erzeugt werden; der Pulse Generator gibt R.echteckimpulse als Anregung für zeitkontinuierliche Systeme aus. Die wichtigsten Parameter wie Amplitude, Frequenz, Pulsbreite etc. können beliebig gewählt werden.,
280
8 Simulink Grundlagen
[illQ Pulse Generator
Bei beiden Blöcken können, wie beim Constant-Block, Zeilen- oder Spaltenvektoren mithilfe der Check Box Interpret vector parameters as I-D im Vektor- oder im Matrix-Format ausgegeben werden. Für zeitdiskrete und hybride Systeme muss im Pulse Generator der Pulse type auf Sampie based umgestellt werden.
Random Number und Band-Limited White Noise
rrm
Der Random Number-Block erzeugt normalverteilte Zufallszahlen mit beliebigem Mittelwert (Mean, Default-Wert ist 0) und Varianz (Variance, R d Default-Wert ist 1). Unter Initial Seed kann ein Startwert für den ZufallsN~7n~::: generator angegeben werden. Soll das Ausgangssignal direkt oder indirekt I..,n",r~ integriert werden (in zeitkontinuierlichen oder hybriden Systemen), so so11]Ute auf den Band-Limited White Noise-Block übergegangen werden. Hier jst die Bandbreite des Ausgangssignals durch die Wahl der Sampie time beBan?-Lim!ted grenzbar. Eine gute Approximation von idealem weißen Rauschen erhält Whlte NOlse man mit einer Wahl von Sampie time~ 1/100· 2Jr/wmax , wobei W max (in rad/sec.) die' Bandbreite, bzw. l/w max die kleinste Zeitkonstante des betrachteten dynamischen Systems darstellt. Noise power bestimmt die Leistung des Ausgangssignals.
l.Mf
Repeating Sequence
lififAL l.L..tt!f
Der Repeating Sequence-Block erlaubt es, ein beliebiges Signal zu spezifizieren, das kontinuierlich wiederholt wird. Der Parameter Time values muss ein Vektor von monoton ansteigenden Zeitwerten sein. Der Ausga~:~~!~~~ bevektor Output values muss in seiner Länge mit dem Parameter Time values korrespondieren. Zwischenwerte werden durch lineare Interpolation ermittelt. Der höchste Wert im Zeitvektor gibt das Wiederholungsintervall für den Ausgabevektor an.
Sine Wave
I
Pv~
Dieser Block ermöglicht die Erzeugung eines Sinus,-Signals sowohl in zeitkontinuierlichen (Sample time = 0) als auch in zeitdiskreten (Sampie time > 0) Modellen. Im Time based Modus bestimmt sich das Ausgangssignal Sine Wave aus den einstellbaren Parametern Amplitude, Bias, Frequency, Phase über den Zusammenhang y = Amplitude· sin(Frequency· time + Phase) + Bias. Da die Einheit der Phase [rad] ist, ist es möglich hier direkt mit Bruchteilen und Vielfachen von pi (siehe Kap. 2.1) zu arbeiten. Um bei großen Simulationszeiten Rundungsfehler zur vermeiden, kann in den Sampie Based Modus umgeschaltet werden. Wie beim Constant-Block können Zeilen- oder Spaltenvektoren mithilfe der Check Box Interpret vector parameters as I-D im Vektor- oder im Matrix-Format ausgegeben werden.
8.5 Signalerzeugung und-Ausgabe
281
From Workspace ..
~ Der From Workspace-Block liest Daten vom MATLAB-Workspace ein und
stellt sie dem Simulink-Modell zur VerfÜgung. Die einzulesenden Daten mÜssen in Form eines MATLAB-Ausdrucks im Textfeld Data angegeben werden. Sollen skalare oder Vektor-Signale (l-D Arrays) eingelesen werden, so muss der Ausdruck im Textfeld Data ausgewertet eine Matrix ergeben, in der ein Vektor von ansteigenden Zeitwerten einem Vektor oder einer Matrix aus Signalwerten zugewiesen wird. Sollen die n skalaren oder Vektor-Signale ttl bis un eingelesen werden, so muss sich der MATLAB-Ausdruck (Default-Name simin) im Textfeld Data zu folgendem Ausdruck ergeben (t ist ein Vektor aus monoton ansteigenden Zeitwerten): Slmln
From ,workspace
tl t2
simin =
u1l u1 2
u2 l U22
... unI un2
1
[ tfinal u1final u2final
unfinal
Unter Verwendung der Formate StructuTe (hier ist das Zeit-Feld leer) und Structure with time können sowohl skalare, Vektor- (1-D) als auch Matrix-Signale (2-D) eingelesen werden. Folgendes Beispiel der [2 x 2]-Matrix u3 soll verständlich machen, wie eine Structure with time aufgebaut sein muss: struktumame.time = [tl t2 ... tfinazl T struktumame.signals.values = [u3 1 u3 2 ... U3jinal]T stTuktumame.signals.dimensions = [2 2]
FÜr skalare und Vektor-Signale ist das gezeigte Format dasselbe wie beim Einlesen von Daten Über das Register Data Import/Export der Gonfiguration Parameters Dialogbox (Kap. 8.7). Bei einer StntctuTe oder StTuctuTe with time akzeptiert ein From WorkspaceBlock wie gezeigt jedoch nur ein Element im Feld struktumame.signals. Eine Structure with time, die durch einen To Workspace-Block geschrieben wurde, kann ohne Probleme eingelesen werden. Mit der Option Form output after final data value by kann bestimmt werden, wie das Ausgangssignal des From Workspace aussehen soll nach dem letzten Zeitschritt, an dem Daten aus dem MATLAB-Workspace vorlagen (z.B. Extrapolation oder Halten des letzten Wertes).
From File Mit dem From File-Block können Daten aus einern Ji/IAT-File (siehe Kap. 3.3) eingelesen werden. Eine solche Datei kann z.B. während einer From File vorangegangenen Simulation mit einem To File-Block erzeugt worden sein. . Die in dem MAT-File abgelegten Daten mÜssen folgendes Format aufweisen: t2 ... t final ] u1 1 u1 2 ... u1final u2 1 tt2 2 ••. u2 final
tI
[
unl un2 ... Unfinal
282
8 Simulink Grundlagen
Dabei ist t ein Vektor aus monoton ansteigenden Zeitwerten, ul bis v,n sind die Vektoren der Ausgangssignale. Das Ausgangsignal des From File-Blocks wird damit zu einem Vektor-Signal (l-D Array) der Länge n. Daten, die mit einem To File-Block geschrieben werden (Array bzw. Matrix), können vom From File-Block ohne Modifikation eingelesen werden. Sollen Daten, die mit einem To Workspace-Block geschrieben und in eine Datei gespeichert wurden, gelesen werden, muss Folgendes beachtet werden: 1. Der To Workspace-Block schreibt keine Zeitwerte; diese können jedoch über die Check Box Input im Register Data Import/Export der Configuration Parameters
Dialogbox gespeichert werden. 2. Der Array, der vom To Workspace-Block geschrieben wurde, muss vor dem Abspeichern in ein MAT-File transponiert werden, damit dieses File von einem From Fi/e-Block gelesen werden kann.
Signal Builder
283
8.5 Signalerzeugung und -Ausgabe
ein Rechtecksignal; seine Rechteckbreite variiert von Gruppe zu Gruppe. Beim Dreiecksignal Signal 2 wird die Amplitude von Gruppe zu Gruppe vei'ändert. Jede Gruppe ist als Registerkarte realisiert, die durch einfachen Links-Klick a.ktiviert werden kann. Die Signale der jeweils aktiven Gruppe werden auf den Ausgang des Signal Builder gegeben. So kann das Simulink-Modell ohne jeden Umbau schnell mit unterschiedlichen Signalen oder Signalgruppen beaufschlagt und getestet werden.
Bibliothek: Sinks und Signal Logging
8.5.2
In der Unterbibliothek Sinks finden sich die Standard-Ausgabe-Blöcke von Simulink. Es besteht die Möglichkeit, Signale grafisch darzustellen, sowie Ergebnisse in ein File oder in den MATLAB-Workspace zu speichern. Zur Speicherung von Daten auf den MATLAB-Worlcspace bietet Simulink zusätzlich zur Sinks-Bibliothek auch die Möglichkeit des so genannten Signal Logging an. Diese Option wird von der Signal P'T"Operties Dialogbox (Kap. 8.2) aus gesteuert und kommt komplett ohne Verwendung von Sinks-Blöcken aus. Sie wird am Ende dieses Unterkapitels behandelt.
~
Der Block Signal Bui/der ermöglicht die schne!le Erzeugung von austausch-
Im Folgenden werden die wichtigsten Blöcke der Sinks-Bibliothek kurz beschrieben.
Signal Builder
der Dialogbox, in der alle Arten von abschnittsweise linearen Anregungssignalen in Gruppen grafisch erstellt werden können.
Sinks - Signalausgabe
~ baren Signalgruppen. Durch Links-Doppelklick erscheint die Signal Buil-
In der Beispieldatei bsp...sigbuild .mdl (Abb. 8.9) werden mit dem Signal Builder drei Signalgruppen erzeugt (Abb. 8.10), wobei jede aus den Signalen Signal 1 und Signal 2 besteht. Am Signal Builder-Block entstehen daller zwei Ausgänge. Über einen Multiplexer werden die Signale zusammengefasst und auf einen Integrator gegeben, der die Verläufe aufintegriert. Wie die Signal Builder Dialogbox (Abb. 8.10) zeigt, ist S'i,gnal 1
nSi9nal1
rnSjgnal2
Signal Builder
GJ==+B
Integrator
Scope ~1
Mit dem Scope- Block können während einer Simulation Signale dargestellt werden. Wird ein Scope-Fenster vor der Simulation geöffnet, kann der Verlauf der auf den Scope-Block geführten Signale direkt mitverfolgt werden. Scope Die Buttons im Toolbar des Scope-Fensters (Abb. 8.11) ermöglichen ein , Vergrößern von Teilbereichen der dargestellten Daten, eine automatische Skalierung der Achsen, eine Speicherung der Achseneinstellungen für nachfolgende Simulationen sowie ein direktes Ausdrucken der Kurven. 11
Bei Klick auf den Scope Parameters-Button des Scope-Fensters erscheint die 'Scope'
Scope
Beispiel zum Signal' Builder: bsp_sigbuild.mdl
Abb.
8.9:
Drucken
)!>
Scope Parameters
Scope Fenster a111 Matlab Command Window andocken
Signal Selector
Achse auswählen!
Achsenauswahl aufheben Zoom in x-Richtung
"
Achsenseinstellungen wiederherstellen
Autoskalierllng
Speichere Achsenseinstellungen
, !ii; ",
11' ' '1jl' 1 1:
1
!~!
::1
:1; :i.
floating scope
Zoom in y-Richtung
Abb. 8.10: Signal Builder Dialogbox des Beisp,els bsp_sigbuild.mdl mit drei Signalgruppen Abb. 8.11: Scope-Fens"ter
8 Simulink Grundlagen
284 PammeteTs Dialogbox.
In der Registerkarte Geneml können Achseneinstellungen manuell vorgenommen werden. Eine N~tmber ofaxes > 1 erzeugt im Scope-Fenster mehrere Teilbilder, ähnlich wie beim MATLAB-Befehl subplot (siehe Seite 44). Die Eingabe eines Zahlenwerts (sec.) im Parameter Time mnge stellt die aufgezeichneten Signale nur bis zum angegebenen Zeitpunkt dar. Unter Sampling kann bei Auswahl von Decimation ein "Auslassungsfaktor" angegeben werden. Beispiel: Bei einer Eingabe von 100 wird im Scope-Fenster nur jeder 100ste eingelesene Signal wert angezeigt. floating scope (Auswahl auch über Schaltfläche floating scope im Toolbar des ScopeFensters) ermöglicht die Darstellung eines oder mehrerer Signale aus dem Modell, wobei die Signallinien nicht mit dem Scope-Block verknüpft sind: Wird die Check Box floating scope aktiviert so verschwindet der Blockeingang. Während der Simulation werden dann innerhalb der jeweils aktiven Achse (dicker blauer Rahmen, Button Achse auswählen/Achsenauswahl aufheben) die Signale angezeigt, deren Verknüpfungslinien markiert waren: einfacher Mausklick auf die Linie (bei gedrückter Shifttaste können mehrere Linien markiert werden) oder Auswahl über den Signal Selector im Toolbar des Scope- Fensters. Bei Verwendung eines floating scope muss sichergestellt sein, dass im Register Optimization der Confgumtion Pammeters Dialogbox (Kap. 8.7.1) die Check Box Signal storage r-euse deaktiviert ist. Dies läßt jedoch den Speicherbedarf stark ansteigen. V/enn nur wenige Signale online inspiziert werden sollen, ist es daher sinnvoller, diese Signale vor Simulationsstart als so genannte Test points (siehe Abb. 8.16) zu deklarieren. Für diese Signale wird dann kein Signal stomge r-euse durchgeführt. Jedes im floating scope aktuell angezeigte Signal wird mit einem OC;' -Icon markiert. Ein Rechtsklick auf eine Achse und Auswahl von Axes Properties im Kontextmenü stellt noch weitere Möglichkeiten der Achseneinstellungen zur Verfügung.
In der Registerkarte Data history kann auf die Menge an gespeicherten und angezeigten Daten Einfluss genommen werden. Um Daten über das gesamte Simulationsintervall anzuzeigen, kann entweder die Check Box Limit data points to last deaktiviert werden oder im angrenzenden Textfeld ein Zahlenwert :2: der Anzahl der eingelesenen Datenpunkte angegeben werden. Save data to workspace speichert die angezeigten Signale auf den Workspace unter dem angegebenen Variable name und Format (Army bei Number of axes = 1, Structure und Structure with time bei Number ofaxes :2: 1). Ein gespeicherter Army hat die folgende Form:
["t2 ul, u2, ...... un, u12 U22 un2 t final ul final
~t2 final
1
... un final
Dieses Format kann von einem From Workspace-Block ohne Modifikation eingelesen werden. Eine gespeicherte Structure erhä.lt die drei Felder time, signals und blockName. Das ZeitFeld bleibt jedoch leer. Soll dort auch die Simulationszeit mit abgelegt werden, so muss
8.5 Signalerzeugung und -Ausgabe
285
als Format Structure with time gewählt werden. Wird z.B. ein Bus-Signal der Breite n auf den Scope geführt, hat die gespeicherte Structure with time folgendes Aussehen: struktumame.time = [tl t2 ... tfinazl T U1 l
u1 ...2
strukturname.signals.values =
U2l
u2 2
... unj ... un 2
1
[
u1final u2final ... Unfinal struktumame.signals.dimensions = n struktumame.signals.label = 'Label des auf den Scope-Block geführten Signals' struktumame.signals.title = 'Titel des Scope-Plots' strukturname.signals.plotStyle = [0 OJ strukturname. blockName = 'Modellname IN ame_des_Scope- Blocks' XY Graph
~
XY Graph
Ein XY Graph stellt seine Eingangssignale (Skalare) übereinander aufgetragen in einer MATLAB-Figure dar. Der erste (obere) Eingang wird dabei der x-Achse, der zweite der y-Achse zugeordnet. In der Block Parameters Dialogbox können die Limits der Achsen manuell eingestellt werden.
To Worlcspace
1
Der To Workspace-Block schreibt seine Eingangsdaten auf den MATLABWorkspace in Form eines Ar-ray, einer Structure oder Structure with ,tiTo Workspace me und benennt diese mit dem unter Variable name eingetragenen Namen. Decimation erlaubt wie beim Scope-Block, dass Datenwerte bei der Aufzeichnung ausgelassen werden. Bei Verwendung eines Variable-step-Solvers (siehe Kap. 8.7) wird der Parameter Sampie time nützlich: Da in diesem Fall die Intervalle zwischen den Zeitschritten während der Simulation nicht konstant sind, kann hier durch die Angabe eines Faktors (in Sekunden) eine konstante Schrittweite für die Aufzeichnung der Eingangssignale festgelegt werden. Beim Default-Wert -1 werden die Daten mit der vom Solver vorgegebenen Zeitschrittweite geschrieben. simoul
Ein mit einem To Workspace-BIock gespeicherter Array hat folgendes Aussehen:
[Ul' ,,2, ulz U22
un, 1
... un2
ul final u2 final ... un final
Eine von einem To Workspace-BIock geschriebene Structure wdh time besitzt die drei Felder time, signals und blockName mit folgendem Aussehen (bei einer Str-uciure bleibt das time-Feld leer):
8 Simulink Grundlagen
286
stmK:turname.time = [tl t2 ... tfinazl T U1 l U2l ... unI u1? 1.t2 2 ... Un2 strukturname.signals.values = ...~ [ u1final u2 ftna l ... unJmal strukturname.s·ignals.dimensions = 11, stmkturname,signals.label = 'Label des auf den To Workspace-Block geführten Signals' stTukturname.blockName = 'Modellname/ Name_des_ To_Workspace..Blocks'
1
Um einen gespeicherten AlTay mit einem From Workspace-Block wieder einzulesen, wird der korrespondierende Zeitvektor benötigt. Es kann die standardmäßig im Data Import/Export-Register der Configumtion Pammeters Dialogbox (siehe Kap. 8.7) geschriebene Variable tout verwendet werden. Eine Stmcture with time kann ohne Modifikation von einem From Workspace-Block eingelesen werden.
8.5 Signalerzeugung und -Ausgabe Sine type: Time (t): Amplitude: FTequency (md/sec):
287
Time based Use simulation time 1 0.05
Damit wird eine Sinuswelle mit Periodendauer T Amplitude 1 erzeugt.
Bias: 0 Phase (md): 0 Sampie time: 0
= 27r /w =
27r /0.05 s
=
125.664 sund
Parameter des Repeating Sequence-Blocks: Time values: [0:20:200J
Output val1tes: [0:0.25:2.5J
Aus diesen Daten kann die Periodendauer des Sägezahns zu 200 s und die Amplitude zu 2.5 abgelesen werden. Parameter des Sinus über Saegezahn-Blocks (XY Graph): x-min: -1 x-max: 1
y-max: 2.5 y-min: 0
Sampie time: -1
Mit dieser Parametereinstellung wird der Ausschnitt auf der x- und y-Achse des XY Graphs auf die Amplituden der Eingangssignale zugeschnitten.
Ta File Der Ta File-Block schreibt seine Eingangsdaten zusammen mit dem Vektor der korrespondierenden Zeitpunkte in Form eines Army (bzw. einer To File Matrix) in ein lV/AT-File (siehe Kap. 3.3). Der Army entspricht dem vom Frol11 File-Block benötigten Format und kann daher von diesem Block ohne Modifikation eingelesen werden. Ein From Workspace-Block kann die Transponierte des ATmy lesen. In der Block Pammeters Dialogbox können der Name des MAT-File und des Army angegeben werden, mit Decimation und Sampie time kann wie unter Ta Workspace erläutert verfahren werden.
Simulationsparameter im Register Solver der Configuration Parameters Dialogbox (de. taillierte Beschreibung in Kap. 8.7.1): Start time: 0.0 VaTiable-step-SolveT type: discrete(no continuous states) Zera crassing contral: Use local settings
Stop time: 1000.0 Max step size: 2.0
Beispiel
~I
Sine Wave
~B Sinus Periodendauer: 125.664s Amplitude: 1
d 1,1.
!:!i
,'I:
Repeating
Saegezahn
Sequence
Periodendauer: 2005 Amplitude: 2.5
!,'
:!(1,1" !,
~)'
:1) LI, 1.1
:I'"i
Abb. 8.12: Beispiel zur Benutzung von Sourcesund Sinks-Bläcken: bspsources_sinks.mdL
Am Beispiel bspsources.J3inks .mdl (Abb. 8.12) soll die Funktionsweise der Blöcke Sine Wave, Repeating Sequence, Scope und XY Graph verdeutlicht werden. Es werden eine Sinuswelle und ein selbst erzeugter Sägezalm sowohl einzeln als auch übereinander aufgetragen dargestellt. Parameter des Sine Wave-Blocks:
Abb. 8.13: Fenster der Scope-Blöcke nach Sim'ulation des Systems bspsources_sinks.mdL
Durch diese Wahl der wichtigsten Simulationsparameter wird die Simulation etwas verlangsamt (Integration mit fester oberer Schrittweite ist aufwändiger zu berechnen), so dass der Verlauf der Signale bequem in den Scopes und dem XY Graph mitverfolgt werden kann. In den Scope-Blöcken wurde die Check Box Limit data points to last deaktiviert, um sicherzustellen, dass die Signale in vollständiger Länge angezeigt werden
8 Simulink Grundlagen
288
8.5 Signalerzeugung und -Ausgabe
;289
aber die grafische Darstellung in Simulink im Vordergrund steht. Durch Aktivierung der Check Boxen Log signal data (Abb. 8.16) können nun die Ausgangssignale des Sine Wave und der Repeating Sequence unter den Namen sigl und sig2 gespeichert werden. 'Vie -zu erkennen ist, kann das Signal Logging auch für Signale durchgeführt werden, für die keine Signalname vergeben wurde (sig2, hier wurde nur ein Logging
r
8.14: Fenster des XY GraphAbb. Blocks nach Simulation des Systems bspsources_sinks.mdL
können, unabhängig von der gewählten Schrittweite. Da es sich um ein einfaches System handelt, kann der Default-Algorithmus ode45 zur Integration verwendet werden. Die Abb. 8.13 und 8.14 zeigen die Ergebnisse der Simulation.
Signal Logging Wird in der Signal Pmpert'ies Dialogbox (Kap. 8.2) eines Signals die Check Box Log signal data aktiviert, so kann das zugehörige Signal auch ohne Verwendung eines To Workspace- oder Scope-B,locks auf den MATLAB-Workspace gespeichert werden. ~
name vergeben). Die geloggten Signale werden im Simulink-Modell mit einem -Icon markiert nnd im MATLAB-Workspace in der Variable logso'ut aus der DatenobjektKlasse Simulink.ModelDataLogs gespeichert. "Entpacken" von logsout mittels
logsout.unpack('all') extrahiert sigl nnd sig2 im Format Structure mit den Unterfeldern sigl,Data bzw. sig2.Data, aus denen schließlich die Simulationsdaten entnommen werden können.
8.5.3
Mit dem Signal &1 Scope Manager kann die Erzeugung und grafische Darstellung von Signalen modellglobal gehandhabt werden; Sources- und Sinks-Blöcke werden dabei nicht mehr benötigt. Die Verwendung des Signal &1 Scope Manager soll an Abb. 8.17 verdeutlicht werden, in der links die "herkömmliche" Realisierung von Signalquellen und Senken (bsp_ssml .mdl), rechts die Realisierung mittels Signal & Scope Manager gezeigt ist (bsp_ssm2.mdl).
8-Q~--
sig1
Constant
Sine Wave
Conolaot
bsp_ssrn1.mdl
4X++)}-----, bsp_ssm2.mdl SinQW~VQ
_B ;1N1
~
Repeating Sequence
Der Signal &J Scope Manager
I~
Scope
Sum2
m~
,0
Terminator
Sinus
über Saegezahn
Abb, 8.15: Spe~chern von Signalen auch ohne Scope-Bläcke: bspsources_sinks_s L, mdL
Signal Abb. 8.16: DialogProperties Beispiels boxen des bspsources_sinks_s L. mdL
Abbildung 8.15 zeigt am Beispiel bspsources-Binks_sl.mdl, dass die Scope-Blöcke aus bspsources-Binks. mdl entfallen können, wenn nur die Signalspeicherung, nicht
Abb. 8.17: Links: Signalerzeugung und -Ausgabe mit Sources- und Sinks-Bläcken: bsp_ssml. mdL. Rechts: Realisierung über den Signal fj Scope Manager: bsp_8sm2. mdL
Der Signal &1 Scope Manager wird über den Menüpunkt Tools/Signal &1 Scope Manager gestartet. Abbildung 8.18 zeigt die Register Generators und Viewers des Signal &1 Scope Managers VOll bsp_ssm2.mdl. Die gewünschten Signalquellen und-senken (z.B. Sine Wave) wurden nach Auswahl aus der Typliste (z.B. Generators/Simulink) im linken Fensterteil über den Button Attach to model» zur Liste Geneorators/Viewers in model hinzugefügt und über den Signal Selector' (Button t§) mit den Eingängen der entsprechenden Modell-Blöcke (z.B. Sum2:2, Suml :2, Sum:l) verbunden. Über die Schaltfiäche können die Block Parameters Dialogboxen der Generators und Viewers geöffnet und deren Parameter eingestellt werden. Die mit dem Signal &1 Scope Manager erzeugten
III
8 Simulink Grundlagen
291
Signalquellen und -senken werden im Blockdiagramm als grau unterlegter Text (z.B. Sin. vo•• , ) bzw. mit einem Viewer-Icon cd gekennzeichnet. Ein Doppelklick auf den unterlegten Text bzw. das Viewer-Icon öffnet wie gewohnt die Block Pammeters Dialogboxen bzw. Fenster der Genemtors und Viewers. Hinweis: Abweichend von den bisher kennen gelernten Seope-Eigenschaften können mit einem Viewer-Scope keine Signale auf den Worlcspace gespeichert werden.
, so entsteht am Ausgang zu jedem Zeit schritt der Wert 19. Unter List of signs die Anzahl und Polarität der Eingänge durch die Eingabe einer Zahl > 1 oder 'Folge von + und - bestimmt werden.
290
.lYJJ..e.L___. EJ- Generators
I
r~- $101 Slmullnk
.~
ijj-§ilSfgnaIProc "
I-'j--Viewers
"
tJJ .. j$?)SlmUllnl(
•
rt)-~ISlgnaIProc
I:
I
und Dot Produet Der Produet-Block führt eine elementweise oder Matrix-Multiplikation bzw. Division seiner Eingangssignale (l-D und 2-D Signale) durch, abhängig vom Wert der Parameter Multiplication und Number of inputs. Für Multiplication = Element-wise(. *) gilt: Eine Folge von * und I erzeugt eine Multiplikation oder Division der einzelnen Element.e der Eingangssignale (MATLAB-Operation y = ui. *u2). Beispiel: Werden auf einen Produet-Block mit Number of inputs = *1*, die Signale 5, Sinus(x) der Vektor [44 5 6] geführt, so entsteht ein Ausgangssignal der Form [20jSinus(x) jSinus(x) 25jSinus(x) 30jSinus(x)]. Hat der Product-Block nur einen Eingang, und ist dieser ein Vektor, so ist der Ausgang das Produkt der Vektorelemente. Für Multiplication = Matrix(*) gilt: Sind die Signale .11, Bund C an den Eingängen 1, 2 und 3 Matrizen der entsprechenden Dimensionen, so entsteht bei einer Number of inputs
** j
Abb. 8.18: Dialogbox des Signal 1'3 Scope Manager von bsp_ssm2.mdL: Generators-Register (rinks), Viewer's-Register (rechts)
=
das Matrizen-Produkt ABC- 1 am Ausgang.
Der Oot Product-Block berechnet das Skalarprodukt seiner Eingangsvektoren, Der Blockausgang ist gleich dem MATLAB-Befehl bzw. y = sum(conj (ui) .*u2). Math Function und Trigonometrie Function
8.6
Mathematische Verknüpfungen und Operatoren
8.6.1
Bibliothek: Math Operations
,
,.'
';i!
,"
,:,!:
In der Unterbibliothek Math Operations befinden sich Blöcke zur mathematischen Verknüpfung von Signalen. Neben einfachen Bausteinen zur Summation und Multiplikation stehen Blöcke mit vordefinierten Funktionen aus dem Bereich der Mathematik und Trigonometrie zur Verfügung. Im l:<'olgenden werden die wichtigsten Blöcke kurz beschrieben, der Aigebraic Constrail1t-Block wird jedoch erst in Kap. 9.6 behandelt.
'I',:
{~]
Math Function.
{~
Im Math Funetion-Block steht eine Anzahl an vorgegebenen gängigen mathematischen Funktionen zur Verfügung, wie z.B. Exponential- und Logarithmusfunktionen. Unter Function können diese direkt ausgewählt werden. Analog stellt der Trigonometrie Function-Block alle wichtigen trigonometrischen Funktionen zur Verfügung, auswählbar unter Funct-ion. Im Gegensatz zum Fen-Block (Unterbibliothek User-Oefined Funetions) können beide Blöcke auch 2-D Signale verarbeiten.
Trigonometrie Function
Gain und SUdel' Gain
.,:1
Sum
I
\
i; Ili,
11"
. C'\..
Der Ausgang des Sum-Blocks ist die Addition seiner Eingangssignale. Sind alle Eingangssignale skalar, so ist auch das Ausgangssignal skalar. Bei Sum gemischten Eingangssignalen wird elementweise addiert. Beispiel: Werden auf einen Sum-Bloclc die Signale 1, Sinus(x) und der Vektor [4456] geführt, so entsteht ein Ausgangssignal der Form [5+Sinus(x) 5+Sinus(x) 6+Sinus(x) 7+Sinus(x)].
)0/
Hat der Sum-Block nur einen Eingang, und ist dieser ein Vektor, werden dessen Elemente zu einem Skalar addiert. Beispiel: Wird auf den Sum-Bloclc nur der Vektor [4 4 5 6]
{~~» Gain
>[] Slider
Gain
Der Gain-Block verstärkt sein Eingangssignal (l-D oder 2-D Signal) mit dem Ausdruck, der unter Gain angegeben wurde. Über Multiplication kann eingestellt werden, ob eine elementweise oder eine MatrixMultiplikation des Eingangs mit dem Gain stattfinden soll. Der Slider GainBloclc erlaubt die Verstellung des 'skalaren Verstärkungsfaktors während der Simulation. Im Slider Gain-Fenster (öffnet sich bei Links-Doppelklick auf den Block) kann die Verstellung über einen Schieberegler oder die direkte Eingabe eines Wertes geschehen. Darüber hinaus können die Grenzen des Schiebereglerbereichs unter Low und High angegeben werden.
8 Simulink Grundiagen
292
8.6 Mathematische Verknüpfungen und Operatoren
293
Beispiel Das folgende einfache Beispiel aus der Physik soll die Funktionsweise der Blöcke Product, Gain und Math Function verdeutlichen (zum Mux-Block siehe Kap. 8.8.3). Abb. 8.19 zeigt das System bspmath .mdl, das die Gleichung 1 n: f(i) = 80· exp( - - t) . sin (0.25t+ -3)
80
grafisch modelliert. Die gedämpfte Sinus-Schwingung und ihre Einhüllenden werden aufgezeichnet. Der Clock-Block liefert die Simulationszeit. Diese wird für die Berechnung der Exponential-Funktion in den Einhüllenden benötigt. Die Division der Simulationszeit durch die Konstante 80 wird im Block Productl durch den Eintrag */ unter Number of inputs bewerkstelligt.
Abb. 8.20: Fenster des Scope-Blocks nach der' Simulation von bspma th. md L
f\,1-----1- - - - - - , 8ine Wave
8.6.2
~I-+B
I I
Mux
gedaempfte Sinusschwingung
Constant
Abb. 8.19: Bezspiel zur Benutzung von Sources-, Sinks- und Math Operations-Blöcken: bspmath.mdL
Bibliothek: Logic and Bit Operations
Bitwise Operator Der Bitwise Operator wendet auf seine Eingangssignale vom Typ integer, Fixed-Point oder boolean die unter Operator- ausgewählte Logikfunktion an (AND, OR usw.). Defaultmäßig akzeptiert der Bitwise Operator nur ein Bitwise Eingangssignal, das er über die in Operator- spezifizierte Logikfunktionen Operator mit der unter Bit Mask angegebenen Bitmaske verknüpft. Wird die Check Box Use bit mask ... deaktiviert, werden beliebig viele Eingangssignale akzeptiert und verknüpft. Das Ausgangssignal des Bitwise Operator als Ergebnis der Verlmüpfung ist immer skalar.
Parameter des Sine Wave-Blocks: Sine type: Time (t): Amplitude: Fr'equency (md/sec):
Time based Use simulation time 1 0.25
Damit wird eine Sinuswelle mit Periodendauer T Amplitude 1 erzeugt.
Bias: 0 Phase (md): pi/3 Sampie time: 0
= 2n:/w = 2n:/0.25s = 25.133s und
Simulationsparameter im Register Solver- der Configumtion Pammeter-s Dialogbox (detaillierte Beschreibung in Kap. 8.7.1): Start time: 0.0 Var'iable-siep-Solver-: discrete(no continuous states) Zer-o cmssing contmi: Use local settings
Stop time: 400.0 Max step size: 0.005
In Abb. 8.20 sind die Ergebnisse der Simulation dargestellt.
Logical Operator
~AND~
Der Logical Operator-Block verknüpft seine Eingänge gemäß den unter Opemtor- zur Verfügung stehenden Logikfunktionen. Der Ausgang kann die Werte 1 (TRUE) oder 0 (FALSE) annehmen. Sind die Eingänge VekLogical Operator toren (l-D Arrays) oder Matrizen (2-D Arrays), so werden die korrespondierenden Elemente durch die gewählte Logikfunktion verknüpft, und am Ausgang entsteht ein Vektor, z.B. [0 1 1], oder eine Matrix. Sta.ndardmäßig werden alle von Simulink unterstützten Datentypen (Kap. 8.4.1) am Eingang akzeptiert und am Ausgang der Datentyp boolean erzeugt. Wird im Register Signal data types jedoch unter Output data type mode die Option Logical gewählt,so wird am Eingang nur noch boolean oder dmtble akzeptiert. Wenn zusätzlich im Opt'imization-Register der Configumtion Pammeter-s Dialogbox (Kap. 8.7.1) die Option Implement logic signals as boolean data aktiviert ist, entsteht dann am Ausgang der Datentyp boolean ansonsten boolean oder double (je nach Eingangsdatentyp).
8 Simulink Grundlagen
294
Relational Operator Der Relational Operator-Block verknüpft seine zwei Eingänge gemäß den unter Operator zur Verfügung stehenden Vergleichsoperatoren. Der Ausgang kann die Werte 1 (TRUE) oder 0 (FALSE) annehmen. Beispiel: Liegt Relational operator das Signal u1 am oberen Eingang und u2 am unteren, wird der Ausgang zu y = ul < u2, y = ul ~ u2 etc. 2-D Eingangssignale werden analog zum Logical Operator verarbeitet. Auch bezüglich der Datentypen von Ein- und Ausgängen gelten die für den Logical Operator getroffenen Aussagen.
G
8.7
Simulationsparameter
Vor dem Start der Simulation sollten die Simulationsparameter für das Modell festgelegt werden. Dies geschieht durch Aufruf der Configuration Parameters Dialogbox unter· dem Menü SimulationjConfiguration Parameters. Dort sind alle Parameter schon mit Default-Werten belegt, d.h. die Simulation könnte auch direkt gestartet werden. Es empfiehlt sich jedoch, die Parameter stets an das jeweilige Modell anzupassen, um optimale Ergebnisse zu erzielen.
8.7.1
295
8.7 Simulationsparameter
Es sind die gleichen Algorithmen, die auch in MATLAB zur Lösung von Differentialgleichungen, 'Kap. 4.1.1, zur Verfügung stehen. Eine genaue Auflistung der Variable-stepAlgorithmen für zeitkontinuierliche Systeme findet sich in Tab. 4.1. Darüber hinaus bietet Simulink zusätzlich Fixed-step-Solver für die Simulation von zeitkontinuierlichen Systemen mit fester Schrittweite an. Die Algorithmen odeS, ode4 und ode3 basieren wie die Algorithmen ode4S und ode23 auf dem Runge-Kutta-Verfahren, ode2 basiert auf der Trapezformel nach Heun, und odel verwendet das Polygonzugverfahren nach Euler (explizite Rechnung). Daneben steht noch der Algorithmus ode14x zur Verfügung, der mit einer Kombination aus Newton-Raphson-Verfahren und Extrapolation arbeitet. Für zeitdiskrete Systeme steht der discrete-Algorithmus sowohl vom Typ VaTiable-step als auch Fixed-step zur Verfügung. Für Systeme, die keine Zustandsgrößen enthalten, wählt Simulink automatisch den Solver discrete. In [31] wird der Großteil der von MATLABjSimulink verwendeten Integrationsalgorithmen ausführlich und verständlich dargestellt. Vier der bekanntesten Integrationsverfahren sollen an dieser Stelle kurz wiederholt werden, um die Aufgabenstellung bei der numerischen Integration von Differentialgleichungen zu verdeutlichen. Numerische Integration von Differentialgleichungen: Das Verhalten eines dynamischen Systems mit der Ausgangsgröße y(t) und der Anregung u(t) kann allgemein mithilfe einer oder mehrerer inhomogener Differentialgleichungen 1. Ordnung
Die Configuration Parameters Dialogbox y(t) = f(u(t),y(t))
Die Configuration Parameters Dialogbox ist in die sechs Register Solver, Data Import/Export, Optimization, Diagnostics, Hardware Implementation und Model Referencing unterteilt. Register Solver
beschrieben werden. Zur Berechnung des Zeitverlaufs von y(t) muss diese Gleichung integriert werden. Die numerische Integration liefert eine Näherungslösung YI der analytischen Lösung y(tI) der Differentialgleichung: t,
t,
Hier können Beginn und Ende der Simulation sowie der Integrationsalgorithmus und zugehörige Optionen festgelegt werden. Abb. 8.21 zeigt das Fenster des Solver-Registers mit der Default-Einstellung.
YI = Ya
+
J
f(u(t),y(t))dt
,."
y(tI) = y(ta)
+
J
f(u(t),y(t))dt
(8.1)
to
to
Der entstehende Fehler dy = YI - y(h) hängt vom Integrationsverfahren ab. Polygonzngverfahren nach Euler (explizite Rechnung): Dies ist das einfachste und bekannteste Integrationsverfahren. Die Integration von ta bis tl wird a.ngenähert durch die Höhe hya des Dreiecks, das durch die Verlängerung der Tangente Ya an die y
A1Jb. 8.21: Solver-Register der Conjiguration Parameters Dialogbox
,~,J Yo
•
+Yo
AI)" Yo
"-y(t)
('.i
"
I'
Für die numerische Lösung der Differentialgleichungen bietet Simulink eine Vielzahl von Algorithmen (Solver) an, die ein breites Spektrum an Problemstellungen abdecken.
I-
1 I0
h
1 l
t1
Abb. 8.22: Polygonzugverjahren nach Euler (expl'izite Rechnung); Integrat'ionsschrittweiteh (entnommen aus [31])
8 Simulink Grundlagen
296
wahre Kurve y(t) im Punkt (Ya, ta) bis tl entsteht. Damit berechnet sich YI abhängig von der Schrittweite h zu: YI = Ya
+ hyo
8.7 Simulationsparameter
Zeitpunkt to noch nicht bekannten Funktionswerte YI und Y2 durch die PrädiktorKorrektor-Methode berechnet werden. Zunächst wird mit der expliziten Euler-Methode ein Schätzwert yi bestimmt, und dieser mit der Trapezformel von Heun zu YI korrigiert. Das Polynom 3. Ordnung P3(t) durch Ya und YI liefert bei t2 schließlich den Schätzwert yf. Damit berechnet sich Y2 zu:
Abb. 8.22 zeigt das Vorgehen. Deutlich ist der entstehende Fehler dy zu erkennen. Das explizite Euler-Verfahren neigt daher bei großer Schrittweite zur Instabilität. Trapezverfahren von Reun: Beim Trapezverfahren von Heun wird das Integral auf der rechten Seite von GI. (8.1) durch die so genannte Trapezregel (Abb. 8.23) approximiert. Dadurch entsteht die Näherung (Abb. 8.24): YI = Ya
+ h.
(Yo
+ YI)
(8.2)
2
297
Y2 = Ya
+ 2: . [Ya + 4Yl + f(U2, yn]
y
P,(t,) = y,P
y,,,~,(;r
Y, Yo
Y to
Yn+l
Yn-1
A2::1. 2 h·(yn-yn·,)
A 1=h·yn~1
. . ,<
Yn
lJ Kurvenabschnitt [Yn-1 Yn] :
A,+A2=~' (Yn-1+Yn) I
I tn_2
I .t tn+1
Yo
Abb. 8.23: Trapezregel: Die Fläche unter dem KU'f'Venabschnitt [Yn-l Yn] wird durch ein Tmpez app'f'Oximiert
yfl
Y
~
yfl
Y,
Wie zu erkennen ist, handelt es sich beim Runge-Kutta-Verfahren um ein Doppelschrittverfahren. Meistens wird der Doppelschritt von to nach t 2 zu einern Schritt zusammengezogen und die Schrittweite halbiert_
gesamte Trapezfläche unter dem
Yn-i
.~ • +y'(Pl YO~Y02 i
h
'
I~' 1
Explizite Rechnung nach Adams-Bashforth: Hier handelt es sich um ein Mehrschrittverfahren, d.h. zur Näherung des Integrals von to bis t1 bzw. t n bis t n+1 werden zusätzlich die Steigungen an bereits vergangenen Punkten verwendet. Abb. 8.26 zeigt, dass durch die drei Punkte Yn, Yn-1 und Yn-2 ein Interpolationspolynom P2(t) gelegt wird. Damit kann in Gleichung (8.1) f(u(t), y(t)) unter dem Integral durch P2 (t) ersetzt werden. Yn+1 berechnet sich dann zu:
Yn+l = Yn Mittelwert
h
+ 12
. [23Yn - 16Yn-1
+ 5Yn-2]
Um das Verfahren nach Adams-Bashforth starten zu können, müssen zunächst die ersten Werte mit einern Einschrittverfahren wie Euler oder Runge-Kutta berechnet werden.
1 derSt"gu,g"
10
Abb. 8.25: Runge-Kutta- Verfahren; Integmtionsschrittweite h (entnommen aus [S1})
t,
I,
Abb. 8.24: Trapezverfahren nach Neun; Integmtionsschrittweite h (entnommen aus [31})
Da GI. (8.2) implizit ist (YI taucht wegen YI = f(UI, YI) auch auf der rechten Seite der Gleichung auf), muss sie bei nicht separierbaren Variablen iterativ gelöst werden. Dazu wird zunächst z.B. mit dem Polygonzugverfahren nach Euler ein Schätzwert yi bzw. Yi bestimmt, der dann auf der rechten Seite von GI. (8.2) anstelle von YI eingesetzt wird. Dies wird in Abb. 8.24 durch (P) verdeutlicht. Runge-Kutta-Verfahren: Hier wird das Integral von ta bis tl mithilfe der Kepler'schen Fassregel angenähert. Da dies ein implizites Verfahren ist, müssen die zum
y
...... --~2(t)1
t:J~:
::=1 - - - - 'P (t )
y".J.... (,
I I
Ir--Jl--4 "I
+----4
tn_2
t'·1
2n+1
I'
Ii
I t,
tn+ 1
Abb. 8.26: Verfahren nach Adams-Bashforth; Integmtionsschrittweite h (entnommen m,s [31})
8 Simulink Grundlagen
298
vVie bereits angesprochen, bietet Simulink Integrationsalgorithmen (Solver) vom Typ Variable-step und Fixed-step an. Va'T'iable-step-Solver arbeiten mit variabler Integrationsschrittweite. Die Differentialgleichungen werden zunächst unter Verwendung der Schrittweite zu Beginn, der Initial step size gelöst. Sind die Ableitungen der Zustandsgrößen zu Simulationsbeginn zu groß, kann ein dort angegebener Wert vom Sol ver auch unterschritten werden. Während der Simulation wird versucht, die Differentialgleichungen unter Verwendung der größtmöglichen Schrittweite Max step size zu lösen. Wird die Max step size auf auto gesetzt, bereclmet sich ihr Wert abhängig von Start time und Stop time zu: M
. Stop time - Start time ax step s~ze = 50
Xj(t)
tn tn+1
~
~
Acceplable errar ---....,.,.--.. Acceptable errOf wird durch wird .durch
reltol*[xil bestimmt Acceptable error reltol*[xil bestimmt
(8.3).
Durch die Möglichkeit der Schrittweitenanpassung können Variable-step-Solver während der Simulation die Änderung der Zustandsgrößen vom letzten zum aktuellen Zeitpunkt überwachen (Fehlerüberwachung). Darüber hinaus wird bei variabler Schrittweite die Erkennung von Unstetigkeitsstellen wie z.B. SprungsteIlen möglich (zero crossing detection). Für einen ersten Versuch eignet sich bei zeitkontinuierlichen Systemen in der Regel der Default-Algorithmus ode45.
Fehleriiberwachung: Damit die Integrationsschrittweite an die Dynamik der Zustandsgrößen angepasst werden kann, wird bei jedem Integrationsschritt die Änderung jeder Zustandsgröße vom letzten zum aktuellen Zeitpunkt berechnet. Diese Änderung wird mit loeal error ei (i = 1, ... , Anzahl der Zustandsgrößen im System) bezeichnet, siehe Abb. 8.27. Der Variable-step-Solver ermittelt nun bei jedem Integrationsschritt, ob der local error jeder Zustandsgröße die Bedingungen für .den aeeeptable error erfüllt, der durch die Parameter Relative toleranee und Absolute toleranee der Configuration Parameters Dialogbox (abgekürzt mit reltol und abstol) bestimmt wird: ei ::;
299
8.7 Simulationsparameter
:l1ax (reltol ~ lXi I, abstol), aeeeptable error
wird durch abstol bestimmt
Abb. 8.27: Fehlerüberwachung bei Variablestep-Solvern
zero crossing detection: Unter zero crossings versteht Simulink Unstetigkeiten im Verlauf der Zustandsgrößen sowie gewöhnliche Nulldurchgänge. Unstetige Signale werden durch folgende zero erossing-Blöcke erzeugt: Abs, Backlash, Dead Zone, Hit Crossing, Integrator, MinMax, Relay, Relational Operator, Saturation, Sign, Step, Switch sowie Subsysteme, deren Ausführung durch Steuersignale kontrolliert wird (S. 316). Diese Art von F'unktionsblöcken führt zero crossing-Variablen mit sich, die von der unstetigen Zustandsgröße abhängen und an einer Unstetigkeitsstelle ihr Vorzeichen ändern. Simulink fragt am Ende jedes Integrationsschritts diese Variablen ab und kann so erkennen, ob innerhalb des aktuellen Schritts ein zero erossing aufgetreten ist. Wenn ja, wird der Zeitpunkt des Auftretens durch Interpolation zwischen dem letzten und dem aktuellen Wert der entsprechenden zero erossing- Variablen möglichst genau festgestellt. Simulink rechnet dann bis zum linken Rand der Unstetigkeitsstelle und fährt beim nächsten Integrationsschritt am rechten Rand fort. Bei zu grob gewählten Toleranzen kann es passieren, dass Nulldurchgänge,(von Zustandsgrößen Xi oder zero crossing-Variablen) nicht erkannt werden. Besteht dieser Verdacht, müssen die Toleranzen verkleinert werden, um sicherzustellen, dass der Variable-step-Solver die Schrittweite ldein genug wählt. Abb. 8.28 soll diese Problematik verdeutlichen.
"1~Lt
Erfüllt eine der Zustandsgrößen diese Bedingung nicht, wird die Integrationsschrittweite herabgesetzt und erneut gerechnet. Dass der aeeeptable error über eine MaximalwertAuswahl bestimmt wird, hat folgenden Grund: Ein für Relative toleranee eingegebener Wert entspricht der zulässigen Änderung in % des aktuellen Betrags der Zustandsgröße Xi. Wenn der aeceptable error nur durch reltol'lxi/ bestimmt würde, könnte dieser bei sehr kleinem lXii so klein werden, dass die Zustandsgrößen sich nicht mehr ändern dürften. Dies wird durch einen festen Wert von abstol abgefangen. Bei Wahl der Absolute toleranee zu auto wird mit dem Wert 10- 6 zum Startzeitpunkt begonnen. Danach wird" abstol auf reltol· max (lXii) gesetzt. So wird gewährleistet, dass in Bereichen, wo Ix;! sehr ldein oder null ist, sich die Zustandsgröße noch ändern darf.
"~t
Abb. 8.27 soll diesen Sachverhalt verdeutlichen. Durch diese Vorgehensweise wird sichergestellt, dass in Bereichen, in denen die Zustandsgrößen sehr steile Verläufe aufweisen, die Schrittweite automatisch verkleinert wird. In Bereichen, in denen sich die Zustandsgrößen kaum ändern, kann dagegen durch Verwendung der größtmöglichen Schrittweite Max step size Rechenzeit gespa.rt werden.
Die Option Zero crossing control (erscheint nur bei Var'iable-step-Solvern) ermöglicht es, die Erkennung von Unstetigkeitsstellen modellweit zu aktivieren (Enable all) oder zu deaktivieren (Disable all, Kompromiss zwischen Rechenzeit und Genauigkeit!). Bei Wahl von Zero crossing eontrol = Use loeal settings kann die zero crossing detection für jeden der oben genannten zero crossing-Blöcke durch Aktivierung/Deaktivierung der
Nulldurchgang nicllt detektiert
Nulldurchgang detektiert
Abb. 8.28: Erkennung von Nulldurchgängen hängt von Toleranzen ab
300
8 Simulink Grundlagen
8.7 Simulationsparameter
301
Check Box Enable zero crossing detection in der jeweiligen Block Parameters Dialogbox individuell zugelassen bzw. unterdrückt werden. Fixed-step-Solver arbeiten mit fester Schrittweite; eine Fehlerüberwachung und Erkennung von Unstetigkeitsstellen ist nicht möglich. Da die Anzahl der Integrationsschritte jedoch bekannt ist, kann die Rechenzeit für ein Simulationsmodell genau abgeschätzt werden. Dies ist besonders dann von Bedeutung, wenn aus dem Blockdiagramm - z.B. mit dem Real-Time Workshop - Code erzeugt und für eine Hardwareanwendung (Microcontroller, DSP etc.) weiterverwendet werden soll. Ein weiterer Vorteil besteht darin, dass bei Simulation mit konstanter Schrittweite ein Vergleich mit Mess-Signalen (z.B. aus digitalen Regelsystemen) sowie eine Weiterverwendung der Simulationsergebnisse in der Praxis (z.B. Einlesen in digitale Regelsysteme) möglich ist. Bei Auswahl eines Fixed-step-Solvers erscheinen neben der Option Fixed step size (fundamental sampie time) für die Schrittweite noch weitere Optionsfelder: Periodic sampie time constraint steht standardmäßig auf Unconstrained. Eine Umstellung auf Ensure sampie time independent ist nur bei Model Referencing (Kap. 8.9.3) von Belang, Specified wird nur für die explizite Simulation von Multitasking-Systemen benötigt. Letzteres gilt auch für die Check Boxen Higher priority value indicates higher task priority und Automatically handle data transfers between tasks, eine Aktivierung ist daher im Normalfall nicht notwendig. Die Option Tasking mode for periodic sampie times wird in Kap. 10.4.1 genauer besprochen. Register Data Import/Export In diesem Register besteht die Möglichkeit, Daten auf den MATLAB-Workspace ZU schreiben oder von diesem zu lesen, ohne entsprechende Blöcke wie To Workspace, From Workspace etc. im Modell zu platzieren. Darüber hinaus können die Zustände des Modells mit Anfangswerten belegt werden. Dies ist besonders dann sinnvoll, wenn bei einer vorangegangeneli Simulation des gleichen Modells der Endzustand mit Save to workspace - Final states gespeichert wurde und die aktuelle Simulation von diesem Zustand aus gestartet werden soll. Abb. 8.29 zeigt das Fenster des Data Irnport/ExPQrtRegisters mit der Default-Einstellung. Vlird die Input-Check Box unter Load from workspace aktiviert, können im angrenzenden Textfeld die einzulesenden Daten angegeben werden. Die Daten können unter anderem in den bekannten Formaten Array, Stmcture und Structure with time vorliegen. Für skalare und Vektor-Signale (Format Array) gelten die auf Seite 281 im Zusammenhang mit dem From Workspace-Block gemachten Angaben. Die Vektoren der einzelnen Signale werden in der Reihenfolge der Spalten in die Inport-Blöcke (Unterbibliothek Ports & Subsystems, Kap. 8.8.3) auf der obersten Ebene des Simulationsmodells eingelesen. Eine, einzulesende Structure oder Structure with time muss das auf Seite 302 angegebene Format haben. Wichtig: In der Block Parameters Dialogbox jedes Inport-Blocks muss unter Port dimensions die Dimension des korrespondierenden Einzelsignals (Feld stmktumame. signals. dimensions) eingetragen werden. Unabhängig vom Format gilt: Bei Aktivierung der Check Box Interpolate data in der Block Parameters Dialogbox der Inport-Blöcke inter- oder extrapoliert Simulink die Daten linear, wenn dies nötig ist.
Abb. 8.29: Data Import/Export-Register der Configuraiion Parameters Dialogbox Für die Initialisierung von Zuständen im Modell muss die Initial state-Check Box aktiviert werden. Im angrenzenden Textfeld kann dann eine Variable (Format Array, Structure oder Structure with time) eingetragen werden, die die Anfangswerte enthält. Diese Option ist besonders dann sinnvoll, wenn die eingelesenen Zustandswerte in einer vorangegangenen Simulation mit der Option Save to workspace, Check Box Final state oder einem To Workspace-Block auf den Workspace gespeichert wurden. In diesem Fall ist es möglich, die Simulation mit exakt denselben Werten der Zustandsgrößen beginnen zu lassen, mit denen eine vorangegangene beendet wurde. Ausgangsgrößen des Modells können durch Aktivierung der Check Box Output unter dem eingetragenen Variablennamen auf den Workspace gespeichert werden. Simulink erkennt nur solche Signale als Ausgänge an, die auf einen Outport-Block geführt sind. Ebenso können die Zustände eines Modells durch Aktivierung der States-Check Box unter dem angegebenen Variablennamen gespeichert werden. Wurde eine der unter Save to workspace zur Verfügung stehenden Check Boxen aktiviert, können unter Save options zusätzliche Optionen zur abgespeicherten Datenmenge angegeben werden. An Formaten stehen die bekannten Formate Array, Structure und Strucim'e with time zur Verfügung. Ein gespeicherter Array (von Ausgangs- oder Zustandsgrößen) hat folgendes Aussehen (stimmt mit To Workspace-Block überein): Ul1
U21
u12
u2 2
... unl un2
1
[
'u1final u2final
unfinal
Eine StructuTe with time besitzt zwei Felder, time und signals. Bei der Structure bleibt das time-Feld leer. Aussehen der Structure with time:
302 strukturname.time = strukturname.signals(l).values = strukturname.signals(l).dimensions = strukturname.signals{1).label = strukturname. signals (1) . blockName =
[tl t2 ... tjinad T [ul 1 u1 2 ... u1jinal]T 'Dimension des Signals_I' 'Label des Signals_I' 'Modellname/Name_des_zugehörigen.Blocks'
strukturname.signals(n).values = strukturname.signals(l).dimensions = stTukturname.signals(n).label = stTukturname.signals(n).blockName =
[uni un2 .,. unjinad T 'Dimension des Signals..n' 'Label des Signals..n' 'Modellname/Name_des_zugehörigen.Blocks'
Information über die automatische Zuordnung der Zustandsgrößen zu Spalten bei Army bzw. Feldern bei Structure und Structure with time erhält man z.B. über den Befehl (siehe auch S. 337): [size,
303
8 Simulink Grundlagen
xO,
xstordJ
sys
ViTerden die Zustandsgrößen auf den Workspace geschrieben, so kann bei einer StTuCtur-e oder Structur-e with time natürlich auch das Feld strukturname.signals.blockName abgefragt werden. Bei Simulation mit einem Var-iable-step-Solver können im Register Data Impor·t/Export noch zusätzliche Ausgabeoptionen festgelegt werden: Durch Auswahl der Option Refine output im Parameterfeld Output options besteht die Möglichkeit bei großer Integrationsschrittweite durch Eingabe eines Refine factors > 1 zusätzlich Zwischenwerte durch Interpolation berechnen zu lasse!1. Dies erzeugt feiner aufgelöste Kurvenverläufe, erhöht jedoch die Rechenzeit kaum. Die Zeiten, zu denen diese zusätzlichen Zwischenwerte berechnet werden, können explizit angegeben werden, wenn die Option PTOduce additional output gewählt wird. Unter Output times kann hier ein Zeitpunkt oder ein Vektor mit Zeitpunkten eingetragen werden. PTOduce specified output only gibt das Simulationsergebnis nur zu den eingetragenen Zeitwerten aus. Register Optirnization
Abbildung 8.30 zeigt das Fenster des Optimization-Registers mit der DefaultEinstellung (der untere Fensterteil Code genemtion erscheint nur bei installiertem RealTime-Workshop). Eine Aktivierung der Check Box Inline pammeters unterdrückt die Möglichkeit, Blockparameter während einer Simulation zu verstellen. Allein die Parameter, die mithilfe der Dialogbox Model Parameter- Configumtion (Auswahl von Configure) als Global(tunable) pammeters ausgewiesen wurden, bleiben verstellbar. Da nicht verstellbare BlockparaID-eter von Simulink als Konstanten behandelt werden können, wird gegenüber der DefaultEinstellung (die die meisten Blockparameter während der Simulation verstellbar lässt) Rechenzeit gespart. Daneben können weitere Optionen eingestellt werden, die Rechen- und Speicheraufwand einer Simulation beeinflusse!~: Block Teduction optimization ermöglicht Simulink die automatische Zusammenlegung von Blöcken wä.hrend der Simulation, dies spart Rechenzeit.
{ibb. 8.30: Optimization-Register der Conjiguration Parameters Dialogbox
Wenn die Check Box Implement logic signals as boolean data deaktiviert ist, können Blöcke (Logical Operator und Relational Operator, siehe S. 293), die am Ausgang standardmäßig den Datentyp boolean ausgeben, auf Ausgabe von double umgeschaltet werden. Dazu muss in deren Block Pammeters Dialogbox jedoch vorher der Output data type mode auf Logical umgestellt werden. Durch diese Option können die Ausgangssignale solcher Blöcke leichter in anderen Blöcken weiterverarbeitet werden. Die Check Box Conditional input bmnch execution bezieht sich auf Simulink-Modelle; in denen Switch- oder Multiport Switch-Blöcke (Bibliothek Signal Routing, Kap. 8.8.3) verwendet werden. Aktiviert bewirkt sie, dass während der Simulation jeweils nur die Blöcke des Signalpfades berechnet werden, der tatsächlich durch das Kontrollsignal der Blöcke an den Ausgang durchgeschaltet wird. Dies verringert die Rechenzeit. Die Check Box Signal stomge r-euse sollte nur deaktiviert werden, wenn eine im Modell implementierte C-MEX S-Funktion mit dem Simulink Debv,gger auf Fehler durchsucht oder im Modell ein floating scope (siehe S. 284) oder floating display verwendet wird. Für das Ein- und Ausgangssignal jedes Blocks wird dann ein separater Speicherbereich alloziert. Der Speicher, der bei der Simulation eines Modells belegt wird, erhöht sich dadurch enorm. Die Option Application lifespan bezieht sich nur auf Blöcke aus dem Simulink Fixed Point Blockset (gehört nicht zum Basispaket), und kann daher.a.uf i'l~f belassen werden: Register Diagnostics
Im Register Diagnostics kann bestimmt werden, wie mögliche Ereignisse während eines Simulationslaufs von Simulink behandelt werden sollen. Abb. 8.31 zeigt das Fenster des Diagnostics-Registers mit der Default-Einstellung. Für jedes der aufgelisteten Ereignisse (Algebmic loop, Minimize algebmic loop, Block prior-ity violation usw.) kann nebenstehend ausgewählt werden, wie reagiert werden soll: Bei none wird da.s Ereignis' ignoriert, warning erzeugt eine Warnung im MATLAB-Fenster, er-TOr- erzeugt eine Fehlermeldung und ruft den Abbruch der Simulation hervor. Die Ereignisse sind mehreren Ursachengruppen wie Solver- (Abb. 8.31), Sampie T'ime, Data Integr-ity; Conver-sion usw. zugeordnet, deren individuelle Ereignisliste durch Markierung des entsprechenden Unterregisters im linken Fensterteil von Abb. 8.31 angezeigt werden kann.
304
8 Simulink Grundlagen
8.7 Simulationsparameter
305
Abb. 8.31: Diagnostics-Register der Conjiguration Parameters Dialogbox
Register Hardwa're Implementation Soll aus einern Simulink-Modell Code für digitale Systeme erzeugt werden, so müssen die Optionen des Hardware 1mplementation-Registers (Abb. 8.32) beachtet werden. Hier können die Eigenschaften der Hardware spezifiziert werden, auf der der Code später ausgeführt werden soll. Unter Device type steht eine Liste gängiger Mikroprozessoren (z.B. ARM 7/8/9, Motorola 68332, NEC V850) zur Verfügung. Entspricht die spätere Anwendungsurngebung keinem der Listeneinträge, können nach Auswahl von Device type = Gustom die charakteristischen Eigenschaften der Hardware (Number of bits, native word size und Byte or-dering) auch individuell eingetragen werden.
Abb. 8.33: Model Rejerencing-Register der Conjiguration Parameters Dialogbox per top model festgelegt, wie oft das betrachtete Modell als Referenz innerhalb anderer Modelle einbindbar ist. Unter Model dependencies können dem betrachteten Modell vom Benutzer zugeordnete Files angegeben werden (z.B. M-Files, die über CallbackRoutinen (Kap. 8.8.1) mit dem betrachteten Modell verknüpft sind). Sie werden dann bei Simulation des anderen Modells (welches das betrachtete Modell referenziert) auf Änderungen mitüberprüft.
8.7.2
Fehlerbehandlung und Fehlersuche
Tritt während der Simulation ein Fehler auf, hält Simulink die Simulation an und ein Simulation Diagnostics Viewer wird geöffnet. Im oberen Teil des Fensters (Abb. 8.34) sind die am Fehler beteiligten Blöcke des Modells aufgelistet. Werden sie angeklickt, erscheint im unteren Fensterteil die genaue Beschreibung des Fehlers und im Modell wird zusätzlich die Fehlerquelle farbig hervorgehoben, um ihre Lokalisierung zu erleichtern .
.,m(@ Abb. 8.32: Hardwar'e Implementation-Register der Conjiguration Parameters Dialogbox
~~7JM~~~~~e.'·.:,'< ·~1' Sbt;;:~'~':' ".:',' ;.' I: fie~~rf~trbf7s~t;;j~iY-T~-·~~:~7t-;'~:-:~T;:·~,i'~;: ,ii
o _ _im~_lfllllf!rt!il!Qili\l[lWf&!jjj_ _~~li1rnJ
o
Bloe!< error
Conslant
Simullnk
Data type mismalch. Output port 1 01 'bspm ...
Register Model Rejerencing Im oberen Fensterteil Rebuild options for all referenced models des Model ReferencingRegisters (Abb. 8.33) kann ausgewählt werden, wie mit Modellen verfahren werden soll, die vorn betrachteten Modell referenziert (Kap. 8.9.3) werden. Bei der DefaultEinstellung Rebuild options = 1f any changes detected wird nur dann das Simulation Target erneut erstellt, wenn sich z.B. das referenzierte Modell selbst, von ihm verwendete Workspace-Variablen oder eingebundene S-Funktionen geändert haben. Im unteren Fensterteil Options jor rejerencing this model wird unter Total number of instances allowed
Abb. 8.34: Fehlermeldung
im Simulation Diagnostics Vi ewer
Ein Linksklick auf den Open-Button öffnet im Allgemeinen die Block Pammeters Dialog box des zugehörigen Blocks, so dass dort direkt Parameteränderungen vorgenommen werden können.
306
8 Simulink Grundlagen
Soll ein Simulink-Modell auf Fehler durchsucht werden, so hilft der Simulink Debugger. Mithilfe des Simulink Debuggers kann die Simulation abschnittsweise ausgeführt und Zustände, Eingangs- und Ausgangsgrößen überprüft werden. Der Simulink Debugger kann z.B. vorn Simulink-Modell aus (Button '~! bzw. Menüpunkt Tools/Simulink debugger) gestartet werden. An dieser Stelle soll am Beispiel bspmath.mdl ein kurzer Einblick in die grafische Bedienoberfläche des Simulink Debuggers (Abb. 8.35) gegeben werden. Wird die Simulation über den Button !~I im Toolbar des Debuggers gestartet,
~~3 ~~8 r"
edaempfle
'~ MU}(8In~SSChWjngUng Galn1
Constanl Inltlallzlng
., '[rOö;;;'7,-"'-:"(:;f'::~~;-1:~ 1~[i'-öoo'T>:,t iV~~lieSt~pöltcrefe:;~:71'::~~,
8.8.1
307
Arbeiten mit Callback-Routinen
Zur schnellen Modifikation, Simulation und Auswertung eines Simulink-Modells wird es sinnvoll sein, Definitionen von Blockparametern oder Befehlsfolgen zur grafischen Darstellung oder Weitervera.rbeitung von Simulationsergebnissen in MATLAB-Skripts (M-Files) zusammenzufassen. Auf diese Weise hat man zu jedem Zeitpunkt Übersicht über die Para.meter, mit denen aktuell simuliert wird, bzw. muss nach der Simulation Analyse- und Plotbefehle nicht immer wieder händisch aufrufen.
Um diese MATLAB-Skripts mit dem Simulink-Modell fest zu verlmüpfen, werden so genannte Callback-Routinen verwendet. Unter Callback-Routinen versteht man Funktionen oder Progra.mme, die ausgeführt werden, wenn eine bestimmte Aktion auf ein Simulink-Modell (oder auch einen Funktionsblock) ausgeführt wird, wie z.B. Laden, In~· itialisieren, Starten oder Speichern eines Modells oder Blocks. Soll ein MATLAB-Skript z.B. automatisch bei der Initialisierung eines Simulink-Modells ausgeführt werden, um in ihm definierte Blockparameter in den MATLAB-Worlcspace zu laden, wird unter File/Model properties der Model Properties-Editor aufgerufen und im Register Callbacks unter Model initialization Junction der Name des MATLAB-Skripts (ohne Extension .m) eingetragen (Abb. 8.37). Sollen die Parameter auch bereits schon beim Öffnen des Simulink-Modells zur Verfügung stehen, wird das MATLAB-Skript zusätzlich unter Model pm-load Junction eingetragen. Information, welche Callback-Routinen wann aufgerufen werden, erhält man durch Aktivieren der Check Box Callback tracing unter File/PreJerences. Damit wird Simulink veranlasst, alle Callback-Routinen bei ihrem Aufruf im MATLAB-Command-Window aufzulisten.
lixh ~
8.8 Verwaltung und Organisation eines Simulink-Modells
Abb. 8.35: Fenster des Simulink Debuggers (oben) und SimulinkModell bspmath. mdZ (unten)
Aus dem MATLAB-Command-Window kann die Verknüpfung eines MATLAB-Skripts mittels Callback-Routine mit dem set_param-Befehl durchgeführt werden. Der Befehls" aufruf set_param (' sys', 'InitFcn', 'sys_ini')
hält der Debugger automatisch nach dem ersten Simulationssschritt bspmath.Simulate an. Mithilfe der Schaltflächen ,~~~:~r,'}"~~,~J kann nun die Simulation blockweise oder schrittweise fortgesetzt und dabei Ein- und Ausgänge der gerade ausgeführten Blöcke angezeigt werden. Abb. 8.35 oben zeigt das Fenster des Debuggers von bspmath. mdl nach Simulationsstart und zweimaliger Aktivierung von ;p~öj (blockweise Fortsetzung) sowie das Blockdiagramm von bspmath. mdl mit eingeblendeter Debugger-Information. Im Breakpoints-Register des Debuggers können die Punkte, an denen der Debugger anhält selbst gesetzt sowie zusätzliche Haltebedingungen (z.B. bei zero crossings) festgelegt werden.
verknüpft das MATLAB-Skript sys_~m.m als Model initialization lunction mit dem Simulink-Modell sys. Rückgängig gemacht werden kann diese Verlmüpfung über die Befehlszeile: set_param (' sys', 'Ini tFcn')
,,)
Callback-Tracing wird durch folgende Befehlszeile aktiviert: set_param(O, 'CallbackTracing'. 'on')
Welche Callback-Routinen Simulink für Modelle anbietet, und wie diese bei Verwendung des set_param-Befehls bezeichnet werden, zeigt Abb. 8.37.
8.8
Verwaltung und Organisation eines Simulink:-Modells
Die Punkte in diesem Unter kapitel dienen der u.a. grafischen und strukturellen Organisation aber auch der komfortableren Durchführung einer Simulation sowie des Druckens eines Simulink-Modells.
Beispiel In diesem einfachen Beispiel werden die Ausgänge eines Constant- und eines Repeating Sequence-Blocks miteinander verglichen. Die Signale werden einzeln auf den Worlcspace geschrieben und können mit MATLAB grafisch dargestellt werden. Die Parameter der Blöcke werden im MATLAB-Skript bspparameter -.ini. m definiert. Ein MATLAB-Skript
8 Simulink Grundlagen
308
8.8 Verwaltung und Organisation eines Simulink-Modells
309
für die grafische Ausgabe kann z.B. aussehen wie die Datei bspparameteLplot. m. Der Model Properties-Editor aus Abb. 8.37 zeigt, wie die MATLAB-Skripte mit bspparameter .mdl verknüpft wurden. Aus Abb. 8.38 rechts ist das Ergebnis der SirrlUlation zu entnehmen. Hier wurden die im Format Array gespeicherten Einzelsignale versLKonst, repeat uml erg in zwei Subplots über die Simulationszeit tout aufgetragen.
FlEJ.b:':":.2]., B·.MI
~---..
1
Froml
Constant
~~I~ ~.
Goto2
Beispiel zur VerCallback-Routinen: bspparameter.mdL
Abb.
8.36:
wendung
von
""'~~~-'-"-'-"'~""-'
Q!oaeFcn
~
a
!
~
_
~ ,
_
_
_
_
_
%bspparameter_ini.m %Constant Konst= 1. 15; %Repeating Sequence zeit=[0:15:135]; wiederhol=[0,O,5,5,10,10,20,20,10,10]; %Gain verst=10;
%bspparameter_plot.m subplot(2,1,1) plot(tout,verst_Konst,tout,repeat); grid on; set(gca,'Fontsize', 13); titleC'verst_Konst und repeat');
sUbplot(2,1,2) plot (tout, erg); grid on; set(gca,'Ylim', [0 2] ,'Fontsize', 13); title('Ergebnis des Vergleichs');
Der M adel Brawser
Der Model Browser ermöglicht es dem Simulink-Benutzer, in einem komplexen Modell mit mehreren Modellebenen (erzeugt durch Subsysteme, Kap. 8.9) leichter zu navigieren. Aufgerufen wird der Model Browser über den Button :!mi. im Toolbar des Simulink-Modells oder durch Auswahl des Menüpunkts View/Model browser options/Model browser. Das Fenster des Simulink-Modells wird dann in zwei Unter fenster
InttFcn
Pl'e8avaFon
oo
8.8.2
PoatLoadFcn
St,opFon
.
I;l~;,!:": 1.l?e~~i~ii~:O,: I:)'"
Pl'oLoadFon
startFcn
: .".. :
Abb. 8.38: Links: Block Parameters Dialogbox der Repeating Sequence. Rechts: E7)Jebnis der Simulation, erzeugt mit bspparameter_pLot.m
Repeating Sequence
NUlllllderCallbnck-Rolllillllbeirn Aufrufrnitnetyat'am:
i': "':
Scope
From3
Got03
:
From2
To Workspace1
Gain
. " .~ ..
0.5 .. , .. ,: ....... :., " .............. \ ......;, ...... ,;................ ;.............. .
rU"'on ."i1,~'"," 'SimuI81lon'5loplunctio~:' , . "'. \' '" i,.,'~ "':
~;'~"cP'ot
------------
:r~~
F""""""H'""
Model 8.37: Abb. Properties-Editor von bspparameter.mdL, links sind die Bezeichungen der Callback-Routinen bei Verwendung des seLparamBefehls aufgelistet
Abb. 8.39: Fenster- des Simulink Model Browser fiir das DemoModell j14_digitaLmdL
310
\!\ r); :!I
ii
8 Simulink Grundlagen
8.8 Verwaltung und Organisation eines Simulink-Modells
aufgeteilt. Abb. 8.39 zeigt das Fenster des Demo-Modells f14_digital.mdl nach Start des Model Browser. Die im Modell existierenden Subsysteme (wie z.B. Controllers, F14 Aircmft Dynamic Model) werden im linken Fensterteil aufgelistet. Ein Doppelklick auf einen Listeneintrag öffnet das Subsystem. Tiefer verschachtelte Subsysteme erscheinen ebenfalls in der Liste im linken Fensterteil, ihrem jeweils überlagerten Subsystem zuge. ordnet. Einrücken der Listeneinträge verdeutlicht die Verschachtelungstiefe.
311
Abb. 8.40: Beispiel 1 zum Demux-Block: Ein 3-elementiges Eingangssignal wird in 3 skalare Einzelsignale aufgeteilt: bspLdemux. mdL
Display1
:;i 11
8.8.3
::\ :1',
Bibliotheken: Signal Routing und Signal Attributes Signalführung und -eigenschaften
:1
J
Abb. 8.41: Beispiel 2 zum Demux-Block: Ein 4-elementiges Eingangssignal wird in 3 E'inzelsignale aufgeteilt (automatische Verteilung der Elemente): bsp2_demux.mdL
Die Blöcke dieser Unterbibliotheken dienen der grafischen Organisation von F\mktionsblöcken und ihren Verbindungslinien. Komplexere Modelle können so übersichtlich gestaltet und komfortabel bedient werden.
Signal Routing - Signalführung Mux und Demux Mit dem Mux-Block können wie mit einem Multiplexer 1-D Arrays (also skalare oder Vektor-Signale, Kap. 8.4.1) zu einem neuen Vektor-Signal >Ir kombiniert werden. Sobald eines der Einzelsignale ein 2-D Array ist (MaMux trix) können die Einzelsignale nur noch zu einem Signal-Bus zusammengefasst werden (siehe Kap. 8.4.1). Unter Number of inputs können die • Namen, die Dimensionen und die Anzahl der Eingangssignale angegeben werden. Beispiel: Mit dem Eintrag [4 3 -1] werden drei Eingänge definiert Demux mit der Signalbreite 4 am ersten und 3 am zweiten Eingang. Die Signalbreite des dritten Eingangs wird durch Eintrag von -1 nicht festgelegt.
>l
4
1 41 ~
~4ß4 L..:.:J
1
Conslant
>~
Der Demux-Block hat die umgekehrte l!unktion. Er teilt ein aus Einzelsignalen kombiniertes Signal wieder in Einzelsignale auf. Der Demux-Block arbeitet entweder im Vektor-Modus (Bus selection mode = off) oder bus selection-Modus (Bus selection mode = on). Im Vektor-Modus werden am Eingang nur 1-D Signale akzeptiert, deren Elemente der Demux abhängig von der Number of outputs auf seine Ausgänge aufteilt. 'Für Number of outputs kann eine Zahl > 1 oder ein Zeilenvektor eingetragen werden. Wird ein Zeilellvektor angegeben, hängt die Aufteilung der Elemente des Eingangssignals auf die Ausgänge von der Breite des Eingangssignals, der Anzahl und der Breite der Ausgänge ab. Im bus selection-Modus werden nur Signal-Busse (siehe Kap. 8.4.1) am Eingang akzeptiert.
Il 11 21 31
I
il>c=
1\ Demux Number of outputs. [4 2 1]
Display
71 \ Display2 -
M:
5:61
I
Abb. 8.42: Beispiel 3 zum Demux-Block: Ein 7-elementiges Eingangssignal wird in 3 Einzelsignale aufgeteilt (benutzerclefinierte A ujteilung): bsp3_demux.mdL
Bus Selector Signale, die mithilfe eines Mux- oder Bus Creator-Blocks zusammengefasst wurden, können - außer mit einem Demux-Block - auch mit einem Bus SeJector aus dem Signal-Bus wieder rekonstruiert werden. Es besteht auch die Bus Möglichkeit verschiedene Einzelsignale wieder neu zusammenzufassen, Im Selector folgenden Beispiel (Abb. 8.43) wurden die drei Einzelsigna.le der ConstantBlöcke mit einem Mux zusammengefasst. In der Block Parameters Dialogbox des Bus 5.eJector-Blocks sind sie unter Signals in the bus a.ufgelistet. Über den Seleet »-Button kann ausgewählt werden, welche der Signale extrahiert oder neu zusammengefasst werden sollen. Im Beispiel wurden signal1 und signalS ausgewählt.
>~
Die drei nachfolgenden kurzen Beispiele (Abb. 8.40 - 8.42) sollen die Arbeitsweise eines Demux-Blocks verdeutlichen:
Abb. 8.43: Beispiel zum Bus SelectorBlock: bsp_busseLector. mdL
8 Simulink Grundlagen
312
8.8 Verwaltung und Organisation eines Simulink-Modells.
313
Beim Multiport Switeh liegt das Kontrollsignal am obersten Eingang an. Abhängig vom gerundeten Wert des Kontrollsignals wird der jeweilige Eingang durchgeschaltet. Beispiel: Bei einem Wert des Kontrollsignals von 3, 3 Multiport (gerundet 3) wird das Signal am Eingang 3 an den Ausgang weitergeleiSwitch tet. Der Kontrolleingang wird bei der Nummerierung der Eingänge nicht gezählt. Über Number of inputs kann die Anzahl der Eingangssignale festgelegt werden.
[}
Goto und From
Damit erhält der Bus Selector zwei Ausgänge, an denen signal1 und signalS abgegriffen werden können. Würde die Check Box Muxed output aktiviert, würden signal1 und signalS zu einem neuen Ausgangssignal zusammengefasst. Der Bus Selector hätte dann nur einen Ausgang.
Die Blöcke Goto und From erlauben es, Signale von einem l'i\mktionsblock zu einem anderen zu schicken, ohne dass diese Blöcke tatsächlich grafisch miteinander verbunden sind (siehe Abb. 8.36, bspparameter .mdl). KomGoto plexe Modelle erhalten dadurch mehr Übersichtlichkeit. Wird im GotoBlock im Textfeld Tag (zu deutsch: Schild, Etikett) ein Name (defaultFrom Name A) eingetragen, so schickt dieser sein Eingangssignal an einen oder mehrere From-Blöcke, in denen derselbe Name in ihrem Goto tag- Textfeld steht. Die Sichtbarkeit eines solches tags kann im Goto-Block zu loeal, seoped oder global festgelegt werden.
Selector
Data Store Memory, Data Store Read, Data Store Write
Abb. 8.44: Block Parameters Dia-
logbox des Bus Se/eetar-Blocks
1t=:r Selector
Mit dem Selector können aus einem 1-D Array (Vektor) oder 2-D Array (Matrix) einzelne Elemente ausgewählt oder zu einem neuen I-D oder 2-D Array verknüpft werden. Folgendes Beispiel (Abb. 8.45) verdeutlicht den Unterschied.
~"*r;-;;l4~1 ~:61 ~ L--.:J I Conslant
Selector Input Type = Vector Elements;: [1 3 6] Input port wldlh = 7
io.ru_~~~: [~, 133 2] ~ ~ " Selector1
Display
Constantl
Input Type = Matrix
511 911
6:
101
I
Display1
Rows =[2 31 Columns = [3 2J
@
[!~~>
~
Data Store Memory
~
Data Store Read
1I
Mit einem Data Store Memory-Block kann VOll einem Simulink-Modell aus ein Speicherbereich definiert und initialisiert werden, in den mit Data Store Write Daten abgelegt und mit Data Store Read wieder ausgelesen werden können. Der Name des Speicherbereichs muss dazu im Feld Data store name aller drei Blöcke angegeben werden. Die Dimension der zu speichernd~:m Daten wird im Data Store Memory durch entsprechende Dimensionierung des Initial value festgelegt. Auch Daten- und Signaltyp können festgelegt werden.
Die Definition eines eigenen Speicherbereichs ist besonders dann sinnvoll, wenn Werte von Signalen an einem speziellen Zeitpunkt der Simulation Write zur Verwendung an einem späteren Zeitpunkt zwischengespeichert werden sollen und der MATLAB-Workspace als Zwischenspeicher nicht zur Verfügung steht. Letzteres ist z.B. der Fall, wenn aus dem Simulink-Modell Code erzeugt und in einer Echtzeitanwendung eingesetzt werden soll. A
Data Store
Abb. 8.45: Beispiele zum Se/eetar-Block: bsp_seLector. mdL
Switch, Manual Switch und Multiport Switch
a
Switch
>~> >-
Der Switch-Block schaltet abhängig vom Kontrollsignal am Eingang 2 (mittlerer Eingang) eines seiner beiden Eingangssignale durch. Die Schaltschwelle kann durch den Parameter Threshold eingestellt werden. Für Werte des Kontrollsignals 2: Threshold wird Eingang 1, für Werte des Kontrollsignals < Threshold wird Eingang 3 an den Ausgang durchgeschaltet. Beim Manual Switch erfolgt die Auswahl eines der beiden Eingangssignale per manuellem Links-Doppelklick.
Signal Attributes - Signaleigenschaften Initial Condition
~ IC
Der IC-Block prägt seinem Ausgangssignal eine Anfangsbedingung auf. Im Beispiel (Abb. 8.46) hat das Signal mLsgab zum Zeitpunkt t = 0 den Wert 1, ansonsten 3.
314
8 Simulink Grundlagen
r;l-lI>c=3
LJ-Constant
8.9.1
ausga b 11>1 ausgab I
IC
To Worhspace
8.9 Hierarchiebildung
Abb. 8.46: Beispiel zum fe-Block: bspic. mdZ
315
Erstellen von Subsystemen / Bibliothek: Ports &. Subsystems
Ein Subsystem kann auf zwei Wegen erstellt werden: Probe Der Block Probe (zu deutsch Sonde, Prüfkopf) fragt sein Eingangssignal auf wichtige Eigenschaften ab: Breite, Abtastzeit, Dimension und ob es Pmb, reell oder komplex ist (Aktivierung der entsprechenden Check Boxen). Abhängig von der Anzahl der aldivierten Check Boxen hat der Probe-Block einen oder mehrere Ausgänge, an denen die Signaleigenschaften abgegriffen werden können. Rate Transition
",.} t~ ~
Der Rate Transition-Block vereinfacht die Verknüpfung von Blöcken mit unterschiedlichen Abtastzeiten .. Mithilfe der Check Boxen E~sur~ ~ata lH B§l zntegrzty und Ensure determznzst'!c data transfer kann auf d,e zert)Iche Rate Transition Verzögerung sowie auf den benötigten Speicherplatz bei der Datenübertragung EinHuss genommen werden. Der Rate Transition-Block erkennt automatisch, ob er als Zero-Order Hold (Übergang von einem langsamen zu einem schnellen Block) oder als Unit Delay (Übergang von einem schnellen zu einem langsamen Block) arbeiten muss. Systeme mit gemischten Abtastzeiten werden in Kap. 10.4.1 ausführlich behandelt.
8.8.4
Der Export eines Simulink-Modells in eine Datei erfolgt analog zu MATLAB-Figures: print -ssys; print -ssys -dmeta sys; print -ssys -deps sys;
8.9
2. Aus der Unterbibliothek Ports & Subsystems wird ein gewünschter SubsystemBlock in das Modell kopiert. Mit einem Doppelklick wird das Fenster geöffnet und die gewünschten Funktionsblöcke eingefügt. Die Verbindungen zur nächsthöheren Ebene werden durch Inport- und Outport-Blöcke hergestellt. Das Subsystem enthält standardmäßig bereits einen Inport- und einen Outport-B1ock
Ports &. Subsystems - Ports und Subsysteme Subsystem
Drucken und Exportieren eines Simulink-Modells
Genauso wie MATLAB-Figures können auch Simulink-Modelle ausgedruckt und exportiert werden. Mit print -ssys wird das Modell sys auf dem Standard-Drucker ausgegeben. Der Druck über File/Print lässt jedoch die Einstellung mehrerer Druckoptionen zu. Hier kann z.B. die zu druckende Modellebene gewählt werden.
.'i~
1. Die Funktionsblöcke, die zusammengefasst werden sollen, werden im bestehenden Modell mithilfe eines Auswahlrahmens markiert (damit wird sichergestellt, dass alle Verbindungslinien ebenfalls markiert werden). Im Menü Edit wird dann der Punkt Create Subsystem ausgewählt. Die markierten Blöcke werden von Simulink durch einen Subsystem-Block ersetzt. Ein Doppelklick auf diesen Block öffnet ein neues Fenster mit dem Namen des Subsystem-Blocks. Die Ein- und Ausgangssignale des Subsystems werden mit der darüber liegenden Systemebene automatisch durch Inport- und Outport-Blöcke verknüpft.
%Drucken
von sys.mdl auf Standarddrucker
%Speichern als Windows-Metafile (sys.emf) %Speichern als Encapsulated Postscript (sys.eps)
Hierarchiebildung
Um komplexe Modelle übersichtlicher zu gestalten, bietet Simulink die Möglichkeit der Hierarchiebildung, d.h. der Unterteilung von Modellen in so genannte Subsysteme an. Neben dem Vorteil, dass sich die Anzahl der im Simulationsfenster dargestellten Funktionsblöcke reduziert, können funktionell verwandte Blöcke sinnvoll zu Teilsystemen zusammengefasst werden. Simulationsmodelle können somit in hierarchischen Strukturen mit beliebig tief verschachtelten Ebenen entworfen werden.
,~
Der Subsystem-Block dient dem Erstellen von Teil- oder Untersystemen innerhalb eines Simulationsmodells. Die Verlmüpfung zur darüber IiegenSUb'y,lem den Modellebene wird durch Inport-Blöcke für Eingangssignale des Sub. ~ systems und Outport-Blöcke für die Ausgänge bewerkstelligt. Die Anzahl )~ der Ein- und Ausgänge des Subsystem-Blocks passt Simulink automatisch AlomicSub'y,lem den im Subsystem-Fenster bestehenden Inport- und Outpori~Blöcken an. Die Ein- und Ausgänge des Subsystem-Blocks werden nach den Default-Namen der Inport- und Outport-Bausteine benannt. Durch entsprechende Umbenennung der Inportund Outport-Blöcke kann die physikalische Funktion des Subsystems unterstrichen werden (z.B. kann bei einem Regler statt In1, In2: Sollwert, Istwert und statt Outl: Reglerausgang eingesetzt werden). ~
Wird durch Rechts-Klick auf den Subsystem-Block das Kontextmenü erzeugt, so kann dort unter Auswahl von Subsystem Parameter die Block Parameters Dialogbox geöffnet werden. Durch Aktivierung der Check Box Treat as atomic unit wird der Block zu einem Atomic Subsystem. Während die Grenzen eines Subsystem bei der Simulation ignoriert werden, bilden die Blöcke eines Atomii:: Subsystem eine nicht-trennbare Einheit. Korrnnt ein Atomic Subsystem während der Simulation zur Ausführung, so wird Simulink dann gezwungen alle Blöcke innerhalb des Atomic Subsystem hintereinander abzuarbeiten, bevor mit einem anderen Block fortgefahren werden kann.
316
8 Simulink Grundlagen
Inport und Outport Inport~ und Outport-Blöcke stellen allgemein die Eingänge zu und Ausgänge von einem Simulationsmodell dar. Simulinlc nummeriert die In1 Inport- und Outport-Blöcke (unabhängig voneinander) automatisch beginnend bei 1. Im Textfeld Port dimensions (Register Signal specijication) kann die zulässige Breite des Inport-Eingangssignals angegeben werOut1 den (Zahl> 1, z.B. 3). Eine manuelle Festlegung der Port dimension ist z.B. dann nötig, wenn Daten im Format Struciure oder Structure with time aus dem Worlcspace in die Inport-B1öcke auf der obersten Modellebene (d.h. nicht in einem Subsystem) eingelesen werden sollen (siehe S. 300).
CD>
8.9 Hierarchiebildung
Im Subsystem wird das Eingangssignal durchgeschleift. Der Scope-Block speichert die Signale im Format Str-ucture with time auf den Workspace, von wo aus sie in einer MATLAB-Figure geplottet werden können (Abb. 8.48). Da das Subsystem nur für positives Enable-Signal ausgeführt wird, ist der Subsystemausgang Out1 während der negativen Sinushalbwelle Null.
>CD
Steht ein Outport-B1ock innerhalb eines bedingt ausgeführten Subsystems (Blöcke Enabled Subsystem, Triggered Subsystem und Enabled and Tdggered Subsystem), ist die Option OutPlti when disabled von Bedeutung: hier kann angegeben werden, wie mit dem Ausgang verfahren wird, wenn das Subsystem gerade nicht ausgeführt wird (Zurücksetzen oder Halten auf dem letzten Wert). Initial output gibt an, auf welchen Wert der Ausgang jeweils zurückgesetzt wird.
317
112
[TI] Enable
(D----tl-O
Enabled SubSystem
In1
Oul1
Abb. 8.47: Beispiel zum Enabled Subsystem: bspensub.md! und Subsystem 'Enabled Subsystem'
Über Inport- und Outport-Blöcke auf der obersten Modellebene können Daten aus dem Workspace eingelesen bzw. dorthin geschrieben werden. Dazu muss im Register Data Import/Export der Conjiguration Parameters Dialogbox die Input- bzw. Output-Check Box aktiviert und im angrenzenden Textfeld der Name der einzulesenden Variablen bzw. der Variablen, auf die geschrieben werden soll, eingetragen sein (siehe auch Kap. 8.7).
Inport- und Outport-B1öcke auf der obersten Modellebene können auch dazu verwendet werden bei einer Linearisierung (Befehllinmod, Kap. 9.2.1) des Simulink-Modells Einund Ausgänge des linearisierten Systems festzulegen.
\ -1
In einem Subsystem übernehmen Inport- und Outport-B1öcke die Funktion der Einund Ausgänge. Die Verknüpfung mit den auf das Subsystem geführten Signalen der nächsthöheren Ebene ist wie folgt geregelt (analog für Outport-Blöcke): Ein InportBlock mit der Port number 1 bekommt sein Eingangssignal von dem Block, der mit dem obersten Eingang des Subsystems verbunden ist.
Inport- und Outport-Blöcke sind auch in den Bibliotheken Sources bzw. Sinks zu finden. Enabled Subsystem
>G
Ein Enabled Subsystem enthält einen Enable-B1ock (ebenfalls aus Ports & Subsystems) und weist einen zusätzlichen Eingang auf, an den das Enable(Freigabe)-Signal angelegt werden kann. Es wird an jedem InteEnabled grationsschritt, an dem das Enable-Signal einen positiven Wert hat, ausSUbsystem geführt. Der Parameter States when enabling gibt an, wie die Zustandsvariablen bei einer erneuten Ausführung belegt werden (Zurücksetzen oder Halten auf dem letzten Wert). Show output port weist dem Enable-Block einen Ausgang zu, so dass das Steuersignal weiterverarbeitet werden kann. Abb. 8.47 verdeutlicht die Verwendung eines Enabled Subsystem-Blocks. Hier wird eine Sinuswelle sowohl als Eingang als auch als Enable-Signal auf ein Subsystem geführt.
"
"/:"
-0.5
1
o
:\
..\
/
4
10
Abb. 8.48: Simulationser'!]ebnis von bspensub. md!
Triggered Subsystem
)E::}
Ein Triggered Subsystem enthält einen Trigger-Block (ebenfalls aus Ports & Subsystems) und weist einen zusätzlichen Eingang auf, an den das Trigger (Auslöse )-Signal angelegt werden kann. Ein getriggertes Subsystem Triggered wird nur zum Zeitpunkt des Trigger-Impulses ausgeführt. Getriggert w(jrSubsystem den kann auf eine positive (r"ising) oder negative Flanke im Steuersignal (fali'ing) oder auf beide Flanken ( either). Bei der Option fllnction-call kann clas Auslösen des Trigger-Impulses durch eine selbst programmierte S-Funktion gesteuert werden. Abb. 8.49 verdeutlicht die Funktion eines Triggered Subsystem-Blocks. Hier werden zwei Sinuswellen unterschiedlicher Frequenz auf das Subsystem geführt. Der Sille Wave-Block stellt dabei das Trigger-Signal (Amplitude 0.2, Frequenz 10 rad/sec.) zur Verfügung. Im Subsystem wird das Eingangssignal durchgeschleift. Im Scope werden die Signale aufgezeichnet (Abb. 8.50). Der Parameter Trigger type des Trigger-Blocks steht auf either, so dass das Subsystem sowohl für steigende als auch für fallende Flanke des Sine Wave-Ausgangs ausgeführt wird. Wie aus Abb. 8.50 zu erkennen ist, realisiert somit der Ausgang Out1 ein Sample&Hold des Sine Wavel-Signals mit der doppelten Frequenz des Trigger-Signals.
318
8 Simulink Grundlagen
~I"B
319
Die Bibliothek Ports &, Subsystems bietet noch weitere Subsystem-Blöcke an, mit denen auch for-, switch-, while- und do-while-Schleifen realisiert werden können.
Scope
[TI]
.Model
Trigger
~CD
Trlggered SubSystem
8.9 Hierarchiebildung
In1
Oul1
Abb. 8·49: Beispiel zu getriggerten Subsystemen: bsptrigsub.mdL und Subsystem 'Triggered Subsystem'
Mithilfe des Model-Blocks können andere Simulink-Modelle in das betrachtete Modell (das den Model-Block enthält) eingebunden werden (Model M,'" Referencing, siehe dazu Kap. 8.9.3). Unter Model name muss der Name des referenzierten Modells eingetragen werden, unter Model arguments können z.B. die Namen von Blockparametern eingetragen werden, die im referenzierten Modell ebenfalls diesen Namen tragen. Im Textfeld Model argument values können die Model arguments dann mit Werten belegt werden.
8.9.2
Maskierung von Subsystemen
Durch die Option der Maskierung von Subsystemen wird die Parametrierung von komplexeren Subsystemen erleichtert. Die Parameter können auf diese Weise in einer einzigen Block Parameters Dialogbox zusammengefasst werden. Durch die Maskierung wird aus einem komplexen Subsystem ein neuer, eigener Block erzeugt. Eine benutzerdefinierte Unterbibliothek kann so entworfen werden. 4
6
8
Abb. 8.50: Simulationsergebnis bsptrigsub.mdL
von
If und If Action Subsystem
'I 'j (I
I';
Mithilfe der Blöcke Ifund If Action Subsystem können wie z.B. aus der Programmiersprache C bekannte if-else-Bedingungen realisiert werden. Im IfBlock können die Anzahl der Eingänge (Number of inputs) sowie if- und elseif-Bedingungen (Textfelder if expr'ession, elseif expressions ) angegeben werden. Durch Aktivierung/Deaktivierung der Check Box Show else condition wird der else-Ausgang erzeugt/unterdrückt. Das If Action Subsystem enthält standardmäßig einen Action Port Block, der den zusätzlichen Action-Eingang erzeugt. Hier kann gewählt werden, ob die Zustandsvariablen des If Action Subsystem bei Ausführung gehalten oder auf ihre Initialisierungswerte zurückgesetzt werden sollen. Abb. 8.51 zeigt, wie die Anweisung if (ui > 0) {If Action Subsysteml; }else{If Action Subsystem;} mithilfe von Subsystemen in Simulink umgesetzt werden kann.
Variablen, die in einem maskierten Subsystem verwendet werden und über die Block Parameters Dialogbox mit Werten belegt werden können (im Beispiel die Parameter m und b), sind lokale Variablen und damit nicht auf dem MATLAB-VVorkspace sichtbar. Nur so ist gewährleistet, dass maskierte Blöcke wie Standard-Funktionsblöcke in einem Simulationsmodell mehrfach verwendet werden können. Beispiel Als Beispiel soll das in Abb. 8.52 bzw. 8.53 gezeigte Subsystem 'mx+b' maskiert werden. Das Subsystem berechnet über die Gleichung y = m . x + b aus dem Eingangssignal x eine Gerade mit der Steigung m und dem y-Achsenabschnitt b. In der Block Parameters . Dialogbox (Maske des Subsystems) sollen mund b später als beliebig veränderbare Parameter auftreten.
Clock
mx+b
Scope
Abb. 8.52: Beispiel zur Maskierung von Subsystemen: bspmask.mdl
,I
,
!pO) y
!i
Abb. 8.51: Realisiemng einer if-elseBedingung m Simulink mit If- und If Action Subsystem-Blöcken
y-Achsen abschnitt
Abb. 8.53: Subsystem 'mx+b'
'i
!
8 Simulink Grundlagen
320
8.9 Hierarchiebildung
Wird das Subsystem 'mx+b' markiert, kann unter Edi-t der Punkt Mask Subsystem aufgerufen werden und die Mask Editor Dialogbox erscheint. Das lnitialization-Register erlaubt die Initialisierung der Parameter des neuen Blocks, die im Parameters-Register definiert wurden. Im Documentation-Register kann eine kurze Funktionsbeschreibung sowie der Text des Help-Fensters (bei Klick auf den Help-Button) eingetragen werden. Im Register lcon stehen Optionen zur Gestaltung des Block-Icons zur Auswahl. Im Parameters-Register des Masle Editors (Abb. 8.54 links) werden am Prompt die Namen, unter welchen die Parameter in der Block Parameters Dialogbox erscheinen sollen, eingetragen, sowie unter Variable die zugehörigen Variablen, die in den Blöcken des Subsystems definiert wurden. Als Type wurde Edit gewählt; in der Block Parameters Dialogbox erscheint dann unter dem Parameternamen ein Textfeld, in das der Benutzer einen Wert eintragen kann (Abb. 8.54 rechts). Dieser Wert wird von MATLAB aufgrund der Aktivierung der Check Box Evaluate ausgewertet und danach der zum Parameter gehörigen Variablen (also rn oder b) zugewiesen. Durch Aktivierung der Check Box Thnable bleiben die Parameter während der Simulation verstellbar.
IMasl<dese;rlplion ..
..,
321
".
,-
"".,
'I
leerBlockijiid8rdleOetadeng,eIChUngy;mx-;~~!
1C:':~'"dd"Y-A'h:::~:~:::'~:~~:~~.~1
l[f~~~f~~~J~~f~I:;;::;~~::::~::-(~;~::::::~:~:::~~~Xlj ,
u~ma~~, J:'
~( ',~ance! Ib~JI .>Il~I~.·' ,
Abb. 8.55: Mask'ier-en von Subsystem 'mx+b': Documentation-Registe-r 1Lnd resultierende Block Pammeters Dialogbox
Bei Doppelklick auf den Subsystem-Block in bspmask.mdl erscheint nun nicht mehr das Subsystem-Fenster sondern eine Block Parameters Dialogbox, wie in Abb. 8.54 rechts. ,'i:,;:C_--CC,Ii'l'Ot([O c",,-:_________ J"C,'li
1],[0,10.11) lot({O.l 0.1],[0 111
101:([02J,[0.33JI
, EV-3rnplesof(jralMll:;comllHmlls"-,
I unmastJ
GD I .c,anc~I·
..
mx+b I)" '.
~~I~' ~jl "·i\P.~I;
Scope
).
Abb. 8.54: Maskieren von Subsystem 'mx+b': Parameters-Register und resultierende Block Parameters Dialogbox
Im Documentaiion-Register des Mask Editors (Abb. 8.55 links) wird unter Mask type die Bezeichnung des Blocks (im Beispiel 'Geradenberechnung') eingetragen. Im Textfeld Mask description wird der beschreibende Text des Blocks eingetragen, der in der Block Pa.rameters Dialogbox unter der Blockbezeichnung erscheint (Abb. 8.54 rechts). Der Hilfe-Text unter Mask help soll die Bedienung des Blocks erleichtern. Im Register lcon kann das Icon des Blocks gestaltet werden. Es stehen Befehle zum Darstellen von Text und Linien sowie Übertragungsfunktionen zur Verfügung. Es können auch Bilder im TIFF-Format eingebunden werden. Für das Subsystem 'mx+b' wurde mithilfe der Befehle plot ([0 1], [0.1 o. 1J) plot ( [0.1 o. 1J ,[0 1J) ein x-yKoordinatensystem sowie mit plot ([0 2], [0.3 3J) eine Gerade mit rn > 0 und b > 0 gezeichnet. Für die Option Units wurde Normalized gewählt (linke untere Blockecke :;; (0,0), rechte obere Blockecke :;; (1,1) ). Mithilfe der Optionen Frame, Transparency
Abb. 8.56: Maskieren von Subsystem 'mx+b': Icon-Register und r'esultierendes SirnulinkModell bspmask. mdZ
und Rotation können unter anderem die Sichtbarkeit des Blockralunens und eine eventuelle Drehung der Grafik bei Drehung oder Spiegelung des Blocks eingestellt werden. Soll anstelle einer Grafik Text in einen Block eingefügt werden, stehen dafür die Drawing commands disp('Text') bzw. disp(Variablenname) zur Verfügung. Variablenname muss dabei die Variable eines im Parameters-Register definierten Prompts sein. Es wird dann der Wert der Variable dargestellt, sofern ihr in der Block PararneteTs Dialogbox ein solcher zugewiesen wurde. Mit disp(' Text') dargestellter Text kann durch den Befehl \n innerhalb der Anführungsstriche umgebrochen werden. Um weitere Änderungen an einem maskierten Subsystem vorzunehmen, kaul1 der Mask Editor' nach Markierung des Blocks jederzeit mit dem Menü Editj Edit Mask aufgerufen werden. Der Punkt Editj Look Under Mask öffnet das Subsystem-Fenster wie der Doppelklick bei unmaskierten Subsystemen.
8 Simulink Grundlagen
322 .M~odel
8.9.3
8.9 Hierarchiebildung
323
RefeTencing
Model Referencing bietet die Möglichkeit, beliebige bereits vorhandene SimulinkModelle in ein anderes, gerade betrachtetes Modell einzubinden. Dazu wird ein ModelBlock (siehe S. 319) aus der Bibliothek Ports&5ubsystems in das betrachtete Modell eingebracht und durch Eingabe des Namens eines bereits vorhandenen Simulink-Modells unter Model name eine Referenz auf dieses Modell erzeugt. Das referenzierte Modell muss sich dabei im gleichen oder in einem zum MATLAB-Pfad gehörigen Verzeichnis (Kap. 3.4) befinden. Bei Simulationsstart des betrachteten Modells wird ein so genanntes Simulation Target (eine ausführbare C MEX S-Funktion, unter Windows erhält sie die Endung .dll) des referenzierten Modells im aktuellen Verzeichnis erzeugt, sowie ein Verzeichnis slprj, das alle bei der Erzeugung des Simulation Target verwendeten Dateien enthält. Bei jedem erneuten Simulationsstart des betrachteten Modells wird von Simulink überprüft, ob sich das referenzierte Modell seit der letzten Erzeugung des Simulation Target verändert hat. Abhängig von der Wahl des Parameters Rebuild options im Register Model Referencing (siehe S. 304) der Configuration Parameters Dialogbox des betrachteten Modells wird dann das Simulation Target neu erzeugt oder nicht.
Beispiel Anhand der Simulink-Modelle bspreferencing.md1 (Abb. 8.57 links) und bspreferencing..g .md1 (Abb. 8.57 rechts) soll das Vorgehen beim Model Referencing verdeutlicht werden: In bspref erencing..g. mdl wird das Eingangssignal über einen Gain-Block mit dem Verstärkungsfaktor gain·l0+5 zum Ausgang geführt. Durch die Verwendung eines Inport- und Outport-Blocks am Ein- und Ausgang entsteht beim Referenzieren von bspref erencing..g. mdl in bspref erencing. rodl an den Model-Blöcken jeweils ein Ein- und ein Ausgang. Um beim Referenzieren den Wert des
Abb. 8.58: Model Explorer (links) und Block Pararneter-s Dialogbox des Blocks Model (rechts)
eingetragen werden (Abb. 8.58 links). In der Block Parameters Dialogbox der Blöcke Model (Abb. 8.58 rechts) und Model1 in bspreferencing.mdlerscheint gain dann unter Model arguments (grau unterlegt, da eine Veränderung nur über den Model Explorer möglich ist). Im Feld Model argument values kann gain mit beliebigen Werten (hier 0.1 und 0.5) belegt werden. Abbildung 8.59 zeigt das Simulationsergebnis von bspreferencing.mdl. Wichtiger Hinweis: In· einem referenzierten Modell muss ein Fixed-step-Solver verwendet werden, da Variable-siep-Solver bei der Erstellung des Simulation Target nicht unterstützt werden.
bspreferencing.mdl
J
.
~. sife Wave
S,ne Wave
".
8in 9
=0.1
Si ne ••
wa~t.JEJl
Dt=J Scope
bspreferencing_g.mdl
5
~t>CD In1
Galn
Oul1
Verstärkung=gain* 10+5
Abb. 8.57: Sirnuhnk-Modell bsp7"efe7"encing_g. mdL (rechts)
bspreferencing.mdL
(links)
und
reJerenziertes
Modell
Verstärkungsfaktors variabel gestalten zu können, muss die Variable gain im Model ExploT'er als MATLAB-Variable im Model Workspace von bspreferencing..g.rodl definiert (Buttonlfl,') und mit einem Wert belegt werden sowie unter Model arguments
Abb. 8.59: Sirnulationsergebnis bsprefeT'encing.mdL
von
8 Simulink Grundlagen
324
8.10 Übungsaufgaben
325
8.10
Übungsaufgaben
8.10.2
8.10.1
Nichtlineare Differentialgleichungen
In dieser Übungsaufgabe soll das Modell eines Gravitationspendels, wie in Abb. 8.61 dargestellt, programmiert und das Subsystem anschließend maskiert werden. Wichtige Systemparameter sollen über die Maske des Subsystems einstellbar gemacht werden.
Schreiben Sie ein Simulink-Modell, das folgenden Satz von nichtlinearen Differentialgleichungen löst:
Gravitationspenclel
x = a· (y - x)
iJ
= -xz
z=
+ px -
y
xy - ßz
\;Vählen Sie als Parameter a
= 3, p = 26.5 und ß = 1.
Zeichnen Sie x über z in einem XY Graph auf. Lassen Sie die Zustandsvariablen x, y und z während der Simulation auf den Workspace speichern und schreiben Sie ein MATLAB-Skript, mit dem Sie die 'frajektorie im Zustandsraum grafisch darstellen können. \
Für die Programmierung der Differentialgleichungen benötigen Sie den Integrator-Block aus der UnterbibliothekContinuous (Kap. 9.1). Die Default-Einstellungen in der Block Parameters Dialogbox können Sie bis auf die Initial condition übernehmen. Geben Sie hier einen Wert> 0, z.B. 5 ein. Abb. 8.60 zeigt die Simulationsergebnisse für die angegebene Parameterkonstellation und eine Simulationszeit von 100 Sekunden.
\
\ ....... 10 \@
\ Abb. 8.61: Zum mathematischen Gravitationspendel
Die Betrachtungsweise des Pendels erfolgt idealisiert (pendelmasse punktförmig, nur Schwingungen in der r -
FB
Beschleunigungskraft Reibkraft
Fr (-rp)
Kräftegleichgewicht
=
G· sin
= m . 9 . sin
= -Fr(rp) = -1.3· arctan(50. rp)
m·a=m·(-l·<j»
=FB-F,.(-rp)
Damit folgt für die DGL des reibungsbehafteten Gravitationspendels: ..
Abb. 8.60: Trajektorie des Lorenz Attraktors
Hinweis: Die drei Differentialgleichungen beschreiben den aus der Mathematik und Physik bekannten Lorenz Attraktor. Sie stellen ein einfaches Modell atmosphärischer Konvektionsvorgänge dar und wurden 1961 von Edward Lorenz zur Wettervoraussage aufgestellt. Für bestimmte Kombinationen von a, p und ß entsteht ein chaotisches Systemverhalten, das um zwei Gleichgewichtspunkte im Raum schwingt.
9 -Y' sin
- - §!.. sin
mit:
I
F ( . r -
. 1.3· arctan( 50 . rp)
326
tp Auslenkwinkel aus der Ruhelage tjJ Winkelgeschwindigkeit tjJ Winkelbeschleunigung a Beschleunigung I Länge des Seils
8 Simulink Grundlagen Masse des Pendels incl. Seil Erdbeschleunigung, 9 = 9.81 m/s 2 G Erdanziehungskraft Fr (-tjJ) winkelgeschwindigkeitsabhängige Reibkraft im Lager m
9
8.10 Übungsaufgaben
327
Abb. 8.63 zeigt das Simulationsergebnis in einem Scope für die Parameterkonstellation m: 30 kg
I: 5 m
tpo: 45
0
1[30: -1 md/sec.
Für die Programmierung der DGL benötigen Sie wieder Integrator-Blöcke aus der Continuous-Unterbibliothek. Wählen Sie beides Mal die Initial condition Source zu ex,temal und führen Sie von außen geeignete Werte für den Auslenkwinkel zu Beginn, tpo, und die Anfangswinkelgeschwindigkeit 1[30 auf die Integratoren, mit denen das Pendel gestartet werden soll! Das Pendel soll innerhalb eines Subsystems programmiert werden, aus dem die Zustandsvariablen Winkel und Winkelgeschwindigkeit (tp und tjJ) sowie die Winkelbeschleunigung (tjJ) aIs Ausgänge herausgeführt werden sollen. Sie sollen in einem Scope oder einer MATLAB-Figure aufgezeichnet werden. Abb. 8.62 links zeigt das äußere Erscheinungsbild des maslöerten Pendels mit seinen Ausgängen. Maskierung: Ähnlich wie im zuvor behandelten Beispiel sollen die Parameter m, I, tpo und 1[30 über die Maske des Subsystems einstellbar sein. In Abb. 8.62 rechts ist die Block Parameters Dialogbox gezeigt, die das maskierte Pendel erhalten soll. Überlegen Sie sich außerdem einen tatsächlich hilfreichen Hilfetext für den Block!
Gravitationspendel mit Reibung
Abb. 8.62: Er-scheinungsbild des maskierten Pendels und zugehörige Block Parameters Dialogbox
Hinweise: Überlegen Sie sich, wie Sie fein aufgelöste Kurvenverläufe für tp, tjJ und tjJ erzeugen können, ohne übermäßige Rechenzeiteinbuße. Vergessen Sie nicht, dass die benötigte Sinus-Funktion ihr Eingangssignal in der Einheit rad erwartet. ,Wie könnten Sie Ihre Signale auf den MATLAB-Workspace speichern, ohne dabei über einen Scope- oder To Workspace-Block zu gehen?
Abb. 8.63: Winkel, Winkelgeschwindigkeit und Winkelbeschleunigung des reib'ungsbehafteten GravUationspendels, dargestellt in einem Scope-Block
9
Lineare und nichtlineare Systeme in Simulink
Aufbauend auf den im vorangegangenen Kapitel gelegten Simulink-Grundlagen treten nun Blöcke für die Repräsentation der Dynamik in zeitkontinuierlichen Systemen hinzu (Unterbibliothek Continuous), nichtlineare Anteile in Systemen wie z.B. Sättigungen und Totzeiten (Unterbibliothek Discontinuities) sowie programmierbare MATLABFunktionen und "Nachschlage-Tabellen" der Unterbibliotheken User-Defined Functions und Lookup Tables. Als eigene Punkte werden außerdem die Analyse von SimulinkModellen, die Behandlung von algebraischen Schleifen sowie die Programmierung von S-Funktionen vorgestellt. Abtastsysteme in Simulink werden in Kap. 10 ausführlich behandelt.
9.1
Simulink-Bibliothek: ContinuousZeitkontinuierliche Systeme
Integrator Der Integrator integriert sein Eingangssignal. Der Anfangswert, von dem aus integriert wird, kann in der Block Parameters Dialogbox z.B. direkt s gesetzt werden, durch Wahl von internal unter Initial condition SOU1'"ce und Integrator Eingabe eines Startwerts in das Textfeld Initial condition. Wird die Initial condition source auf extern al gesetzt, entsteht am Block-lcon ein weiterer Eingang, an den ein außerhalb des Blocks gesetzter Anfangswert angelegt werden kann.
[J}
> -
Der Ausgang des Integrator-Blocks kann durch ein Signal von außen auf den Anfangswert zurückgesetzt werden. Unter External reset kann eingestellt werden, durch welches Verhalten des Rücksetzsignals der Reset ausgelöst werden soll (z.B. rising für die positive Flanke). Bei Wahl von External reset zu rising, falling, either oder level entsteht ein eigener Eingang für das Rücksetzsignal. Soll das Ausgangssignal begrenzt werden, wird die Check Box Limit output aktiviert und die gewünschten Werte in die saturation limit- Textfelder eingetragen. Eine Aktivierung der Check Box Show saturation port ermöglicht das Abgreifen des entsprechenden Sättigungssignals: 1 für Ausgang in positiver Sättigung, -1 in negativer und 0 dazwischen. Durch Aktivierung der Check Box Show state port entsteht ein zusätzlicher Ausgang
9 Lineare und nicht lineare Systeme in Simulink
330
(state port), an dem die Zustandsgröße des Integrators abgegriffen werden kann. Die
Zustandsgröße des Integrators stimmt in ihren Werten mit dem Ausgangssignal des Integrators überein; Simulink berechnet Ausgangssignal und Zustandsgröße jedoch zu leicht unterschiedlichen Zeitpunkten. In manchen Fällen wird die Verwendung der Zustandsgröße nötig: Wird das Ausgangssignal des Integrators an den Rücksetz- oder Anfangswerteingang zurückgeführt, entsteht eine Schleife, im Falle des Anfangswerteingangs sogar eine algebraische Schleife. (siehe Kap. 9.6). Dies kann vermieden werden, wenn anstelle des Ausgangssignals die Zustandsgröße zurückgeführt wird. Enthält ein Modell Zustandsvariable, deren Betrag sich um mehrere Größenordnungen unterscheidet, kann die Spezifizierung des Parameters Absolute tolerance in den einzelnen Integrator-Blöcken des Modells zusätzlich zur Absolute tolerance in der Configm-ation Parameters Dialogbox helfen, dass dieser Wert bei der numerischen Integration eingehalten wird. !ij
9.1 Bibliothek: Continuous - Zeitkontinuierliche Systeme
in absteigender Ordnung von s eingegeben werden. Die Ordnung des Nennerpolynoms muss dabei größer oder gleich der Ordnung des Zählerpolynoms sein. Beispiel: Der Eintrag [4 3 0 1] unter Numerator und [1 0 7 3 1] unter Denominator erzeugt eine Übertragungsfunktion der Form;
H(s) = y(s) = u(s)
Eine Differentiation des Eingangssignals wird mit dem Oerivative-Block durchgeführt. Der Ausgang des Blocks berechnet sich zu f;.uj f;.t, wobei f;. jeweils die Änderung der entsprechenden Größe seit dem vorangegangenen Derivative Integrationsschritt bezeichnet. Der Anfangswert des Ausgangssignals ist O. Zur Linearisierung wird der Oerivative-Block durch ein DT1-Verhalten sj(Ns + 1) appraximiert, dessen Zeitkonstante unter Linearization Time Constant eingegeben werden kann.
1 (~-1\
r
B
"
State-Space Der State-Space- Block bildet ein lineares System in Zustandsdarstellung nach, das durch folgendes Gleichungssystem beschrieben wird (siehe auch Kap. 5.1.3):
",I
x=Ax+Bu
Y= Cx+Du
Die Ordnung des Systems wird durch die Dimension der Systemmatrix A bestimmt. Ist N x die Anzahl der Zustandsvariablen, Nu die Anzahl der Eingangsgrößen und Ny die Anzahl der Ausgänge, müssen die Systemparameter folgende Dimensionen besitzen: A: Nx x Nx, B: Nx x Nu, C: Ny x Nx und D: Ny x Nu. Damit bestimmt Nu die Breite des Eingangssignals und Ny die des Ausgangssignals.
Z(s) kann dabei ein Vektor oder eine Matrix sein, welche die Nullstellen des Systems enthält, P(s) ist der Vektor der Pole. Die skalare oder vektorielle Größe J( enthält den oder die Verstärkungsfaktoren des Systems. Die Anzahl der Elemente in J( entspricht der Zeilenzahl von Z(s). Die Anzahl der Pole muss dabei wieder größer oder gleich der Nullstellenzahl sein. Komplexe Nullstellen oder Pole müssen in konjugiert komplexen Paaren angegeben werden. Der Zero-Po/e-Block entspricht dem Befehl zpl{ (z,p, k) aus der Contral System Toolbox. 'Transport Delay und Variable Transport Delay
~
Transport
Delay
~~
. Variable Transport
'Transfer F\1l1ction
1 8:1 ~
Transfer Fon
Mit dem Transfer FCIJ-Block kann die Übertragungsfunktion eines linearen Systems modelliert werden. Er entspricht dem Befehl t f (num, den) der Contral System Toolbox. Parameter sind die Polynome für Zähler (NumeTator) und Nenner (Denominator) der Übertragungsfunktion, sie müssen
Im Gegensatz zur Transfer Fcn erzeugt der Zero-Po/e-Block aus den Parametern Zeros, Poles und Gain eine Übertragungsfunktion in einer nach Nullstellen und Polen faktorisierten Form (m = Anzahl der Nullstellen, n = Anzahl der Pole, hier Beispiel für ein SISO-System): H(s) _ J( . Z(s) _ J( . (s - Z(l)) . (8 - Z(2)) ... (s - Z(m)) P(s) (s - P(l)) . (s - P(2)) ... (s - P(n))
> duldt
:1:
2
Zero-Pole
Zero-Pole
·1
3
48 + 38 + 1 s4+78 2 +38+1
Unter Numerator können auch Matrizen angegeben werden. Die Breite des Ausgangssignals richtet sich dann nach der Anzahl der Zeilen in der Matrix. Als Eingangssignale werden jedoch nur skalare Größen akzeptiert.
s s+1
Derivative
331
Der Transport Oelay-Block gibt sein Eingangssignal verzögert um die unter Time delay ;:::: 0 angegebene Zeit aus. Bis die Simulationszeit die angegebene Verzögerungszeit zu Simulationsbeginn erstmals überschreitet, gibt der Transport Oe/ay-Block den unter Initial input angegebenen Wert aus. Für die Zwischenspeicherung der Daten wird ein Pufferspeicher benutzt, dessen Größe unter Initial buffer size eingetragen werden kann. Überschreitet die gespeicherte Datenmenge diese Größe, alloziert Simulink automatisch weitere Speicherbereiche. Die Simulationsgeschwindigkeit kann dadurch erheblich vermindert werden.
Delay Mit dem Variable Transport Oe/ay-Block besteht die Möglichkeit, die zeitliche Verzögerung des Eingangssignals variabel zu gestalten. An den unteren Blockeingang kann das die Verzögerungszeit enthaltende Signal gelegt werden. Unter Maxim!Lm delay muss ein Maximalwert für die zeitliche Verzögerung des Eingangssignals eingetragen werden; unabhängig von den im Verzögerungssignal enthaltenen Werten wird dann die zeitliche
9 Lineare und nichtlineare Systeme in Simulink
332
Verzögerung auf diesen Maximalwert begrenzt. Für die Parameter Initial input und Initial bu/Jer size gelten die für den Transport Oelay-Block gemachten Aussagen. Für beide möcke kann unter Fade order ein ganzzahliger Wert ~ 0 angegeben werden, der bestimmt, welche Ordnung die Pade-Approximation der Blöcke haben soll. Diese Option ist dann von Bedeutung, wenn ein Simulink-Modelliinearisiert werden soll. Die Default-Einstellung Fade order = 0 resultiert darin, dass bei einer Linearisierung der Transport Oelay- und Variable Transport Oelay-Block durch ein Verstärkungsglied mit Fal,tor 1 ersetzt werden.
9.2 Analyse eines Simulink-Modells
333
Steigt das Signal des Ramp-Blocks über den Wert 2, wird der Integratorausgang proportional zum Anfangswert ansteigen. Eine Begrenzung des Ausgangs auf 2 verhindert dies (Aktivierung der Check Box Limit output, Upper saturation limit = 2).
Beispiel
Abb. 9.3: Beispiel zur Integrator-Rücksetzung; Korr-ekte Lösung des Schleifenproblems durch Abgr-eifen der Zustandsgröße: bspcontinuous2.mdL
Constant1
In diesem Beispiel soll die Problematik des Rücksetzens eines Integrator-Blocks näher beleuchtet werden. Ein Integrator integriert das Signal 0.5 des Constant-Blocks auf. Erreicht sein Ausgang den Wert 2, erfolgt eine Rücksetzung auf den vom Ramp-Block erzeugten Anfangswert (Extemal reset = rising). Die Lösung nach Abb. 9.1 würde eine Schleife erzeugen, da der Ausgang des Relational Operator-Blocks und damit das Rücksetzsignal direkt vom Integratorausgang abhängt.
21
Ut::lI
r~IVVt'ALUUlJ' t"AJt.l'·t'VAt.l'\"AI~:P'VIJ"'~ I
[1.5
g'1.5
:l
'"'"
o i§
~
C/J
C/J
~
~
Anfangswert
Abb. 9.1: Beispiel zur IntegmtorRücksetzung; es entsteht eine Schleife: bspcontinuous.mdl
Constant1
Ausgangssignal des rückgesetzten Integrators bei ~~greife~ der ~ust?nd~g~ö~~; !<,~~~ng
2'"
2' .s 0.5
.s 0.5
o!~----~----~----~--~------J
o
5
10
15
20
25
5
10
Zeit [sI
Dieses Problem kann durch das Einfügen eines Memory-Blocks (Unterbibliothek Oiserete, Kap. 10.3) in den Rückführzweig gelöst werden (Abb. 9.2). Bei Verwendung eines Variable-step-Solvers kann bei größeren Schrittweiten die merkliche Verzögerung des Rücksetzsignals das eigentliche Systemverhalten jedoch verfälschen (siehe auch Abb 9.4 rechts).
15
20
25
Zeit [sI
Abb. 9.4: Beispiel zur Integrator-Rücksetzung: Scope-Daten aus Abb. 9.2 (l'inks) und Abb. 9.3 (rechts)
9.2
Analyse eines Simulink-Modells
Die Befehle linmod und trim ermöglichen die bequeme Analyse eines Simulink-Modells. Sie sollen in diesem Kapitel vorgestellt werden. Constan!1
Memory
Abb. 9.2: Beispiel zur Integmtor-Rücksetzung; Vermeidung der Schleife durch Memory-Block: bspcontinuousl. mdl
Abbildung 9.3 zeigt die korrekte Lösung des Schleifenproblems. Hier wurde anstelle des Ausgangssignals die Zustandsgröße des Integrators abgegriffen (Aktivierung der Check Box Show state port). Die Scope-Daten zeigt Abb. 9.4 links.
Der in älteren Simulink-Versionen zur Verfügung stehende Simulink LTI-Viewer wurde aus dem Simulink Basispaket herausgenommen und in stark erweiterter Form in das Tool Simulink Gontrol Design integriert. Kap. 11.2.3 behandelt den grundlegenden Umgang mit dem Simulink Gontrol Design am Beispiel der Gleichstrom-NebenschlussMaschine.
9.2.1
Linearisierung
Mit dem MATLAB-Befehl linmod wird die Linearisierung von Simulillk-Modellen möglich. Anstelle des Befehls linmod können auch die Blöcke Time-Based Linearization
334
9 Lineare und nichtlineare Systeme in Simulink
und Trigger-Based Linearization aus der Unterbibliothek Model-Wide Utilities (Kap. 9.5.1) verwendet werden. Aus nichtlinearen Simulink-Modellen ist damit eine unkomplizierte Ermittlung eines linearen Modells möglich, von bereits linearen Modellen kann die Zustands darstellung oder Übertragungsfunktion direkt aus der Blockdiagrammform gewonnen werden. Das linearisierte System wird in MATLAB in Zustandsdarstellung mit den Matrizen A, B, C und D oder als Zähler- und Nennerpolynom der Übertragungsfunktion ausgegeben. Die Ein- und Ausgänge des Systems müssen in Simulink mit Inport- und Outport- Blöcken, die sich auf der obersten Modellebene befinden, gekennzeichnet werden. Funlüionsblöcke der Unterbibliotheken Sources und Sinks werden von Simulink nicht als Ein- und Ausgänge (in Bezug auf den linmod-Befehl) erkannt! Die Blöcke schließen sich jedoch nicht aus: Inport-Blöcke und Sources z.B. können parallel verwendet werden, wenn sie auf einen Sum-Block geführt werden.
"
!!ti 'i p ';(
sysJin
linmod ( 'sys', x, u, para)
','1
I
I I
erzeugt die linearisierte Darstellung des Simulink-Modells sys in der Variablen sys_lin (Format Stmcture).
,11
Für direkte Ausgabe der Zustands darstellung des linearisierten Modells lautet der Aufruf:
'iI,
i 'I'
'/
[A,B,C,DI
':i
:
"
H I
linmod('sys', x, u, para)
bzw. für Ausgabe der Übertragungsfunktion:
U
[num,denl
linmod('sys', x, u, pa7·a)
sys ist dabei der Name des Simulink-Modells. Mit dem Zustandsvektor x und Eingangsvektor u kann ein bestimmter Arbeitspunkt angegeben werden, um den linearisiert werden soll. Die Default-Wertesind jeweils O. Mit dem 3-elementigen Vektor para können zusätzliche Optionen definiert werden: para(l) entspricht einem skalaren perturbation level, um den Zustands- und Eingangsvariablen zur Ermittlung der Zustandsdarstellung von Simulink aus dem Arbeitspunkt ausgelenkt werden. Wird pert nicht explizit angegeben, so wird ein Default-Wert von 10- 5 verwendet. Für zeitvariante Modelle ,kann mit para(2) explizit ein fester Zeitpunkt t > 0 angegeben werden, an dem die Linearisierung durchgeführt wird. Wird pam(3) = 1 gesetzt (der Default-Wert ist 0), so bleiben die Zustandsgrößen von Blöcken, die durch die Wahl der Ein- und Ausgangsgrößen keine Wirkung auf das Ein-Ausgangsverhalten haben, bei der Berechnung des linearen Modells unberücksichtigt. Die Dimension der Zustandsmatrizen weicht dann von der Ordnung des ursprünglichen Blockdiagramms ab. Soll der perturbation level für Zustände (xpert) und Eingänge (upert) getrennt eingestellt werden, so lautet der Aufruf:
335
9.2 Analyse eines Simulink-Modells
fert ein genaueres Ergebnis, da durch Verwendung eines fortgeschritteneren Algorithmus' der Rundungsfehler kleiner gehalten wird. Für jede Zustandsvariable wird der perturbation-Faktor zur Ermittlung der System-Matrizen individuell gesetzt. para(l) gibt dann nur die untere Grenze für den perturbation-Faktor an. Der Default-Wert ist 10- 8 . Da linmod2 genauer rechnet, muss auch eine höhere Rechenzeit miteinkalkuliert werden. Steht das Iinearisierte Simulink-Modell in Zustandsdarstellung (A,B,C,D) zur Verfügung, können weitere Befehle der Control System Toolbox (Kap. 5.1) verwendet werden. Zum Beispiel kann mit sys = ss(A,B,C,D)
aus dem System in Zustandsdarstellung ein LTI-Objekt (LTI steht für linear time invariant) erzeugt werden, oder mit bode (A, B, C, D)
das Bode-Diagramm (Betrag und Phase der Übertragungsfunktion) berechnet und in einer MATLAB-Figure dargestellt werden.
Für die Linearisierung von Abtastsystemen bzw. die Erzeugung eines zeitdiskreten linearisierten Modells existiert der spezielle Befehl dlinmod. Dieser wird in Kap. 10.4 ausführlich besprochen. Sollen anstelle des Befehls linmod die Blöcke Time-Based- oder Trigger-Based Linearization (Kap. 9.5.1) verwendet werden, so entfällt die Angabe des Arbeitspunkts. Der Block Time-Based Linearization berechnet das lineare System zu einem festlegbaren Zeitpunkt, beim Block Trigger-Based Linearization kann die Linearisierung des Simulink-Modells durch ein Trigger-Signal ausgelöst werden. Beispiel Abb. 9.5 zeigt ein Modell einer Strecke 2. Ordnung, dessen Ausgang über eine einfache Zeitverzögerung an den Eingang zurückgeführt ist. Ausgänge des Systems sind die Ausgangssignale der Transfer Fcn-Blöcke, Eingang ist die AngriffssteIle des Anregungssignals.
Inl Oull Übertragungsfunktion
Im Rücl
sys_lin
= linmod('sys',
x, u, paTa, xpert, upert)
Der Wert des Parameters para(l) wird dann ignoriert. Neben linmod existiert noch der Befehl linmod2. Die Befehls-Syntax unterscheidet sich vom linmod-Befehl nur insofern, als dass xpert und upert wegfallen. linmod2 lie-
Oul2
Abb. 9:5: Beispiel zur Systemlinearisierung: bspZinmod.mdZ
9 Lineare und nichtlineare Systeme in Simulink
336
9.2 Analyse eines Simulink-Modells c: d: StateName: OutputName: InputName: OperPoint: Ts:
Mit dem Befehlsaufruf linmod('bsplinmod')
[A,B,C,D] A= -0.7500 1.0000 0
-0.0500 0 0.5000
-1.0000 0 -1.0000
B
337
[2x3 double] [2xl double] {3x1 cell} {2xl cell} {'bsplinmod/lnl'} [lxl struct] 0
erhält man neben den Daten der Zustandsdarstellung (sys_lin.a, ...• sys_lin.d) noch Zusatzinformation z.B. über die Zuordnung der Zustände zu den im Modell programmierten Blöcken (sys_lin.StateName) oder den aktuellen Arbeitspunkt (syB-lin.Ope'T"Point).
1 0 0 C 0 0
0.5000 0
Ohne vorherige Linearisierung kann die Zuordnung der Zustände auch aus dem Parameter xsto'T"d im Befehlsaufruf
0 1.0000
D
[size, xO, xstord]
0 0
bsplinmod
size 3
wird die Zustandsdarstellung des Systems gewonnen,
o
[num,den] = linmod('bsplinmod') Returning transfer function model
o
2 1 1
num
xO
o o
-0.0000 -0.0000
0.5000 -0.0000
0.5000 0.5000
den .1.0000
1.7500
0.8000
0.5500
gibt die Koeffizienten der Zähler- und Nennerpolynome der SystemübertragungsfunktiOllen zurück, die mit
o
o
o
xstord 'bsplinmod/Strecke' 'bsplinmod/Strecke' 'bsplinmod/Übertragungsfunktion im Rückführzweig'
ermittelt werden. sys1=tf(num(1,:),den)
9.2.2
sys2=tf(num(2,:),den)
Mit dem MATLAB-Befehl trim kann der Gleichgewichtspunkt (eingeschwungener Zustand, x = 0) eines Modells bestimmt werden. Der Befehl
in die bekannte Übertragungsfunktion-Form gebracht werden können. Mit
I
Bestimmung eines Gleichgewichtspunkts
bzw.
sys_Iin=linmod('bsplinmod') sys_lin a: [3x3 double] b: [3x1 double]
[x,u,y]
trim('sys',xO,uO,yO)
findet den Gleichgewichtspunkt des Modells sys, der dem Anfangszustand (xO, uO. yO) am nächsten liegt. Bei nichtlinearen Systemen können mehrere Gleichgewichtspunkte existieren. trim liefert aber immer nur einen Gleichgewichtspunkt, der den Anfangswerten am nächsten liegt. Werden diese Anfangswerte nicht explizit angegeben, so sucht Simulink den Gleichgewichtspunkt, der der Bedingung xO = 0 am nächsten kommt. Existiert kein Gleichgewichtspunkt, gibt Simulink den Punkt aus, an dem die Abweichungen der Zustandsableitungen x von 0 minimiert werden.
338
9 Lineare und nichtlineare Systeme in Simulink
9.3 Bibliothek: Discontinuities - Nichtlineare Systeme
Beispiel
Simulink-Bibliothek: DiscontinuitiesNichtlineare Systeme
Für das System aus Abb. 9.6 (entspricht Abb. 9.5)1) soll nun der Gleichgewichtspunkt für den Anfangszustand xO= [1; 1; 1], uO
339
[3]
Rate Limiter und Saturation gefunden werden.
~~l'_
A~
-EIl
Q Strecke
{~§
Speicherung
In1
Übertragungsfunktion im Rücldührzweig
Out1
L-------~------·~GD Out2
Abb.
9.6:
lung
eines
Beispiel zur ErmittGleichgewichtspunkts:
bsptrim.mdL
Der Aufruf von trim gibt die gefundene Lösung aus. trim( 'bsptrim' ,xo, uO)
[x, u, y,dx] x =
o 2.5806 1.2903 u
1.4194 y
1.2903 1.2903 dx
1.0e-010
*
0.5479
o o
Durch Angabe von dx als Argument der linken Seite beim Aufruf von trim kann Information über die verbleibende Abweichung der Zustandsableitungen von 0 erhalten werden. Wichtiger Hinweis zur MATLAB-Version 5.3: Enthält ein Simulink-Modell, auf das der trim-Befehl angewendet werden soll, Scope:- und To Workspace:-Blöcke, so dürfen in diesen die Variablen zur Datenspeicherung nicbt mit den Default-Namen der Argumente der linken Seite x, u, y und dx des trimBefehls benannt werden! Beim Aufruf von trim können sonst die entsprechenden Rückgabeparameter nicht berechnet werden. Ab der MATLAB-Version 6 können im oben beschriebenen Fall zwar die Rückgabeparameter korrekt berechnet werden, jedoch wird beim Aufruf von trim der Datenvektor y des Blocks Speicherung mit den Rückgabewerten von trim überschrieben. I)
Der Rate Limiter-Block begrenzt die erste Ableitung des Eingangssignals auf die unter Rising slew rate (Begrenzung bei positiver Steigung des Eingangssignals ) bzw. Falling slew rate (Begrenzung bei negativer Steigung Rate Llmiter des Eingangssignals) angegebenen Werte. Der Saturation-Block begrenzt den Maximalwert des Eingangssignals nach oben (Upper limit) und unten (Lower limit). Beide Blöcke stehen auch als Dynamic-Variante zur . Saturation Verfügung, bei denen eine dynamisch veränderbare R'ising/Falling slew mte bzw. ein dynamisches Upper/Lower l'imit an die zwei zusätzlichen Eingänge up und 10 gelegt werden kann. Backlash
I.
,dd ~ > ff-
Der Backlash-Block modelliert das Verhalten eines Systems mit Lose. Lose können z.B. in mechanischen Anordungen, die Getriebe beinhalten, als Getriebespiel auftreten. Zwischen den Zähnen der ineinander greifenden Backlash Zahnräder kann hier durch ungenaue Fertigung oder Abnutzung ein Spiel entstehen. Der Parameter Deadband width gibt die Loseweite (Breite der Totzone symmetrisch um den Ausgang) an. Der Backlash-Block kann sich jeweils in einem der drei folgenden Betriebszustände befinden: .. Positiver Anschlag: Ausgangssignal steigt proportional zum Eingangssignal, y(i) = u(i) - 1/2 . Deadband w'idth. Beispiel Getriebe: Zahnräder im Eingriff, positive Drehzahl des Antriebs bewirkt positive Drehzahl an der Last. .. Entkoppelt: Kehrt sich das Eingangssignal um, muss erst die gesamte Loseweite durchquert werden, bis der negative Anschlag erreicht wird. Der Ausgang ist währenddessen vom Eingang entkoppelt. Beispiel Getriebe: Nach Drehrichtungsänderung lösen sich Zahnräder voneinander, Drehzahl der Last kann durch Motor nicht gesteuert werden. .. Negativer Anschlag: Ausgangssignal sinkt proportional zum Eingangssignal, y(i) = u(i) + 1/2· Deadband width. Beispiel Getriebe: Zahnräder wieder im Eingriff, diesmal an gegenüberliegender Zahnflanke, negative Drehzahl des Antriebs bewirkt negative Drehzahl an der Last. Das Beispiel-Modell bspbacklash.mdl aus Abb. 9.7 verdeutlicht die F\mktionsweise des Backlash-Blocks: Mithilfe eines Rate Limiter-Blocks wird aus dem Rechtecksignal (Amplitude 1 und F\·equenz 0.4 Hz) des Signal Generator der Sägezahn u mit gleicher positiver und negativer Steigung erzeugt. Der Sägezahn ist Eingangssignal des BacklashBlocks. Der Backlash-Block hat Initial output= 0 und eine Deadband width= 1. Aus der
9 Lineare und nichtlineare Systeme in Simulink
340
MATLAB-Figure sind die drei Betriebszustände gut zu erkennen. Am positiven Anschlag steigt y um 0.5 versetzt zu u an. Nach dem Richtungswechsel von u bleibt y konstant bis die Loseweite durchquert ist und sinkt dann am negativen Anschlag um 0.5 versetzt zu u. 1.41
_
!...
11
9.3 Bibliothek: Discolltinuities - Nichtlineare Systeme 30 1
341
.I
.1l ~15 iil
10"
1.2 5"
H I Rate Limiter
Backlash
OLI____~--~--~~--~----
o
Q)
ausgabe
"lil
To Workspace
5l'
0.8
2
4
6
8
10
Zeit[s]
Abb. 9.9: Ergebnis bspquantizer.mdL
der
Simulation
von
1il 0.6 0.4
Dead Zone
0.2
0\
Constant
I,
V
\I
024
V
6 Zeit [sI
Abb. 9."/: Beispiel zum Backlash-Block: bspbackLash.mdl (links) und Ergebnis der Simulation (rechts)
Quantizer
m Quantizer
Der Quantizer-Block setzt sein Eingangssignal in ein stufenförmiges Ausgangssignal um. Die Stufenhöhe wird dabei durch den Quantization interval Parameter bestimmt. Zum Integrationszeitpnnkt i berechnet sich der Ausgang y(i) abhängig vom Quantization interval Parameter q und Eingang u(i) unter Zuhilfenahme der MATLAB-Funktion round zu:
y( i) = q . roundt( i)) q
Im folgenden Beispiel (Abb. 9.8) wird mit einem Fcn-Block (Unterbibliothek UserDefined Functions, Kap. 9.5) eine in x- und V-Richtung verschobene Parabel erzeugt und quantisiert. Eingang und Ausgang der Quantizer-Blocks werden in einer MATLABFigure (Abb. 9.9) aufgezeichnet. Als Quantization interval wurde q = 5 gewählt.
~I Clock
Parabel
f(u)
I
~ qllantisjerte parabel:.4 ausgabe I
(u(l )-5)"2 + 3 Quantizer
To Workspace
A.bb. 9.8: Be'lspiel zum Quantizer-Block: bspquantizer.mdL
171/~
Mit dem Dead Zone-Block kann ein System modelliert werden, das in einem bestimmten Bereich des Eingangssignals am Ausgang den Wert 0 erzeugt. Die untere und obere Grenze der Totzone werden durch die PaDead Zone rameter Start of dead zone und End of dead zone festgelegt. Liegt das Eingangssignal innerhalb dieser Grenzen, entsteht am Ausgang der Wert O. Für Werte des Eingangssignals u :s; Start of dead zone wird der Ausgang zu y = u- Start of dead zone. Für Werte des Eingangssignals u ;::: End of dead zone wird der Ausgang zu y = u- End of dead zone. Im Block Dead Zone Dynamic können an die Eingänge up und 10 Signale für dynamisch veränderbare Werte von Sta·rtjEnd of dead zone angelegt werden.
>
Relay (Hysterese)
m
Mit dem Re/ay-Block wird abhängig vom Eingangssignal der Ausgang zwischen den zwei Werten Output when on und Output when off geschaltet. Das Relais ist eingeschaltet, 'on', wenn der Eingang u ;::: dem Switch on Relay point wird. Dann gilt: y = Output when on. Dort bleibt es, bis u <::; Switch off point wird. Nun gilt: y = Output when off. Der Switch on point muss immer größer oder gleich dem Switch off point gewählt werden. Für Switch on point > Switch off point modelliert der Re/ay-Block eine Hysterese, bei Switch on point = Switch off point wird ein Schalter modelliert. Coulomb & Viscous Friction IX~
Der Coulomb & Viscous Friction-Block modelliert ein System mit Haft- und Gleitreibung. Diese Reibungsarten können z.B. in mechanischen Systemen Coulomb & mit translatorischen oder rotatorisehen Bewegungen auftreten. Durch die Viscous Friction Haftreibung entsteht am Nulldurchgang des Eingangssignals (z.B. Drehzahl bei rotatorisehen Bewegungen) eine Unstetigkeitsstelle. Erst wenn das antreibende Moment einer rotatorischen Bewegung größer als das Haftreibmoment wird, kann die Drehmasse in Bewegung gesetzt werden, Sinkt das antreibende Moment unter das >;.r-
9 Lineare und nichtlineare Systeme in Simulink
342
9.4 Bibliothek: Lookup Tab/es - Nachschlagetabellen
Haftreibmoment, bleibt die Drehmasse stehen. Für Drehzahlen> 0 entsteht ein linear ansteigendes R.eibmoment (Gleitreibung).
Werte der Lookup Table (0) und Ausgangssignal
Q)
~
Die Größe der Haftkraft bzw. des Haftmoments wird durch den Parameter Co'ulomb friction value (Offset) festgelegt. Die Steigung der Gleitreibung wird durch Coefficient of viscous friction (Gain) bestimmt.
Cl.
.Sl
.3 ~
Der Hit Cro5sing-Block erkennt den Zeitpunkt, zu dem das Eingangssignal 1Z[J den unter Hit crossing offset eingetragenen Wert in der unter Hit crossing Hit direction angegebenen Richtung durchläuft. Ist die Check Box Show outCrossing put port aktiviert, wird zum Crossing Zeitpunkt eine 1 am Ausgang, sonst o ausgegeben. Wird im Optimization-R.egister der Configuration Parameters Dialogbox die Check Box Implement logic signals as boolean data deaktiviert, ist das Ausgangssignal vom Typ double, ansonsten boolean.
1
·t
l
!'i
d
I!;
I '!I !!
3t" 2 .
o~· -1
.
~_3L.
:J
JlZL
1 1)
5r,~~----~~~~--~~, 4
~-2
Hit Crossing j'
343
« -4
Ramp
Lookup Table
-10 -8 -6 -4 -2
0
6
8
10
Eingangssignal: Rampe mit Steigung 1
Abb. 9.10: Beispiel zur Lookup Table: bspLookuptabLe.mdL (links) und Simulationser"gebnis (rechts)
i
11
I'i
9.4
1" 11
i.
1
Bibliothek: LookLlp Tab/esNachschlagetabellen
Lookup Table
I1
Die LookLlp Tab/e bildet das Eingangssignal anhand der in der Nachschlagetabelle( Vector of input values x Vector of output values) abgelegten Information auf den Ausgang ab. Fällt der aktnelle Wert des EingangssiLookup Table gnals genau mit einem Tabellenpunkt (Punkt im Vector of input values) zusammen, wird der zugehörige Punkt aus dem Vector of output values ausgelesen. Liegt der aktuelle Wert des Eingangssignals außerhalb des Tabellenbereichs oder zwischen zwei Tabellenpunkten, wird mit dem unter Look-up method gewählten Verfahren extra- bzw. interpoliert.
58
!i
'!
Im folgenden Beispiel bsplookuptable .mdl (Abb. 9.10 links) wurde die Lookup Tab/e mit folgenden Werten ausgestattet (bsplookuptable...ini.m als Callback-Routine PreLoadFcn, Kap. 8.8.1):
I
% Vector of input values vecin=[-10:2:10) ; % Vector of output values
Abb. 9.11: Lookup Table Editor mit Daten von bspLookuptabLe.mdL
Lookup Tab/es-Bibliothek zu überwachen und zu ändern, bietet der Lookup Table Editor (Abb. 9.11), der über den Menüpunkt Tools/Lookup Table Editor geöffnet wird. Hier werden im rechten Fensterteil die Daten der Table blocks (linker Fensterteil) in
Tabellenform (Zeilen oder Spalten) dargestellt. Per Mausklick kann der Inhalt jeder Tabellenzelle geändert werden. Um die Änderungen bei der Simulation wirksam werden zu lassen, müssen die Table blocks aktualisiert werden (Button $I. oder Menüpunkt File/Update Block Data). Im Fall von bsplookuptable .mdl werden die Variablen vecin und vecout dann mit neuen Werten belegt.
vecout=[-5 -5 -5 -2 -2 -24.5 4.5 4.5 0 -1];
Eingang der LookLlp Tab/e ist ein Rampensignal mit Steigung 1, sodass der gesamte Wertebereich der Nachschlagetabelle durchfahren wird. Am Ausgang entsteht die in der Lookup Tab/eabgelegte Stufenkurve. Nach der Simulation wird über bsplookuptable_plot.m (als Callback-Routine StopFen) das Ergebnis grafisch dargestellt (Abb. 9.10 rechts). Eine bequeme Möglichkeit, die Daten von Blöcken aus der
Lookup Table (2-D)
~ Lookup Table (2-D)
Der Lookup Tab/e {2-D}-Block ermöglicht die Ablage einer zweidimensionalen Nachschlagetabelle. Mit dem Parameter Vector of output values werden die möglichen Ausgangswerte in Form einer Matrix festgelegt. Row index input values bestimmt die zu den Reihen der Matrix, Colv.mn index
9 Lineare und nicht lineare Systeme in Simulink
344
input values die zu den Spalten der Matrix korrespondierenden Werte. Mit Row index 'input values und Column index input values werden also die Punkte in der x-y-Ebene definiert, Vector 01 output values enthält dann die zugehörigen z-Werte,
Das Signal am ersten (oberen) Eingang des Lookup Table (2D)-Blocks wird mit Row index 'input values, das Signal am zweiten (unteren) Eingang wird mit Column index input values verglichen. Ist für das Wertepaar am Blockeingang ein Eintrag im Vector of outpnt valnes vorhanden, wird dieser an den Ausgang gegeben; andernfalls wird automatisch zwischen den im Vector of ontpnt valnes abgelegten Werten inter- oder extrapoliert. Hierbei gelten die Aussagen für die Lookup Table.
Lookup Table (n-D) ~~)~
Bei Verwendung einer Lookup Table (n-D) kann die Nachschlagetabelle 2 bis n Dimensionen besitzen. Sie wird im Textfeld Number of table dimensions festgelegt und bestimmt die Anzahl der Blockeingänge, Die InLool(up terpolation zwischen den durch die Felder First inpnt (row) breakpoint Table (n-D) set, Second inpnt (colnmn) breakpoint set usw. definierten Datenpunkten kann mit konstantem Wert (None), linear (Linear) oder mit Spline-Interpolation (Cubic Spline) durchgeführt werden, Gleiches gilt für die Extrapolation über vorhandene Datenpunkte hinaus.
I
~ ~
9.5
Bibliothek: User-Defined FunctionsBenutzer-definierbare Funktionen
345
MATLAB-Workspace bekannten Variablen m, 1',1[, I und g zu:
u[l] _ g . sin u[3] . cos u[3] y=
m
+ I . U[2]2 . sin u[3]
· 2 u [3] -M +Sll1
m
MATLAB Function Der MATLAB Fcn-Block stellt eine Erweiterung des Fcn-Blocks dar. Unter dem Parameter MATLAB function können neben mathematischen Ausdrücken auch MATLAB-Funktionen (Kap. 2.4) auf das Eingangssignal angewendet werden. Wichtig ist dabei, dass die Breite des von der spezifizierten MATLAB-Funktion ausgegebenen Signals der Ontpnt d-imension des MATLAB Fcn-Blocks entspricht. Der Default-Wert -1 weist dem Blockausgang die Signalbreite des Eingangs zu. Unter Ontpnt signal type kann der Typ des Ausgangssignals angegeben werden (auto, real oder complex). Die Berechnung eines MATLAB Fcn-Blocks benötigt sehr viel mehr Zeit als die eines FCIlBlocks, da bei jedem Integrationsschritt der MATLAB parser a.ufgerufen wird, der die Syntax analysiert. Bezüglich R.echenzeiteinsparung ist daher bei einfachen Funktion~n die Verwendung des Fcn- oder Math Function-Blocks besser; komplizierte Operationen sollten als S-Funktion geschrieben werden. Embedded MATLAB Function Mit dem Embedded MATLAB Function-Block ka.nn wie mit dem MATLAB Fcn-Block MATLAB-Code in Form einer MATLAB-Funktion (Kap. 2.4) in ein Simulink-Modell (oder Stateflow-ChaTt, siehe Kap. 12.2.6) eingeEmbedded MATLAB Function bracht werden. Dabei kann auf die gesamte MATLAB-Befehlspalette zugegriffen werden. Gegenüber dem MATLAB Fcn-Block hat der Embedded MATLAB Function jedoch entscheidende Vorteile. Werden die verwendeten MATLABBefehle auf die in der Embedded Matlab Run-Time Function L'ibraTY verfügbaren Befehle beschränkt, kann der Real-Time Workshop aus dem Simulink-Modell problemlos C-Code für die Ausführung außerhalb einer MATLAB-Umgebung erzeugen. Die Befehle der Embedded Matlab Run-Time Function LibraTY stehen bereits in C zur Verfügung und können bei Code-Erzeugung vom Real-Time Workshop direkt eingebunden werden. Eine Liste der bereits zur Verfügung stehenden Befehle (die Library wird weiter ausgebaut) findet sich in der Online-Hilfe; hier einfa.ch nach Embedded Mai/ab RunTime F'unction Library suchen. Auf die Programmierung von S-Funktionen zur CodeErzeugung muss somit also nur noch zurückgegriffen werden, wenn in der Funktion tatsächlich dynamische Systeme realisiert werden sollen.
G
Function
r
Mithilfe des Fcn-Blocks kann auf ein Signal ein im Stil der Sprache C frei programmierbarer mathematischer Ausdruck angewendet werden. Mit u kann auf das (skalare) Eingangssignal bzw. die erste Komponente eines Fen vektoriellen Eingangssignals Bezug genommen werden, u(i) oder u[i] bezeichnen die i-te Komponente eines vektoriellen (l-D) Eingangssignals. Der mathematische Ausdruck darf numerische Konstanten, mathematische Funktionen (Kap. 2.1), arithmetische, logische und Vergleichsoperatoren (Kap. 2.3.1) enthalten, sowie natürlich Klammern und im MATLAB-Workspace definierte Variablen. Bezüglich der Priorität der Operatoren bei der Auswertung des Parameters Expression gelten die Regeln der Sprache C, Matrizenoperationen werden jedoch nicht unterstützt.
)[f~U)
9.5 Bibliothek: User-Defined Functions - Benutzer-definierbare Funktionen
Beispiel: Der Ausdruck (u[l]!m - g*sin(u[3])*cos(u[3]) + 1*power(u[2],2)*sin(u[3]))! ... (M!m + power(sin(u[3]),2)) in einem Fcn-Block weist dem skalaren Ausgang y folgenden Ausdruckmit den auf dem
Das Beispiel bspembedded.mdl zeigt, wie mit einer Embedded MATLAB Function eine einfache Matrix-Inversion mit vorangehender Abfrage der Matrix-Dimension realisiert werden kann. Abb. 9.12 zeigt das Beispiel bei Speisung mit einer [3 x 3]-Matrix (oben) und einer [2 x 3]-Matrix (mitte) sowie den Embedded MATLAB Editor, der sich bei
346
9 Lineare und nichtlineare Systeme in Simulink
Links-Doppelklick auf den Embedded MATLAB Function-Block öffnet. Die im Code der Funktion cond_inv verwendeten J\1ATLAB-Befehle size, zeros und inv gehören zur Embedded Matlab Run-Time Punction Library.
9.5 Bibliothek: User-Oefined Functions - Benutzer-definierbare Funktionen
347
Der M-File (level-2) S-Function-Block erlaubt das Einbinden einer als MATLAB-Skript im Level-2 geschriebenen S-F\mktion. Beim Programmieren einer M-File S-Funktion sollte immer der aktuelle Typ Level-2 verwendet werden. Bei diesem Typ wurde gegenüber dem bisherigen Typ M-File Level-1 der Umfang der zur Verfügung stehenden Routinen stark erweitert und an die für C MEX S-Funktionen verfügbaren Routinen angeglichen. Bereits bestehende, mit älteren MATLAB-Versionen erstellte M-File Level-l S-Funktionen brauchen nicht konvertiert zu werden; zum Einbinden kann wie gewohnt der S-Function-Block verwendet werden. Zur näheren Erläuterung von S-Funktionen siehe Kap. 9.7 und Abb. 9.16.
9.5.1 Display
'i"II' 'I
I!! 'i "I
:r "
__ .._____.__________.___.__.______________________ ~~ il' I$1l!I1 '" i; &J )g;)1,;i)'1&j r;W,ID' EH []] B Bio
~~~_ ... _~~~_:J.~!_~_~:~"I!.L~~~~s_y'~i.~.~~ __~I.~!~ ~_
D"", I>ll y, E\i Il'll •.., io, 18~ ~
1,
··!j.~T-·ftm-cti~I~'-[~~ut,e'lar.l]
sl-l
::11
,1_:
::i I ,>I
-
10
1
Diese Unterbibliotheken stellen Blöcke zur Verfügung, die sowohl der Überprüfung von Simulink-Modellen auf ein bestimmtes statisches oder dynamisches Verhalten dienen, als auch Blöcke, mit deren Hilfe modellweite Zusatzinformation abgelegt und Zusatzeigenschaften definiert werden können. Sie dienen eier leichteren und komfortableren Bedienung, Handhabung und Dokumentation von Simulinlc-Modellen.
i f si(l) _D s1{2) lA_out" zeJ::09{si);
1"
B~ I
"cond_iu1J(Jn_inj
:si2:c(1iI in);
D
I 41 ':
'li
.i.•
Bibliotheken: Model Verification und Model- Wide Utilities - Prüfblöcke und Modell-Ergänzungen
Model Verification - Prüfblöcke
f.leg=O;1
else
:-,
lll_out" inl1(llI_ill); fla.q g 1:
Assertion
L~~L.~._
"-"'TLn'''i "--Ccr14
Abb. 9.12: Beispiel bspembedded.mdL: Aufruf mit einer [3 x 3]-Matrix (oben) und einer [2 x 3J-Matr'ix (mitte). Unten: Der Embedded MATLAB Editor mit dem Gode der eingebetteten Funktion cond_ inv
S-Function, S-Function Builder und M-File (Level-2) S-Function
1s~s~e~J S-Function
~ syste~r S-Function
Builder
B
M-file (level-2) S-Function
Der S-Function-Block ermöglicht es, eine als MATLAB-Executable File (MEX-File in C, C++, Ada oder Fortran) oder MATLAB-Skript (MFile Level-I) programmierte S-Funktion in ein Simulink-Blockdiagramm einzubinden. Der Name der S-Funktion muss dazu im Pararneterfeld Sjunetion name eingetragen werden. Mithilfe des S-junction parametersTextfeldes können der aufgerufenen S-Funktion zusätzliche Parameter übergeben werden, z.B. MATLAB-Ausdrücke oder Variablen. Mehrere Parameter müssen dabei durch ein Komma getrennt werden. Durch Klick auf elen Edit-Button öffnet sich eier Quellcode der S-Funktion im MATLAB-Editor (zum MATLAB-Editor siehe Abb. 2.4). .
C MEX S-Funktionen können auch bequem unter Verwendung des Blocks S-Function Builder programmiert werden. Dieser stellt eine graphische Oberfläche u.a., mit vorgefertigten Registern wie z.B. Initialization oder Continuous Derivatives dar, welche die Rümpfe von Stanelard-C-Routinen repräsentieren. Eigener C-Code muß dann nur noch in die Textfelder der entsprechenden Register eingetragen werden.
E2J Assertion
Der Assertion-Block überwacht, dass keines der Elemente seines Eingallgssignals Null wird. Für den Fall, dass Null erreicht wird, kann vom Benutzer festgelegt werden, ob die Simulation unterbrochen werden soll oder nicht, ob eine Standardwarnung erscheint oder selbstdefinierte Callback-Routine (M-File) ausgeführt werden soll.
Wie auch bei allen anderen Blöcken der Model Verificatioll-Bibliothek kann beim Assertion-Block die Überwachung des Eingangssignals problemlos deaktiviert werden. Damit müssen ·Prüfblöcke nach erfolgreicher Überwachung nicht aus dem SimulinkModell entfernt werden. Eine globale AktivierungjDeaktivierung aller Prüfblöcke kann bequem über das Diagnostics-Register (Untergruppe Data Integrity) , Kap. 8.7.1 und Abb, 8.31 der Conjiguration Parameters Dialogbox durchgeführt werden. Check Static Gap und Check Dynamic Gap
11"1:' 21 '... Cheek Statle Gap
,,"'"
Diese Blöcke überwachen, ob ihr Eingangssignal (beim Check Oynal71ic Gap der Eingang sig) immer größer gleich oder kleiner gleich einer statischen (Parameter Upper/Lower Bound) oder dynamischen Grenze (Eingänge min und max) geblieben ist. Wie beim Assertion-Block kann der Benutzer 1 bestimmen, welche Aktion bei Verletzung der Überwachungs bedingung r eintreten soll.
r.h<'lr.k
Der Block Check Oynamic Range wird im Beispiel aus Abb. 8.17 behandelt.
9 Lineare und nichtlineare Systeme in Simulink
348
Check Static Lower Bound und Check Dynamic Lower Bound Die Blöcke Check Static Lower Bound und Check Dynamic Lower Bound überwachen ihr Eingangssignal auf Einhaltung einer statischen oder dynamischen unteren Schranke. Der Benutzer kann wieder bestimmen, welche Aktion bei Verletzung der Überwachungsbedingung eintreten soll.
~
Check Static LowerBound
Für die Überwachung auf Einhaltung einer oberen Schranke müssen die Blöcke Check Static Upper Bound und Check Dynamic Upper Bound verCt~~~~§~~~~c wendet werden.
1-
0
•
••
I
Model-Wide Utilities - Modell-Ergänzungen DocBlock
8
DocBlock
Ein Doppelklick auf den DocBlock erzeugt ein Textfile und öffnet es in dem unter File/Prejerenees spezifizierten Editor. Hier kann Hilfe- und Dokumentationstext eingegben werden. Das Textfile wird beim Speichern dem DocBlock zugeordnet und kann nach Schließen jederzeit durch Doppelklick auf den Block wieder geöffnet und modifiziert werden.
9.6 Algebraische Schleifen
349
Transfer Function und Zero-Pole, wenn Zähler- und Nennerpolynom gleicher Ordnung sind.
Wird der Ausgang eines Blocks mit direet feedthrough direkt oder über andere direet feedthrough-Blöcke an seinen Eingang zurückgeführt, so hängt das aktuelle Eingangssignal des Blocks vom eigenen Ausgang zum gleichen Zeitpunkt ab, der wiederum vom Eingangssignal zum gleichen Zeitpunkt abhängt. Eine algebraische Schleife entsteht.· Beim Integrator tritt eine algebraische Schleife immer dann auf, wenn sein Ausgangssignal direkt oder über direct feedthrough-Blöcke das externe Anfangswertsignal steuert. Die Schleifenproblematik kann durch den bereits im Beispiel von Kap. 9.1 (Abb. 9.2 und 9.3) angegebenen Ansatz gelöst werden: Anstelle des IntegratorAusgangssignals wurde dort die Integrator-Zustandsgröße am state port abgegriffen und für die Rückführung verwendet. Der state port ist ein zusätzlicher Ausgang, der durch Aktivierung der Check Box Show state port erzeugt werden kann. Ausgangssignal und Zustandsgröße eines Integrator-Blocks sind dem Wert nach gleich, werden jedoch von Simulink intern zu unterschiedlichen Zeitpunkten berechnet, so dass die Schleifenproblematik vermieden wird. Enthält ein Modell eine algebraische Schleife, wird von 'Simulink zu jedem Integrationsschritt eine Routine aufgerufen, die diese Schleife iterativ löst (Newton-RaphsonAlgorithmus). Damit das Verfahren konvergiert, ist es in vielen Fällen nötig, einen Startwert vorzugeben. Dies kann z.B. durch Einbringen eines Initial Condition (iC)-Blocks
geschehen (Unterbibliothek Signal Attributes). Time-Based Linearization und Trigger-Based Linearization Die Blöcke Time-Based- und Trigger-Based Linearization rufen zu einem vorT=1 gebbaren Zeitpunkt bzw. abhängig von einem Triggersignal die Routinen Timed-Based linmod bzw. dlinmod auf, welche eine Linearisierung des Simulink-Modells Linearization durchführen (siehe auch Kap. 9.2.1). Das Ergebnis der Linearisierung wird a~s Struktur im MATLAB Worlcspace abgespeichert.Die Str~ktur trägt..den l\amen des Modells, an den z.B. _T2me_Based_Lzneanzatzon angehangt Trigger-Based wird. Die Felder a, b, e und d der Struktur enthalten die Matrizen A, Linearization B, C und D der Zustandsdarstellung des linearen Modells, des Weiteren werden die Namen der Zustände, Eingänge, Ausgänge, und die Abtastzeit als Felder abgelegt. Das Feld OperPoint enthält Information über den Wert der Eingänge und Zustände zum Zeitpunkt der Linearisierung.
I I
r1I L-J
9.6
Algebraische Schleifen
Algebraische Schleifen können in Modellen auftreten, in welchen Blöcke mit direct jeedthrough verwendet werden. Bei diesen Blöcken hängt das Ausgangssignal vom Eingangssignal zum gleichen Zeitpunkt ab. Blöcke mit dir·eet jeedthrough sind beispielsweise Sum, Gain, Product, State Space mit Durchschaltmatrix D of 0, Integrator bezüglich des Anfangswerteingangs (die Schleife, die durch die Rüclcführung des Integrator-Ausgangssignals an den Rücksetzeingang entsteht ist nicht algebraisch) sowie
Eine relativ bequeme Möglichkeit zur Lösung einer algebraischen Schleife ist der von Simulink bereitgestellte Block Aigebraic Constraint. Der Startwert für das Iterationsverfahren kann hier durch Spezifizierung des Parameters Initial guess vorgegeben werden. Algebraic Constraint Solve
>11'1 l(zl=O
z
AlgebraieCon","in!
Der Aigebraic Constraint-Block zwingt sein Eingangssignal zu 0 und gibt an seinem Ausgang den Wert der Größe z aus, für die der Eingang 0 wird. Die Ausgangsgröße muss das Eingangssignal durch eine wie auch immer geartete Rückführung beeinflussen.
Unter Initial guess kann ein Startwert für die Größe z angegeben werden, von dem aus der Algorithmus für die Lösung der algebraischen Schleife gestartet wird. Durch geschickte Wahl von Initial guess kann die Genauigkeit der Lösung verbessert werden, bzw. in kritischen Fällen wird die Lösung der algebraischen Schleife damit überhaupt erst ermöglicht. Folgendes Beispiel soll die Funktion des Aigebraic Constraint-Blocks verdeutlichen. Es soll die Lösung der Gleichung , f(z) =
~
7
z3 -
~ 28
sinz - z - 5 = 0
gefunden werden. Zu der im Block Display angezeigten Lösung der Gleichung kann der Algorithmus jedoch erst ab einem Initial guess > 1.5 konvergieren.
350
9 Lineare und nichtlineare Systeme in Simulink
Wie aus Abb. 9.14 zu erkennen ist, können S-Funktionen in den folgenden Programmiersprachen realisiert werden:
-+~I+ Fen
3.970B65334N!8]
Fen1
Isl
~J
Display
Constant
Sum
Abb. 9.13: Beispiel einer algebraischen Schleife: bspaLgLoop.mdL
.. in MATLAB als lVI-File S-Funktionen vorn (bisherigen) Typ Level-l (Template sfuntmpl.m, Block S-Function) oder vom aktuellen Typ Level-2 (Template msfuntmpl.m, Block. M-File (Level-2) S-Function) , wobei von Simulink-Seite angeraten wird, M-File S-Funktionen nur noch im Level-2 zu programmieren. Bei diesem Typ wurde das Spektrum der verfügbaren Standard-Routinen stark erweitert und an C IVIEX S-Funktionen angepasst. Der Vorteil einer Programmierung in IVIATLAB ist vor allem der geringere Entwurfsaufwand: Es können alle MATLAB-Befehle (auch aus allen Toolboxen) bei der Programmierung verwendet werden. Nachteil: geringe Ausführungsgeschwindigkeit, da die S-Funktion bei jedem Integrationsschritt von Simulink mithilfe eines Parsers Zeile für Zeile interpretiert werden muss. Darüber hinaus ist eine Erzeugung von ausführbarem Code für Echtzeitanwendungen nicht möglich. Das Verzeichnis für M-File-Templates ist $M AT LABP AT H\ toolbox\simulink\blocks. .. in den Programmiersprachen C, C++, Fortran oder Ada als IVIEX S-Funktionen
9.7
p;i ,:1
,ILI ':'i.;·i :<'1
S-Funktionen
S-Funktionen sind Funktionen, die mittels eines S-Function-, S-Function Builder- oder M-File (Level-2) S-Function-Blocks (Unterbibliothek User-Defined Functions) innerhalb eines Simulink-Modells ausgeführt werden können. Der Simulink-Benutzer kann auf diese Weise eigene Algorithmen in ein Simulink-Modell einbringen. Dies ist ein Vorteil vor allem dann, wenn diese Algorithmen nicht mehr durch Standard-Funktionsblöcke realisiert werden können oder bereits bestehender Code (legacy code, z.B. C, C++) in das Modell eingebunden werden soll. Außerdem kann mithilfe von S-Funktionen die von Simulink zur Verfügung gestellte Bausteinbibliothek um beliebige Funktionen erweitert werden. 'INichtig bei der Programmierung einer S-Funktion ist die Einhaltung eines "äußeren Rahmens" (Aufruf bestimmter Routinen, Setzen von Flags etc.), der Simulink ermöglicht, wä.hrend des Simulationslaufs korrekt mit der S-Funktion zu kommunizieren. Simulink bietet dazu so genannte templates an, die diesen "äußeren Rahmen" mit allen oder häufig verwendeten Routinen bereits enthalten. Diese templates sollten vom Benutzer als Ausgangsbasis verwendet werden und erleichtern so die Programmierung eigener S-Funktionen. Die templates und viele hilfreiche Beispiele erhält man durch Doppelklick auf den (blau hinterlegten) Block S-Function Examples in der Unterbibliothek User-Defined Functions. Es öffnet sich das Bibliotheksfenster Libmry: sfundemos wie in Abb. 9.14 gezeigt. ~"',I~r
H~IJl
rS:r:Ul1clipri
ExamPles.U
';,',
.1.:
E.J[J[J[J8 S·lu",II...
!i:
,I:
!:I:
i i
S·'"nell.no
S~Jn
351
9.7 S-Funktionen
S.f"nell".,
S".hollon,
Abb. 9.14: Bibliotheksfenster der S-Function Examples: Doppelklick auf die Untergruppen zeigt Beispiele und templates an
(MEX steht für
MATLAB-Executable). Die Templates für
C
sind
sfuntmpLbasic. c (häufig benutzte Routinen) und sfuntmpLdoc. c (alle verfügbaren Routinen und ausführliche Kommentare) wenn der Code mittels eines S-Function-Blocks eingebunden werden soll. Für C IVIEX S-Funktionen kann daneben auch der Block S-Function Builder (siehe S. 346) verwendet werden. Das Verzeichnis für C IVIEX-Templates ist $M AT LABP ATH\simulink\src. Für die Programmierung von Level-l S-Funktionen in FORTRAN steht als Template sfuntmpl...fortran. f, für Level-2 S-Funktionen sfuntmpl...gate_fortran. c zur Verfügung, beide ebenfalls in $M AT LABP AT H\simulink\src. Die Ada-Templates sfuntmpLadb. txt und sfuntmpl...ads . txt sind· unter $M AT LABP AT H\simulink\ada \examples\ template zu finden. IVIEX S-Funktionen müssen vor Simulationsstart vorn Benutzer mit dem Befehl mex
-optionen sfunktion_name.extenxion
compiliert und gelinkt werden (zu Compiler-Installation und Setup-Vorgang siehe Kap. 12). optionen und extension müssen je nach verwendeter Programmiersprache angepasst werden. Vorteil von IVIEX S-Funktionen ist z,B. die schnellere Ausführungsgeschwindigkeit, da bei Simulationsstart die S-Funktion als ausführbarer Code vorliegt. Weiterer Vorteil ist, dass bereits vorhandener Code in ein Simulink-lVIodell eingebunden werden kann. Eine wichtige Anwendung speziell von C MEX S-Funktionen ist darüber hinaus der Zugriff auf Hardware (z.B. ADWandler), da dies in der Programmiersprache C üblicherweise problemlos möglich ist. Außerdem können bereits existierende Hardwaretreiber eingebunden werden. Nachteil: Die Programmierung ist für ungeübte Benutzer sehr viel komplizierter und damit aufwändiger. Wie jeder Standard-Funktionsblock kennt auch eine S-Funktion (und damit die Blöcke S-Function, S-Function Builder und M-File (Level-2) S-Function) die Aufteilung der Signale in einen Eingangsvektor u, einen Zustanclsvektor x und einen Ausgangsvektor y.
9 Lineare und nichtlineare Systeme in Simulink
352
Grundlegende C MEX S-Funktion Routinen mdllni tializeSizes
Berechne Zeitpunkt des nächsten Abtastschritts (bei Bläcken mit variabler Abtastzeit )
mdlGetTimeOfNext VarHi t
mdlOutputs
S i
mdlUpdate
III U
9.7 S-Funktionen
353
des gewünschten Systemverhaltens zur Verfügung. Sie können den Templates bzw. den Beispieldateien entnommen werden.
Beispiel: PTl Im folgenden Simulink-Beispiel pt1fun.rndl (Abb. 9.16 links) ist im Zeitkontinuierlichen ein einfaches PTI-Glied mit der Übertragungsfunktion Y(s) = 1/(1 + sT)· U(s) mittels einer S-Funktion in mehreren Varianten realisiert: ptlsfun-1ll2 : M-File Level-2 S-Funktion, Datei ptlsfun-1ll2.rn ptlsfun_c : C MEX S-Funktion, Datei pt 1 sfun_c . c ptlsfun_csfb : C MEX S-Funktion, erstellt mit dem S-Function Bui/der ptlsfun-1ll : M-File Level-1 S-Funktion, Datei ptlsfun-1ll.rn Die Zeitkonstante T wird als vom Benutzer wählbarer Parameter im entsprechenden Block (Textfelder Parameters bzw. S-Jiunction Parameters) übergeben. Abb. 9.16 zeigt das Simulink-File, die Block Parameters Dialogbox des Blocks M-File (level-2) S-Function und das Simulationsergebnis im Block Scope für eine Zeitkonstante T = 0.5 s.
I a t i
o n
mdlDeri vati ves
s s c
h
I
e
mdlOutputs
i f e
Integration
(mit kleinerer Schrittweite )
mdlDeri vati ves
Scope3 Wenn Sie sich im Verzeichnis "simullnk_sysleme" befinden, können Sie hier den Code
mdlTerminate
von pt1sfun_m2.m anschauen
weiter geforderte Aufgaben aus
Abb. 9 ..t5: Schritte beim Simulationslauf
Abb. 9.16: Beispieldatei ptlfun.mdL (links), Block Parameters Dialogbox des Blocks M-File (Level-2) S-Function (rechts oben) und Ergebnis des Blocks Scope (rechts unten)
In S-Funktionen werden zeit kontinuierliche und zeitdiskrete Zustandsvariablen getrennt voneinander behandelt, d.h. es werden unterschiedliche Routinen zur Berechnung von x bzw. Xk+l aufgerufen.
Auf der beliegenden CD-ROM (Verzeichnis simulink_systeme) sind die Quellcodes aller im Beispiel pt 1fun. rndl verwendeten S-Funktionen abgelegt. Die C MEX S-Funktion ptlsfun_c. c muss vor Simulationsstart mit dem Aufruf
Abb. 9.15 zeigt die Schritte, die Simulink bei einem Simulationslauf ausführt, und die grundlegenden Routinen, die bei diesen Schritten in einer C MEX S-Funktion aufgerufen werden. Sie entsprechen den in einer M-File Level-1 S-Funktion zur Verfügung stehenden RDutinen. Neben diesen grundlegenden Routinen steht in C MEX- aber auch in M-File Level-2 S-Funktionen eine große Anzahl weiterer (optionaler) Routinen zur Realisierung
mex pt1sfun_c.c in eine ausführbare Form (pt 1sfun_c . dll unter Windows) übersetzt werden. Das Übersetzen der S-Funktion ptlsfun_csfb wird im S-Function Builder über den Button Build (rechts oben) angestoßen. Es entstehen die Dateien ptlsfun_csfb. c (Standard-Code), ptlsfun_csfb_wrapper. c (Benutzer-Code) und (unter Windows) pt1sfun_csfb. dll.
354
9 Lineare u,nd nicht lineare Systeme in Simulink
Im Folgenden soll der Quellcode der M-File (Level-2) S-Funktion ptlsfull-ID2.m vorgestellt und kurz besprochen werden: % Quellcode der M-File Level-2 S-Funktion ptlsfun_m2.m
%endfunction
% PT1SFUN_M2 modelliert das Verhalten eines PT1-Gliedes. Die Zeit% konstante T wird als Parameter übergeben
% Überprüfe übergebenen Parameter function CheckPrms(block) if block.DialogPrm(l).Data <= 0 error('Die Zeitkonstante T muss größer Null gewählt werden'); end
%endfunction function setup(block)
%endfunction
%%%% Beginn Block-Info %%%% % Definition des zugehörigen Zustandssystems: % (block.DialogPrm(1).Data entspricht dem Parameter A [-l/block.DialogPrm(l).Data); % Zustandsmatrix B [1/block.DialogPrm(1).Data]; % Eingangsmatrix C [1]; % Ausgangsmatrix
% Setze Anfangswert der Zustandsgröße function InitializeConditions(block) T) (hier skalar) (hier skalar) (hier skalar)
% Anzahl der Ein- und Ausgänge des Blocks nM-File (level-2) S-Function n block. NumlnputPorts 1; block. NumOutputPorts = 1; % Eigenschaften (Breite,D~tentyp, Komplexität etc.) des Ein- und Ausgangs % sollen dynamisch bezogen werden block.SetPreComplnpPortlnfoToDynamic; block.SetPreCompOutPortlnfoToDynamic; % Explizites Setzen bestimmter Eigenschaften block.lnputPort(l).Dimensions size(B,1); block.lnputPort(1).DirectFeedthrough = false; % kein direct feedthrough, % da D = 0 (siehe unten) block.OutputPort(l).Dimensions
size(C,1);
% Anzahl der übergebenen Parameter block. NumDialogPrms 1; % Nur T wird übergeben block.DialogPrmsTunable = {'Nontunable'}; % T soll während der Simulation % nicht verstellbar sein % Abtastzeit und Offset werden zu Null gesetzt, da System % zeitkontinuierlich gerechnet wird block.SampleTimes = [00]; % Anzahl der kontinuierlichen Zustandsgrößen block.NumContStates = size(A,1); %%%% Ende Block-Info %%%%
1:1 ;1
% Benötigte Routinen in dieser S-Funktion block.RegBlockMethod('CheckParameters', @CheckPrms); block.RegBlockMethod('InitializeConditions' , @InitializeConditions); block.RegBlockMethod('Outputs', @Outputs); block.RegBlockMethod('Derivatives', @Derivatives);
function ptlsfun_m2(block)
setup(block);
'jf
355
9.7 S-Funktionen
A
[-l/block.DialogPrm(l).Data);
block.ContStates.Data(1)
% Zustandsmatrix (hier skalar)
zeros(size(A,1) ,1);
%endfunction C*x+D*u
% Berechne Systemausgang zu y function Outputs(block) x u C D
block.ContStates.Data(l); block.lnputPort(1).Data; [1
];
[0
];
block.OutputPort(l).Data
% Ausgangsmatrix (hier skalar) % Durchschaltmatrix (hier skalar und % gleich Null, da sich beim PT1 % der Eingang nicht direkt auf % den Ausgang auswirkt. C*x + D*u;
'/.endfunction % Berechne Zustandsableitung zu x' function Derivatives(block)
A*x+B*u
x = block.ContStates.Data(l); u = block.lnputPort(l).Data; A [-1!block.DialogPrm(l) . Data] ; % Zustandsmatrix (hi,er skalar) B = [ l/block.DialogPrm(l).Data]; % Eingangsmatrix (hier skalar) block.Derivatives.Data(l) %endfunction
A*x + B*u;
9 Lineare und nichtlineare Systeme in Simulink
356
Zunächst werden im Teil Block-Info die grundlegenden Eigenschaften wie Anzahl und Breite der Ein- und Ausgänge, Anzahl der Parameter und Zustandsgrößen der S-Funktion gesetzt. Diese Informationen benötigt Simulink, um die Kompatibilität (bezüglich Signalbreite, -datentyp usw.) des M-File (level-2) S-Function-Blocks mit den anderen Böcken des Modells sicherzustellen. Anschließend werden zunächst die optiop.alen Routinen CheckPrms und Ini tializeCondi tions zur Überprüfung des übergebenen Parameters T bzw. zur Initialisierung der Zustandsgröße aufgerufen. Outputs und Derivatives entsprechen den Routinen IDdlOutp~ts und mdlDerivatives bei C MEX S-Funktionen (Abb. 9.15). Einen Überblick über alle setzbaren Blockeigenschaften bzw. alle Routinen erhält man bei Durchsicht des Templates msfuntmpl . ID.
9.8 9.8.1
Modellierung einer G leichstrom-Nebenschluss-Maschine (G NM)
Modellieren Sie den Ankerlcreis und die mechanische Trägheit einer GleichstromNebenschluss-Maschine in Simulink! Als Eingangsgrößen sind die Ankerspannung UA sowie das Widerstandsmoment l\;[w zu verwenden. Folgende Gleichungen und Daten sind gegeben: JA
Gegenspannung:
EA
Drehzahl:
N
=
357
Ankerspannung UA [V]
Ankerstrom JA [A]
Ankerwiderstand:
J
;A (UA-EA-RAJA)dt
CENw
J2~J
(MMi - Mw)dt
MMi
CMJA W
CM
CE 27r
RA =
150
O~\~
100 50
400 200
0 0
0.1 Zeit [si
0.2
-50' 0
0.1 Zeit [sI
0.2
0
0
0.1 Zeit [sI
0.2
9.8.2
Modellierung einer Pulsweitenmodulation (PWM)
Um eine variable Ankerspannung mit hohem Wirkungsgrad zu erzeugen, wird die Zwischenkreisspannung eines Stromrichters mittels einer Pulsweitenmodulation (PWM) getaktet. Durch das Tastverhältnis (= relative Einschaltdauer) wird so die mittlere wirksame Ankerspannung eingestellt. Erweitern Sie das obige Modell der Gleichstrom-Nebenschluss-Maschine um eine Dreipunkt-PWM als Stellglied für die Ankerspannung UA! Folgende Daten der PWM sind gegeben:
Pulsfrequenz:
= 200V
F pWM =
5kHz
Hinweis: Vergleichen Sie dazu den Sollwert der Ankerspannung mit einem positiven Dreiecksignal; schalten Sie entsprechend die Zwischenkreisspannung Uz bzw. die Spannung null auf den Ausgang der PWM (= UA) durch. Verfahren Sie entsprechend mit negativen Sollwerten (siehe auch Beispiel in Abb. 9.18). PWM-Spannung [V]
250mD 4mH
Ankerinduktivität:
LA =
Fluss:
W =
Motorkonstante:
CE = 240.02
Trägheitsmoment:
J
=
600
200
Zwischenkreisspannung: Uz
Inneres Drehmoment:
Drehzahl N [U/min]
50 1
,
Abb. 9.17: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine bei Sprung der An: kerspannung UA: GNM_Lsg.mdL
Übungsaufgaben
Ankerstrom:
9.8 Übungsaufgaben
0.04 Vs
0.012 kgm2
Testen Sie das Modell, indem Sie einen Sprung der Ankerspannung von 0 auf 50 V ohne Widerstandsmoment Mw = 0 simulieren (siehe Abb. 9.17).
1 Zeit[ms]
1.2
1.4
1.6
1.8
2
Abb. 9.18: Verhalten der Dreipunkt-PWM bei variabler Sollspannung: Es sind die positive und negative Dreiecksspannung sowie die ge takte te Ausgangsspannung gezeigt. Datei PWM.mdL
358
9 Lineare und nichtlineare Systeme in Simulink
Testen Sie das Modell, indem Sie einen Sprung der Ankerspannung (Mittelwert) von 0 auf 50 V simulieren (siehe Abb. 9.19). Ankerspannung UA IV]
200~
~~ --SO'~~WI 0.048
Ankerstrom IA IA]
Drehzahl N IU/min]
50,
\/
-
0.1 Zeitls]
In der Regelungstechnik werden Systeme sowohl kontinuierlich (d.h. im s-Bereich) als auch zeitdislcret (d.h. im z-Bereich) betrachtet. Simulink unterstützt abgetastete Systeme mit einer eigenen Bibliothek (Discrete).
200
0.2
0
0
0.1 Zeit[s]
0.2
Abb. 9.19: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit PWM bei Sprung der Ankerspannung UA : GNM_Lsg.mdL
9.8.3
Aufnahme von Bode-Diagrammen
Berechnen Sie die Zustandsdarstellung des Ankerkreises der GNM. Wählen Sie als Eingangsgrößen die Ankerspannung UA und das W·iderstandsmoment J\!Iw, als Ausgangsgröße die Drehzahl N. Stellen Sie Amplituden- und Phasenverlauf der Übertragungsfunktionen N(s)IUA(s) und N(s)IMw(s) als Bode-Diagramme in zwei MATLAB-Figures über das Frequenzintervall [1 10000] radis dar (Abb. 9.20).
tf~·"·-'""'''"5=l''
~+II -20~00
10'
Abtastsysteme in Simulink
400
'I 1\
0
-50' 0
0.05 Zeitls]
10
600
10.1
Allgemeines
Abtastzeit Bei zeitdiskreten Systemen muss für jeden Block die zugehörige Abtastzeit T s in Sekunden angegeben werden. Alle zeitdiskreten Blöcke sind intern an ihrem Eingang mit einem Abtaster und an ihrem Ausgang mit einem Halteglied O. Ordnung ausgestattet, d.h. der Eingang wird zu allen Zeitpunkten t = k . T s abgetastet; der Ausgang bleibt zwischen zwei Abtastvorgängen konstant. Auf diese Weise können Blöcke mit unterschiedlichen Abtastzeiten kombiniert sowie kontinuierliche und zeitdiskrete Blöcke gemischt werden (Ausnahmen bei fester Simulations-Schrittweite siehe Kap. 10.4). Bei der Vorgabe der Abtastzeit gibt es folgende Besonderheiten zu beachten: Offset: Wird für die Abtastzeit (Parameter sampie time) ein Vektor der Länge 2 angegeben, z.B. [Ts offset], wird die erste Zahl als Abtastzeit interpretiert und die zweite als Offset, d.h. die Abtastung findet zu den Zeitpunkten t = offset + k . T s statt. Vererbung: Abtastzeiten (und Offsets) können an nachfolgende Blöcke vererbt werden, indem dort als Abtastzeit der Wert -1 angegeben wird. Grafische Darstellung Zum Plotten zeitdiskreter Verläufe eignet sich der Befehl stairs (x_werte, y_werte [, plotstil])
10'
Frequency (rad/sec)
Abb. 9.20: Bode-Diagramme der Übertragungs/unktionen N(s)/UA(s) und N(s)/Mw(s)
der analog zu plot verwendet werden kann, aber eine stufenförmige Ausgabe erzeugt. Farbliehe Markierung Die Option Format/ParI/Signal Displays / Sampie T'irne Colo1"8 ermöglicht eine farbliClle Unterscheidung von Blöcken in einem Simulink-Modell, das zeitdiskrete Blöcke enthält. Unterschiedliche Abtastzeiten, zeitkontinuierliche Blöcke, sowie Subsysteme k(innen somit seJmell voneinander unterschieden werden. Zuordnung: schwarz = zeitkontinuierliche Blöcke, gelb = Subsysteme und Blöcke, die Signale mit unterschiedlichen Abtastzeiten zusammenfassen (z.B. Mux, Demux), rot = Blöcke mit der kürzesten Abtastzeit, grün = Blöcke mit der zweitkürzesten Abtastzeit etc.
10 Abtastsysteme in Simulink
360
10.2
Simulationsparameter
Treten in einem Simulink-Modell ausschließlich zeitdiskrete und keine zeitkontinuierlichen Blöcke auf, kann im Register Solver der Configumtion Parameters Dialogbox (Abb. 8.21) der Integrationsalgorithmus discrete (no continuous states) gewählt werden. Bei der Wahl des Solvers für eine zeitdiskrete Simulation sollte jedoch beachtet w.erden, ob es sich um ein rein zeitdiskretes oder ein hybrides (gemischt zeitdiskretes und zeitkontinuierliches) System handelt. Darüber hinaus muss darauf geachtet werden, ob die zeitdiskreten Blöcke gleiche oder unterschiedliche Abtastzeiten haben (siehe auch Kap. 10.4). Folgende Aufstellung soll die Wahl des Solvers erleichtern.
10.2.1
Rein zeit diskrete Systeme
10.3 Bibliothek: Oiscrete - Zeitdiskrete Systeme
361
Wert gewählt wurde - so eingestellt, dass alle Blöcke zu ihren individuellen Abtastzeitpunkten berechnet werden. Bei Wahl von Max step size größer der Abtastzeit wird die maxima.le Schrittweite automatisch auf die Abtastzeitgesetzt, und man erhält eine Warnung im MATLAB-Command-Window.
10.2.2
Hybride Systeme (gemischt zeit diskret und zeitkontinuier lich)
Die Solver discrete (no continuous states) für feste und variable Schrittweite sind nicht· mehr verwendbar, da das System ja nun sowohl zeitdiskrete als auch zeitkontinuierliche Zustandsgrößen hat. Die Solver ode23 und ode45 (Runge-Kutta-Verfahren variabler Ordnung) sind empfehlenswert. Aufgrund der unstetigen Signalverläufe, die durch das Halten der Signale am Ausgang der zeitdiskreten Blöcken entstehen, sollten die Solver ode15s und ode113 nicht verwendet werden.
Zeitdiskrete Blöcke haben gleiche Abtastzeiten
zeitdiskrete Blöcke haben gleiche Abtastzeiten
Simulation mit fester Schrittweite: Es sind sowohl der discrete (no continuous states)Solver als auch andere Fixed-step-Solver verwendbar. Die Wahl von auto bei Fixed step size resultiert in einer der Abtastzeit entsprechenden Integrationsschrittweite. Bei Simulation mit kleinerer Schrittweite muss die Fixed step size so gewählt werden, dass sich die Abtastzeit der Blöcke als ein ganzzahliges Vielfaches der Fixed step size ergibt. Beispiel: Bei einer Sampie time = 0.7 kann als Fixed step size 0.1, 0.05 etc. gewählt werden. Bei Nichtbeachtung erhält man eine entsprechende Fehlermeldung.
Simulation mit fester Schrittweite: Die Wahl von auto bei Fixed step size resultiert in einer der Abtastzeit entsprechenden Integrationsschrittweite. Ansonsten muss die Fixed step size so gewählt werden, dass sich die Abtastzeit der Blöcke als ein ganzzahliges Vielfaches der Fixed step size ergibt. Bei Nichtbeachtung erhält man eine entsprechendE) Fehlermeldung.
Simulation mit variabler Schrittweite: Es sind sowohl der discrete (no continuous states)-Solver als auch andere Variable-step-Solver verwendbar. Die Wahl von auto bei Max step size resultiert in einer festen(!), der Abtastzeit entsprechenden Integrationsschrittweite. Bei Werten größer der Abtastzeit für Max step size wird die maximale Schrittweite automatisch auf die Abtastzeit gesetzt, und man erhält eine Warnung im MATLAB-Command-VVindow. Zeitdiskrete Blöcke haben gemischte Abtastzeiten Simulation mit fester Schrittweite: Es sind sowohl der discrete (no continuous states)Solver als auch andere Fixed-step-Sblver verwendbar. Der Parameter Tasking mode for periodic sampie times muss auf SingleTasking gestellt werden, wenn Blöcke mit unterschiedlichen Abtastzeiten nicht über einen Rate Transition-Block (aus Signal Attributes, S. 314) miteinander verbunden sind (siehe Kap. 10.4.1). Bei Wahl von auto bei Fixed step size ergibt sich für die Integrationsschrittweite ein Wert, der dem größten gemeinsamen Teiler der unterschiedlichen Abtastzeiten entspricht (fundamental sampie time). Beispiel: Ein Modell mit den Abtastzeiten 0.75 und 0.5 würde bei obiger Einstellung mit einer Schrittweite von 0.25 simuliert. Dies muss auch bei einer manuellen Wahl der Fixed step size berücksichtigt werden. Simulation mit variabler Schrittweite: Es sind sowohl der discrete (no continuous states)-Solver als auch andereVariable-step-Solver verwendbar. Bei diesen Solvern wird die Integrationsschrittweite - unabhängig, ob für Max step size auto oder ein anderer
Simulation mit variabler Schrittweite: Bei Werten größer der Abtastzeit für Max step size wird die maximale Schrittweite automatisch auf die Abtastzeit gesetzt, und man erhält eine Warnung im MATLAB-Command-Window. zeit diskrete Blöcke haben gemischte Abtastzeiten Simulation mit fester Schrittweite: Tasking mode for periodic sampie t'imes muss auf SingleTasking gestellt werden, wenn Blöcke mit unterschiedlichen Abtastzeiten nicht über einen Rate Transition-Block (aus Signal Attributes, S. 314) miteinander verbunden sind (siehe Kap. 10.4.1). auto bei Pixed step size ergibt für die Integrationsschrittweite die fundamental sampie time, ein Wert, der dem größten gemeinsamen Teiler der unterschiedlichen Abtastzeiten entspricht. Dies muss auch bei einer manuellen Wahl der, Fixed step size berücksichtigt werden. Simulation mit variabler Schrittweite: Bei Werten größer der Abtastzeit für Max step size wird die maximale Schrittweite automatisch auf die Abtastzeit gesetzt, und man erhält eine Warnung im MATLAB-Command-Window.
10.3
Simulink-Bibliothek: Discrete - Zeitdiskrete Systeme
Für die Modellierung und Simulation zeitdiskreter dynamischer Systeme steht die spezielle Bibliothek Oiscrete zur Verfügung. Die in den Simulink Grundlagen (Kap. 8)
10 Abtastsysteme in Simulink
362
"
11
',I,i
:.1'
',i ii
',''I
10.3 Bibliothek: Oiscrete - Zeitdiskrete Systeme
363
beschriebenen Blöcke für Signalerzeugung (Sources), -ausgabe (Sinks) , mathematische Verknüpfungen (Math Operations) sowie zur grafischen Organisation (Signals Routing, Signals Attributes) sind wie gewohnt zu verwenden, die Abtastzeit wird hier in das (soweit vorhandene) Parameterfeld Sampie time eingetragen. Auch eine Vererbung der Abtastzeit (Sampie time = -1) von vorangehenden zeitdiskreten Blöcken ist möglich (außer bei Sources-Blöcken).
dar. Die Koeffizienten werden absteigenden z-Potenzen beginnend mit zO zugeordnet. Mit diesem Blocklassen sich vorteilhaft digitale Filter ab Kap. 6.4.2 implement.ieren.
Im Folgenden werden die wichtigsten Oiscrete-Blöcke vorgestellt.
)
"
Der Unit Oelay-Block tastet das Eingangssignal ab und verzögert es um einen Abtastschritt. Dieser Block stellt damit das Grundelement zeitdiskreter Systeme dar.
[l} z
Unit Delay
!I
[ffi TS
z-1
Discrete-Time Integrator
H(z) = B(z) A(z)
Der Oiscrete- Time Integrator-Block entspricht im Wesentlichen dem kontinuierlichen Integrator. Neben der Abtastzeit (Ts ) und einem Verstärkungsfaktor (K) kann in jedem Block der Integrationsalgorithmus (Integrator method) gewählt werden (y: Integratorausgang, u: Integratoreingang, n: aktueller Abtastzeitpunkt):
+
K·Ts
+ b2 zm-l + b3 zm-2 + ... + bm+l + a2 zn-l + a3 zn-2 + ... + an+l
(10.1)
Die Koeffizienten werden eb.enfalls absteigenden z-Potenzen zugeordnet; diese beginnen aber mit zm. Werden die Vektoren der Zähler- und Nennerkoeffizienten eines Oiscrete Transfer Function-Blocks auf dieselbe Länge gebracht, indem an den kürzeren Nullen angefügt werden, verhält sich dieser Block wie ein Oiscrete Filter-Block.
·
u(n-1)
bzw.
Im Block Discrete Zero-Pole können anstelle der Koeffizienten die Pole und Nullstellen einer Übertragungsfunktion nach Gleichung (10.1) sowie ein Verstärkungsfaktor vorgegeben werden. Voraussetzung dafür ist die Faktorisierbarkeit der Übertragungsfunktion.
Diserete Zero-Pole
Discrete State-Space
.. Integrai:'ion: ForwardEuler (Euler explizit): y(n) = y(n-1)
b1 zm al zn
Discrete Zero-Pole (nur skalar)
Discrete-Time Integrator )--
w
Der Block Oiscrete Transfer Function ist ähnlich wie das Oiscrete Filter aufgebaut. Er stellt die folgende Übertragungsfunktion dar:
-z+0.5
Dlserete Transfer Fen
Unit Delay
)
Discrete Transfer Function (nur skalar)
y(z) _ ](.T s u(z) -
1 z-l
I .,
I
Der Block Oiscrete State-Space stellt ein zeitdiskretes System in Zustandsform dar. Er entspricht dem Block State-Space bei kontinuierlichen Systemen .
.. Integration: BackwardEuler (Euler implizit): y(n)
=
y(n-1)
+
K·Ts
·
bzw.
u(n)
y(z) u(z)
= K·Ts
z z-l
.. Integration: Trapezoidal (Trapezformel nach Heun): y(n) = y(n-1)
+ KTs/2·
(u(n)
+ u(n-1))
bzw.
y(z) u(z) = KTs/2 . z + 1 z-l
Wird die Integrator method zu Accumulation gewählt, so wird unabhängig vom Wert . der Sampie time bei der Berechnung von y(n) die Abtastzeit T s = 1 sec. gewählt. Discrete Filter (nur skalar)
)
~ 1+0.5z- 1
H(Z-l)
B(Z-l) A(Z-l)
119
Zero-Order Hold
Der Zero-Order Hold-Block tastet das Eingangssignal ab und hält es bis zum nächsten Abtastzeitpunkt konstant. Er findet bei abgetasteten Systemen dann Verwendung, wenn ansonsten keiner der oben beschriebenen zeitdiskreten Blöcke eingesetzt wird (die alle ein Halteglied O. Ordnung mit einschließen).
Der ebenfalls verfügbare Block First Order Hold ist aufgrund seines Prädiktionsverhaltens für die meisten Anwendungen nicht geeignet. Memory
Der Block Oiscrete Filter stellt eine Filter-Übertragungsfunktion nach Gleichung (6.10)
Discrete Filter
Zero-Order Hold
b1 al
+ b2 z-l + b3 z-2 + '" + bm +1 z-m + a2 z-l + a3 z-2 + ... + an+l z n
)[Q} n
Der Memory-Block gibt an seinem Ausgang das Eingangssignal zum vorangegangenen Integrationsschritt aus. Intern stellt der Memory-Block also ein Halteglied O. Ordnung dar, wobei das Signal jeweils über eine Schrittweite Memory gehalten wird. Bei Simulation mit den Integrationsalgorithmen ode15s und odel13 (beides Mehrschrittverfahren) sollte der Memory-Block nicht verwendet werden.
364
10.4
10 Abtastsysteme in Simulink
10.4 Gemischte Abtastzeiten und hybride Systeme
Gemischte Abtastzeiten und hybride Systeme
10.4.2
Hybride Systeme
Bei hybriden Systemen muss für die kontinuierlichen Elemente ein Integrationsverfahren angegeben werden. Dabei sind die Algorithmen ode45 und ode23 zu bevorzugen.
Oftmals werden innerhalb eines Systems mehrere unterschiedliche Abtastzeiten verwendet, z.B. wenn periodische Tasks oder asynchrone Ereignisse in einer MultitaskingUmgebung modelliert werden sollen. Dies muss bei der Simulation besonders beachtet werden. Hybride Systeme dagegen enthalten sowohl zeitdiskrete als auch kontinuierliche Elemente.
10.4.1
365
Bei Verwendung einer festen Simulations-Schrittweite (Fixed-step-Solver) gelten die gleichen Regeln wie für Systeme mit gemischten Abtastzeiten. Die kontinuierlichen Blöcke werden dabei wie zeitdiskrete Blöcke mit der kürzesten Abtastzeit (= SimulationsSchrittweite) behandelt.
Gemischte Abtastzeiten
Bei Systemen mit gemischten Abtastzeiten wertet Simulink alle zeitdiskreten Blöcke zu ihrer jeweiligen Abtastzeit aus, wenn im Register Solver der Configuration Parameters Dialogbox (Abb. 8.21) ein Variable-step-Solver gewählt wurde. Bei Wahl eines Fixed-step-Solvers dagegen müssen alle Abtastzeiten in dem durch die SimulationsSchrittweite vorgegebenen Raster liegen; dies gilt auch für Abtastzeiten, die durch einen Offset verschoben sind. Darüber hina,us muss bei fester Abtastzeit auch auf die Übergänge zwischen verschiedenen Abtastzeiten geachtet werden:
kontinuierlicll
~
s2+0.5S+1 Transfer Fcn
Sine Wave
0.1129z+0.1038 z2-1.562z+0.7788
Sollen in einem Simulink-Modell unter Multitasking-Bedingungenjedoch auch asynchrone Ereignisse simuliert werden (z.B. modelliert durch bedingt ausgeführte Subsysteme wie Enabled Subsystem, Triggered Subsystem oder Function-Ca/l Subsystem, Kap. 315), so können die Übergänge zwischen diesen und anderen periodischen oder asynchronen Tasks von Simulink nicht mehr automatisch gehandhabt werden. Hier ist es notwendig einen Rate Transition-Block (aus Signal Attributes, S. 314) zur fehlerfreien Datenübertragung einzufügen. Wird der Parameter Tasking mode for periodic sampie times auf Auto gestellt, wählt Simulink SingleTasking, wenn im Modell alle Blöcke gleiche Abtastzeit haben, und Multi Tasking, wenn unterschiedliche Abtastzeiten auftreten.
Scope
Zero-Order Hold pt2_diskret_zoll
Discrete Transfer Fcn Sampie time=O.5sec. I
Wird im Feld Tasking mode for periodic sampie times (nur sichtbar bei fester Schrittweite) die Einstellung SingleTasking gewählt, werden die Übergänge zwischen verschiedenen Abtastzeiten von Simulink ignoriert. Die Einstellung MultiTasking dagegen legt strengere Maßstä.be an, wie sie bei der Simulation einer Multitasking-Umgebung (z.B. Mikroprozessor) notwendig sind. In einer solchen Umgebung können sich periodische Tasks (in Simulink werden diese durch Blöcke mit fester Abtastzeit modelliert) abhängig von ihrer Priorität gegenseitig unterbrechen (i.A. haben die Tasks mit den kürzesten Abtastzeiten die höchste Priorität). Dies kann bei unsachgemäßer Verknüpfung von Tasks unterschiedlicher Priorität zu Datenverlusten und unvorhersehbaren Ergebnissen führen. Simulink erzeugt in diesem Fall entsprechende Fehlermeldungen. Werden in einem Simulink-Modell ausschließlich periodisch Tasks, d.h. Blöcke mit fester Abtastzeit verwendet, so kann der Benutzer die Handhabung der Übergänge zwischen unterschiedlichen Abtastzeiten automatisch von Simulink durchführen lassen. Dazu muss die Check Box A utomatically handle data transfers between tasks aktiviert werden.
~________~a~b~ge~ta~sillte~t~~Ic=J1
0.05263z2 +O.1053z+0.05263
I
z2-1.579z+0.7895 Discrete Transfer Fcn1 Sam pie time=O.5sec.
Abb. 10.1: Simulink-Modell bsp_konstant. mdL: Zeitkontinuierliches System (oben) und zeitdiskretisierte Systeme mit Abtastzeit 0.5 s (unten)
Abb. 10.1 zeigt oben ein kontinuierliches System mit und ohne Abtastung sowie unten die mit der Zero-Order Hold ZOH (Sprunginvarianzmethode) und der TustinApproximation (Trapezmethode) ins Zeitdiskrete übertragenen Systeme. Diese wurden mit den folgenden aus der Control System Toolbox, Kap. 5.2.9, bekannten Befehlen erzeugt:
i
pt2 pt2_diskret_zoh pt2_diskret_tustin
tf([l], [1 0.5 1]); c2d(pt2, 0.5, 'zoh') c2d(pt2, 0.5, 'tustin')
%Erzeugt kontinuierliches PT2 %Diskretisieren mit ZOH, Ts=0.5s %Diskretisieren mit tustin, Ts=0.5s
Soll das Abtastsystem aus einem bestehenden (zeitkontinuierlichen oder zeitdiskreten) Simulink-Modell erstellt werden, ist dies analog zu Kap. 9.2.1 mit dem Befehl [A,B,C,D]
dlinmod('sys', Ts, x, u, para)
möglich, dessen Syntax dem Befehllinmod weitgehend entspricht. Der zusätzliche Para~ meter TB ist die Abtastzeit. Der Befehl dlinmod verwendet grundsätzlich die Diskretisierungsmethode Zero Order Hold ZOH. Die Übertragungsfunktion des im Discrete Transfer Fcn-Block a.bgelegten Abtastsystems (pt2_diskreLzoh) kann daher alternativ mit den folgenden Befehlen erzeugt werden, wenn der Block Transfer Fcn in Abb. 10.1 zwischen Inport- und Outport-Blöcke gesetzt (nicht in der Abbildung gezeigt) und das Simulink-Modell unter dem Namen bsp...lwnst . mdl gespeichert wird.
3GG
J
10 Abtastsysteme in Simulink
I!/: j';: :'I'l
"I'll i
:11,
.;11
';1 :;1 'r 1
li'
1\
,:1
',I I,
:r
I
[A, B, C, D] pt2_diskret_zoh
Dabei ist zu beachten, dass die Zeitkonstante des Stromrichters (bzw. der PVVM) nun näherungsweise der halben Abtastzeit (= mittlere Totzeit) entspricht, also:
= dlinmod('bsp_konst', 0.5); =
tf(ss(A, B, C, D, 0.5))
1 T str = 2FpWM
Für eine ausführliche Beschreibung der Analyse eines linearisierten Simulink-Modells mit MATLAB und der Control System Toolbox sei auf Kap. 11.2.2 verwiesen. Die Ergebnisse der Simulation sind aus Abb. 10.2 zu ersehen. Für Sprunganregung , (Abb. 10.2 links) liegen die Signale abgetastet und pt2_diskreLzoh übereinander, da hier die Anregung zwischen den Abtastschritten konstant bleibt. Für Speisung mit einem Sinus-Signal (Abb. 10.2 rechts) stimmen die Signale abgetastet und pt2_diskreLzoh nicht länger überein. Hier verändert sich die Anregung (kontinuierliches Sinus-Signal) zwischen den Abtastschritten. Damit ist die Voraussetzung Sprunginvarianz für die Diskretisierung mit Zero Order Hold ZOH nicht mehr gegeben. Wird in Abb. 10.1 ein Zero-Order Hold-Block direkt nach dem Schalter (noch vor der Verzweigung) eingefügt, so ist die Sprunginvarianz der Anregung wieder gegeben und die Signale abgetastet und pt2_diskr'eLzoh stimmen wieder überein. 1.5"--~---~---,---~--~
2rl---.----.----,----.---~
o - - - Anregung -1 H'-'-kontinulerlich - - - abgetastet '-'-pt2_diskreCzoh _21,-Pt2 ?iskret tu~tin,
- - -Anregung ._,- kontinuierlich - - -abgetastet =pt2_diskreCzoh - pt2_diskreUustin 2
468
10
Zeit [sec.]
0
1) (l+sTl ---
=
VRId
(1) l+sTRId
Transformieren Sie anschließend die Reglerübertragungsfunktion in den z-Bereich; verwenden Sie dazu die Befehle tf, c2d und tfdata. Implementieren Sie den zeitdiskreten StromregIer mit einem geeigneten Block aus der Discrete-Bibliothek.
Zeitdiskreter Anti-Windup-Drehzahlregler für GNM
2
4 6 Zeit [sec.]
Die Übertragungsfunktion der Drehzahlstrecke (incl. des geschlossenen Ankerstromregelkreises ) ergibt sich zu:
8
10.5
Ubungsaufgaben
10.5.1
Zeitdiskreter StromregIer für GNM
N(s) GN(s) = lAsoll(S)
10
A,bl>. 10.2: Simulationsergebnisse von bsp_konstant.md!
Elektrische Maschinen werden meist digital geregelt. Daher soll in dieser Aufgabe für die Gleichstrom-Nebenschluss-Maschine in Kap. 9.8 ein zeitdiskreter StromregIer implementiert werden. Die Abtastzeit ist gegeben zu T s = 800 f,1S. Die Übertragungsfunktion des Ankerkreises (Gegenspannung vernachlässigt!) sei: 1 1 1 + sTstr . RA 1 + s1t;-
1
--~,--
1 + S 2Tstr
1
. GM \J! . - s 2rrJ
Legen Sie zunächst einen analogen PI-Drehzahlregler nach dem Symmetrischen Optimum (SO) aus (siehe [29]), wenn Ta = 2Tstr = T die kleinere, Tl die größere Zeitkonstante und V die Verstärkung der Teilstrecke ist!
G
() RNs
=
Üsoll(S) Nsoll(S)-N(s)
=
Tl ( 1 ) 2TaV 1+s4Ta
=
V ( 1 ) RNd l+sTRNd
Begrenzen Sie nun den Strom am Reglerausgang auf ±lAmax und berechnen Sie die Differenz f:..l zwischen unbegrenztem und begrenztem Ausgang! Erweitern Sie den entworfenen PI-Drehzahlregler, so dass gilt:
Üsoll, unbegrenzt = lA(S) GI(S) = UAsoll(S)
Tl 2Ta V
UAsoll(S) GRI(s) = lAsoll(S) - Ü(s)
In einem weiteren Schritt soll nun für die Drehzahlregelung ein Abtastregler eingesetzt werden. Damit der Ankerstrom den zulässigen Maximalwert von lAmax = 20 A nicht übersteigt, soll der Drehzahlregler zusätzlich mit einer Anti-Windup-Funktion a.usgestattet werden. Die Abtastzeit sei ebenfalls T s = 800 f,1s.
~~~ 0.5
Ts 2
Legen Sie zunächst einen analogen PI-Stromregler G RI (s) nach dem Betrags-Optimum (BO) aus (siehe [29]), wenn Ta die kleinere, Tl die größere Zeitkonstante und V die V~rstärkung des Ankerkreises ist:
10.5.2
0 0
367
10.5 Übungsaufgaben
tlI
JT~Nd
(VRNd (N,oll
lAsoll, unbeg1'enzt -
N) - f:..l) dt
IAsoll, beg'renzt
+ VRNd (Nsoll -
N)
10 Abtastsysteme in Simulink
368
Der Regler soll in der entworfenen analogen Form erhalten bleiben und nicht wie der Ankerstromregler diskretisiert werden. Erweitern Sie daher nun den Regler durch Einfügen entsprechender Abtast- und Halteglieder, so dass ein Regler mit zeitsynchroner Abtastung entsteht! Simulieren Sie einen Drehzahlsprung von 0 auf 1000 U Imin bei einem Widerstandsmoment von Mw = 10Nm (siehe Abb. 10.3 ohne PWM und Abb. 10.4 mit PWM)! A
200
20
150
15
100
10
~ - - Soll
0.1
0
Drehzahl N [U/min]
Ankerstrom I [A]
Ankerspannung UA [V]
0.2
1000r
-----~
11
Regelkreise in Simulink
In diesem Kapitel sollen nun die in den vorangehenden Simulink-Kapiteln 8 und 9 erworbenen Kenntnisse und Fertigkeiten mit den in Kapitel 5.3 gezeigten Verfahren zur Analyse und dem Entwurf von Reglern verknüpft werden.
r-----I
' ..... -
5~ Soll
500
O~ I
Ist - - Soll.
o - 0
0.2
0.1
Zeit [s]
I
0.1
0
0.2
Zeit [s]
Zeit[s]
Abb. 10.3: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit zeitdiskreten Reglern
~
201
~-----
Die Gleichstrom-Nebenschluss-Maschine GNM
11.1
Als regelungstechnisches Beispielsystem wird eine Gleichstrom-Nebenschluss-Maschine nach Signalflussplan Abb. 11.1 betrachtet, die strom- und drehzahlgeregelt werden soll.
Drehzahl N [U/min1
Ankerstrom IA [A]
Ankerspannung UA [V]
Anhand des Beispielsystems "Gleichstrom-Nebenschluss-Maschine" werden die einzel~ nen Schritte vom Aufbau des Regelkreises in Simulink über die Berechnung der Reglerkoeffizienten bis hin zur Auslegung der benötigten Zustalldsbeobachter gezeigt.
...
1000 1
UA
r-----
N
I
I
51~ 0.1- 0.1
0
0.2
Zeit[s]
0
~~II I 0.1 Zeit [s1
Vj 0.2
500
EA
o~ 1- - ~~1I11 0
0.1
27r Js
~------------~I~~I'----------~ CEWN
Zeit [s]
Abb. 11.1: Signaljlussplan der Gleichstrom-Nebenschluss-Maschine (konstanter Fluss)
I r __ _
........ ....1
150 100
Die Gleichungen in der Differentialgleichungsform lauten (der Einfachheit halber wird nur der Bereich konstanten Nennflusses W= WN betrachtet):
.... ' I
50
1
CMWN l+sTA
0.2
Ankerspannung UA [V]
200
1 RA
I .-
o ' __ J o
,
I - - Soll I 0.1
Abb. 10.4: Simulationsergebnis der Gleichstrom-Nebenschluss-Maschine mit zeitdiskreten Reglern und PWM
+
dIA
&
UA
EA
Gegenspannung:
CE·N·W
(11.2)
1 27rJ . (MMi - M w )
(11.3)
Inneres Drehmoment:
EA dN dt MMi=
Ankerzeitkonstante:
TA
0.2
Zeit[s]
+
Ankerspannung:
Drehzahl:
RAIA
CM·IA·w LA RA
LA'
(11.1).
(11.4) (11.5)
370
11 Regelkreise in Simulink
11.1.1
Initialisierung der Maschinendaten
11.1.2
Die Maschinendaten der Gleichstrom-Nebenschluss-Maschine lauten: Ankerwiderstand:
RA
250
mD
Ankerinduktivität:
LA
4
mH
Ankerzeitlconstante:
TA
16
ms
Nennfluss:
\]iN
0,04
Vs
Trägheitsmoment:
J
0,012
kgm 2
Maschinenkonstanten:
CE
236,8
= 21f' 38,2
11.1 Die Gleichstrom-Nebenschluss-Maschine GNM
371
Simulink- Mod~ll
Mit dem Signalflussplan aus Abb. 11.1 und den Variablennamen aus der Initialisierungsdatei gnm_i. m kann nun ohne weiteres das Simulink-Modell gnm. indl programmiert werden (Abb. 11.2). Es werden folgende Blöcke verwendet: Library Block Sourees: Step, Inport Sinks: To Workspace, Outport
Library Block Continuos: Integrator, Transfer Fcn Math: Sum, Gain
21f' CM
Diese Daten werden in der Initialisierungsdatei gnm_i. m gespeichert, die vor dem Start der Simulink-Simulation am MATLAB-Prompt von Hand aufgerufen werden muss oder aber durch Eintragen des Dateinamens in das Feld Model post-load function in der Registerkarte Callbacks des Untermenüs Modell Properties im Menu File beim Starten der Simulation automatisch aufgerufen wird. Zusätzlich werden noch die allgemeinen Simulationsparameter Stop time Tstop und die maximale Integrationsschrittweite der Simulation Max step size step_max festgelegt (Abb. 11.3). Ebenso wird als Eingangssignal ein Sprung des Spannungssollwerts zum Zeitpunkt Tsprung auf den Wert UAsoll bestimmt.
Abb. 11.2: Simttlink-Modell gnm.mdl der Gleichstrom-Nebenschluss-Maschine
%% gnm_Lm %% Kap 11.1.1 %% Initialisierungsdatei zu gnm.mdl
Die Einstellungen der Punkte Solve?' und Data Import/Export in elen Config·uralionParameters zeigen Abh. 11.3 und Abb. 11.4. Im Data Import/Export werden als Save to Workspace-Variablen t für die Zeit (Time) und y für die Ausgabe (OutPjtt) gewählt.
Gain2 ,..~
N
To Worl<space2
'-----------~
%% Allgemeine Simulations daten Tstop 0.2 ; %Stopp der Simulatiou step_max = 0.0001 ; %Maximale Schrittweite %% Spannungs-Sollwert sprung Tsprung = 0 ; % Zeitpunkt des Sprungs s] UAsoll = 50 ; % Sollspannung V] %% Widerstandsmomenten-Sprung T_MW 0 % Zeitpunkt des Sprungs [ s ] MW = 0 ; % Sprunghöhe [ Nm ] %% Maschinendaten der GNM RA
LA TA Ps iN J CM CE
= 0.250 ; = 0.004 ; = LA I RA
0.04; 0.012 ; 38.2 ; 2*pHCM
%Ankerwiderstand
% Ankerinduktivität % Ankerzeitkonstante % Nennfluss %Trägheitsmoment %Motorkonstanten
[ Ohm ] [ H ]
[ s ]
LJ!~~,J~.~~I~·~LJ,
[ Vs ] [ kg m"2 ]
Abb. 11.3: Configuration-Parameters: Auswahl Solver
11 Regelkreise in Simulink
372
11.2 Untersuchung der Systemeigenschaften
373
11.2
Untersuchung der Systemeigenschaften
11.2.1
Untersuchung mit Simulink
Für eine erste Untersuchung der Systemeigenschaften wird eine Sirnulink-Simulation mit einem sprungförmigen Verlauf der Ankerspannung gestartet. Hierzu wird als Eingangssignal der Step-Block UAsoll verwendet, dem als Parameter für Step time und Final Value die in gnm_i.m gesetzten Variablen Tsprung und UAsoli übergeben werden. Der liVert Initial Value wird zu Null gesetzt. Somit springt also zum Zeitpunkt Tsprung der Ausgang des UAsoll-Blocks von Null auf den Wert Final Value. Die Anzeige der als Workspace-Variablen IA und N gespeicherten Signale in Abb. 11.6 erfolgt mit dem MATLAB-Skript gnm3. m: %% %% %%
Abb. 11.4: Configuration-Parameters: Auswahl Data Import/Export
Mit Ta Warkspace-Blöcken explizit im Worlcspace gespeichert werden der Ankerstram JA und die Drehzahl N in die Workspace-Variablen IA bzw. N (Abb. 11.5).l)
r'.:,:o::al~~~:;i~~:i:-.:1~.~:~.Z.,~T~;S.·::. :6·p.·a~~.:"'.1 I Dal8 ir nol avaW~b!e Imti! the simulalion is stoppe.cl or paused
gnm_a.m Kap 11.2.1 Ausgabedatei zu gnm.mdl
figure subplot (211) plot(t,N*60) title('Drehzahl N [U/min]') sUbplot (212) pIot(t,IA) titleC'Ankerstrom IA [A]') xIabel('Zeit t') if exist('druck') if exist('druck')
~P~:::I:~~:=;=-~-='=':~:-~':=:==::-'::~-'~:~'~!
"'---limit rlala pOinls 10 last: .
400
------...,
Decimaliorr
Oecirna\ion:
·11-
Silmpletime[·1Iorinheri\ecl): [ ,-----------
i rm~_.~._.------
r
I.:_-",- _._",~_. :. .~
3.
S",'"m,qA"" Logli~cdpoint dal", ~sa~obiecl
~
Drehzahl N lU/min]
600~
I"
,,----
1 . print('-deps' ,'p_gnm_nia.eps') , end print('-depsc','p_gnm_nia_c.eps') , end
,.
~encel·.J:
rLogfll<ed.poinldallllisilfiobjecl'
H~~
--~
._--------~--"--
.. _; ......._. .._-'-_..__.__ ~~ancc~~~
Abb. 11.5: Block Parameters: To Workspace-Blöcke für Drehzahl N und Ankerstrom lA .
Der Jnpart-Block UA und die Outpart-Blöcke IA und N werden für die Erstellung der Zustandsdarstellung bzw. der Übertragungsfunktionen mittels linmod vom Eingang UA nach den Ausgängen IA und N benötigt: Diese können dann mit den in Kap. 5 (Contral System Toolbox) vorgestellten Verfahren untersucht und bearbeitet werden. 1) Die Ausgangsblöcke IA und N liefern das gleiche Ergebnis wie die Workspace-Variablen IA bzw. N. Diese unnötige Verdopplung der Workspace-Variablen dient hier nur der besseren Verständlichkeit!
20:_
o
0.05
0.1
0.15
0.2
,~_ _ _~_ _ _A_n_1<erSlrom IA [AJ _ _~_ _ _---;
1~ o
0.05
0.1
Zeilt
0.15
j
0.2
Abb. 11.6: Sprungantwort von Drehzahl N und Ankerstrom IA (erzeugt mit gnm_a.m) .
374
h: "li
11 Regelkreise in Simulink
Untersuchung des linearisierten Modells mit MATLAB und der Control System Toolbox
11.2.2
!'H!
1,1. 1'1';',
",1 '
!Ji il,'
:lji
l 'il! 'q i\,
1\';:
,'/(
,b;'1
Um die umfangreichen Untersuchungsverfahren der Control System Toolbox auf ein Simulink-Modell anwenden zu können, muss dieses erst in ein LTI-Modell umgewandelt werden, was mit den MATLAB-Befehlen linmod, linmod2 2) bzw. dlinmod und dem aus der Control System Toolbox stammenden MATLAB-Befehl ss geschieht (Kap. 9.2.1). In einern ersten Schritt wird aus dem Simulink-Modell, das sich (intern) a,us einern System von ODEs (Ordinary Differential Equationsj siehe Kap. 4) zusammensetzt, die lineare zeitinvariante Zustandsdarstellung generiert:
,'j
[A,B,C,D]
'I
[A,B,C,D]
linmod2 (' sys' [,x, uj)
/!~i
[A,B,C,D]
dlinmod (' sys' ,Ts[,x, uj)
"I
01
Jpi
ili ;'1 'l'I '1\
" '::,1
lIiel'bei ist sys der Name des Simulink-Modells und T s die Abtastzeit bei zeitdiskreten Systemen. Mit den optionalen Parametern x und u können die Zustände und die Eingänge vorbelegt werden: Es wird also der Arbeitspunkt, um den linearisiert wird, festgelegt (Standardmäßig ist der Arbeitspunkt 0). Die Ein- und Ausgänge werden durch Inport- und Outport~Blöcke auf der obersten Modellebene des Simulink-Modells erzeugt, wie dies in Kap. 11.1.2 für UA bzw. IA und N bereits geschehen ist. Schließlich sind A, B, C und D die System-Matrizen der Zustandsdarstellung.
1.0e+003 -0.0625 1.2666
sysd
ss (A,B,C,D)
= =
ss (A,B,C,D,Ts )
%% gnm2sys.m %~
-0.0384 0
4.0000
o
C=
o
62.5000
o
1.0000
o o
» sysgnm
% LTI-Modell anzeigen
a = xl
xl -62.5
-38.4
x2
x2
1267
0
b
xl x2
UA 4 0
c = IA
N
xl 62.5 0
x2 0 1
d
% zeitdiskretes Modell
Für das Beispiel der Gleichstrom-Nebenschluss-Maschine wird der gesamte Vorgang wiederum durch das MATLAB-Skript gnm2sys.m erledigt. Zusätzlich werden hier noch die Namen für die Ein- bzw. Ausgänge des Systems mit den Simulink-Variablen-Namen 'UA', 'rA' und 'N' belegt. %%
*
B
Das SS-LTI-Modell erhält man aus der Zustandsdarstellung mittels des aus Kap. 5.1.3 bekannten Befehls:
sys
% Linearisieren des Simulink-Modells
>>. [A,B,C,DJ = linmod('gnm')
A=
lirunod ('sYS'[,X,1tj)
% zeitdiskretes Modell
375
Die Ausgabe am MATLAB-Prompt zeigt sich wie folgt:
D
!I;i i}
11.2 Untersuchung der Systemeigenschaften
Kap 11.2.2 Erzeugt mittels linmod ein linearisiertes LTI-Modell von gnm.mdl
IA
N
UA 0 0
Continuous-time model.
Das so gewonnene SS-LTI-Modell sysgnm kann nun mit den bereits aus Kap. 5.3 bekannten Ana.lyse-Werkzengen untersucht werden. So erhält man z.B. für die na.türliche Frequenz W n und die Dämpfung D des Systems mit dem Befehl darnp (Kap. 5.3.2) folgende Ausgabe:
» damp(sysgnm) [A, B, C ,D]
linrnod(' gnrn')
sysgnm = ss (A,B,C,D) ; 'UA' sysgnm.InputName sysgnm.OutputName = {'lA' 'N'} sysgnm
%Linearisieren des Sirnulink-Modells Eigenvalue
Damping
Freq. (radi s)
-3.13e+00l + 2.18e+002i -3.13e+001 - 2.18e+002i
1.42e-00l 1. 42e-00l
2.21e+002 2.21e+002
%Erzeugen
eines LTl-Modells % Eingangsname des LTI-Modells setzen %Ausgangsnamen des LTI-Modells setzen %, LTI-Modell anzeigen
» bode (sysgnrn) Der Befehllinmod2 verwendet im Gegensatz zu linmod einen verbesserten Berechnungsalgorithmus, der' Rundungsfehler stärker minimiert. 2)
» pzmap(sysgnm) » sgrid
11 Regelkreise in Simulink
376
!:) J'.::l '.J.
:s=:
1
:~
':C
Worl,space EI
1.
4JJ Operating Points
B
~ Ün~~~!~"~iO.~~ I, [±I
l!iJjModel Custom Views
C0
\"1 une~f·ize~~~e;:" '"I -
Erzeugt eine zeitkontinuierliche linearisierte Zustandsdarstellung aus dem Simulink-ModeII sys (x, u: Vorbelegung des Zustands- und Eingangsvektors) dlinmod (' sys' ,T.[,x ,u]) Erzeugt eine zeitdiskrete Iinearisierte Zustandsdarstellung aus dem Simulink-Modell sys mit der Abtastzeit T. linmod (' sys' [, x, uj) linmod2 (' sys' [, x, u])
LineaLizing the model: gnm_ltiview. Genet:ating linea:t:ization inspectol: infot:IIlation. Launehing the LTI VietJet: ... LTI Viel<1e:t: 1s t:eady ... A linea:t:ization t:esul t Model has been added to the cunent Ta.sk.
Abb. 11.8: Control and Estimation Manager aus dem B-imulink Control Design-Blockset
Als Linearisierungs-Eingang Input wurde bei dem in Abb. 11.9 dargestellten SimulinkModell gnm_l ti view. mdl der Gleichstrom-Nebenschluss-Maschine der Summeneingang für UAsoll gewählt, als Linearisierungs-Ausgang O~dput del: Ausgang des Integrat6rBlocks, also die Drehzahl N.
Erzeugt ein SS-LTI-Modell (Systemmatrix A, Eingangsmatrix B, Ausgangsmatrix C, Durchschaltmatrix D)
Interaktive Untersuchung eines Modells mit dem Simulink Control Design-Blockset
Neben den oben gezeigten Möglichkeiten kann mit dem Simulink Control DesignBlockset auf schnelle und einfache Weise ein System ohne die MATLAB-Befehle untersucht werden. 3 ) 'Aufgerufen wird es im Menü Tools, Untermenü Control Design eines Simulink-Modells unter Linear Analysis: Es erscheint dann der Control and Estimation Manager.
El
I±]
Erstellen eines LTI-Modells aus einem Simulink-Modell
11.2.3
ITiI Project • gnm.Hivlew 1>4 De1ault Operating Point
Abb. 11.7: Bode-Diagmmm (links) und Nullstellen-Polstellen- Verteilung (rechts)
ss (A,B,C,D[,T.])
377
In dem in Abb. 11.8 gezeigten Control and Estimation Manager kann man unter dem Punkt Linearizations das Simulink-Modell Iinearisieren, wobei unter dem Punkt Operating Points verschiedene Arbeitspunkte gesetzt werden können, um die die Linearisierung erfolgt. Für die Linearisierung müssen allerdings unter dem Punkt Linearizations Ein- und Ausgänge im Simulink-ModeII festgelegt werden, die dann auch dort erscheinen.
Die mit bode und pzmap erzeugten Plots finden sich in Abb. 11.7.
.::
11.2 Untersuchung der Systemeigenschaften
.
To Workspace2
'-----------~~CE·PsINI~<1!I-------------' Gain3
Das Simulink Contral Design-Blockset ersetzt das vor dem MATLAB-Release R14 in Simulink integrierte Blockset ModeLlnputs_and_Outputs und ist nicht mehr in Simulink enthalten. 3)
Abb. 11.9: Simulink-Modell gnm_Ltiview.mdL der Gleichstrom-Nebenschluss-Maschine
378 i
11 Regelkreise in Simulink
Zudem kann nach der Linearisierung der bereits aus der Control System Toolbox bekannte LTI-Viewer aufgerufen werden. Die mittels des LTI-Viewers aufgenommene Sprungantwort und das Bode-Diagramm zeigt Abb. 11.10. Im LTI-Viewer können neben dem Untersuchen mit verschiedenen Verfahren, z.B. Bode-, Nyquist-, NicholsDiagramm oder Nullstellen-Polstellen-Verteilung, auch neue LTI-Modell geladen oder Simulink-Modelle als LTI-Modelle abgespeichert werden.
379
11.3 Kaskadenregelung
11.3
Kaskadenregel ung
Ziel der Untersuchung des Systems ist natürlich die Auslegung eines Reglers, in diesem Fall für die Drehzahl N. Die gängige R.egelungsstruktur für elektrische Antriebssysteme ist nach wie vor die klassische Kaskadenstruktur mit einem Drehzahlregelkreis, dem ein . Stromregelkreis unterlagert ist. Da das Augenmerk auf Programmierung und Simulation liegt, sei für die Reglerauslegung auf die Literatur verwiesen [17, 18, 26, 27, 29J.
11.3.1
Stromregel ung
Für die Stromregelung wird die Übertragungsfunktion des Aükerkreises unter Vernachlässigung der Gegenspannung EA aus Abb. 11.12 hergeleitet. ,',1
, I
;!I .'i
ü . :i
StromRegIer
,
1
EA
1 +sTt
1
1
RA
Abb. 11.10: LTI- Viewer: Sprungantwort (links) und Bode-Diagramm (rechts)
d
Ist die Control System Toolbox vorhanden, so stellt diese das Simulink-Blockset cstblocks zu Verfügung, das einen Block LTI System enthält, mit dem LTI-Modelle in Simulink-1Vlodellen als Simulink-Blöcke definiert werden können (Abb. 11.11).
1
!.
CEWN Abb. 11.12: Stromregelung der Gleichstrom-Nebenschluss-Maschine
Sie ergibt sich bei Berücksichtigung des Stromrichters als PT1-Glied zu:
::I! "
27r Js
l+sTA
Eile ',!;,dit·
l i
~iew' F9.rm~')t
,Help
Sillltllitt:=~=~:itlttite
J1
IA(S) UA(s)
G 1 (s)
Coutrol sysfem ToolboN
1 + sTt
1 + STA
RA
Die Zeitkonstante und die Verstärkung des Ankerkreises und die kleine Summenzeitkonstante (Totzeit des Stromrichters) ergeben sich zu:
11
W 1.111])
LT] System I
.'
"'Ready
1 1 -_.._--
Abb. 11.11: Blockset cstblocks zur Definition von LTI-Modellen der Control System Toolbox als Simulink-Blöcke
Für die Bedienung des LTI-Viewers sei auf Kap. 5.3.5 und für die Bedienung der Control and Estünation l'vIanager auf die umfassende Anleitung in den MATLAB- und SimulinkHandbüchern verwiesen [37J.
Tl = TA
LA
RA
1
V = RA
T(7
Tt
100 f.ts
(11.6)
Die Auslegung des PI-Stromreglers erfolgt mittels des Betrags-Optimums (BO) nach der folgenden Einstellregel (Tl: größere Zeitkonstante; T(7: kleiner Summenzeitkonstante; V: Streckenverstärkung) : TRI
Tl
TA
VRI
Tl 2T(7V
RA TA
LA
2Tt
2Tt
(11.7)
11 Regelkreise in Simulink
380
Somit ergibt sich die Übertragungsfunktion des PI-Stromreglers zu (UA: Spannungssollwert):
GRI(S)
UA(S) fA(S) - fA(S)
VRI
(S;RI + 1)
LA 2'I't
(S~A + 1)
(11.8)
11.3 Kaskadenregelung
381
-_.
.~~
t~~"t~~l :r I--~I '"~!-
ro
~=S=J
--'""-_.-.
o
l
-
~la~
.
.~,
-1°0
0.05
0.1
0,15
0.2
~21~O'
Zeit t
10'
lQ'
'n'
.n'
._.
F'o~"."oy (,o!ll.",,>
'----------lrQE·p,'NIi"~I_------~ Galn3
Abb. 11.13: Simulink-Modellgnmregi.mdL der stromgeregelten GNM
Das Simulink-Modell der Stromregelung in Abb. 11.13 kann auf dem Signalflussplan der GNM (Abb. 11.2) aufgebaut werden, ebenso wird in der Initialisierungsdatei gnmregLi.m auch die zugehörige Initialisierungsdatei gnm_i.m eingebunden.
Abb. 11.14: Sprungantwort von Drehzahl N und Ankerstrom IA bei Stromregelung (links) und Bode-Diagramm (Übertragungsjunktion von lAsoll nach IA)
Um in Simulink die Bedienung zu erleichtern und die Übersichtlichkeit zu fördern, wurde der Block PI-Regler Strom programmiert und mit einer Eingabemaske versehen (Abb. 11.15).
'l.% gnmregi_i .m %% %%
Kap 11.3.1 Ini tialisierungsdatei zu gnmregi'. mdl
%% Maschinen- und allgemeine Simulationsdaten gnm_i %Gleichstrommaschine %% Stromrichter %Totzeit des Stromrichters Lt = 0.0001 ; %% Strom-Blöcke %Dauer einer Periode s T_IAsoll = 0.05 % Sollstrom A lA_soll = 10 ; %% Stromregelung: PI-Regler, BO-optimiert %Verstärkungsfaktor Ohm V_Ri LA / (2*T_t) ; % Nachstellzeit s 1 T_Ri TA ; %Startwert des Regler-Integrators int_regi 0;
Die Parameter des Stromreglers werden in MATLAB direkt in Abhängigkeit von den Streckenparametern berechnet, als Eingangssignal für das Simulink-Modell dient hier dann eine Folge von Strompulsen der Höhe lA_soll mit der Periodendauer T_lAsoll, wobei die Parameter Pulse width (% of period) und Phase delay des lAsoll Pulse Generator-Blocks unverändert auf 50 bzw. 0 belassen wurden. Für die Anregung mit blockförmigem Sollstrom finden sich in Abb. 11.14 die Verläufe von Strom IA und Drehzahl N sowie das Bode-Diagramm für die Übertragungsfunktion von lAsoll nach IA.
I-Anteil
Abb. 11.15: Block PI-Regler Strom: Unterlagertes Reglermodell und Eingabemaske
11.3.2
Drehzahlregelung
Die Drehzahlregelung nach Abb. 11.16 verwendet den gerade in Kap. 11.3.1 ausgeleg-' ten Stromregelkreis 4 ) als unterlagerte Teilstrecke, wobei die Übertragungsfunktion des Stromregelkreise wie folgt angenähert wird (f er S = Strom-Ersatzregelkreis ):
Glers(S)
IA(S) fA(s)
1
1+2Tt·s+2T/.s-2 ~ 1+2Tt ·s
(11.9)
4) Im Weiteren werden Probleme der SteIlgrößenbegrenzung für den Sollwert des Stromes außer Acht gelassen, um die Darstellung nicht unnötig zu komplizieren.
382
11 Regelkreise in Simulink
IV*
NI
N Dl'ehzahl- JA Regler
Strom1+
RegIer
sn
EA RA
Abb. 11.10: Drehzahlregelung der Gleichstrom-Nebenschluss-Maschine
Zusammen mit der Übertragungsfunktion der Mechanik ist folgende Gesamtstrecke zu regeln:
N(s) I,1(s)
CM\f!N - - . - -1
2rrJ·s
1+2Tt ·s
Ts . s . 1 + Tc; . s
(11.10)
jVIit den Streckenparametern Ts und Tc; lassen sich leicht die Parameter eines nach dem . Symmetrischen Optimum (SO) ausgelegten PI-Reglers angeben:
TRN
4T".
8Tt
VRN
1
Ts 2 Tc;
2rrJ
4Tt ' CM\f!N
(11.11)
Die Übertragungsfunktion des Drehzahlregelkreises berechnet sich nach SO zu:
GNer.s(s)
=
N(s) N*(s)
Als Sollwertgenerator wird nun der Nsoll Pulse Generator-Block verwendet, der Drehzahlpulse mit der Amplitude N_soll und Periodendauer LNsoll erzeugt. Zusätzlich wird zum Zeitpunkt T_MW ein sprungförmiges Widerstandsmoment der Höhe MW als Stör größe ins System eingespeist.
%% grunregn_i.m %% Kap. 11.3.2 %% Initialisierungsdatei zu grunregn.mdl
GElJ!N
GN(s)
383
11.3 Kaskadenregelung
1 + 8Tt · s
%% Maschinen- und allgemeine Simulations daten % Gleichstrommaschine grun_i %Stromregelkreis + Stromrichter grunregi_i %Maximale Schrittweite step_max = 0.0001 ; %% Drehzahlsollwert-Blöcke %Dauer einer Periode [ s ] T_Nsoll = 0.40 ; % Solldrehzahl [ 1/s N_soll = 500/60 ; %% Widerstandsmomenten-Sprung % Zeitpunkt des Sprungs [ s ] T_MW 0.10; % Sprunghöhe [ Nm ] MW = 100 ; %% Drehzahlregelung: PI-Regler, SO-optimiert
V_Rn = 2*pi*J / (CM*PsiN*2*2*T_t); T_Rn = 4*2*T_t int_regn = 0 ;
%Verstärkungsfaktor [ Vs ] % Nachstellzeit [ s ] %Startwert Regler-Integrator
Äbb. 11.18 zeigt links die Sprungantworten von Drehzahl N und Ankerstrom IA auf den Drehzahlsollwertsprung sowie rechts die Störantworten dieser Größen auf das Widerstandsmoment bei Drehzahlregelung. Drehzahl N und Sollwert Nsoll [U1mlnj
Drehzahl N und Sollwert NsoU tUlmln]
(11.12)
Das Simulink-Moelell gnmregn.mdl vergrößert sich um elen Drehzahlregelkreis mit der Dmhzahlrückführung, ebenso wächst auch die Zalll der To Workspace-, Input- und Output-Blöcke, um das System besser untersuchen zu können.
~r ~>~ o
0.002
'I
,§ 0.004
0.006
0.008
0.01
' 'I 500
4ij?095
:~K: ;~I o
0.002
0.004
0.006 Zeitt
0.1
,
0.105
0.1'1
Ankerstrom IA und Sollwert lAsoll [Al
Ankerstrom JA und Sollwert JAsoll [Al
-500
Y ,
0.008
0.01·
I
100~
·LL o
0.095
~
-
IA ~IAsoJi
I
'
0.1'
0.105
0.11
Zeilt
'--------1-~<:CE""'NI ... ~--------! Galn3
Abb. 11.17: Simulink-Modell gnmregn.mdL der drehzahlgeregelten GNM
Abb. 11.18: Sprungantwort (links) und Stömntwort (rechts) von Drehzahl N und Ankerstrom IA bei Drehzahlregelung
11 Regelkreise in Simulink
384
11.4
Zustandsbeobachter
Oft kann aufgrund technologischer Gegebenheiten oder aus Kostengründen die Drehzahl nicht gemessen werden, trotzdem soll die GNM drehzahlgeregelt werden. Als Ausgang steht nur noch der Strom-Istwert JA zu Verfügung. Somit muss ein Zustandsbeobachter entworfen werden, mit dem die nicht mehr gemessene DrehzahlN geschätzt werden soll.
11.4 Zustandsbeobachter
385
Für die Initialisierung der allgemeinen Simulationsdaten und zur Erzeugung des SS-LTIModells sys der beobachteten Strecke von UAsolI nach JA wird die Datei gnmbeob_i.m verwendet, die in Kap. 11.6.4 komplett aufgeführt ist. Hier soll nur auf die im Zusammenhang mit dem Beobachterentwurf wichtigen Befehle eingegangen werden. Um das Simulink-Modell mit dem Befehl linmod linearisieren zu können, müssen alle Variablen mit einern Wert belegt sein. Dies gilt auch für den State-Space-Block (Kap. 9.1), der die (zu diesem Zeitpunkt noch unbekannten) Beobachtermatrizen enthalten soll. Deshalb werden diese mit geeigneten Werten vorbelegt, und zwar so, dass dem System keine Zustände zugefügt werden und andererseits die Anzahl der Eingänge übereinstimmt. Ebenso wird noch der Anfangswertvektor beobxO der Zustände definiert: beob beobxO
=
ss ( [], [0 0], [], [0 0])
=[
0] ;
%Beobachter initialisieren %Beobachter Anfangszustände
Da für die Berechnung der Beobachterpole und der Rückführmatrix L die Zustandsdarstellung der Strecke mit den Eingängen u, den Zuständen Je und den Ausgängen y vorliegen muss, wird mittels des Befehls linmod die Zustandsdarstellung des SimulinkModells ermittelt und mit dem Befehl ss das entsprechende SS-LTI-Modell der Strecke erzeugt. Abb. 11.19: Simulink-Modell gnmbeob.mdL der GNM mit Zustandsbeobachter
Als Simulations-Modell dient nun die um den Stromrichter-Block PTl-STR erweiterte GNM (Simulink-Modell gnmbeob .mdl) aus Abb. 11.19, die zusätzlich einen State-SpaceBlock enthält, der den Zustandsbeobachter repräsentiert und dessen Zustandsmatrizen enthält. 5 ) Zusätzlich wird noch der Block PT1 für ein aus einem rückgeführtem Integrierer gebildetes PT1-Glied als maskierter Block mit Eingabemaske (Abb. 11.20) erstellt: So wird zum einen sichergestellt, dass der Ausgang des Blocks der für den Beobachterentwurf nötige Zustand ist, zum anderen können evtl. auftretende Probleme der numerischen Integration vermieden werden.
~ Out1
[A,B,C,D] sys
linmod('gnmbeob'); ss(A,B,C,D);
% System-Matrizen extrahieren
%SS-LTI-Modell
Strecke
Der Systemeingang ist hier die SolIdrehzahl UAsoJJ, die Systemzustände sind in diesem Fall JA, die Drehzahl N und der Ausgang des Stromrichterblocks (ohne Name), der Systemausgang ist der Zustand JA. Hier ist bei der Systemerstellung mit linmod auf die Reihenfolge der Zustände zu achten! Diese kann abgefragt werden mit den folgenden Befehlen (Kap. 8.7): »[s,xO,xstord] gnmbeob » xstord xstord = 'gnmbeob/PT1-A/lntegratorl' , gnmbeob/lntegrator , 'gnmbeob/PT1-STR/lntegratorl'
Die Zustände sind also JA, N und UA. Da der Beobachter auch mit dem Befehl estim berechnet werden soll, ist der Eingang des Beobachters der bekannte Eingang des Systems (UAsolI) und der gemessene Systemausgang (lA). Der Ausgang des Beobachters ist der Vektor ybeob, der den geschätzten Systemausgang und die Systemzustäncle. enthält (Abb. 5.27).
Abb. 11.20: Block PT1: PT1-Glied mit rückgeführtem Integrator und Eingabemaske
11.4.1
5) Dies ist der allgemeine Fall. Wird für die Zustandsdarstellung des Beobachters ein SS-LTI-Modell generiert, so kann auch der Block LTI System aus der Simulink-Library cstblocl,s (Control System Toolbox) benutzt werden (siehe Abb. 11.11 und Kap. 11:2.3).
Für die Auslegung des Luenberger-Beobachters werden die in Kap. 5.4.3 dargestellten Verfahren und Befehle verwendet. Zur Erinnerung nochmal die Gleichung des
Luenberger-Beo bachter
11 Regelkreise in Simulink
386
11.4.2
Luenberger-Beoba.chters mit integrierter Fehlergleichung (Abb. 5.26):
[~]
:Je = (A-LC)x+[B-LD Lj.
(11.13)
387·
11.4 Zustandsbeobachter
Störgrößen-Beobachter
Um den EinHuß einer Störgröße mit konstantem stationären Endwert und den daraus resultierenden bleibenden Beobachterfehler zu null machen zu können, muss der Luenberger-Beobachter (D = 0) um den Rückführpfad in Abb. 11.22 erweitert werden:
Die Auslegung der Rückführmatrix L geschieht mit dem Befehl place und folgt dem bekannten Beispiel aus Kap. 5.4.4, Seite 170. Im Folgenden wieder ein Ausschnitt aus der Initialisierungsdatei gnmbeobl_i.ffi (Kap. 11.6.5): polo I beob
5*real(pole(sys»+imag(pole(sys»/5*i place(sys.a',sys.c',polo).' estim(sys,I,1,1)
% Beobachterpole %Rückführvektor berechnen %SS-LTI-Modell Beobachter
0-
u
Zuerst werden die Beobachterpole polo festgelegt, die dann zusammen mit den transponierten System-Matrizen sys . a' und sys. c' an den Befehl place übergeben werden, der - wiederum transponiert - den Rückführvektor 1 berechnet. Abschließend wird mit dem Befehl estim das LTI-Modell beob der Zustandsdarstellung des Beobachters generiert, wobei der dritte Parameter (sensors, 1) der gemessene Ausgang IA und der vierte Parameter (lmown, 1) der bekannte Eingang UAsoll ist.
y
Drehzahl N und Schätzwert ybeob(:,3) (U/min)
0.8
J.
:.1 !i
:',1
I
o
0.1
~'-T-" 0.2
0.3
DA Zeit!
0.5
0.6
• j •.-'~'''~.'''''': 1
0.7
0.8
0
0.1
0.2
0.3
0.4 Zeltt
0.5
0.6
Abb. 11.22: Stärgräßen-Beobachter
I 0.7
0.8
Abb. 11.21: Luenberger-Beobachter: Istwer·te, Schätzwerte (gestrichelt; oben) und Schätzfehler (unten) von Ankersimm IA (links) und Drehzahl N (rechts)
Eille Simulation führt zu den in Abb. 11.21 dargestellten Verläufen. Wie gut an den Schätzfehleru zu erkennen, stimmen bei der blockförmigen Anregung (UAsoll) am Anfang die geschätzten Werte (gestrichelt) mit den richtigen Werten überein, doch bleibt nach einem Sprung des Widerstandsmoments bei T _MW = 0.4 ein erheblicher Schätzbzw. Beobachterfehler zurück. Dies resultiert aus der Struktur des Beobachters: Da zum einen in der Zustandsdarstellung kein Störeingriff berücksichtigt wurde und zum anderen die Rückführung des Beobachterfehlers nur proportional mit L erfolgt, kann der Beobachter diesen bleibenden Schätzfehler nicht zu null machen. Abhilfe schafft der nun folgende StörgrößenBeobachter.
Der Beobachterfehler e = y - y wird über die Einstellmatrix S, die Störeingriffsmatrix der Strecke F und einen Integrator auf:Je zurückgeführt. Der Integrator sorgt dafür, dass eine sonst bleibende Abweichung des Beobachterfehlers so lange aufintegriert wird, bis dieser null ist. Die Zustandsgleichungen des Störgrößen-Beobachters lauten mit dem Beobachterfehler e = y - y = y - CX eiilgesetzt:
it = A x + B u + L e + F z = (A - L C) x + B u + t y + F z
(11.14)
i
(11.15)
=
Se
y=Cx
=-SCx+Sy
(11.16)
11 Regelkreise in Simulink
388 In Matrixnotation geschrieben lauten die Gleichungen:
[!1~ [A~s~c : j. [:1 + [: ~j. [~]
11.5 Zustandsregelung mit Zustandsbeobachter
"~ ~= ~
[ooJ.[;)
(11.17)
(11.18)
Für die Simulation wird der geschätzte Ausgangsvektor 5' noch so modifiziert, dass auch die geschätzten Systemzustände x und die Störungen z in ybeob abgespeichert werden: (11.19)
Die Initialisierungsdaten und die Beobachterauslegung finden sich in der· Datei gnmbeobs_i.m (Kap. 11.6.6). Zusätzlich zum Luenberger-Beobachter muss hier noch der Störeingriffsvektor F (Signalflussplan Abb. 11.1, Mw ---t N) und der Rückführkoeffizient sangegeben werden: 6 )
I
F s
=
[0 -1/(2*pi*J) 0 ]' 100 ;
%Eingriff der Störung % Rückführkoeffizient
Die Zustandsdarstellung des Beobachters wird nun "von Hand" programmiert. Besonders zu beachten ist: Da die einzelnen Zustandsmatrizen des SS-LTI-Modells beob nacheinander neu belegt und somit in ihrer Dimension geändert werden, MATLAB aber bei jeder Zuweisung einer neuen Matrix an ein LTI-Modell sofort die Übereinstimmung der 7 Dimensionen prüft, muss beob zuerst gelöscht werden. )
I
clear beob beob.a [sys.a-l*sys.c F ; -s*sys.c 0 ] beob.b [sys.b 1 ; 0 s ] ; beob.c [sys.c 0 ; eye(size(beob.a)) ] beob.d zeros(size(beob.c*beob.b)); beob ss(beob.a,beob.b,beob.c,beob.d)
0.2
0.3
0.4
0.5
0.6
-501
:1
0.7
o
0.8
0.1
0.2
0.3
0.4 Zeitt
0.5
0.6
0.7
0.8
-8°0
Der integrale Rückführzweig könnte natürlich der Zustandsdarstellung des Beobachters zugeschlagen werden und zusammen mit der Rückführmatrix L berechnet werden. 7) Umgangen werden lmnn dieses Problem dadurch, dass die Zustandsmatrizen als normale MATLABMatrizen, z.B. als A, B, C und D, definiert werden und dann an den Befehl 55 übergeben werden.
,
.'
~
U
"
M
M
M
0.1
0.2
0.3
DA
0.5
.V'
M
~
::
0.6
0.7
I
u
1 0.8
Zeit!
Abb. 11.23: Störgrößen-Beobachter: Istwerle, Schätzwerte (gestrichelt) und Schätzjehler von Ankerstrom JA (links) und Drehzahl N (rechts)
11.5
Zustandsregelung mit Zustandsbeobachter
Nun wird ein Zustandsregler ausgelegt und programmiert, wie er sich in Abb. 11.24 darstellt (nach Kap. 5.6.7). Die entsprechenden Gleichungen hier nochmals:
x
Regelgesetz:
u = K Vw
Geschlossener Regelkreis:
x=(A-BK).x
-
%SS-LTI-Modell Beobachter
Im Unterschied zu Abb. 11.21 sieht man hier deutlich die Wirkung des I-Anteils des Störgrößen-Beobachters, der auch nach dem Auftreten des Widerstandsmoments bei T_MW = 0.4 den Beobachterfehler zu null macht (Abb. 11.23). 6)
0.1
~'I~ :"-~-~'K~~" ~j[ : :"'~'''I!'' -0.50
"... ~ [r ~l· r.l
Drehzahl N und Schätzwert ybeob(:,3) [U/min]
-lA
-1°0
5'=
389
K·
(11.20)
+ BKvw
(11.21 )
Abb. 11.24: Zustandsreglermit Sollwertanpassung
Der Falctor der Sollwertanpassung K v berechnet sich nach folgender Formel: -1
K v = C(A _ BK)-lB
(11.22)
Die Wunsch-Pole des Zustandsreglers sollen nach Dämpfungs-Optimum (DO) ausgelegt werden, das DO-Polynom 3. Ordnung hat folgende Übertragungsfunktion:
PDO (8)
1 8T~ys . 8 3
+ 8T,;ys . 8 2 + 4Tsys . 8 + 1
(11.23)
11 Regelkreise in Simulink
390
.11.5 Zustandsregelung mit Zustandsbeobachter
mit der Systemzeitkonstante T sys als dem "frei" wählbaren Einstellparameter des Zustandsreglers. Das Simulink-Modell zeigt Abb. 11.25, wobei hier auch der Beobachter programmiert ist. Wesentliche Merkmale des Zustandsreglers sind zum einen die Rückführung der drei Systemzustände IA, N und UA mit dem Rückführvektor k und zum anderen der Faktor K_V der Sollwertanpassung. Eingang ist hier wieder UAsoII, jedoch gibt es nun zwei Systemausgänge: IA (Outport-Block 1), das als Eingang für den Beobachter dient, und N (Outport-Block 2), das für den Reglerentwurf die Ausgangsgröße darstellt.
391
Als nächster Schritt wird die Systemdarstellung sys des gesamten Modells berechnet und aus diesem zwei Teilsysteme extrahiert: Für den Beobachterentwurf das LTI-Modell sysbeob vom Eingang UAsoll nach IA (Ausgang 1) und für den Reglerentwurf das LTIModell syszreg vom Eingang UAsoll nach N (Ausgang 2).
I
[A,B,C,D] sys sysbeob syszreg
linmod('gnmbeobreg'); ss(A,B,C,D); sys(1,1) sys(2,1)
%System-Matrizen extrahieren %LTI-Modell Strecke %LTI-Modell für Beobachterentwurf %LTI-Modell für Reglerentwurf
Aus der Initialisierungsdatei gnmbeobregLi.m (Kap. 11.6.8) sind folgende Zeilen für die Auslegung des Zustandsreglers von Bedeutung: 8 )
r., .
~ _~I"" .,'--__ .~( ..~P~~~'.".ff:lH:~~· Galn4
GD IA
'--------+-<
Die Auslegung des Beobachters erfolgt analog zu Kap. 11.4.1, es wird hier allerdings das LTI-Modell sysbeob statt sys verwendet: %%
Zustandsbeobachler
~~~'" Seleclor
."i\-{"i\:
2
RWTiI ~'
Luenberger-Beobachter berechnen
polo 50*real(pole(sysbeob»+imag(pole(sysbeob»/50*i % Beobachterpole 1 = place(sysbeob.a',sysbeob.c' ,pOlo).' % Rückführvektor berechnen beob = estim(sysbeob,1,1,1) %SS-LTI":Modell Beobachter
Conslant
Abb. 11.25: Simlllink-Modellgnmbeobreg.mdl mit Zustandsbeobachter 1tnd Zllstandsregler
Aus der Grundinitialisierungsdatei gnmbeobreg_i.m (Kap. 11.6.7) interessieren vor allem die folgenden Abschnitte:
,' I
;
Zuerst müssen alle Variablen des Simulink-Modells gnmbeobreg .mdl gesetzt werden, um mittels linmod die System darstellung für den Beobachter- und den Reglerentwurf erzeugen zu können. Um keine zusätzlichen Zustände zu generieren, muss auch hier das Beobachter-System beob wie in Kap. 11.4 definiert werden. Damit der Zustandsregler nicht in die Linearisierung eingeht, werden die Rückführkoeffizienten k auf null gesetzt.
%% SS-LTI-Modell Strecke erzeugen beob beobxO k
ss ([] , [0 0], [] ,0) [0] [000];
K3
%Beobachter initialisieren %Beobachter Anfangszustände %Rückführvektor %Vorfaktor initialisieren
Eine gesonderte Behandlung erfordert der Selector-Block (Kap. 8.8.3): Dieser extrahiert aus ybeob die beiden für die Zustandsreglung notwendigen Systemzustände N und UA, der Zustand IA hingegen ist messbar (Systemausgang!) und wird direkt verwendet. Durch die Leer-Initialisierung von be ob ist zuerst nur ein Systemausgang vorhanden, so dass dieser doppelt auf die beiden Ausgänge des Selector-Blocks gelegt wird. seI_aus
seI in
[1 1] 1
% 2 Selectorausgänge
%Anzahl
Selectoreingang
Nach Gleichung (11.23) werden mit der Systemzeit T_sys die Pole polc des WunschPolynoms berechnet. Anschließend werden diese und die Zustandsmatrizen syszreg.a und syszreg. b des LTI-Modells syszreg an place übergeben und damit die Koeffi:denten des Beobachtervektors k bestimmt. Der Faktor der Sollwertanpassung K_ V wird nach Gleichung (11.22) berechnet.
%% Zustandsregler 'berechnen T_sys 0.001; %Systemzeitkonstante es] pole roots([ 8*T_sys-3 8*T_sys-2 4*T_sys 1 ]) %Wunsch-Pole Regler k place(syszreg.a,syszreg.b,polc) %Nullstellen berechnen K_V -1/(syszreg.c*inv(syszreg.a-syszreg.b*k)*syszreg.b) Zuletzt werden wieder die Parameter des Selector-Blocks gesetzt: seI_aus extrahiert die beiden geschätzten Größen für N und UA aus ybeob, seLin setzt die Anzahl der Selector-Eingänge auf die Anzahl der Systemausgänge des Beobachters. 9 ) seI aus
[3 4]
seI_in
size(beob,l)
%2 Selectorausgänge %Anzahl Selectoreingänge
8) Es wird hier der Luenberger-Beobachter verwendet. In der Datei gnmbeobregs_i.m (Kap. 11.6.9) wird auf gleichem Wege der in Kap. 11.4.2 eingeführte Störgrößen-Beobachter definiert. 9) Natürlich könnte der Befehl size(beob,1) auch direkt in der Eingabemaske des Se/eelor-Blocks geschrieben werden.
392
11 Regelkreise in Simulink
Die Abb. 11.26 und 11.27 zeigen Drehzahl N und Ankerstrom IA für den Beginn der Simulation und während des Widerstandsmomentensprungs vergrößert an. Wie daraus abzulesen, funktioniert die Regelung nun mit den beobachteten Zuständen ohne weitere Probleme, allerdings musste die maximale Simulationsschrittweite sehr klein gewählt werden (step_max = 0.000005).
•
Ausgang y "" IA und Schätzwert ybeob(:,1 )[A}
~r=
-10°0
0.01
~r: -1
o
0.02
0.03
[m~.~J 0.04
0.02
::
0,03 Zeltt
I
0.04
0,05
200
o o
0.01
~~f
0.02
0.03
0.04
0.05
I
~"." "~'"'~
-O.010L............--:7:0.01-----,,0-'-c-.02~O.03,-----0,-'-c-.O'-----0'0.0'5 Zellt
Ausgang y "" IA und Schätzwert ybeob(:,1)[A]
-~l
r'
0.39
0395
Drehzahl N und Schätzwert ybeob(:,3) lU/mln]
\L Im~j
04
0405
041
0415
042
0425
0.405
0.41 Zellt
0,415
0.42
0.425
11.6.1
Gleichstrom-Nebenschluss-Maschine
%% gmn_Lm %% Kap 11.1.1 %% Initialisierungsdatei zu gmn.mdl
%% Spannungs-Sollwert sprung Tsprung : 0 ; %Zeitpunkt des Sprungs [ s ] UAsoll : 50 ; % Sollspannung [ V] %% Widerstandsmomenten-Sprung T_MV! : 0 % Zeitpunkt des Sprungs s ,] MW : 0 : % Sprunghöhe Nm ] %% Maschinendaten der GNM RA : 0.250 ; LA = 0.004 ; TA : LA I RA PsiN : 0.04 ; J = 0.012 ; CM : 38.2 ; CE : 2*pHCM
11.6.2
('_""'_'! •I ~r\:
0.4
Initialisierungsdateien
043
::: I
Schätzrehler e = N - ybeob(:,3)
0 395
11.6
%% Allgemeine Simulations daten Tstop 0.2 ; %Stopp der Simulation step_max : 0.0001 ; %Maximale Schrittweite
'00
Abb. 11.26: Zustandsregler: Sprungantwort von Ankerstrom IA (links) und Drehzahl N (rechts)
-1°839
0.43
393
600
0.05
Beobachterfehler e '" IA - ybeob(:,1)
0,01
r: .
Drehzahl N und Schätzwert ybeob(:,3) lU/min)
11.6 Initialisierungsdateien
-10
0.39
0.395
0,4
0.405
0.41' 0.415 Zeitt
0.42
0.425
0.43
Abb. 11.27: Zustandsr'egler: Störantwort von Ankerstrom IA (l'inks) und Drehzahl N (rechts)
Dass der Zustandsregler den Störsprung bei T_MW = 0.4 nicht ausregelt, liegt an der rein proportionalen Rückführung der Systemzustände. Gelöst werden kann dieses Problem z.B. durch Verwendung eines Störgrößen-Beobachters zur fehlerfreien Ermittlung der geschätzten Größen (Kap. 11.4.2) und eines Zustandsreglers mit Führungsintegrator (Aufgabe 5.6.7).
%% %% %%
% Ankerwiderstand %Ankerinduktivität
Ohm 1
[ H
%Ankerzeitkonstante
[ s ]
% Nennfluss
[ Vs ]
%Trägheitsmoment %Motorkonstanten
[ kg m-2 ]
Stromregelung
gnmregi_i.m Kap 11.3.1
Initialisierungsdatei zu gnmregi.mdl
%% Maschinen- und allgemeine Simulations daten gnm_i % Gleichstrommaschine %% Stromrichter T_t = 0.0001 ; %Totzeit des Stromrichters %% Strom-Blöcke T_IAsoll = 0.05 %Dauer einer Periode s ] lA_soll = 10 ; %Sollstrom AJ %% Stromregelung: PI-Regler, BO-optimiert V_Ri = LA / (2*T_t) ; %Verstärkungsfaktor [ Ohm T_Ri TA ; % Nachstellzeit [ s ] int_regi o ; %Startwert des Regler-Integrators
\t \i~i ~~
':/;1', ~{
J~
11 Regelkreise in Simulink
394
11.6.3
11.6.5
Drehzahlregel ung
395
11.6 Initialisierungsdateien
Zustandsbeobachtung mit Luenberger-Beobachter
%% gnmregn_i.m
%% gnmbeobl_i.m
%% Kap. 11.3.2
%'l. Kap 11. 4 . 1
jl~
%% Initialisierungsdatei zu gnmregn.mdl
%% Initialisierungsdatei für Luenberger-Beobachter
11'1'
%% Maschinen- und allgemeine Simulationsdaten gnm_i %Gleichstrommaschine gnmregi_i % Stromregelkreis + Stromrichter %Maximale Schrittweite step_max = 0.0001 ; %% Drehzahlsollwert-Blöcke T_Nsoll = 0.40 ; %Dauer einer Periode [ s ] % Solldrehzahl [ l/s N_soll = 500/60 ; %% Widerstandsmomenten-Sprung % Zeitpunkt des Sprungs s ] LMW 0.10; [ Nm ] MW = 100 ; % Sprunghöhe
%% Maschinen- und allgemeine Simulationsdaten gnm_i gnmbeob_i
% Gleichstrommaschine % GrundeinsteIlung
%% Luenberger-Beobachter polo 5*real(pole(sys))+imag(pole(sys))/5*i 1 place(sys.a',sys.c',polo).' be ob estim(sys,l,l,l)
%Beobachterpole %Rückführvektor berechnen % SS-LTI-Modell Beobachter
%% Drehzahlregelung: PI-Regler, SO-optimiert V_Rn = 2*pi*J I (CM*PsiN*2*2*T_t); % Verstärkungsfaktor [ Vs ] T_Rn = 4*2*T_t %Nachstellzeit [ s ] int_regn = 0 ; %Startwert Regler-Integrator
11.6.6
.I'i'
I] 11"
i:iijl" !.i I' .
~~I
all I' ,li !I'I
,',.I
i':li I'" ':!II ",.I J~
;:;F
;'i! :0 11
i~ ':=!!
11.6.4
G rundeinstellung Zustands beo bachter
%% Maschinen- und allgemeine Simulationsdaten % Gleichstrommaschine gnm_i % GrundeinsteIlung gnmbeob_i
%%
Kap 11.4
%% Initialisierungsdatei zu gnmbeob.mdl
,.I': 'i ' ,
,
:;.
%% gnmbeobs_i.m %'l. Kap 11.4.2
%% Initialisierungsdatei für Störgrößen-Beobachter %% gnmbeob_i.m
:,1: !~ I
Zustandsbeobachtung mit Störgrößen-Beobachter
%% Störgrößen-Beobachter F = [ 0 -1/(2*pi*J) 0 ]'
%% Allgemeine Simulations daten Tstop = 0.8 ; step_max = 0.00001 %% Stromrichter Lt = 0.0001 ; %% Ankerspannungssollwert-Impulse I_UAsoll = 0.4 ; UA_soll = 500/60 ; %% Widerstandsmomenten-Sprung ,LMW 0.40 MW = 10
%% Beobachter GrundeinsteIlung beob ss ([] ,[0 0] ; [] ,[0 0]) beobxO [ 0 ] ; linmod('gnmbeob'); [A,B,C,D] sys ss(A,B,C,D) ;
s = 100 ; polo 5*real(pole(sys))+imag(pole(sys))/5*i 1 = place (sys.a',sys.c',polo).'
%Stopp der Simulation %Maximale Schrittweite % Totzeit des Stromrichters'
%Dauer einer Periode % Sollspannung
[ s [ V
% Zeitpunkt des Sprungs [ s ] %Sprunghöhe [ l/s ]
%Beobachter initialisieren % Beobachter Anfangszustände %System-Matrizen extrahieren %SS-LII-Modell Strecke
%Eingriff der Störung % Rückführkoeffizient % Beobachterpole %Rückführvektor berechnen
% Beobachter-Matrizen berechnen
% Zusätzlich Ausgabe der Zustände in Simulink -> beob.c, beob.dS clear be ob beob.a = [ sys.a-l*sys.c F ; -s*sys.c 0 ] beob.b = [ sys.b I ; 0 s ] ; beob.c [sys.c 0 ; eye(size(beob.a)) ] beob.d zeros(size(beob.c*beob.b)); beob ss(beob.a,beob.b,beob.c,beob.d)
%SS-LTI-Modell
Beobachter
11 Regelkreise in Simulink
396
11.6.7
Zustandsregelung mit Zustandsbeobachter
%% gnmbeobreg_i.m %% Kap. 11.5 %% Initialisierungsdatei zu gnmbeobreg.mdl %% Maschinen- und allgemeine Simulationsdaten % Stopp der Simulation Tstop = 0.8 ; %Maximale Schrittweite step_max = 0.000005 %Workspace-Decimation ws_decim = 10 ; %% Stromrichter % Totzeit des Stromrichters Lt = 0.0001 ; %% Drehzahlsollwert-Impulse % Dauer einer Periode [ s J T_Nsoll = 0.8 ; [ l/s ] % Solldrehzahl N_soll = 500/60 ; %% Ankerspannungssollwert-Impulse s % Dauer einer Periode T_UAsoll = T_Nsoll ;, V UA_soll = N_soll ; % Soll spannung %% Widerstandsmomenten-Sprung % Zeitpunkt des Sprungs [ s J T_MW = 0.4 [ 1/s ] % Sprunghöhe MW 10 ; %% SS-LTI-Modell Strecke erzeugen beob beobxO
ss ([J, [0 0], [], 0) [0 J
k
[ 0 0 0
K_V 1 ; seI aus [1 1J seL.in = 1 [A,B,C,DJ sys sysbeob syszreg,
11.6.8
linmod('gnmbeobreg'); ss(A,B,C,D); sys (1,1) sys(2,1)
%Beobachter
initialisieren
% Beobachter Anfangszustände %Rückführvektor
11.6
%% Zustandsregler berechnen T_sys 0.001; % Systemzeitkonstante [sJ polc = roots([ 8*T_sys-3 8*T_sys-2 4*T_sys 1 J) %Wunsch-Pole Regler k = place(syszreg.a,syszreg.b,polc) %Nullstellen berechnen K_V = -l/(syszreg.c*inv(syszreg.a-syszreg.b*k)*syszreg.b) [3 4J ; size (beob, 1)
11.6.9
Zustandsregelung, mit Stör größen-Beo bachter
%% gnmbeobregs_i.m %% Kap. 11.5 %% Initialisierungsdatei zu gnmbeobreg.mdl %% Maschinen- und allgemeine Simulationsdaten gnm_i % Gleichstrommaschine gnmbeobreg_i % GrundeinsteIlung %% Störgrößen-Beobachter
% Anzahl Selectoreingang
1
%% gnmbeobregl_i.m %% Kap. 11.5 %% Initialisierungsdatei zu gnmbeobreg.mdl %% Maschinen- und allgemeine Simulationsdaten gnm_i % Gleichstrommaschine gnmbeobreg_i % GrundeinsteIlung
% 2 Selectorausgänge %Anzahl Selectoreingänge'
seI_aus seI_in
F
Zustandsregelung mit Luenberger-Beobachter
397
%% Luenberger-Beobachter berechnen polo = 50*real(pole(sysbeob))+imag(pole(sysbeob))/50*i % Beobachterpole I place(sysbeob.a',sysbeob.c' ,polo).' % Rückführvektor berechnen beob = estim(sysbeob,l,l,l) % SS-LTI-Modell Beobachter
%Vorfaktor initialisieren % 2 Selectorausgänge
%System-Matrizen extrahieren % LTI-Modell Strecke % LTI-Modell für Beobachterentwurf %LTI-Modell für Reglerentwurf
Initiali~ierungsdateien
=[
polo s
=
% Eingriff der Störung 25*real(pole(sysbeob))+imag(pole(sysbeob))/25*i % Beobachterpole place(sysbeob.a',sysbeob.c' ,polo). , % Rückführvektor berechnen. 10000 ; % Rückführkoeffizient 0 -1/(2*pi*J) 0 J'
=
% Beobachter-Matrizen berechnen clear beob beob.a = [ sysbeob.a-l*sysbeob.c F ; -s*sysbeob.c 0 J beob.b = [ sysbeob.b 1 ; 0 s J ; beob.c = [ sysbeob.c 0 ; eye(size(beob.a)) beob.d zeros(size(beob.c*beob.b)); beob ss(beob.a,beob.b,beob.c,beob.d) %SS-LTI-Modell Beobachter
%% Zustandsregler berechnen T_sys 0.001; % Systemzeitkonstante [sJ polc roots([ 8*T_sys-3 8*T_sys-2 4*T_sys 1 ]) % Wunsch-Pole Regler k place(syszreg.a,syszreg.b,polc) %Nullstellen berechnen K_V -1/(syszreg.c*inv(syszreg.a-syszreg.b*k)*syszreg.b) seI_aus seLin
[3 4J ; size (beob, 1)
% 2 Selectorausgänge %Anzahl Selectoreingänge
398
11 Regelkreise in Simulink
11.7
Übungsaufgaben
11.7.1
Zustandsdarstellung GNM
11.7.3
Die beschreibenden Gleichungen (11.1-11.5) der Gleichstrommaschine lauten in Zustandsdarstellung wie folgt:
~ [~l ~ r.c~rN -~AWN]. [~] + [:A~l] . [Z:]
l
27rJ
[~]=[~ n·[~]
(11.24) (11.25)
Im weiteren Verlauf dieser Übung sollen alle Schritte eines Reglerentwurfs in MATLAB und Simulink durchgeführt werden. Dazu wird ein rein fiktives System betrachtet, welches in der Datei system_bsp. mdl vorbereitet ist. Die Vorbelegung aller wichtigen System- und Simulationsdaten erfolgt in der Initialisierungsdatei system_ini.m (siehe . beigefügte CD-ROM).
Systemanalyse
Bei der betrachteten Regelstrecke handelt es sich um ein System 4. Ordnung mit Rückführung. Dies ist nicht mit der Rückführung einer Regelung zu verwechseln. Der Vorwärtszweig ist als ZPK-System, die Rückführung als Übertragungsfunktion dargestellt. Die Il1put- und Output-Blöcke zur Extraktion der Zustandsdarstellung in MATLAB sind bereits angebracht. Die folgenden AufgabensteIlungen können in der Initialisierungsdatei system_ini.m ergänzt werden:
1. In einem ersten Analyseschritt soll die Sprungantwort des Systems ermittelt werden. Simulieren Sie dazu das System und stellen Sie die Sprungantwort grafisch dar. 2. Extrahieren Sie die Zustandsdarstellung des Systems mittels des Befehls linmod. Erstellen Sie auch ein SS-LTI-Objekt. Stellen Sie auf Basis der Zustandsdarstellung die Sprungantwort und das Bode-Diagramm des Systems mit Befehlen der Control System Toolbox dar. 3. Stellen Sie mit dem Simulink-LTI-Viewer die Sprungantwort, die NullstellenPolstellen-Verteilung und das Bode-Diagramm dar. Dazu muss das SimulinkModell entsprechend modifiziert werden.
,..
Entwurf eines KaIman-Filters
Zur Zustandsbeobachtung soll im Folgenden ein KaIman-Filter entworfen werden. Gehen Sie davon aus, dass nur der Ausgang y des Systems messbar ist. Auf alle anderen Zustandsgrößen ist kein Zugriff möglich. Weiterhin soll Prozess- und Messrauschen berücksichtigt werden (siehe Abb. 5.31). Die Matrix G soll identisch mit der Einkoppelmatrix B sein, wohingegen die Matrix H nicht berücksichtigt wird (H = 0). Die Varianzen der Rauschsignale sind gegeben zu Q = R = 10- 3 . Das System hat demnach die beiden Eingänge w (Prozessrauschen) und u (Stellgröße). Ein vorbereitetes Simulink-Modell enthält die Datei sys_kalman .mdl. 1. Erstellen Sie ein SS-LTI-Objekt unter Berücksichtigung der Rauschgrößen. Welche Dimension muss jetzt die Einkoppelmatrix B besitzen?
27rJ
Verwenden Sie nun als Vorlagen die Dateien gnmregn.mdl und gnmregn_i.m und programmieren Sie die Gleichstrommaschine mit den Eingängen UA und Widerstandsmoment MW und dem Ausgang yss wie in der obigen Zustandsdarstellung.
11.7.2
399
11.7 Übungsaufgaben
2. Erstellen Sie ein SS-LTI-Objekt des gesamten KaIman-Filters und implementie-
ren Sie es mithilfe eines State-Space-Blocks im Simulink-Modell sys_kalman.mdl. Vergleichen Sie dann den geschätzten Ausgang mit dem exakten (unverrauschten) und dem tatsächlichen (verrauschten) Ausgangssignal durch Simulation des Gesamtsystems. Stellen Sie auch die geschätzten Zustandsgrößen über der Zeit dar.
11.7.4
Entwurf eines LQ-optimierten Zustandsreglers
Die in Kap. 11.7.3 mittels KaImanfilter geschätzten Zustandsgrößen können nun für die 'Realisierung eines Zustandsreglers benutzt werden. Als Optimierungsmethode soll eine linear-quadratisch optimale Regelung entworfen werden. 1. Entwerfen Sie einen linear-quadratisch-optimalen Zustandsregler mit Ausgangsgrößengewichtung mittels des Befehls lqry. Wällien Sie als Gewicht der Ausgangsgröße Q = 1 und als Gewichte der Stellgröße R = 0.1.
2. Implementieren Sie den Zustandsregler unter Verwendung des Modells aus Kap. 11.7.3. Verwenden Sie die geschätzten Zustandsgrößen des KaIman-Filters zur Regelung und simulieren Sie das Gesamtsystem. Betrachten Sie eine Sprungantwort der Höhe 100. 3. Da stationäre Genauigkeit offenbar noch nicht gewährleistet ist, soll der Sollwert mit einen Faktor K v skaliert werden. Für stationäre Genauigkeit muss mit der Reglermatrix K gelten:
1
K v = - C(A-BK)-lB
Implementieren Sie den Vorfaktor K v im Simulink-Modell und prüfen Sie nun die stationäre Genauigkeit durch Simulation.
12
Statefiow
Stateflow ist eine grafische Erweiterung von Simulink zur ModelIierung und Simulation endlicher Zustandsautomaten (Finite State Machines). Es handelt sich um ein Werkzeug zur ModelIierung event-gesteuerter reaktiver Systeme mit einer endlichen Anzahl von Zuständen (Moden). Zur Theorie ereignisdiskreter Systeme sei auf [1, 15, 26] verwiesen. Ein Vergleich mit Simulink-Systemen ergibt zwei grundlegende Unterschiede: Stateflow Modelle sind event-gesteuert und werden nur bei Auftreten von internen oder externen Ereignissen (Events, Triggersignalen) abgearbeitet. Simulink-Systeme hingegen werden mit konstanter oder variabler Integrationsschrittweite unabhängig von Ereignissen berechnet. Der Begriff des Zustands ist in Simulink regelungstechnisch geprägt und bezeichnet die wertkontinuierlichen Zustandsvariablen eines dynamischen Systems. Ein Zustand eines Stateflow Modells kann hingegen genau zwei Werte annehmen; er kann aktiv oder inaktiv sein. Ein typisches Beispiel eines endlichen Zustandsautomaten ist die Steuerung einer Verkehrsampel. Es existieren die Zustände Rot, Gelb und Grün, wobei jeder Zustand entweder aktiv oder inaktiv sein kann. Die Darstellung von Zustandsautomaten erfolgt in Stateflow mithilfe von Zustandsübergangsdiagrammen (Charts), die mit einem grafischen Editor erstellt werden. Sämtliche Bedingungen für Zustandsübergänge und Aktionen werden als Labels in so genannter Action Language spezifiziert. Ein Statefiow-Diagramm (Char-t) muss immer in einem Simulink-Modell eingebettet sein. Es stellt sich dann wie ein gewöhnliches Subsystem in Simulink dar. Das Statefiow Chart kann mit dem umgebenden Simulink-Modell durch Eingangs- und Ausgangsgrößen interagieren, wodurch schließlich ein hybrides (gemischt zeitkontinuierliches und ereignisdiskretes) System entsteht. Beim Start des umgebenden Simulink-Modells wird das Statefiow Chart, gesteuert von Simulink, ebenfalls ausgeführt. Vor der eigentlichen Ausführung wird aus dem Chart eine Simulink S-Funktion erzeugt. Die Erstellung der S-Funktionläuft automatisch ab und benötigt keinen Benutzereingriff. Folgende Schritte werden abgearbeitet: Erstellung ei-' ner C-Code S-Funktion im Unterverzeichnis sfprjl) (dieses Verzeichnis wird bei Bedarf neu angelegt), Compilierung des C-Codes und Erzeugung eines mex-Files (*.dll unter Windows, *.mex unter Unix/Linux). Zur Verwendung von Stateflow ist zwingend ein C-Compiler erforderlich. Vor der ersten Benutzung muss ein einmaliger Setup-Vorgang des Compilers durchgeführt werden. Dazu wird der Befehl
» mex -setup am MATLAB-Command-Window eingegeben. Unter Windows sollte der mitgelieferte Compiler Lee ausgewählt werden, unter Unix/Linux der GNU C-Compiler Gee. Die 1) Wenn dieses Verzeichnis auf einem Netzlaufwerk liegt, kann es zu Zugriff.'problemen bei der Compilierung kommen.
402
12 Stateflow
generierten Setup-Informationen werden in einer Datei gespeichert und sind für alle weiteren Compiler-Läufe verfügbar. Während der Abarbeitung des Stateflow-Diagramms werden die jeweils aktiven Übergänge und Zustände im geöffneten Chart animiert dargestellt. Der Ablauf des Zustandsautomaten kann also während der Laufzeit verfolgt werden. Über die Definition von Ausgangssignalen des Stateflow Charts können alle aus Simulink bekannten Signalaufzeichnungsmethoden verwendet werden. Ferner können sowohl Eingangssignale aus Simulink als auch Variablen aus dem MATLAB-Workspace in den Stateflow Chart importiert werden. Für eine tiefer gehende Modellanalyse stehen noch ein Parser (Überprüfung der Semantik, Start über Tools/Parse) , ein Debugger (gezielte Fehlersuche durch schrittweise Ausführung des Charts, Start über Tools/Debug ... ) und der Stateflow Explorer (Definition und Manipulation von Events, Variablen, Eingangs- und Ausgangssignalen) zur Verfügung. Zur Analyse von Ergebnissen können alle vorhandenen Toolboxen aus MATLAB herangezogen werden.
12.1 Elemente von Stateflow
'103
oder kürzer
» sf geöffnet werden. Die Stateflow Librm'y enthält neben einem leeren Chart auch noch eine Reihe von lauffähigen Beispielen, die durch Doppelklick geöffnet werden können (Abb. 12.1). Das leere Chart wird durch Ziehen mit der linken Maustaste in ein
~ Chart
(Double end< to open the State110w Examples LlbtalY)
Abb. 12.1: Statejlow Library
12.1
,'::'1
I
:ii
Elemente von Statefiow
Die Basis von Stateflow sind gedächtnis behaftete Zustandsübergangsdiagramme. Mithilfe der verfügbaren Elemente aus Stateflow können aber auch Flussdiagramme ohne Gedächtnis (stateless) realisiert werden. Zustandsübergangsdiagramme und Flussdiagramme werden grafisch in so genannten Charts dargestellt und in Simulink eingebettet. Die nichtgrafischen Elemente eines Stateflow Char·ts (Events, Daten unterschiedlichen Typs, Ein- und Ausgänge zu Simulink) werden im Data Dictionary gespeichert und über den Stateflow Explorer verwaltet (Kap. 12.1.3). Stateflow besitzt einen streng objektorientierten Aufbau, d.h. jedes Element (Objekt) besitzt ein eindeutiges Mutter-Objekt (parent) und kann beliebig viele Kind-Objekte (children) hervorbringen, von denen jedes wieder Kind-Objekte besitzen kann. Die Mutter aller Objekte ist das Stateflow Chart selbst. Die im Chart enthaltenen Elemente, wie etwa Zustände, Events, Variablen oder F\mktionen, sind Kinder des Charts. Mithilfe dieser Mutter-Kind-Objektbeziehungen ist eine Hierarchiebildung möglich, mit der zusammengehörende Objekte eines Charts strukturiert werden können (Kap. 12.2). In der Notation werden Mutter-Kind-Beziehungen zwischen Objekten durch einen trennenden Punkt dargestellt. Wenn das Kind-Objekt mit dem Namen kindl des Mutter-Objekts mit dem Namen mutter2 angesprochen werden soll, so wird dies durch den Ausdruck mutter2. kindl dargestellt. Stateflow Charts werden in Simulink wie gewöhnliche Subsysteme behandelt. Es können mehrere Charts in einem Simulink-Modell vorhanden sein, und jedes Chart kann Daten mit Simulink und anderen Charts (über Simulink) austauschen. Alle Charts zusammen werden als State Machine bezeichnet. Vor der Simulation wird aus der State Machine eine einzige Simulink S-Funktion generiert (unter Verwendung eines C-Compilers). Zum Einfügen eines leeren Charts in ein Simulink-Modell muss die Stateflow Library durch den Befehl » stateflow
Simulink-Modell eingefügt. Durch Doppelldick auf das leere ehart öffnet sich der grafische Editor von Stateflow. Abb. 12.2 zeigt den Editor mit der Tool-Leiste zum Platzieren der grafischen Elemente. Standm'dmäßig, wenn kein Tool aus der linken
State Tool -... History Junction Tool --+ Default Transition Tool
----J>
Connective lunction Tool --"'"
Truth Table ToolGraphical Function Tool -----Embedded Matlab Fl.lllction Tool --t>Box Tool---""' Zoom Selection ~
Abb. 12.2: Grafischer Statejlow Editor
Leiste in Abb. 12.2 ausgewählt wurde, können mit dem Mauszeiger des Editors Zustandsübergänge (11ansitionen) gezeichnet werden. Die weiteren Elemente eines Stateflow Charts können durch vorherige Auswahl aus der Tool-Leiste hinzugefügt werden. Ein Chart besteht aus Zuständen (State Tool), Zusta.ndsübergängen (Standardeinstellung des Editors), Connective Junctions (Connective Junction Tool), HistOTY JuActions (History Junction Tool), Standardübergängen (Defa1~lt Transition Tool) und Labels an Zuständen und Transitionen. Erweiterte Elemente wie Truth Tables (Truth Table Tool) , grafische Funktionen (Graphical Function Tool) und Boxes (Box Tool) können ebenfalls
12 Stateflow
404
direkt zum Clwrl hinzugefügt werden. Neben dem Menü in der Kopfzeile in Abb. 12.2 kann bei jedem 1111lll:j('I"ten Objekt mit der rechten Maustaste ein Shortcut-Menü mit gängigen Operatioll! ,".\ aufgerufen werden. Weiterhin sind alle Operationen wie Markieren, Kopieren, Aussc!llleiden, Einfügen, Verschieben, Löschen, Wiederholen, Rückgängig ( Undo) und Markien'l1 mebrerer Objekte mit den gleichen Tastenkombinationen wie in Simulink möglich. Der Illhalt eines Charts kann entweder über das Menü File/Print Current View oder del' \ [ATLAB-Befehl sfprint in einer Grafikdatei in verschiedenen Formaten gespeichert ,,;(·rden. Eine ausführliche html-Dokumentation eines Charts inklusive des umgebenden Simulink-Modells wird über das Menü File/Print details erzeugt.
12.1 Elemente von Stateflow
405
kann zum selben Zeitpunkt immer nur genau ein Zustand aktiv sein. Bei ParallelZuständen können auch mehrere Zustände gleichzeitig aktiv sein. Exklusiv-Zustände werden durch durchgezogene Rechtecke (Abb. 12.4), Parallel-Zustände durch gestrichelte Rechtecke dargestellt (Abb. 12.5). Bei Parallel-Zuständen ist zudem die Positionierung im Chart entscheidend für die Ausführungsreihenfolge. Ein ChaTt bestehend aus Parallel-Zuständen wird von oben nach unten und links nach rechts ausgeführt .. Die Reihenfolgenummer wird im Zustandssymbol rechts oben angezeigt (Abb. 12.5). zustexklusiv/Chart
...:.'.:."'" .
Abb. 12.3 zeigt ein Stateflow Chart bestehend aus allen Grundelementen. Die jeweilige F\mktion und der sinnvolle Einsatz dieser Elemente wird in Kap. 12.1.1 erklärt. Die Definition von nichtgrafischen Elementen und deren Management im Stateflow Explorer schließt sich in Kap. 12.1.3 an.
Z2
(23
Z3
Default Transition Zustand
I'$i !~
..
History Junction
(~
tll i!I ... q,t1 lEi!l JiillJ &
TransItIOn
\
WI
18~(jIJ
'):.L ~1I!1[8eIj11 ~'~ ---'~'--" / \ ~ D""
Kommentar"
.
Connective JUnctlOll
Abb. 12.4: Chart mit Exklusw-Zuständen
Abb. 12.5: Chart mit Pamllel-Zuständen
0
Label
U
Abb. 12.3: Beispiel eines Statefiow Charts
12.1.1
.. ..........~,~Slrejhenfolge/chart
Z1
Ein Zustand wird dem ChaTt durch Auswahl des State Tools des grafischen Editors und anschließende Platzierung des Zustandssymbols an die gewünschte Position hinzugefügt. Jeder neue Zustand erhält zu Beginn das Label,,?", welches zwingend auf einen anderen Namen geändert werden muss. Dies geschieht durch Anklicken des Symbols ,,?" mit der linken Maustaste. Alle Zustände in derselben Hierarchie-Ebene (siehe auch Kap. 12.2) müssen unterschiedliche Namen besitzen. Das Label eines Zustands besteht neben dem Namen aus optionalen Aktionen. Eine häufige Aktion ist die Veränderung des Werts einer Variablen. Ein Beispiel eines kompletten Zustandslabels ist in Abb. 12.6 dargestellt. Neben dem Zustandsnamen Zustandl sind in Abb. 12.6 fünf verschiedene
Grafische Elemente eines Charts
Die grafischen Elemente eines Charts definieren die möglichen Zustände, die zulässigen Zustands übergänge, Übergangsbedingungen und auszuführende Aktionen. Ferner kann mittels Shortcut-Menü mit der rechten Maustaste über Add Note ein Kommentar in das Chart eingefügt werden (siehe Abb. 12.2 und 12.3). In diesem Abschnitt werden nur die grundlegenden grafischen Elemente behandelt; weitere grafische Gestaltungsmöglichkeiten, insbesondere solche der Hierarchiebildung und Zusammenfassung von Objekten, werden in Kap. 12.2 näher betrachtet. Zustände. Ein Zustand beschreibt den Modus eines reaktiven Systems, in dem es sich gerade befindet. Ein Chart kann beliebig viele Zustände enthalten. Es gibt zwei Arten von Zuständen: Exklusiv-Zustände (Oder-Zustände) und Parallel-Zustände (Und-Zustände). Die Wahl zwischen diesen Zustandstypen erfolgt durch das ShortcutMenü und Auswahl des Punktes Decomposition. Die Festlegung des Zustandstyps kann für jede Hierarchie-Ebene neu erfolgen. Werden Exklusiv-Zustände verwendet,
Zustand1/ entry: aktion1; id=id+1; during: aktion2; exil: aktion3; time_out; on event1: aktion4; bind: time_out, id; Abb. 12.6: Zustand mit komplettem Label
Aktionen definiert, die durch die Schlüsselwörter entry, during, exit, on eventl und bind eingeleitet werden. Jede dieser Aktionen ist optional, es können alle oder nur einzelne Aktionen entfallen. Die Definition einer Aktion erfolgt durch ViTechsel in eine neue Zeile im Zustandslabel und Angabe des entsprechenden Schlüsselworts gefolgt von' der auszuführenden Aktion. Die Syntax zur Spezifika.tion von Aktionen ist ähnlich zur Programmiersprache C. Insbesondere können Werte von Variablen zugewiesen, logische
406
12 Stateflow
Vergleiche durchgeführt und Events ausgelöst werden. Zum Auslösen eines Events wird lediglich der Name des Events gefolgt von einem Semikolon angegeben. Genaueres zur Syntax der so genannten Action Language folgt in Kap. 12.3. Entry Action: Die Entry Action ist eine Aktion, die bei Eintritt in den jeweiligen Zustand als Folge einer gültigen Transition dorthin ausgeführt wird. Sie beginnt mit einer neuen Zeile im Zustandslabel, gefolgt vom Schlüsselwort entry und einem Doppelpunkt. Das Schlüsselwort entry kann auch abgekürzt als en angegeben werden. Nach dem Doppelpunkt folgt eine durch Kommata oder Semikolons getrennte Liste von Aktionsanweisungen, in Abb. 12,6 die einzelne Aktion aktionl (siehe Kap. 12.3). Bei Verwendung. eines Kommas als Tr'ennzeichen wird das Ergebnis der Aktion im MATLAB-CommandWindow ausgegeben, bei Verwendung des Semikolons wird diese Ausgabe unterdrückt. In einer Liste von mehreren Aktionen kann jede Aktionsdefinition in einer neuen Zeile beginnen. Sie wird so lange der Entry Action zugerechnet, bis ein neues Schlüsselwort einen anderen Aktionstyp einleitet. Ist eine einzelne Aktionsdefinition länger als eine Zeile, so kann sie durch die Tr'ennzeichen " ... " auf mehrere Zeilen aufgeteilt werden. Eine Besonderheit besteht bei der Entry Action: Sie kann bereits in derselben Zeile wie der Zustandsname beginnen und wird durch einen Schrägstrich ,,/" vom Zustandsnamen getrennt. During Action: Die During Action wird während der Aktivität des Zustands ausgeführt, in Abb. 12.6 die Aktion aktion2. Die Definition einer During Action wird durch das Schlüsselwort during oder abgekürzt dur eingeleitet. Es gelten alle Syntaxregeln wie auch bei der Entry Action. Die During Action wird ausgeführt, nachdem der Zustand aktiv wurde und solange keine Transition vom Zustand weg gültig ist. Die Häufigkeit der Ausführung der During Action hängt von den Einstellungen der TriggerMethode des Charts ab (Details siehe Kap. 12.1.2). In vielen Fällen wird die During Adion entweder bei jedem Abtastschritt des übergeordneten SimulinJc..Modells oder nur bei Auftret,en von externen Tr'iggersignalen ausgeführt. Exit Action: Die Exit Action wird beim Verlassen eines Zustands infolge einer gültigen Tr'ansition ausgeführt. Sie wird durch das Schlüsselwort exi t oder abgekürzt ex eingeleitet. Es gelten wiederum die gleichen Syntaxregeln wie bei der Entry Action. In Abb. 12.6 wird die Aktion aktion3 beim Verlassen des Zustands ausgeführt. On-Event Action: Eine On-Event Action wird ausgeführt, wenn der Zustand aktiv ist und das angegebene Event auftritt. Die On-Event Action wird durch das Schlüsselwort on gefolgt vom Namen des Events (in Abb. 12.6 das Event event1) und einem Doppelpunkt eingeleitet; anschließend folgt die auszuführende Aktion (in Abb. 12.6 die Aktion aktion4). Soll dieselbe Aktion beim Auftreten mehrerer verschiedener Events· ausgeführt werden, so kann dies durch Angabe einer durch Komma getrennten Liste von Events nach dem Schlüsselwort on erfolgen. Ein Beispiel hierzu ist:
"I
I;')
:',
I
407
die Variable id an den Zustand Zustandl gebunden. Das bedeutet, das Event time_out kann ausschließlich vorn Zustand Zustandl und eventueller Kind-Objekte aktiviert wer-" den, alle anderen Zustände und Transitionen können allerdings das Event empfangen. Die Variable id kann nur vom Zustand Zustandl verändert werden, alle anderen Objekte können jedoch ihren Wert lesen. Events und Variablen können an höchstens einen Zustand gebunden sein. Durch Markierung eines Zustands mit der rechten Maustaste und Auswahl des Menüpunktes Proper·ties im Shor·tcut-Menü kann der Zustand weiter konfiguriert werden. Abb. 12.7 zeigt das Property-Fenster eines Zustands und die zusätzlichen Einstellmöglichkeiten. Zunächst kann das Zustandslabel ebenso im Property Fenster be-
tiesq'i~iion:',~>'
DO/llrm~h;'Lj~ig (I--~----~~--
Abb. 12.7: Property-Fenster eines Zustands
~
Zustand11>
Chart
Abb. 12.8: Ausgabe der Z'ltstandsaktivität nach Simulink
arbeitet werden. Zusätzlich können Haltepunkte für die Verwendung des Debuggers gesetzt werden (Debugger Br·eakpoints). Im Feld Description kann eine kurze Dokumentation des Zustandes eingetragen werden, für ausführliche Textdokumente kann das Feld Document Link zum Verweis auf Hilfetexte benutzt werden (Verweis auf Textdateien oder Hypertext-Dokumente).
Die Aktion aktion124 wird ausgeführt, wenn eines der Events eventl, event2 oder event4 auftritt.
Wenn die Zustandsaktivität außerhalb des Stateflow Charts im umgebenden SimulinkModell benötigt wird, so kann dies durch Auswahl des Punktes Output State Activity erreicht werden. Dadurch wird im Data Dictionary eine Vari~ble mit dem Namen des Zustands vom Typ State angelegt und ein zusätzlicher Ausgangsport 80111 Chart angezeigt (Abb. 12.8). Zu beachten ist, dass alle Zustände, deren Aktivität am Ausgang sichtbar sein soll, unterschiedliche Namen besitzen müssen, auch wenn sie in Superstates oder Subcharts eingebettet sind (siehe Kap. 12.2). Der Ausgang des Zustandsports ist . bei Aktivität gleich eins und ansonsten null. Auch ohne explizites Herausführen der Zustandsaktivität nach Simulink kann die Aktivität in einem Floating Scope in Simulink angezeigt werden. Die Zustände können wie normale Signale ausgewählt werden.
Bind Action: Eine Bind Action definiert die Zugehörigkeit von Events und Variablen zu einem Zustand. Durch die Bind Action in Abb. 12.6 wird das Event time_out und
Transitionen. Transitionen stellen eine Übergangsmöglichkeit des Charts von einem Quell~ zu einem Zielobjekt dar. Tr'ansitionen können zwischen zwei Zuständen und zwi-
on eventl, event2, event4: aktion124; :",1
12.1 Elemente von Stateflow
408
12 Statefiow
sehen Zuständen und Verbindungspunkten (Connective Junction) bestehen. Die häufigste Anwendung dürfte der Übergang zwischen zwei Zuständen sein. Eine Transition wird durch Ziehen mit der linken Maustaste zwischen zwei Objekten erzeugt. Eine Transition haftet an Zuständen nur an deren geraden Kanten, die abgerundeten Ecken dienen der Änderung ihrer Größe.
12.1 Elemente von Stateflow
409
Eine Bedingung muss in [ ] eingeschlossen werden. Die genaue Notation zur Darstellung boolescher Ausdrücke wird in Kap. 12.3 behandelt.
Die Auswertung von Transitionen erfolgt nach folgendem Muster: Zunächst muss das Quellobjekt (meist ein Zustand) aktiv sein. Dann werden alle Transitionen, die von dem Objekt weg führen, auf ihre Gültigkeit überprüft. Die gültige Transition wird darauf11in ausgeführt. Die Labels der Transitionen müssen so spezifiziert werden, dass höchstens eine Transition gültig sein kann. Bei Parallel-Zuständen erfolgt die Auswertung möglicher Transitionen in der Bearbeitungsreihenfolge der Zustände (siehe Kap. 12.1.1).
Bedingungsaktion (Condition Action): Die Bedingungsaktion wird ausgeführt, sobald die vorausgegangene Bedingung als true ausgewertet wurde und bevor die Transition tatsächlich ausgeführt wird. Besteht die Transition aus mehreren Segmenten (z.B. durch Connective Junctions), so wird die Bedingungsaktion vor der Auswertung von Labeln weiterer Transitionssegmente ausgeführt. Wenn keine Bedingung angegeben wurde, so nimmt Stateflow eine zu true ausgewertete Bedingung an, d.h. die Aktion wird bei Ausführung der Transition auf jeden Fall ausgeführt. Eine Bedingungsaktion muss in { } eingeschlossen werden. Im Beispiel in Abb. 12.9 wird die Aktion cond3ction ausgeführt, wenn bedingung==l wahr ist.
Eine Transition kann mit einem Label versehen werden. Das Label beschreibt Bedingungen, unter denen eine Transition gültig ist. Es besteht aus einem Event, einer Bedingung ( Condition), einer Bedingungsaktion (Condition Action) und einer Transitionsaktion (Transition Action). Jedes dieser Elemente eines Labels ist optional. Eine Transition ohne Label ist immer gültig und wird immer dann ausgeführt, wenn das Quellobjekt aktiv ist und das Chart abgearbeitet wird. Die allgemeine Form eines Labels einer Transition lautet:
Transitionsaktion (Transition Action): Die Transitionsaktion wird ausgeführt, sobald Stateflow ein gültiges Ziel der Transition erkannt hat und Event und Bedingung, falls angegeben, jeweils erfüllt waren. Besteht eine Transition aus mehreren Segmenten, so wird die Transitionsaktion nur dann ausgeführt, wenn der gesamte Pfad der 'I'ransi- ~ tion gültig ist. Eine Transitionsaktion wird durch einen vorangestellten Slash (,,1") eingeleitet. In Abb. 12.9 wird bei gültiger Transition die Transitiollsaktion trans_action ausgeführt.
event [condition] {condition_action}/transition_action
Abb. 12.9 zeigt als Beispiel einen einfachen Ein/Aus-Schalter. Der Schalter befinde sich zunächst in Stellung On. Wenn das Label der Transition gültig ist, wechselt der Zustand von On nach Off.
r-
schalteriChart
evenCon [bedingung== 1](cond_action)/trans3ction
[on
~ [Off
Es existieren drei verschiedene Arten von Transitionen. So genannte Inner- Tmnsitions führen von umgebenden Super'states zu unterlagerten Substates, ohne den S-uper-state zu verlassen. Diese Art der Transition wird in Kap. 12.2 behandelt. Die zweite Transitionsart ist die Standardtransition (Default Tmns'ition). Sie wird durch Auswahl des Default Transition Tools im grafischen Editor erzeugt (siehe Abb. 12.2). Die Standardtransition besitzt kein Quellobjekt und verläuft vom Leeren zu einem Zustand oder einem Verbindungspunkt. Die Gültigkeit einer Standardtransition wird nur dann überprüft, wenn kein Zustand innerhalb der umgebenden Hierarchiestufe (Char-t, Superstate oder Subchart) aktiv ist, die umgebende Hierarchiestufe jedoch aktiviert· bzw. ausgeführt wird. Ein Beispiel zur Standardtransition zeigt Abb. 12.10. Wird das defaulttransition/Chart
Abb. 12.9: Vollständiges Label einer Transition am Beispiel eines Ein/Aus-Schalters
Event: Nur wenn das Event event_off auftritt, kann die 'Il'ansition gültig werden. Die nachfolgende Bedingung bedingung muss für die Gültigkeit der Transition aber zusätzlich erfüllt sein. Wenn im Label kein Event angegeben wird, wird die darauf folgende Bedingung beim Auftreten eines beliebigen Events ausgewertet. Mehrere Events können durch logische Oder-Verlmüpfung durch den Operator I kombiniert werden. In Abb. 12.9 wird die Transition ausgeführt, wenn neben dem Event event_off auch die Bedingung bedingung==l erfüllt ist. Bedingung (Condition): Die Bedingung ist ein boolescher Ausdruck, mit dem die Ausführung einer Transition gesteuert wird. Die Transition wird nur dann ausgeführt, wenn die Bedingung den booleschen Wert true liefert. Wenn keine Bedingung angegeben wurde, wird von Stateflow eine zu true ausgewertete Bedingung angenomm(ln.
switch_off
On
switch_on
Off
Abb. 12.10: Chart mit Default Transit'ion
Chart zum ersten Mal aufgerufen, so sind zunächst alle Zustände inaktiv. Die Standardtransition trägt keinen Label und wird daher ohne Bedingung bei der erstmaligen Abarbeitung des Charts ausgeführt. Das Chart befindet sich also standardmäßig zu Beginn im Zustand Off und kann bei Auftreten der Events switch_on und switch_off
410
12 Stateflow
zwischen diesen beiden Zuständen wechseln.' Die Standardtransition wird bei der weiteren Ausführung nicht mehr auf ihre Gültigkeit überprüft, da nun bereits genau ein Zustand aktiv ist. Die dritte und häufigste Art von Transitionen verläuft zwischen einem Quell- und Zielobjekt. Quell- und Zielobjekt können jeweils Zustände und Verbindungspunkte sein. Das Zielobjekt einer Transition, bestehend aus mehreren Abschnitten, kann nur ein Zustand sein. Die Transition wird nur dann ausgeführt, wenn der gesamte Weg von der Quelle zum Ziel gültig war. Diese voranstehenden Aussagen werden in Kap. 12.1.1 noch etwas deutlicher.
411
12.1 Elemente von Sta.teflow
Transition von einer Quelle zu zwei Zielen: Der betra.chtete Zusta.ndsa.utomat soll folgende Funktion erfüllen: Es existieren drei Zustände, A, Bund C. Anfangs ist der Zustand A a.ktiv. Abhängig von den Events E_eins und E_zwei soll entweder in den Zusta.nd B oder C übergega.ngen werden. Das zugehörige ChaTt ist in Abb. 12.11 dargestellt. Der erste Zweig der Tra.nsition vom Zustand A zum Verbindungspnnkt wird einsnachzwei/Chart
Die Ausführung von Transitionen wird durch das Label und das Auftreten von Events gesteuert. In Tab. 12.1 werden typische Szenarien von Labeln und deren Gültigkeit gegenübergestellt. E_zwei Tab. 12.1: Typische Labels und Gültigkeit der Transitionen
Label besteht aus:
Transition ist gültig, wenn:
Event Event und Bedingung Bedingung Transitionsaktion leeres Label
das Event auftritt das Event auftritt und die Bedingung wahr ist ein beliebiges Event auftritt und die Bedingung wahr ist ein beliebiges Event auftritt ein beliebiges Event auftritt
Verbindungspunkte (Connective Junctions). Ein Verbindungspunkt (Connective Junction) stellt eine Entscheidungsmöglichkeit zwischen mehreren möglichen Pfaden einer Transition dar. Dadurch lassen sich Konstrukte wie for-Schleifen, do-whileSchleifen und if-then-Abfragen realisieren. Außerdem können durch die Verwendung von Verbindungspunkten Flussdiagra.mme (ohne Zustände) erzeugt werden. Ein Verbindungspunkt wird im Sta.teflow Chart als Kreis da.rgestellt. Er wird durch Auswahl des Connective Junction Tools (siehe Abb. 12.2) und Pla.tzieren mit der linken Ma.ustaste erzeugt . . Zunächst werden zwei Grundformen der Verwendung eines Verbindungspunktes diskutiert: zum einen die Anordnung zwei Quellen, ein Ziel und zum a.nderen die Anordnung eine Quelle, zwei Ziele. Anschließend werden die Konstrukte für Schleifen, if-Abfra.gen und Flussdiagra.mme a.n Beispielen erläutert.
I,
;
'I.
Grundsätzlich gilt für Tra.nsitionen, die über Verbindungspunkte verla.ufen, dass die 'Il-ansition nur dann ausgeführt wird, wenn ein kompletter Pfad von einem Quellzustand zu einem Zielzustand gültig ist. Weiterhin ist zu fordern, dass die Labels der Tra.nsitionen so spezifiziert wurden, dass genau ein Pfad gültig ist. Es erfolgt keine Präferenzierung von mehreren möglichen Pfaden, wenn jeder Pfa.d einen La.bel mit Bedingung trägt. Eine Ausnahme ergibt sich, wenn a.ußerdem ein Pfa.d mit einem Label olme Bedingung vorhanden ist. Es werden dann bei der Auswertung zuerst a.lle Pfade mit Bedingung berücksichtigt (Pfa.de mit Bedingung ha.ben Vorrang) und erst da.nn der Pfad ohne Bedingung.
D
Abb. 12.11: Transition von e'inel' Quelle zu zwei Zielen; einsnachzwei . mdL
bei Auftreten eines beliebigen Events a.usgeführt. Wenn das a.uslösende Event E_eins war, so wird der obere Pfad der Transition ausgeführt, wenn es E_zwei wa.r, wird der untere Pfa.d a.usgeführt und wenn es schließlich ein a.nderes Event wa.r, so wird keine Tra.nsition ausgeführt und da.s Chart verbleibt im Zusta.nd A. Transition von zwei Quellen zu einem Ziel: Nun soll a.ls entgegengesetzte Problemstellung die Transition von zwei Quellzuständen zu einem Zielzusta.nd mithilfe eines Verbindungspunktes rea.lisiert werden. Der Zustandsa.utomat soll nun die folgende Funktiona.lität a.ufweisen: Zu Beginn sei, abhängig von vorherigen Events, entweder der Zustand A oder B aktiv. Abhängig von den Events E_eins und E_zwei soll ein Wechsel in den Zustand C erfolgen. In Abb. 12.12 ist ein ChaTt a.ls Realisierung dargestellt. Bei zweinacheins/Chart
E_eins
Abb. 12.12: Transition von zwei Quellen zu einem Ziel; zweinacheins.mdL
der Initia.lisierung des ChaTts wird abhängig von den Events E_A und E_B entweder der Zusta.nd A oder B a.ktiviert. Wenn A aktiv ist und da.s Event E_e.ins auftritt, ist die gesa.mte Transition von A na.ch C gültig, und die Transition wird a.usgeführt; der zweite
12 Stateflow
412
12.1 Elemente von Stateflow
Al3
Ast der 'll-ansition ist für alle Events gültig, da ein leeres Label spezifiziert wurde. Wenn B aktiv ist und das Event E_zwei auftritt, erfolgt ein Zustandsübergang von B nach C.
erfüllt ist (weil i<10 nicht mehr gilt), wird schließlich nachrangig die Transition vom Verbindungspunkt zum Zustand B auf Gültigkeit geprüft und auch ausgeführt.
Self Loop Transition: Eine Sei! Loop Transition ist dadurch charakterisiert, dass eine Transition existiert, bei der Quelle und Ziel identisch sind. Abb. 12.13 zeigt das Chart einer Se~f Loop Tmnsition. Der erste Abschnitt der Transition weg vom Zustand A ist
If-Abfrage: Mittels Connective Junctions lassen sich problemlos if-Abfragen realisieren. Der folgende MATLAB-Code ist in Abb. 12.15 in ein Chart umgesetzt. i f a>b if a>c
selfloop/Chart
aktion1 else aktion2 end else aktion3
z=z+1 end
E_eins Abb. 12.13: Self Loop Transition; seLfLoop.mdl
ifabfrage/Chart
für jedes beliebige Event gültig. Wenn das auslösende Event E_zwei war, erfolgt ein Übergang von A nach C. War das auslösende Event E_eins, wird Zustand Averlassen und über den unteren Teil der Transition wieder aktiviert. Besonders interessant sind Sei! Loops, wenn im Rahmen von Transitionsaktionen weitere Manipulationen (Zählervariablen erhöhen, Events auslösen etc.) vorgenommen werden. For-Schleife: In jeder gängigen Programmiersprache ist das Konstrukt einer forSchleife bekannt. In einem Stateflow Chart kann die for-Schleife mithilfe eines Verbindungspunktes realisiert werden. Abb. 12.14 zeigt dafür eine Realisierungsmöglichkeit. Bei Auftreten des Events E_eins ist der erste Zweig der Transition vom Zustand A forloop/Chart
{aktion3;z++l
Abb. 12.14: For-Schleife mittels Ver;bindttngspttnkt; forLoop.mdL
nach B gültig. In der Bedingungsaktion wird die Variable i auf null vor belegt. Eine von einem Verbindungspunkt abgehende Transition mit Bedingung hat Vorrang vor einer 'I'ransition ohne Bedingung; die Transition vom Verbindungspunkt zurück zum selben Verbindungspunkt wird daher zuerst auf Gültigkeit überprüft. Die untere Transition wird nun so oft ausgeführt, bis die Bedingung [i<10] nicht mehr erfüllt ist. In der Bedingungsaktion wird neben der Erhöhung der Zählervariablen i auch noch die weitere Aktion k=k*2; ausgeführt. Wenn das Label der unteren Transition nicht mehr
Mehr:fa~he
Die Teile eines Stateflow Charts, die ohne Zustände auskommen, wie etwa die forSchleife oder die if-Abfrage, bezeichnet man als Flussdiagramme (stateless). Sie können Aktionen ausführen (über Bedingungs- und Transitionsaktion) wie Zustandsdiagramme auch. Der wesentliche Unterschied zwischen beiden Diagrammtypen besteht in der Fähigkeit von Zustandsdiagrammen, ihren Modus der letzten Ausführung zu speichern. Die Ausführung beim nä.chsten Mal ist abhängig vom Ergebnis der aktuellen Ausführung. Reine Flussdiagramme sind hingegen nicht gedächtnisbehaftet.
12.1.2 [i<10J(i++; k=k*2;l
Abb. 12.15: Flttssdiagramm: If-Abfrage in Stateflow
Chart-Eigenschaften und Trigger-Methoden
Ein Stateflow Chart wird grundsätzlich nur bei Auftreten von Events abgearbeitet. Events können dabei intern, implizit (z.B. bei der Aktivierung oder beim Verlassen eines Zustands) oder extern erzeugt werden. Beim Start einer Simulation ist das Chart zunächst in Ruhe (wie auch die gesamte State 1I1achine), zur Ausführung muss es durch ein externes Event aktiviert (man sagt auch "aufgeweckt") werden. Die Regeln, nach denen Stateflow Charts durch externe Events aldiviert werden, können für jedes Chart einzeln festgelegt werden. Man spricht auch von der Chart Update Method. Es werden drei Methoden zur Aktivierung des Charts unterschieden: Inherited, Discrete und Continuous. Diese Methoden können im Menü File/Chart Pmpe7,ties ausgewählt werden (siehe Abb. 12.16). Inherited stellt dabei die Standard-Update-Methocle dar.
414
12 Stateflow
ru
Upd~torn~(hod:flnI~-d-~'SGmpl~~ini.:~
i?;::;'·;t~~c""'~,',,'::l:':·;::~;~~;~:'~-~_~·I
,- .1~()Cod~ BU
r r
12.1 Elemente von Stateflow
SlneWave
'
.~ [~ Chart
U:eS1JongOataTJlP1n!lwiIhSirriu~nkIlO
415
Abb. 12.18: Stateflow ChaTt mit vererbter Update- Methode
E~ec~IQ (enle!) ChaIIAllniliali~~~loll
D~b\Jgll~1 br~&kpoinl;'r-, Oochart cnlrj>
Subsysteme und insbesondere von der Abtastrate der Eingangssignale unterscheiden. ~n1.JJ!!!J.:,I
L~R~_J_ <""'~IJ.c...:J!:d_AP~'
Abb. 12.16: Einstellung der Update-Methode in den Chart Properties
Inherited: Die Update-Methode Inherited bedeutet, dass die Aktivierung des Char-ts von Simulink vererbt wird. Wenn im Data Dictionary Event-Eingänge von Simulink definiert sind, wird das Chart nur dann aktiviert, wenn es explizit von außen durch ein T'riggersignal angesprochen wird (siehe Kap. 12.1.3). Bei der Definition der Events kann dann jeweils zwischen steigender, fallender, beliebiger Flanke und Function CaU ausgewählt werden. Das letztere Triggersignal stellt einen Spezialfall in Stateflow dar. Normalerweise steuert Simulink die Ausführung aller Subsysteme, so auch aller Statef:low Charts. Bei einem durch Punction CaU getriggerten Statef:low-Dia.gramm liegt die Kontrolle über den Ausfiihrungszeitpunkt bei Stateflow. Diese Methode ist besonders dann interessanl;,wenn das Triggersignal von einem anderen Stateflow Chart erzeugt wird. In diesem Fall kann ein Stateflow Chart ein anderes Chart aktivieren, ohne die Kontrolle zwischenzeitlich an Simulink abgeben zu müssen. Abb. 12.17 zeigt ein Beispiel eines durch steigende Flanken getriggerten Stateflow Charts.
J
Pulse Generator
I:
~ Gllar!
Abb. 12.17: Auf steigende Flanke getriggertes Stateflow Chart
!'
i
Wenn im Data Dictionary keine Event-Eingänge von Simulink definiert sind, jedoch Eingangssignale von Simulink, dann wird das Chart durch implizite Events aktiviert. Die Rate der Events entspricht der höchsten Abtastrate der Eingangssignale des Charts. Das Eingangssignal mit der höchsten Abtastrate (kleinsten Abtastzeit) bestimmt somit auch die maximale Abtastrate des Char-ts. In Abb. 12.18 ist ein Chart mit einem Eingangs signal dargestellt. Discrete: Bei Wahl der Update-Methode Discrete wird von Simulink ein implizites Event mit eier im Textfeld Sampie T'ime angegebenen Rate erzeugt. Das Stateflow Chart wird mit genau dieser Rate periodisch aktiviert. Diese Rate kann sich von der anderer
Continuous: Diese Update-Methode aktiviert das Statef:low Chad zu jedem Integrationsschritt des kontinuierlichen Simulink-Solvers, als auch zu Zwischenzeitpunkten, falls diese vom Simulink-Solver benötigt werden. Die Aktivierung zu Zwischenzeitpunkten kann etwa bei Solvern mit variabler Schrittweite während der Schrittweitenanpassung oder bei Walll eines Refine-Faktors größer als eins auftreten (siehe Abb. 8.21). Bei den Update-Methoden Discrete und Continuous muss das Chart keine Eingangssignale besitzen. Unabhängig von der Update-Methode kann im Menü Chart PropeTt'ies der Punkt Exeeute Char-t At Initialization aktiviert werden. Diese bewirkt, dass bei der Initialisierung des umgebenden Simulink-ModeiIs im Stateflow Chart ein implizites Event ausgelöst wird. Daraufhin werden alle Default Transitions auf ihre Gültigkeit überprüft und ausgeführt. Dadurch kann das Chart bei Simulationsbeginn in eine definierte Ausgangslage versetzt werden, ohne dass explizit ein Event auftreten muss. Durch Auswahl der Check-Box Export Char-t Level Gmphical Punctions können grafische Funktionen (siehe Kap. 12.2.4) eines Charts auch in anderen Char-ts aufgerufen werden, solange beide Char-ts zum selben Simulink-Modell gehören.
12.1.3
Nichtgrafische Elemente eines Charts
Bisher wurden vorwiegend die grafischen Elemente von Statef:low betrachtet. Die nichtgrafischen Elemente wie' Events, Variablen, Eingänge und Ausgänge zu Simulink sollen nun in den Mittelpunkt rücken. Vor der Verwendung von Events, Variablen, Eingangsund Ausgangssignalen müssen diese im Data Dictionary deklariert und ihre Eigenschaften festgelegt werden. Das Data Dictionary erfüllt eine Funktion analog der des MATLAB-Workspace. Der Inhalt des Data Dictionary kann mit dem Model Explorer betrachtet werden, der durch das Menü Tools/Explore gestartet wird. In den Abb. 12.19 und 12.20 ist ein einfaches Stateflow Chart und der zugehörige Inhalt des Model Explorers dargestellt. Im Explorer sind im linken Teil neben dem Chart auch die beiden Zustände A und B sowie Elemente des umgebenden Simulink-Modells zu erkennen. Die Einrückung stellt dabei die "Mutter-Kind-Beziehung" dar. Im mittleren Teil werden alle nichtgrafischen Elemente, zugeordnet zum jeweiligen Mutter-Objekt, angezeigt. Im Beispiel in Abb. 12.20 ist ein lokales Event E..zwei, ein Eingangs- und ein Ausgangssignal (eingang und ausgang, jeweils vom Typ double) und ein Eingangs- und Ausgangs-Event (E_eins und event2) im Mutter-Objekt Chan definiert. Eingangs- und Ausgangssignale zu Simulink müssen immer in der obersten Hierarchie-Ebene im Mutter-Objekt Char·t defi-
12 Stateflow
416
417
des Shortcut-Menüs (rechte Maustaste/ Properties) oder des rechten Teils des Model Explorers kann der Name und alle weiteren Eigenschaften verändert werden (Abb. 12.21).
chartexplorer/Chart
A
12.1 Elemente von Stateflow
E_eins
E_zwei
B
Abb. 12.19: Statefiow Chart mit zwei Zuständen
:.~.~;~"::':~~~~...:;'2'_...:.;~~:'~~.~~~..2.'~~.;J.:s..:...,.:;.~:.;;i~~,.';·:
Abb. 12.21: Property-Dialog-Fenster im Explorer
Ein lokales Event wird durch Markieren des Zustands, in dem das Event sichtbar sein' soll, und anschließende Auswahl des Menüs Add/Event deklariert.
I~J
-,-L_~'
. \1..lJ~i~~1
Abb. 12.20: Zu Abb. 12.19 gehö'render Model Explorer
niert werden. Lokale Events und Variablen können auch Unterobjekten des Charts zugeordnet werden, wie etwa Subcharts oder Superstates (siehe Kap. 12.2). Die Sichtbarkeit von Variablen und Events beschränkt sich immer auf das Mutter-Objekt einschließlich aller Kind-Objekte. Variablen und Events sind nicht in Vorgänger-Objekten sichtbar. Im rechten Teil des Model Explorers sind die detaillierten Eigenschaften des im mittleren Teilma.rkierten Objekts sichtbar. Es handelt sich um die gleichen Einstellmöglichkeiten wie über das Shortcut-Menü rechte Maustaste/ Proper'ties. Die Deklaration von Variablen und Events kann auf zwei Weisen erfolgen. Im grafischen Editor von Stateflow werden Variablen und Ein- / Ausgänge zu Simulink über den Menüpunkt Add/Data dem Mutter-Objekt Chart hinzugefügt. Auf ähnliche Weise werden lokale und Ein-/ Ausgangs-Events über den Menüpunkt Add/Event hinzugefügt. Im grafischen Editor können Events und Variablen nur dem Chart als Mutter-Objekt hinzugefügt werden; im Model Explorer können als Mutter-Objekte auch Superstates oder Subcharts gewählt werden. Dadurch wird eine eingeschränkte Sichtbarkeit der Variablen erreicht. Um eine lokale Variable dem Zustand A hinzuzufügen, wird zuerst der Zustand im Explorer mit der linken Maustaste markiert. Dann wird über den Menüpunkt Add/Data eine Standardvariable mit dem Namen data deklariert. Durch Verwendung
Lokale .Variablen: Jede Variable muss vor ihrer Verwendung im Data Dictionary deklariert werden. Bei lokalen Größen muss das Scope im Property-Dialogfenster auf Local gesetzt werden. Der Typ der Variablen kann im Menü Type auf verschiedene FloatingPoint-, Fixed-Point- (fixpt), Integer- und Boolean-Formate eingestellt werden. Eine Sonderstellung nimmt der Datentyp ml ein. Einer Variablen vom Typ ml kann jeder beliebige Datentyp innerhalb von Stateflow und das Ergebnis einer MATLAB-Funktion mit dem mI-Operator (siehe Kap. 12.3,5) zugewiesen werden. Es handelt sich gewissermaßen um einen Platzhalter für beliebige Daten. Der Datentyp ml kann auch für Eingangsdaten von Simulink und Ausgangsdaten nach Sirnulink verwendet werden. Bei Operationen mit mI-Variablen muss die tatsächliche Dimension der Variablen schon bei der Generierung der Stateflow S-Funktion bekannt sein. Ist dies nicht möglich, so kann es zur Laufzeit zu Gräßenkonflikten und Fehlermeldungen kommen. Eine mI-Variable kann nicht als Konstante definiert und nicht bei der Erzeugung von Echtzeit-Code mittels Stateflow-Coder integriert werden. Im Feld Units kann zu Dokumentationszwecken eine Einheit zugeordnet werden; die Vergabe von Einheiten beeinflusst die Abarbeitung eines Charts nicht. Im Fensterbereich Limit Range (Reiter Value Attributes) wird der zulässige Wertebereich der Variablen festgelegt, der auf keinen Fall iiber- bzw. unterschritten werden kann. Bei der Deklaration einer mehrdimensionalen Variablen muss die Größe im Feld Size angegeben werden. Soll die Variable ein Vektor sein, so genügt der Eintrag eines skalaren Wertes im Feld Sizes, der die Länge des Vektors angibt. Die Definition eines mehrdimensionalen Arrays erfordert den Eintra.g eines MATLAB-Vektors im Feld S'izes, wobei jedes Vektorelement die Länge in der zugehörigen Dimension angibt. Eine 3 x 4 Matrix wird demnach durch den Eintra.g [3 4J im Feld Sizes erzeugt. Der erste Index eines Arrays wird im Feld First Index eingestellt (üblicherweise 0 oder 1). Soll eine Variable statt aus dem Data Dictionary aus dem MATLAB-Workspace initialisiert werden, so kann dies im Menü In'itia.lize !rom (Reiter Value Attrib1!tes) ausgewählt werden; zusätzlich muss im Workspace eine Variable desselben Typs mit dem entspre-
418
12 Stateflow
chenden Initialisierungswert angelegt werden. Im Feld Description wird bei Bedarf eine knappe Dokumentation der Variablen eingefügt. Zusätzlich kann im Feld Document Link ein Hyperlink auf eine externe Hilfedatei gesetzt werden. Lokale Events: Lokale Events werden dem Chart entweder im Explorer oder im grafischen Editor von Stateflow im Menü Add/Event hinzugefügt. Durch Aufruf des Shortcut Menüeintrags Pmperties oder durch Verwendung der rechten Seite des Model explorers erhält man ein DialQgfenster zur Konfiguration des Events (Abb. 12.22). Hier wird der Name des Events, evtl. Dokumentation und das Scope eingestellt. Bei Events, die weder Eingänge von, noch Ausgänge zu Simulink sind, muss das Scope zu Loeal gewählt werden.
Ausgangs-Events nach Simulink: Ausgangs-Events nach Simulink werden dazu benutzt, andere Stateflow Char.ts zu aktivieren oder getriggerte Subsysteme in Simulink auszuführen. Wenn als Scope des Events Output to Simulink gewählt wird, erscheint ein zusätzlicher Ausgang am Chart mit dem Namen des Events. In Abb. 12.23 wurde das Event event2 als Ausgang definiert. Bei der Verknüpfung von Subsystemen oder Charts durch Events muss an der Quelle und am Ziel jeweils der gleiche Trigger-Typ eingestellt werden.
~t---~ Pulse
Generator NlItn~·fEß.el~----
~::;:.rL-;;" 'peb~ggel bte<>f:POinl~:'
'H-,I
. . . ~ ."h'iII'h"''"P'"7':~h;"i";p,,. iE':';"" . •. .•• ::J.
r .~!Q!t oi Sloadc'ast ",r..E~~ ~f Broadcast '
"
419
12.1 Elemente von Stateflow
(
.. I.'ngang
'+
Il
~
ausgang!~ Scope
81ne Wave
,
r~
Chart
I---~B
Documeml..H"<;' I
Abb. 12.22: Property-Dialog-Fenster eines Events
'--::-:-:--~
Scope1
Abb. 12.23: ehart mit Ausgangs-Event nach Simulink
Eingangs-Events von Simulink: Zur Deklaration eines Events als Eingang von Simulink wird zunächst ein Event im Explorer oder grafischen Editor angelegt und dann über das Shortcut-Menü Properties das Scope auf Input !rom Simulink eingestellt. Das zum Chart gehörende Simulink-Subsystem erhält dadurch an der Oberseite einen TriggerEingang (Abb. 12.17). Bei mehreren Eingangs-Events ist der Trigger-Eingang vektorwertig; die Zuordnung der Events zu den Elementen des Eingangs erfolgt durch das Feld Port im Pmpterty-Dialog-Fenster. Im Feld Trigger wird die Flanke, auf die hin ein Event erzeugt wird, festgelegt. Zur Auswahl stehen Rising, FaUing, Either und Punction Call. Eine Flanke wird nur dann als Flanke interpretiert, wenn ein Nulldurchgang vorliegt, d.h. wenn das Signal sein Vorzeichen wechselt oder einer der beiden Flankenwerte null ist. Ein Sprung von 1 nach 2 ist keine steigende Flanke im Sinne von Stateflow, wohl aber ein Sprung von ~ 1 nach 1. Der Trigger-Typ Punetion CaU stellt eine Besonderheit dar. Bei flankengetriggerten Eingangs-Events wird das Chart erst zum nächsten Simulationsschritt ausgeführt. Beim Trigger-Typ Funetion CaU wird das Chart sofort, auch in der Mitte eines Simulationsschritts, ausgeführt. Wenn zwei Stateflow Charts über Events vom Typ Punction GaU kommunizieren sollen, so muss sowohl das AusgangsEvent des einen als auch das Eingangs-Event des anderen Charts auf Function CaU gesetzt werden. ViTenn ein Function CaU Event mittels einer Bind Action an einen Zustand gebunden wird, so wird die Kontrolle des zugehörigen Function CaU Subsystems vollständig an diesen Zustand übertragen. Kein anderes Objekt kann das Function CaU Event auslösen und damit das Subsystem aktivieren. Das zugehörige Subsystem ist aktiv, wenn der Zustand, an den das Function GaU Event gebunden ist, aktiv ist, und wird inaktiv, wenn der Zustand verlassen wird.
!
I,
I i
I·
Eingangsdaten von Simulink: Zur Definition eines Eingangssignals von Simulink muss das Scope einer Variablen auf Input fmm Simulink gesetzt werden, so dass am Chart ein Eingangsport angezeigt wird. Im Property-Dialogfenster kann neben allen Einstellungen lokaler Variablen zusätzlich die Eingangsportnummer.zugewiesen werden. Dies gibt die Reihenfolge der Anzeige der Eingänge an. Alle Eingangs- und Ausgangs<;Iaten von und zu Simulink können Matrizen beliebiger Dimension sein. Dadurch ist in Simulink und Stateflow durchgängig die Verwendung matrix-wertiger Signale möglich. Ausgangsdaten nach Simulink: Bei Wahl des Scopes einer Variablen zu Output to Simulink wird automatisch ein Ausgangsport am Chart angefügt. Auch hier sind alle Einstellungen von lokalen Variablen möglich; zusätzlich wird durch das Feld Port die Reihenfolge der Ausgänge festgelegt. Sowohl bei Eingangs- als auch bei Ausgangsdaten zu Simulink steht der Datentyp inherited zur Verfügung, der eine Vererbung des Datentyps bewirkt. Konstante: Ein spezieller Typ einer lokalen Variable ist eine Konstante. Eine Konstante wird durch Einstellung des Scope auf Constant deklariert. Alle Einstellungen von gewöhnlichen Variablen, mit Ausnahme des Feldes Limit Range, sind auch für Konstanten verfügbar. Der Unterschied zwischen lokalen Variablen und Konstanten ist, dass der Wert von Konstanten durch Anweisungen in Action Language nicht modifiziert werden kann. Konstanten können nur vom Data Dictionary initialisiert werden. Parameter: Eine Variable vom Datentyp Pammeter kann während der Abarbeitung des Charts nicht verändert werden. Die Initialisierung eines Parameters erfolgt aus-
12 Statefiow
420
schließlich über den MATLAB-Workspace. Ansonsten sind die Eigenschaften identisch zu denen einer Konstanten. Die wesentlichen Komponenten eines Statefiow Charts sind nun bekannt: grafische Elemente zur Beschreibung des Zustandsautomaten und nichtgrafische Elemente zur Variablendefinition und zur Kommunikation mit der Außenwelt des Char-ts (vornehmlich mit Simulink). Es..ist unerheblich, ob zuerst die grafischen und dann die nichtgrafischen Elemente eingefügt werden, lediglich zur Laufzeit müssen alle benutzten Komponenten zur Verfügung stehen. Das nachfolgende Kap. 12.2 stellt Möglichkeiten zur Hierarchiebildung mithilfe von S1!bchar-ts, S1!per-states und grafischen Funktionen dar. In Kap. 12.3 werden die wichtigsten Komponenten der Action Language, also der Definition von Aktionen, Abfra:ge von Ergebnissen und Manipulation von Variablen behandelt.
12.2
Strukturierung und Hierarchiebildung
Bisher wurden alle grafischen Objekte (Zustände, Transitionen, Labels) in der obersten Hierarchie-Ebene des Char-ts erzeugt. Statefiow erlaubt jedoch verschiedene Arten der Gruppierung und Hierarchiebildung, die zum einen den Zweck der besseren Übersichtlichl<eit verfolgen, zum anderen aber auch neue Funktionalitäten wie etwa paralleler Ablauf von Ausschnitten eines Char-ts zulassen.
12.2.1
12.2 Strukturierung und Hierarchiebildung
421
innerhalb eines S1!per-states wird durch Markierung des S1!per-state und Auswahl von DecompositionjExcl1!sive oder DecompositionjPamllel im Shortcut-Menü verändert. Zum leichteren Verschieben oder Kopieren eines Super-states kann sein Inhalt durch einen Doppelklick gruppiert werden. Die Gruppierung wird durch einen weiteren Doppelklick wieder aufgehoben. Die Verwendung von Super-states wird im Folgenden an leicht verständlichen Beispielen erläutert. Superstates in Exklusiv-Oder-Anordnung. Der Zustandsautomat in Abb. 12.24 zeigt zwei S1!per-states in Exklusiv-Oder-Anordnung (siehe dazu auch Abb. 12.4). Es superslatebsp/Chart
switch_12
Z2
switch_21
Superstates Abb. 12.24: ehart mit zwei Superstates in Exklusiv-Oder Anordnung; superstatebsp.mdl
Die wichtigste Strukturierungsmethode stellt die Einführung von so genannten Superstates dar. Ein Super-state ist das Mutter-Objekt-für beliebig viele weitere Zustände. Er ist genau dann aktiv, wenn er selbst das Ziel einer Transition war oder wenn mindestens eines seiner Kind-Objekte aktiviert wird. Ein Super-state kann nie für sich alleine aktiv sein, es muss immer mindestens eines seiner Kind-Objekte aktiv sein. Er kann, genau wie normale Zustände auch, ein Label tragen, sowie das Ziel und die Quelle von 'Il"a,nsitionen sein. Die Funktionsweise von S1!per-states hängt entscheidend davon ab, ob sie in Exklusiv-Oder- oder in Parallel-Anordnung verwendet werden. Die ExklusivOder-Anordnung kann dann vorteilhaft eingesetzt werden, wenn ein Zustand in mehrere Substates (Unterzustände) aufgeschlüsselt werden soll. Die Parallel-Anordnung'kommt dann zum Einsatz, wenn parallele Abläufe in einem Char-t abgebildet werden sollen. Die Substates eines S1!per-states können weitere S1!bstates enthalten, d.h. eine beliebig tiefe Schachtelung ist möglich. Die Anordnung der Zustände in Exklusiv-Oder- oder Parallel-Anordnung muss nicht für das gesamte Char-t festgelegt werden, vielmehr kann für jeden Superstate die Anordnung der Substates neu festgelegt werden. Ein Superstate wird erzeugt, indem zunächst ein normaler Zustand an die gewünschte Stelle platziert wird und dieser dann durch Ziehen mit der linken Maustaste vergrößert wird. In die, sen vergrößerten Zustand können beliebig viele normale Zustände eingefügt werden. Die Tatsache, ob ein Zustand ein normaler Zustand oder ein S1!per-state ist, entscheidet sich allein aufgrund seiner geometrischen Anordnung im Verhältnis zu den restlichen Zuständen. Die Anordnungsmethode (Exklusiv-Oder bzw. Parallel) der Kind-Objekte
existieren zwei Superstates Z1 und Z2, die beide in die Zustände On und Off unterteilt sind. Bei der ersten Ausführung des Char-ts wird durch die Defa1!lt Transition der Zustand 21 aktiv. Nach der Aktivierung von Z1 entscheidet Statefiow, ob und welches Kind-Objekt aktiviert wird. Durch die Default Transition auf 21. On wird bei jeder Aktivierung von 21 der S1!bstate 21. On standardmäßig ebenfalls aktiviert. Bei Auftreten des Events on_off wechselt 21. On na.ch 21. Off. Tritt daraufhin das Event off _on auf, wechselt der Zustandsautomat wieder zurück nach 21. On. Egal in welchem Substate sich das Char-t gerade befindet (21. On oder 21. Off), bei Auftreten des Events switch_12 wird der Zustand 21 incl. des gerade aktiven Substates verlassen und der Super-state 22 wird aktiv. Nach der Aktivierung von 22 wird nach gültigen Transitionen zu KindObjekten von 22 gesucht. Durch die Default Transition auf Z2. Off wird ,neben 22 auch 22. Off aktiviert. Wenn die Events off_on und on_off auftreten, vollzieht sich der bereits beschriebene Wechsel zwischen Z2. Off und 22. On. Tritt schließlich das Event swi tch_21 auf, so wird wieder Z1 und Z1. On aktiv. Aus diesem Beispiel wird die wesentliche Stärke von Super-states und S'ubstates klar: Verschiedene Zustände eines Automaten müssen nicht durch eine hohe Zahl von Einzelzuständen im Char-t repräsentiert werden, sondern können durch funktionale Zusammenfassung in hierarchischer Struktur durch Super-- und Substates dargestellt werden. Dadurch erhöht sich die Übersichtlichkeit, es lassen sich wieder verwendbare Module bilden (wiederkehrende Super-states) und es la.ssen sich auf einfache Weise Funktiona-
!..
:I, ,I
!!
;;
I
1
i! I I'
i:r
Ili
tl
rr 1'1
tri
~I' ~
I:
"I·
(i
:1 1
['~ I
;
~,
Ilil'
!!.
;'1':-
fJ'
422
12 Stateflow
litäten erzeugen, die sonst nur durch erheblichen Aufwand an Transitionen und Abfragen möglich wären. Es wird weiterhin das Beispiel aus Abb. 12.24 betrachtet. Die Funktion des Zustandsautomaten soll in der. Weise erweitert werden, dass bei einem Wechsel zwischen Zl und Z2 nicht immer die Zustände Zl. On und Z2. Off aktiv werden, sondern der Zustand, der zuletzt aktiv war. Nehmen wir an, vor einem V/echsel von Zl nach Z2 war der Zustand Z1.0ff aktiv. Wenn Zl nach einiger Zeit durch das Event switch_21 wieder aktiv wird, soll nicht der Substai;e Zl. On, wie durch die Default Transition vorgegeben, sondern der zuletzt aktive Zustand Zl. Off aktiviert werden. Diese Funktionalität kann durch Einfügen von History Junctions in die Superstates Zl und Z2 erzielt werden. Abb. 12.25 zeigt das modifizierte Stateflow Chart. History Junctions werden als Kreise
12.2 Strukturierung und EIierarchiebildung
423
superstatebsp2/Charl
Z2
switch_12
superstatehistory/Chart
Abb. 12.26: Chart mit hierarchieübergr'eifenden Transitionen; superstatebsp2. mdL switch_12
Z2
Beachtung von Hierarchiegrenzen zwischen beliebigen Quell- und Zielobjekten bestehen, auch über mehrere Hierarchiestufen hinweg. switch_21
Abb. 12.25: Chart mit zwei Superstates in Exklusiv-Oder Anordnung und History Junctions; superstatehistory.mdL
':i d I
'I
mit einem "EI" in der Mitte dargestellt. Sie werden durch Auswahl des History Junction Tools (Abb. 12.2) und Platzieren mit der linken Maustaste erzeugt. Die History Junction innerhalb eines Superstates bewirkt, dass immer das zuletzt aktive Kind-Objekt aktiviert wird, wenn der Superstate aktiv wird. Bei vorhandener History Junction wird die Default Transition nur bei der ersten Aktivierung des jeweiligen Superstates ausgewertet, bei allen weiteren Aktivierungen greift die lIistory Junction. Sie fügt dem S1!perstate ein Gedächtnis über das zuletzt aktive Kind-Objekt hinzu. Die Quelle und das Ziel einer Transition müssen nicht demselben Mutter-Objekt angehören, d.h. Transitionen über Hierarchie-Ebenen hinweg sind zulässig. Diese werden dann als Sl!pertransitions bezeichnet. Zur Verdeutlichung soll an das Beispiel in Abb. 12.24 angeknüpft werden. Es soll zusätzlich zu den bereits getroffenen Annahmen gefordert werden, dass ein Wechsel von Zl nach Z2 und umgekehrt nur dann erfolgen darf, wenn die jeweiligen Substates Z1. Off bzw. Z2. Off aktiv sind. Diese FOl'derung kann sehr leicht durch hierarchieübergreifende Transitionen erfüllt werden. Der zugehörige Chart ist in Abb. 12.26 dargestellt. Beim Übergang von Zl. Off nach Z2 wird zugleich auch der Superstate Zl verlassen, da keines seiner Kind-Objekte mehr aktiv ist. Gleiches gilt für einen Übergang von Z2. Off nach Z1. 'I\'ansitionen können ohne
Ein weiteres Konstruktionselement im Zusammenhang mit S'uperstates sind so genannte Inner Transitions. Sie verlaufen von einem S1tperstate zu einem seiner Kind-Objekte. Da der Superstate immer aktiv ist, wenn auch eines seiner Kind-Objekte aktiv ist, ist die Inner Transition potentiell auch immer gültig (abhängig von ihrem Label). Dies kann vorteilhaft für If-Then Entscheidungen genutzt werden. Es soll folgende Problemstel'Jung betrachtet werden: Ein Zustandsautomat kann sich in den drei Zuständen Zl, Z2 und Z3 abhängig von den Bedingungen [bedl] und [bed2] befinden. Beim Auftreten des Events update sollen die Bedingungen erneut überprüft und evtl. ein nötiger Zustandswechsel durchgeführt werden. Man könnte nun von jedem der drei Zustände eine Transition zu jedem der verbleibenden Zustände mit entsprechenden Bedingungen verwenden. Eleganter ist das Problem in Abb. 12.27 gelöst. Bei der erstmaligen Ausführung des Charts ist die Default Transition zum Verbindungspunkt gültig. Abhängig von den Bedingungen [bed1] und [bed2] wird einer der Zustände Zl, Z2 oder Z3 aktiviert. Außerdem ist der Superstate Super _Z aktiv, da eines seiner Kind-Objekte aktiv ist. Die Ausführung des Charts werde nun durch ein beliebiges Event angestoßen. Die einzige potentiell gültige Transition ist die Inner Tmns-ition mit dem Label update, da ihr Quellobjekt (der Zustand Super_Z) aktiv ist. Wenn das anstoßende Event update war, ist die Inner Tmnsition zum Verbindungspunkt gültig. Je nachdem, welche der Bedingungen [bed1] und [bed2] erfüllt sind, erfolgt ein Wechsel in den Zustand Zl, Z2 oder Z3, und der vorher aktive Zustand wird verlassen. Superstates in Parallel-Anordnung. Die Parallel-Anordnung von S1!perstates erlaubt die quasi parallele Ausführung von Ausschnitten eines Charts. Parallele Superstates können in der selben Hierarchie-Ebene (d.h. sie besitzen .das gleiche Mut.terObjekt) gleichzeitig aktiv sein .. Die Ausführungsreihenfolge hängt von der Platzierung der Zustände ab. Stateflow arbeitet parallele Zustände von oben nach unten und links nach rechts ab und orientiert sich dabei an der Oberkante der Zustände. Die
12 Statefiow
424
12.2 Strukturierung und Hierarchiebildung
425
paraltellChart
innertransition/Chart On
SupecZ
:' Licht
update
zuendung
[bed==1]
Z1
Z3 Abb. 12.28: Superstates in Parallel-Anordnung,. paraL Lel. mdl
Abb. 12.27: Superstate mit Inner Transition; innertransition.mdl
Ausführungsreihenfolge wird zusätzlich durch eine Zahl in der rechten oberen Ecke der Zustände angezeigt. Als Beispiel für parallele Superstates soll ein Ausschnitt aus der Steuerung eines PKW betrachtet werden. Es existieren zwei sich ausschließende Zustände On und Off, die den Zustand der Zündung des PKW anzeigen. Wenn die Zündung eingeschaltet ist (Zustand On), können gleichzeitig das Licht und die Lüftung in Betrieb gesetzt werden. Das Licht kann entweder an- oder ausgeschaltet sein, die Lüftung ist in die möglichen Betriebszustände Off, Stufe1 und Stufe2 unterteilt. Eine mögliche Realisierung dieses Zustandsautomaten ist in Abb. 12.28 dargestellt. Bei erstmaliger Ausführung des Charts wechselt das System in den Zustand Off. Bei Betätigung des Zündschlüssels (Event zuendung_an) wird der Zustand On aktiv. Dieser ist in die parallelen und damit gleichzeitig al,tiven Substates Licht und Lueftung unterteilt. Beide Zustände sind zwar gleichzeitig aktiv, Licht wird aber vor Lueftung abgearbeitet, was durch die Reihenfolgenummern 1 und 2 in den rechten oberen Ecken angezeigt wird. Der Zustand Licht ist in die sich ausschließenden Substates unterteilt. Standardmäßig wird Licht. Off aktiviert; ein Wechsel zwischen Licht. Off und Licht. On wird durch die Events licht_an und licht_aus ausgelöst. Der zweite Parallel-Zustand Lueftung ist in die Exklusiv-Zustände Off, Stufel und Stufe2 aufgeschlüsselt, welche die jeweilige Gebläsestllfe kennzeichnen. Bei der ersten Aktivierung von On. Lueftung ist die Default Transition zum Verbindungspunkt gültig. Je nachdem, ob die Bedingungen [stufel==l] und [stufe2==1] erfüllt sind, erfolgt ein Wechsel in den Zustand Lueftung.Stufel, Lueftung.Stufe2 oder Lueftung.off. Das Event switch zeigt eine Schalter bewegung des Lüftungsschalters an. Beim Auftreten von swi teh ist die Inner
Transition zum Verbindungspunkt gültig und es erfolgt wiederum ein Zustandswechsel, abhängig von der Gültigkeit der Bedingungen [stufel==l] und [stufe2==1], in die Zustände Lueftung. Stufel, Lueftung. Stufe2 oder Lueftung. Off. Die Einführung der Parallel-Zustände Licht und Lueftung orientiert sich exakt an den tatsächlichen Gegebenheiten, nämlich der Tatsache, dass Licht und Lüftung gleichzeitig aktiv sein können. Es ist keine Transformation der möglichen Zustände in eine spezielle Stateflow-Notation nötig. Diese Vorgehensweise sollte für eine übersiehtliche Modellierung von Zustandsautomaten stets angestrebt werden.
12.2.2
Boxes
Boxes sind grafische Einheiten, die zur visuellen Organisation eines Stateflow Charts verwendet werden. Sie" entsprechen keinem realen Element einer State Jl.1achine. In einer Box können beliebige grafische Elemente zusammengefasst werden. Ausgehend vom Beispiel in Abb. 12.3 sollen die Zustände Zust2 und Zust3 in einer Box zusammengefasst werden. Dazu wird zuerst ein gewöhnlicher Superstate um die betreffenden Zustände gelegt, der dann durch das Shortcut-Menü Type/Box in eine Box umgewandelt wird. Alternativ dazu kann auch direkt das Box Tool der linken Tool-Leiste verwendet werdE!n. Durch das Shortcut-Menü Make Contents/Gmuped bzw. Make Contents/Subcharted kann die Box gruppiert oder in ein Subchart umgewandelt werden. Das modifizierte Chart zeigt Abb. 12.29. Eine Box hat vorwiegend den Zweck der visuellen Zusammenfassung von Objekten. Die einzige Auswirkung einer Box besteht in der Veränderung der Ausführungsreihenfolge von weiteren Boxes oder parallelen Superstates. Insbesondere wird eine Box vOl: allen Boxes und parallelen Zuständen ausgeführt, die weiter unten oder weiter rechts im Chart angeordnet sind. Es gilt demnach dieselbe Ausführungsreihenfolge wie bei Parallel-Zuständen.
426
12 Stateflow boxdiagramm/Chart
427
12.2 Strukturierung und Hierarchiebildung
Kind-Objekt des Charts geworden. Es kann durch Doppelklick mit der linken Maustaste geöffnet werden. Die Navigation zurück in das übergeordnete ChaTt oder zurück zur letzten Ansicht erfolgt mit den Pfeiltasten nach links oder nach oben im grafischen Editor. Wie auch bei SupeTstates können Transitionen über Hierarchiegrenzen hinweg erfolgen. Zu diesem Zweck wird das Beispiel in Abb. 12.26 erweitert. Die Transition mit dem Label swi tch_12 führt nun direkt auf den Zustand Z2. On, und der Superstate Z2 ist in ein Subchart umgewandelt worden. Die hierarchieübergreifenden Transitionen (so genannte Supertransitions) werden als Pfeile in das bzw. aus dem Subchart dargestellt, Nach dem Öffnen des Subcharts werden die Transitionen als Pfeile von außen kommend bzw. nach außen führend dargestellt. Das erweiterte Chart und das geöffnete Subchart ist in den Abb. 12.31 und 12.32 dargestellt.
Box event1 [Bed2]
subchartbsp2/Charl
Abb. 12.29: Statefiow Ghart mit Box; boxdiag'T'amm. mdL
12.2.3
~
Subcharts
Z2
Stateflow erlaubt die beliebig tiefe Schachtelung von Charts, d.h. in einem Chart können weitere Charts erzeugt werden. Diese so genannten Subcharts besitzen die gleichen Eigenschaften wie Superstates (siehe Kap. 12.2.1), nur die visuelle Anordnung ist unterschiedlich. Zur Erzeugung eines Subcharts wird zuerst ein Superstate um die zu gruppierenden Objekte gebildet. Dieser wird anschließend markiert und dann durch das Shortcut-Menü Make ContentsJSubcharted in ein Subchart umgewandelt. Es erhält denselben Namen wie der vorausgegangene Superstate und kann auch wie ein Superstate behandelt werden. Lediglich der Inhalt wird maskiert und ist nicht mehr sichtbar. In Fortführung des Beispiels in Abb. 12.24 soll der Superstate 22 in ein Subchart umgewandelt werden. Das Ergebnis ist in Abb. 12.30 dargestellt. Das Subchart Z2 ist nun zum
switch_21
Abb. 12.31: Zustandsdiagramm mit Subchart und Supertransitions; subcha'rtbsp2.mdL subchartbsp2/ChartlZ2
Z2 subcharibsp/Chart
switch_12
Z2 switch_21
switch_2
Abb. 12.32: Subchart Z2 aus Abb. 12.31 Abb. 12.30: Zustandsdiagramm mit Subchart; subcha'T'tbsp.mdL
Wenn nachträglich eine Transition von außerhalb eines Subcharts zu einem Objekt innerhalb erzeugt werden soll, so kann dies ohne vorherige Aufhebung des Subcha'T'ts durchgeführt werden. Die Transition wird in Richtung Mittelpunkt des Subcha1'ls mit
428
12 Statefiow
der linken Maustaste gezogen, bis ein Strudel erscheint (ein so genanntes "Wurmloch"). Wird die Transition auf den Strudel gezogen, so öffnet sich automatisch die tiefere Ebene des Subcharts, und die Transition kann an ihr Ziel platziert werden. Auf diese Weise lassen sich beliebig viele Chart-Hierarchien durchqueren und durch Transitionen verbinden. Der wesentliche Vorteil von Subcharts im Vergleich zu Superstates ist die Tatsache, dass der Inhalt beim Subchart maskiert wird. Vor allem bei komplexen Zustandsautomaten stößt man dann nicht auf das Problem, die grafischen Objekte immer weiter zu verkleinern, damit noch alles auf einer Bildschirmseite Platz findet bzw. ständiges SerolIen notwendig wird.
12.2.4
12.2 Strukturierung und Hierarchiebildung
Nach der formalen Definition einer Funktion muss sie jetzt noch mit Leben gefüllt werden. Es muss eine Verknüpfung der Argumente zu einem Rückgabewert stattfinden. Eine Funktion kann keine Zustandsgrößen enthalten, so dass die Berechnung des Funktionswerts als Flussdiagramm realisiert werden muss. Als Minimum muss die Funktion eine Default Transition und einen Verbindungspunkt als Abschluss enthalten. Es sind jedoch alle möglichen Flussdiagramm-Konstrukte (z.B. if-Abfragen, for-Schleifen) auch in grafischen F\mktionen zulässig. Abb. 12.33 zeigt die Funktion f 1, deren Rückgabewert aus dem Produkt aller Argumente berechnet wird. Berechnungen werden üblicherweise innerhalb von Transitionsaktionen oder Bedingungsaldionen durchgeführt. Grafische funclionbsp/Chart
Zur Erzeugung einer grafischen Funktion wird zuerst ein Zustand innerhalb des gewünschten Mutter-Objektes angelegt. Dieser wird anschließend durch das ShortcutMenü TypejFunction in eine Funktion umgewandelt. Zur direkten Erzeugung einer Funktion kann auch das Graphical Function Tool der linken Tool-Leiste verwendet werden. Im Label der Funktion muss der Prototyp der F\mktion angegeben werden. Das Label der Funktion kann entweder durch direktes Anklieken oder durch Aufruf des Shortcut Menüs Properties editiert werden. Der Prototyp setzt sich aus einem Rückgabewert, dem F\mktionsnamen und formalen Argumenten der Funktion zusammen. Ein Funktionsprototyp weist folgende Syntax auf: y = f1(a1, a2, a3)
Hier wird eine Funktion f1 mit dem Rückgabewert y und den Argumenten a1, a2 und a3 formal definiert. Evtl. benötigte lokale Variablen sowie der Rückgabewert und die Argumente müssen nun noch im Data Dictionary definiert werden; dort werden auch die Datentypen ausgewählt. Bei der Definition der Datentypen müssen folgende Konventionen beachtet werden: Eine Funktion kann nur einen Rückgabewert besitzen, und der Rückgabewert und alle Argumente dürfen nur Skalare, Vektoren oder zweidimensionale Matrizen sein. Das Scope des Rückgabewerts muss auf Output, das der Argumente auf Input gesetzt werden. Damit die Funktion auf ihre Argumente, Rückgabewerte lind lokalen Variablen zugreifen kann, müssen alle Daten als Kinder der Funktion angelegt werden. Auf alle anderen Variablen hat die Funktion keinen Zugriff.
funcllonbsp/Chart
lunction y = f1 (81 ,82,83)
Grafische Funktionen
Eine grafische Funktion wird durch einen Flussgrafen ohne Zustände definiert. Die Funktion kann anschließend von allen Aktionen (z.B. Transitionsaktion, Entry Action eines Zustands) aufgerufen und das Ergebnis weiter verwendet werden. Die Sichtbarkeit einer grafischen Funktion richtet sich nach ihrem Mutter-Objekt. Grundsätzlich ist die Funktion innerhalb ihres Mutter-Objekts und in allen weiteren Kind-Objekten sichtbar. Es bestehen jedoch zwei Ausnahmen: Wenn in einem Kind-Objekt eine Funktion mit demselben Namen angelegt wird, so ist in diesem Kind-Objekt nur die dort beheimatete Funktion sichtbar. Eine Funktion, die direkt im Chart als Mutter-Objekt angelegt wurde, kann in allen weiteren Charts der State Machine sichtbar gemacht werden, wenn im Menü FilejChart Pmperties der Punkt Export Chart Level Graphical Punctions ausgewählt wird.
429
function
~'~J
y = 11(81.82,83)
Abb. 12.33: Grafische Funktion y
= a,
. a2 . a3
Abb. 12.34: Grafische Punktion als Subchart maskiert
Funktionen können durch die Umwandlung in Subcharts maskiert werden, so dass nur noch der Prototyp, aber nicht mehr der Inhalt sichtbar ist. Abb. 12.34 zeigt diese Möglichkeit anhand der Funktion f 1. Der Aufruf einer grafischen Funktion kann durch eine beliebige Zustandsaktion (z.B. Entry Action), eine Transitionsaktion oder eine Bedingungsaktion erfolgen. Die formalen Parameter müssen beim Aufruf durch Zahlenwerte oder andere bereits definierte Variablen ersetzt werden. Abb. 12.35 zeigt den Aufruf der J:<'unktion f1 durch die Entry Action eines Zustands. Die Variablen e,' m, n und k müssen im Data Dictionary bereits definiert sein. Wenn unter FilejChart Pmperlies die Check-Box Export Chart Level funclionbsp_aufrullChart
lunation y = 11 (al ,a2,a3)
'\;"~;J
ZI enlry: e=ll(m,n,k);
Abb. 12.35: Aufruf der grafischen Funktion J1 durch eine EntTY Action Graphical Functions ausgewählt wurde, können auch grafische F\mktionen aus anderen Charts aufgerufen werden, solange sie sich innerhalb desselben Simulink-lVJodells befinden.
430
12 Stateflow
12.2.5
Truth Tables
Mit Truth Tables lassen sich logische Wahrheitstabellen in Stateflow kompakt realisieren. Dadurch werden unübersichtliche UND / ODER Verknüpfungen vermieden. Truth Tables werden wie grafische Funktionen verwendet und intern auch so realisiert. Sie werden durch Action Language Kommandos aufgerufen und sofort abgearbeitet. Ein Truth Table besteht aus einer Tabelle von Bedingungen (conditions), Entscheidungsergebnissen (decision outcomes) und Aktionen (actions). Am Beispiel in Tab. 12.2 werden die einzelnen Komponenten erklärt. Es handelt sich um einen Quantisierer, der jeweils die nächst kleinere ganze Zahl y seines Eingangs x ausgibt. Zusätzlich existiert eine untere Sättigung bei 0 und eine obere Sättigung bei +5.
'l'lil
12.2 Strukturierung und Hierarchiebildung
431
Table verlassen. Die letzte Spalte in Tab. 12.2 stellt ein Default-Entscheidungsergebnis dar, da es unabhängig von Bedingungen immer zu true ausgewertet wird.
Im Stateflow Chart wird ein Truth Table mit dem 7'ruth Table 1'001 der linken ToolLeiste hinzugefügt. Das Label des Truth Tables enthält den Prototyp der Funktion, z.B. y=f(x), wobei der Name f gleichzeitig der Name ist, unter dem der 'l'ruth Table in Action Language aufgerufen wird. Abb. 12.36 zeigt das Label des Truth Tables. Der Truth
. truthtable y
=f(x) Abb. 12.36: Chart mit Truth Table Y=f(x)
Tab. 12.2: Beispiel eines Truth Tables
":11 1::,'1
:,;',
i
:i "
i''"
Condition D 1 D 2 D 3 D 4 D 5 D 6 x<1 x<2 x<3 x<4 x<5
T T
F T
T
T T T
T T
Action
F F T T T
F
F
F
F
F T T
F F T
Table erscheint im Stateflow Explorer als eigenes Objekt. Für Daten und Events für den Truth Table gelten die gleichen Regeln wie für Super- und Substates. Insbesondere lassen sich lokale Variablen innerhalb des Truth Tables definieren und der Truth Table hat Zugriff auf alle Daten des Charts. Der Inhalt des Truth Tables wird mit dem Tr'uih Table Editor bearbeitet. Dieser wird durch Doppelklick auf das Objekt im Chart geöffnet (Abb. 12.37). Der obere Bereich enthält die Bedingungstabelle (condition table), der
y=O y=1 y=2 y=3 y=4 y=5
Der Truth Table würde in MATLAB-Code folgendermaßen ausgewertet: if ((x< 1) & (x < 2) & (x < 3) & (x < 4) & (x < 5» y = 0;
elseif (-(x<
1)
& (x <
1)
& -(x<
2)
& (x <
1)
& -(x<
2)
& -(x<
2)
& (x <
& (x <
3)
& (x < 5»
4)
y = 1;
elseif (-(x<
3)
& (x <
4)
& (x < 5»
y = 2;
elseif (-(x< y
=
3)
& (x <
4)
& (x < 5»
3;
elseif (-(x< 1) & -(x< 2) & -(x< 3) & -(x< 4) & (x < 5» y = 4;
else y
= 5;
end
Abb. 12.37: Truth Table Editor
Eine in die Condition-Spalte eingetragene Bedingung muss zu true oder false ausgewertet werden. Alle Bedingungen sind voneinander unabhängig. Mögliche Ergebniswerte der Bedingungen in den Entscheidungsspalten D 1 bis D 6 sind true (T), false (F) oder beliebig (-'). Das Entscheidungsergebnis stellt die spaltenweise UND-Verknüpfung der einzelnen Bedingungsergebnisse (Spalten D 1 bis D 6) dar. Jedem Entscheidungsergebnis ist eine Aktion (letzte Zeile in Tab. 12.2) zugeordnet. Das Abtesten der einzelnen Entscheidungsergebnisse erfolgt von links nach rechts. Wenn ein Entscheidungsergebnis zu true ausgewertet wird, wird die zugehörige Aktion sofort ausgeführt und der Truth
untere die Aktionstabelle (action tab te ). In der Spalte Description können in beiden Tabellen Kommentare eingetragen werden. Beide Tabellen können durch weitere Zeilen (zusätzliche Bedingungen bzw. zusätzliche Aktionen), die Bedingungstabelle auch durch weitere Spalten (zusätzliche Entscheidungsergebnisse) mit Hilfe der Schaltflächen der oberen Leiste erweitert werden. Dazu muss die entsprechende Tabelle ausgewählt sein. Der in Stateflow spezifizierte Truth Table aus Tab. 12.2 ist in Abb. 12.38 dargestellt. Der Condition Table in Abb. 12.38 beinhaltet die Bedingungen und Entscheidungsergebnisse
12 Stateflow
432
12.2 Strukturierung Und Hierarchiebildung
433
Das Chart aus Abb. 12.36 wird nun noch so ergänzt, dass der Truth Ta.ble bei jedem Abtastschritt des umgebenden Simulink Modells ausgeführt wird und sein Ergebnis an Simulink ausgibt. Dazu wird die Update Methode des Charts auf continuous eingestellt, ein Ein- und Ausgangssignal zu Simulink mit den Namen in und out im Stateflow Explorer erzeugt und eine Default Transition auf einen Verbindungspunkt geführt. Die Transition wird bei jedem Aufruf des Charts ausgeführt. In der Bedingungsaktion der Transition wird der Truth Table mit dem Eingangssignal in aufgerufen und das Ausgangssignal out gesetzt. Das ergänzte Chart ist in Abb. 12.39 dargestellt. Im Simulink Modell in Abb. 12.40 erzeugt ein Rampensignal von 0 bis 7 den Eingang des Charts. Das Ausgangssignal wird in einem Scope dargestellt. 7~,------~----~------~~
6
Abb. 12.38: Truth Table Editor fürdas Beispiel aus Tab. 12.2; tr-uthtabLe.mdL
[2J Ramp
C[,-~~~
5
4 3
2
Scope
Chart
°r-' o
-in A1lt
_11-..--~--~-~-'
D 1 bis D 6. In den Bedingungen sind üptionale Label, gefolgt von einem Doppelpunkt zulässig (hier LOWER_SAT, UPPER..BAT). Sie beeinflussen die Ausführung nicht. Der Action Table beinhaltet eine Liste von Aktionen. Die Zuordnung von Entscheidungsergebnis (eine der Spalten D 1 bis D 6) zu Aktion erfolgt in der letzten Zeile des Condition Table über die Nummer der zugehörigen Aktion (wie bei D 2 bis D 6) oder über das optional vergebene Label zero (wie bei D 1). Es existieren zwei spezielle Aktionen, die unabhängig von der Abarbeitung der Entscheidungsergebnisse ausgeführt werden: Die Init-Action wird bei Aufruf des Troth Tables vor der Überprüfung der Bedingungen einmalig ausgeführt. Sie wird durch das spezielle Label INIT eingeleitet. Im folgenden Beispiel wird in der Init-Action ein Text im MATLAB Command Window ausgegeben (zum Befehl ml siehe Kap. 12.3.5). INIT: ml.disp('Ausführung Truth Table beginnt»;
Eine Final-Action wird vor Verlassen des Truth Tables einmalig ausgeführt und durch das spezielle Label FINAL eingeleitet. Sowohl Init-Action als auch Final-Action können an beliebiger Stelle der Action Table angeordnet sein.
(Out=f~
truthtable y
=f(x) Abb. 12.39: Chart mit Aufruf des Truth Tables; truthtabLe.mdL
4
2 Zeit
6
[sI
Abb. 12.40: SimuUnk Modell1md Ergebnis zum Truth Table; truthtable.mdl
12.2.6
Embedded MATLAB Functions
Eine Embedded MATLAB Function stellt eine wichtige Schnittstelle zwischen Stateflow und der MATLAB Programmiersprache dar. Diese Möglichkeit besteht auch in Sirnulirik (siehe S. 345). Es lassen sich damit Programmieraufgaben lösen, die einfach durch einen Programmablauf darstellbar sind oder die den Zugriff auf spezielle MATLAB Funktionen benötigen. Eine Embedded MATLAB Function wird über das entsprechende Tool arn linken R.and des Chart-Editors hinzugefügt. Im Label der Funktion wird der Funktionsprototyp wie bei einer grafischen Funktion definiert. Die Funktion erhält genau einen Rückgabewert und beliebig viele Argumente. Alle weiteren Schritte werden im Folgenden am Beispiel einer Minimumbildung erläutert. Die betrachtete Funktionalität soll aus zwei Eingangssignalen das Minimum beider Signale am Ausgang ausgeben. Die Minimumbildung wird als Statefow Chart mittels Embedded MATLAB F'unction reaJisiert. Das Simulink Modell gibt als Testmuster eine Rampe mit Steigung 1 und Startzeitpunkt 0 und eine zweite Rampe mit Steigung 2 und Startzeitpunkt 25 auf die Funktion zur Minimumbildung. Das Simulink Modell und da.s Ergebnis der Minimumbildung ist in Abb. 12.41 dargestellt. Das Stateflow Chart besteht aus der Embedded MATLAB Function, gekennzeichnet durch das Schlüsselwort eM mit dem Funktionsprototyp minimumCxl ,x2) und einem Flussdiagramm zum Aufruf der Funktion. Die Variable out ist ein Ausgang zu Simulink, die Variablen inl und
434
'::'1
12 Stateflow
1
12.3 Action Language
435
i~~
100
"' I'
W ;~~ 'u ~
:1,1
'~ ~
'\i'
~
80
[ZJ-~in1
~_~
in2
Scope
Ramp1
.-I
Ramp2
1
outl~rEil
Chart
~
60
~
12.3
'5 0
40 20 0
'0 :1
gen zu verwenden. Die zeit aufwändige Umsetzung in grafische Funktionen kann somit entfallen.
0
20
40
60
80
100
Zeit[s]
,
~ 1
~
~
1 ] ~
Abb. 12.41: Simulink Modell und Ergebnis der Minimumbildungj emmatLab.mdL
in2 sind Eingänge von Simulink und müssen im Model Explorer entsprechend deklariert werden. Durch Doppelklick auf die Embedded MATLAB Function öffnet sich der Embedded MATLAB Editor zum Bearbeiten der Funktion. Das Stateflow Chart und die Embedded MATLAB Function sind in Abb. 12.42 dargestellt. Die Embedded MATLAB
)
~oUlominlmUm(in1' In2):l \
I
Abb. 12.42: Statefiow ehart und Embedded Matlab Function der Minimumbildung
F'unction wird programmiert wie eine gewöhnliche MATLAB Funktion. Allerdings darf nur ein Rückgabewert vorhanden sein. Bei der Ausführung ergibt sich folgende Besonderheit: Für einen Teil der verfügbaren MATLAB Befehle existiert eine compilierte C-Bibliothek, die auch für Echtzeitanwendungen auf Zielhardware geeignet ist. Wenn ein entsprechender Befehl in der Bibliothek vorhanden ist, wird dieser verwendet. Wenn keine entsprechende Funktion in der Bibliothek vorhanden ist, wird der ursprüngliche MATLAB Befehl im Workspace ausgeführt. In diesem Fall ist nur die Simulation, nicht jedoch die Generierung von Echtzeitcode möglich. Eine Liste aller Funktionen der CBibliothek kann in der Online-Hilfe mit dem Suchbegriff Embedded Matlab Run-Time Funetion Library angezeigt werden, Der Vorteil der Embedded MATLAB F'unction liegt in der Möglichkeit nahezu beliebigen MATLAB Code in Stateflow Charts einzubinden und diesen auch für Echtzeitanwendun-
Action Language
Die Actzon Language stellt Elemente innerhalb von Stateflow zur Verfügung, die zur Durchführung von Vergleichen, zum Aufruf von Funktionen und zum Anstoß von Aktionen benötigt werden. Einige Komponenten wurden bereits verwendet, ohne näher darauf einzugehen. Beispiele hierfür sind Zustands- und Transitionsaktionen, logische Vergleiche und die Zuweisung von Werten'an Variablen. Bei allen Labeln von Zuständen und Transitionen muss die Syntax der Action Language eingehalten werden. Bevor wir auf die verschiedenen Arten von Aktionen näher eingehen, muss beachtet werden, dass einer Reihe von Schlüsselworten eine besondere Bedeutung zukommt. Die in Tab. 12.3 aufgeführten Schlüsselworte können nicht als freie Bezeichnungen (z.B. Variablennamen) verwendet werden. Tab. 12.3: Schlüsselworte der Action Language
Schlüsselwort (Abkürzung)
Bedeutung
change (data_name) chg(data_name) during du entry en entry(state_name) en(state_name) exit ex exit(state_name) ex{state_name) in(state_name)
Erzeugt ein lokales Event, wenn sich der Wert von data_name ändert. Darauf folgende Aktionen werden als During Action eines Zustands ausgeführt. Darauf folgende Aktionen werden als Entry Action eines Zustands ausgeführt. Erzeugt ein lokales Event, wenn der angegebene Zustand aktiviert wird. Darauf folgende Aktionen werden als Exit Action eines Zustands ausgeführt, Erzeugt ein lokales Event, wenn der angegebene Zustand verlassen wird. Bedingung, die als true ausgewertet wird, wenn der Zustand state_name aktiv ist. Darauf folgende Aktionen werden ausgeführt, wenn das Event mit dem Namen event_name auftritt. Sendet das Event event_name an den Zustand state_name (direktes Event-Broadcast'ing) , Aufruf der MATLAB-Funktion funktion mit den Argumenten argl, arg2, ... Zugriff auf die Variable var im MATLAB-Workspace.
on event_name send(event_name,state_nrune) matlab(funktion,argl,arg2 ... ) ml() matlab.var ml.var
12 Stateflow
436
12.3.1
Nmnerische Operatoren
Tab. 12.4 fasst alle zllliiösigen numerischen Operationen in Action Language zusammen.
12.3 Action Language
Tab. 12.6: Unäre Operatoren und Zuweisungsaktionen
Operator
Beschreibung
a Tab. 12.4: Numerische Operationen
!a
-a
Operator Beschreibung a + b a - b a
*b
a / b
a
%%
b
12.3.2
Addition zweier Operanden. Subtraktion zweier Operanden. Multiplikation zweier Operanden. Division zweier Operanden. Restwert Division (Modulus).
Logische Operatoren
Tab. 12.5 fasst alle zulässigen logischen Operationen in Action Language zusammen. Nur wenn im Menü File/Chart Properties der Eintrag Enable C-like bit operations ausgewählt wurde, sind die logischen Operationen auch bitweise definiert. Tab. 12.5: Logische Operatoren
Operator Beschreibung b a b a a != b a > b
a < b a >= b a <= b
&& b &b a /I b
a a
alb a - b
Gleichheit zweier Operanden. Ungleichheit zweier Operanden. Ungleichheit zweier Operanden. Größer-Vergleich zweier Operanden. Kleiner-Vergleich zweier Operanden. Größer-Gleich-Vergleich zweier Operanden. Kleiner-Gleich-Vergleich zweier Operanden. Logisches UND zweier Operanden. Bitweises UND zweier Operanden. Logisches ODER zweier Operanden. Bitweises ODER zweier Operanden. Bitweises XOR zweier Operanden.
437
a++
a-a = expression a := expression a += expression a expression a *= expression a /= expression
Bitweises Komplement von a. Logische NOT Operation. Negativer Wert von a. Variable a um 1 erhöhen. Variable a um 1 erniedrigen. Zuweisung an die Variable a. Zuweisung an die Variable a. Identisch mit der Anweisung a Identisch mit der Anweisung a = Identisch mit der Anweisung a Identisch mit der Anweisung a =
a + expression. a - expression. a * .expression. a / expression.
Typkonversion ,aller Operanden von expression in den Datentyp von a durch, bevor expression tatsächlich ausgewertet wird. Dies kann vor allem bei Fixed-PointVariablen zu unterschiedlichen Ergebnissen, im Vergleich zur Zuweisung mittels =, führen. Bei der Zuweisung mittels = wird die Typkonversion erst nach Auswertung von expression durchgeführt. Durch Nachstellen eines F wird eine Floating-Point Zahl mit einfacher Genauigkeit gekennzeichnet. Dadurch ist eine Speicherplatzeinsparung, vor al-' lem in Echtzeit-Code, möglich. Die folgende Zuweisung kennzeichnet eine GleitkommaZahl mit einfacher Genauigkeit: x = 3.21F;
12.3.4
Datentyp Umwandlungen
Die Umwandlung von Datentypen kann auf zweierlei Weise erfolgen. Bei expliziter Typumwandlung wird der Operator cast verwendet. Die Anweisung cast(3*x, int16);
y
bewirkt, dass der Ausdruck 3*x in den Datentyp int16 (Integer 16 Bit) umgewandelt wird und anschließend der Variablen y zugewiesen wird. Eine Typumwandlung kann auch im MATLAB Stil erfolgen. Die Anweisung y
=
int16(3*x);
ist äquivalent zur vorangegangenen Anweisung. In bei den Fällen können als Datentypen die Ausdrücke double, single, int32, int16, int8, uint32, uint16, uint8 oder boolean verwendet werden.
12.3.3
Unäre Operatoren und Zuweisungsaktionen
In Tab. 12.6 sind die in Action Language möglichen unären Operatoren und Zuweisungsaktionen zusammengefasst. Der Operator : = führt vor der Zuweisung eine
Mit Hilfe des type-Operators wird eine Typumwandlung abhängig vom Datentyp einer anderen Variablen vorgenommen. Die Anweisung x = cast(y,type(z»;
438
'I:'
wandelt die Variable y in den Datentyp der Variablen z um und weist das Ergebnis der Variablen x zu.
12.3.5 '\']
:\'
<.::i :;:1 " .::!:
12 Stateflow
Aufruf von MATLAB-Funktionen und Zugriff auf den Worlcspace
In Action Language-Anweisungen können MATLAB-Funktionen von Stateflow aus aufgerufen werden. Das Ergebnis wird einer Variablen des Data DicUonary zugewiesen. Die Argumente der Funktion können entweder Variablen des MATLAB-Workspace sein oder von Stateflow an die Funktion übergeben werden. Die Übergabe von StateflowVariablen an eine MATLAB-l'\mktion erfolgt analog zur Parameterübergabe im Befehl printf der Programmiersprache C. Wenn die MATLAB-Funktion mit einer Workspace-Variablen als Argument aufgerufen werden soll, muss diese zuerst in MATLAB definiert worden sein. Der Ergebniswert wird immer an eine Variable im Data Dictionary zugewiesen. Abb. 12.43 zeigt den Aufruf der Funktion sin(x) im Zuge einer Bedingungsaktion beim Übergang von Z1 nach Z2. Die Größe x ist eine Variable des Workspace. mlfunclion1/Chart
fZ1
I
[bed==1]{a=ml('sin(x)');} JZ2
12.3 Action Language
Der Zugriff auf Variablen des MATLAB-Workspace wird ebenfalls mit dem mI-Operator realisiert. Auf die Variable x des Workspace wird durch die folgende Action Language Anweisung zugegriffen: mLx
Komplexere Anweisungen können durch wiederholtes Anwenden von ml konstruiert werden. Die Anweisung mI.x
'"~i ::i
Der Aufruf einer MATLAB-Funktion mit Variablen aus Stateflow ist in Abb. 12.44 dargestellt. Die Argumente werden zunächst durch Platzhalter bestimmten Typs ersetzt und beim tatsächlichen Aufruf von Stateflow durch die Zahlenwerte ersetzt. In Abb. 12.44 wird die l'\mktion sin(x) . cos(y) mit den Argumenten d1 und d2 aufgerufen. Die Platz-
=
mI.a + mI.b
* mI.c
innerhalb einer Zustandsaktion oder Transitionsaktion in Action Lang1!age ist identisch zur Anweisung x=a+b*c
direkt am MATLAB-Prompt. Mit dem mI-Operator kann auch auf beliebige Funktionen aus MATLAB zugegriffen, diese mit Workspace- oder Stateflow-Variablen aufgerufen und das Ergebnis an Workspace- oder Stateflow-Variablen zurückgegeben werden. Der Ausdruck mI.x
= ml.sin(ml.y);
weist der Workspace-Variablen x den Sinus der Workspace-Variablen y zu. \i\fenn die Sinus-Funktion mit der Stateflow-Variablen a aufgerufen wird und das Ergebnis wieder in der Workspace-Variablen x gespeichert werden soll, so geschieht dies durch den Aufruf: ml.x
Abb. 12.43: MATLAB-F'unktionsaufruf mit Workspace- Variable
439
mI.sin(a);
Um das Ergebnis von ml.sin(a) an die Stateflow-Variable b zuzuweisen, muss der mI-Operator auf der linken Seite der Zuweisung entfallen. b
=
ml. sin(a);
Alle gezeigten Operationen sind auch mit Matrizen (Arrays) möglich. In Action Langua.ge wird auf Matrix-Elemente mit nachgestellten eckigen Klammern zugegriffen. Um dem Element (1,3) der Workspace-Variablen x den Sinus des Elements (2,5) der StateflowVariablen a zuzuweisen, ist folgende Anweisung nötig:
mlfunction2/Chart
mI.x[l] [3]
.'1
rZ1
Ubed==1]{a=ml('sin(%g)*coS(%g)', d_1,~2);} JZ2
=
mI.sin(a[2] [5]);
Es ist auch möglich Operationen durchzuführen, die auf eine ganze Matrix wirken. Die Inverse der Stateflow-Variablen a wird im folgenden Kommando an die StateflowVariable b zugewiesen. Dabei müssen beide Variablen vorher im Data Dictionary mit entsprechender Dimension definiert worden sein.
"1
b ",
-I'
;:.
ml.inv(a);
Abb. 12.44: MATLAB-Funktionsaufruf mit Amument'Übergabe durch Stateflow
halter entsprechen denen aus der Programmiersprache C. %g und %f stehen für DoubleZahlen, %d und %i für Integer-Zahlen und %8 steht für einen String.
Es sei noch angemerkt, dass der Aufruf selbst erstellter C-Funktionen möglich ist, jedoch hier nicht weiter vertieft werden soll.
12 Statefiow
440
12.3.6
Variablen und Events in Action Language
Beim Zugriff auf Variablen oder Events versucht Stateflow, diese in derselben HierarchieEbene (d.h. innerhalb desselben Mutter-Objekts) wie die aufrufende Aktion zu finden. Anschließend wird die Hierarchie-Ebene darüber untersucht, bis die oberste Ebene erreicht ist. Wenn auf eine Variable eines anderen Mutter-Objekts Zugriff benötigt wird, so muss der völle Pfad dorthin angegeben werden. Eine lokale Variable x innerhalb des Zustands Z1.0pen wird durch die Anweisung Z1.0pen.x referenziert.
12.3 Action Language
von Zl. Al nach Zl. A2. Beim Eintritt in Zl. A2 wird durch die Entry Action das ungerichtete Event e2 ausgelöst, was wiederum einen Zustandswechsel von Z2. Al nach Z2. A2 des zweiten parallelen Zustands verursacht. Genau dies versteht man unter der angesprochenen Synchronisationswirkung. Das Event ist in diesem Fall in allen Zuständen des Charts sichtbar. Will man hingegen erreichen, dass das Event e2 nur innerhalb des gewünschten Empfängerzustands Z2 sichtbar ist, so kann man sich des gerichteten EventBroadcastings bedienen. Abb. 12.46 zeigt das modifizierte ChaTt. Die Entry Action
Arrays werden in Action Language anders als in MATLAB dargestellt. Auf das Array Element (1,3,7) der Variablen matrix wird durch die Anweisung matrix [1] [3] [7] zugegriffen. Grundsätzlich muss jedes Element eines Arrays einzeln angesprochen werden; Matrixoperationen sind in Action Language nicht verfügbar. Eine Ausnahme bildet die so genannte skalare Expansion. Bei der Zuweisung, Multiplikation und Addition können ganze Arrays auf einmal manipuliert werden. Alle Elemente des Arrays matrix werden durch die Anweisung matrix = 10 auf den Wert 10 gesetzt. Zwei Matrizen gleicher Größe können durch die Anweisung matrixl + matrix2 elementweise addiert werden. Schließlich kann die Multiplikation aller Matrixelemente mit einer skalaren Zahl (hier der Zahl 3) durch die Anweisung matrix * 3 durchgeführt werden, ohne dass jedes einzelne Matrixelement einzeln angesprochen werden muss. Bisher war im Zusammenhang mit Events immer vom "Auftreten" eines Events die Rede. In Action Language lcann ein Event aber auch direkt ausgelöst werden. Dazu muss das Event und sein Scope im Data Diciionary definiert werden. Diese Einstellungen legen auch gleichzeitig die Sichtbarkeit des Events fest. Beim Auslösen von Events wird zwischen ungerichtetem und gerichtetem Auslösen (Broadcasting) unterschieden. Ungerichtetes Broadcasting bewirkt, dass das Event bei allen potentiellen Empfängern innerhalb des definierten Scopes sichtbar. ist. Das ungerichtete Broadcasting erfolgt durch Angabe des Namens des Events. Die Methode des Event-Broadcastings wird insbesondere bei der Synchronisation von Parallel-Zuständen angewendet. Das Beispiel in Abb. 12.45 zeigt dazu eine Möglichkeit. Wenn das Event el auftritt, erfolgt ein Wechsel
441
synchroniz8_directed/Chart
Abb. 12.46: Gerichtetes Event-Broadcasting
von Zllöst das Event e2 aus, wobei durch den Aufruf send(e2,Z2) sichergestellt wird, dass e2 nur innerhalb von Z2 sichtbar ist. Das Event e2 wird gewissermaßen direkt an Z2 gesendet. Statt des Befehls send kann das Event auch durch die objektorientierte Notation en: Z2. e2; direkt an Z2 gesendet werden. Zum Abschluss dieses Abschnitts sei noch auf zwei wichtige Konventionen hingewiesen.
synchronize/Chart
(Z2
"::;',
1. Falls das Label einer Transition oder eines Zustands für eine Zeile zu lang ist, so kann es durch das Fortsetzungssysmbol ... am Ende der Zeile in die nächste Zeile umgebrochen werden. 2. Der Variablenname t hat die spezielle Bedeutung der Simulink-Simulationszeit. Die Variable t braucht dabei nicht im Data Dictionary deklariert werden, sie ist generell in allen Objekten eines Charts bekannt, und der Wert der Simulationszeit wird von Simulink an Stateflow vererbt.
12.3.7 A/J/J. 12.45: Ungerichtetes Event-Broadcasting
Temporallogik Operatoren
Temporallogik Operatoren sind boolesche Operatoren, die auf der Basis des wiederholten Auftretens von Events ausgewertet werden. Sie dürfen nur in 'Il'ansitionen mit einem Zustand als Quelle und in Zustandsaktionen auftreten. Das Aufsummieren von Events
442
12 Statefiow
12,4 Anwendungsbeispiel: Getränkeautomat
L143
erfolgt nur, solange der Quellzustand aktiv ist. Bei einem Zustandswechsel wird der interne Event-Zähler zurückgesetzt. Statefiow definiert die Operatoren after, before, at und every.
. betätigt man einen Taster (dargestellt durch das Event auswahl), durch den die Getränkeausgabe erfolgt. Der Zustand On des Getränkeautomaten kann denmach in die Substates Bereit, Orange, Cola, Fanta und Wasser untergliedert werden.
Der after-Operator wird zu true ausgewertet, wenn das Event E mindestens n-mal aufgetreten ist. Die Syntax lautet:
Im Ausgabefach des Automaten befindet sich ein Sensor, der erkennt, ob die ausgewählte Getränkefiasche bereits entnommen wurde. Die Entnahme soll durch das Event entnahme angezeigt werden. Nur wenn die Flasche entnommen wurde, darf eine neue Flasche ausgegeben werden.
after(n, E)
Der after-Operator kann in jede beliebige Bedingung eingebaut werden, aber auch in Zustandsaletionen. Das folgende Label einer DUTing Action eines Zustands bewirkt, dass die Aktion aktion_during dann ausgeführt wird, wenn das Event E mindestens 5-mal aufgetreten ist.
Da kein realer Automat vorhanden ist, werden die Events für schalter, auswahl und entnahme in Simulink durch manuelle Schalter ersetzt. Das ChaTt soll nicht bei jedem Abtastschritt ausgeführt werden, sondern nur bei Auftreten eines der a,ngesprochenen Events. Es soll sich also um ein getriggertes ChaTt handeln.
during: on after(5, E): aktion_during;
Eine Lösung des vorgestellten Problems ist in Abb. 12.47 als Stateflow ChaTt da.rgestellt. Abb. 12.48 zeigt das umgebende Simulink-Modell. Zusätzlich zu den in Abb. 12.47 de-
Der before-Operator ist gewissermaßen das Gegenteil des after-Operators. Der Ausdruck
gelraenileaulomaVSteU9rung
before(n, E)
wird dann zu true ausgewertet, wenn das Event E weniger als n-mal aufgetreten ist. Der at-Operator wird hingegen nur genau ein einziges Mal zu true ausgewertet. Die folgende Anweisung wird zu true ausgewertet, wenn das Event E genau n-mal aufgetreten ist. at(n, E)
schalter
Mit dem every-Operator wird eine Bedingung periodisch zu true ausgewertet. Die Anweisung every(n, E)
wird genau bei jedem n-ten Auftreten des Events E seit der Aktivierung des Quellzustands zu true ausgewertet. Dies entspricht der Funktion des at-Operators, wobei zusätzlich beim n-ten Event der interne Zähler jeweils zurückgesetzt wird.
12.4
Anwendungsbeispiel: Getränkeautomat
In diesem Anwendungsbeispiel wird die Steuerung eines einfachen Getränkeautomaten mit folgender Fllnktionalität entworfen: Der Automat besitzt die zwei Zustände Off und On, die anzeigen, ob er ein- oder ausgeschaltet ist. Bei der Initialisierung soll sich die Steuerung im Zustand Off befinden. Der Wechsel zwischen Off und On soll durch das Tastersignal schalter ausgelöst werden. 'Der Automat stellt die vier Getränke Orangensaft, Cola, Fanta und Wasser zur Verfügung. Die Auswahl erfolgt durch eine Variable wahl, die die vier Getränke Orangensaft bis Wasser in den Zahlenwerten 1 bis 4 codiert. Der Kauf eines Getränks erfolgt in zwei Schritten: Zuerst wählt man die Sorte durch die Variable wahl aus und dann
Abb. 12.47: Statefiow ekart der Steuerung eines Getränkeautomaten; getraenloeautomat. md!
finierten grafischen Elementen sind die in Abb. 12.49 enthaltenen Elemente des Data Dictionary definiert. Die Funktionsweise wird nun noch näher erläutert. Mithilfe der manuellen Schalter werden Flankensignale erzeugt, die von Stateflow als die Events schalter, auswahl und entnahme interpretiert werden. Diese Eingangsevents von Simulink sind im Explorer so definiert worden, dass sie auf eine beliebige Flanke reagieren (TriggeT: Either Edge). Das ChaTl darf nur bei Auftreten eines der Eingangsevents ausgeführt werden. Aus diesem Grund muss die Update Methode auf Inherited gesetzt werden. Die Variable wahl ist eine Eingangsgröße vom Typ Double mit dem Wertebereich 1. bis 4 und wird in Simulink durch eine Konstante an das ChaTt übergeben. Im Dialogfeld ChaTt PTOpeTties ist der Punkt Exect!te ChaTt At Initializat'ion ausgewählt, so dass bei der lnitialisierung ein implizites Event ausgelöst wird und alle gültigen Standardtransitionen ausgeführt werden. Zur animierten Darstellung wird in Simulink eine feste Simulatiol1s-Schrittweite und
12 Stateflow
4Ll4
12.5 Anwendungsbeispiel: Steuerung eines Heizgebläses
12.5
445
Anwendungsbeispiel: Steuerung eines Heizgebläses
Die vorhergehende Anwendung in Kap. 12.4 war ein typischer Fall für die Verwendung von Exklusiv-Zuständen. In diesem Beispiel soll im Rahmen des Entwurfs einer Steuerung eines Heizgebläses der Fall von Parallel-Zuständen untersucht werden.
Entnahme
Wahl
Das Gebläse soll kalte und heiße Luft ausstoßen können. Zum Auflleizen kann ein I-Ieizstab ein- und ausgeschaltet werden. Der Heizstab darf nur dann eingeschaltet werden, wenn auch das Gebläse in Betrieb ist, da sonst ein Schaden am Gerät entstehen kann. Der Heizlüfter besitzt einen Taster für das Gebläse und einen Schalter für den I-Ieizstab. geblaese/Steuerung
2',
Abb. 12.48: Umgebendes SimuZink-Modell der Steuerung des Getränkeautomaten
Abb. 12.50: Stateflow Ghart der Steuerung des Heizgebläses; geb!aese.md!
Abb. 12.49: Inhalt des Data Dictionary
eine Abtastzeit von 0.1 ms gewählt, andernfalls wäre die Simulation zu schnell beendet. Bei der Initialisierung wechselt der Chart in den Zustand Off. Zum Einschalten muss das Event schalter durch den manuellen Schalter ausgelöst werden. Nach dem Wechsel in den Superstate On ist die Standard transition gültig und der Automat befindet sich im Zustand On. Berei t, Die Konstante wahl kann Werte zwischen 1 und 4 annehmen und steuert die Auswahl zwischen den verschiedenen Getränken. Durch das Event auswahl (ausgelöst durch den entsprechenden Schalter in Simulink) wechselt das Chart in den Zustand der ausgewählten Getränkesorte. Dort könnten dann in einem realen Getränkeautomat die entsprechenden Aktionen zur Ausgabe einer Flasche ausgelöst werden. Der Wechsel zurück in den Zustand On. Berei t kann durch die Inner Transition erst nach Auftreten des Events entnahme erfolgen. Dieses Event wird wiederum durch den entsprechenden manuellen Schalter in Simulink ausgelöst, Vom Zustand On. Berei t kann wieder eine neue Getränkeauswahl erfolgen. Zu jedem Zeitpunkt kann der Getränkeautomat über das Event schalter in den Zustand Off versetzt werden. Durch Starten der Simulation und Betätigen der drei Schalter können die Zustandsübergänge im Stateflow Chart verfolgt werden.
Eine mögliche Steuerung des Heizgebläses ist in Abb. 12.50 dargestellt, Die Steuerung ist in zwei Parallel-Zustände aufgeteilt, da Gebläse und Heizstab prinzipiell unabhängig voneinander angesteuert werden. Die Bedingung, dass der Heizstab nur bei eingeschal" tetem Gebläse in Betrieb sein darf, wird über das Event HeaterOff realisiert. Das umgebende Simulink-Modell und der Inhalt des Data Dictionary geht aus den Abb. 12.51 und 12.52 hervor.
Steuerung
Abb. 12.51: Umgebendes Simulink-Modell des Heizgebläses
Das eh art wird nur bei Auftreten der externen Events SwFan und SwHeater ausgeführt; die Update Methode ist auf Inheriled eingestellt. Die beiden Events werden durch ma,nuelle Schalter im Simulink-Modell ausgelöst. In den Chart PropeTties ist der Punkt Execute ChaTt At Initialization ausgewählt, so dass ein implizites Event ausgelöst wird,
446
12 Stateflow
12.6 Übungsaufgaben
447
Die Entry Actions der vier Substates geben jeweils mittels zweier logischer Variablen den Betriebszustand von Gebläse und Heizung an Simulink aus, sie besitzen aber keine Wirkung auf den Ablauf des Zustandsautomaten. Im Simulink-Modell wurde eine feste Abtastzeit von 0.1 ms eingestellt, damit die Simulationsdauer ausreichend hoch wird und die Animation im Stateflow Chart verfolgt werden kann.
Abb. 12.52: Model Explorer der Gebläseste1!er1!ng
welches die beiden Defa1!lt Transitions zur Ausführung bringt. Die geometrische Anordnung ist so gewählt, dass der Zustand Fan vor dem Zustand Heater abgearbeitet wird. Nach der Initialisierung befinden sich beide Zustände in ihren jeweiligen Off-Sltbstates. Bei Betätigung des Schalters On/Off wird das Event SwFan unabhängig von der Schaltrichtung ausgelöst. Dies bewirkt einen Zustandswechsel von Fan. Off nach Fan. On. Der Superstate Heater wechselt dadurch von Heater. Off nach Heater. On, falls der Schalter Heater On/Off in Stellung On ist, d.h. falls die logische Variable heater gleich eins ist. V/enn die Variable heater gleich null ist, wird der Superstate Heater vom Event SwFan nicht berührt. Bei erneuter Schalterbewegung findet ein Wechsel von Fan. On nach Fan. Off statt. In der zugehörigen Transitionsaktion (Abb. 12.50) wird zusätzlich das lokale Event Heateroff ausgelöst, welches einen Zustandswechsel von Heater. On nach Heater. Off bewirkt, falls sich der Zustand Heater im Substate On befand. Die Transition von Heater. On nach Heater. Off ist genau dann gültig, wenn eines der beiden Events SwHeater oder HeaterOff auftritt. Eine Bewegung des Schalters Heater On/Off von Off nach On in Simulink löst das Event SwHeater aus und setzt den Wert der logischen Variablen heater auf true. Dies führt zu einer Transition von Heater. Off nach Heater. On, falls der Zustand Fan. On aktiv ist (siehe Tab. 12.3). Dies entspricht einer Einschaltsperre, die bewirkt, dass der Heizstab nur eingeschaltet werden kann, wenn das Gebläse bereits in Betrieb ist. Wenn die Steuerung im Zustand Heater. On ist, bewirkt die Betätigung des Schalters der Heizung einen Übergang von Heater. On nach Heater. Off oder umgekehrt, je nach Ausgangslage. Betrachten wir nochmals kurz die Synchronisation zwischen den beiden Superstates. Wenn sich beide im Zustand On befinden und das Gebläse aufgrund des Events SwFan einen \i\Techsel von Fan. On nach Fan. Off vollzieht, so wird durch das lokale Event . HeaterOff in der Transitionsaktion auch ein Abschalten der Heizung erzwungen. Da die Variable heater nur von der SchaltersteIlung Heater On/Off abhängt, wechselt bei erneutem Auftreten des Events SwFan sowohl der Superstate Fan als auch Heater in den jeweiligen On-Zustand, wenn sich der Schalter Heater On/Off immer noch in Stellung On befindet. Der Schalter Heater On/Off hat also zwei Funktionen: er belegt den Wert der logischen Variablen heater und löst bei einer Schaltung das Event SwHeater aus.
12.6
Ubungsaufgaben
12.6.1
Mikrowellenherd
Entwerfen Sie die Steuerung eines Mikrowellenherds mit folgender Funktionalität: " Es existiert jeweils ein Schalter zum Öffnen und Schließen der Türe, zum Ein- und Ausschalten und zur Veränderung der Heizleistung. " Es sollen die drei Leistungsstufen Stufel, Stufe2 und Stufe3 berücksichtigt werden. .. Die Tür wird zunächst durch den Türschalter geschlossen. .. Durch den Ein- / Ausschalter wird das Gerät in der gewählten Leistungsstufe in Betrieb gesetzt. Dies darf nur bei geschlossener Tür möglich sein. e Durch Ausschalten wird das Gerät außer Betrieb gesetzt, die Türe bleibt aber noch geschlossen. e Bei Öffnen der Türe während des Betriebs wird das Gerät gleichzeitig abgeschaltet. " Während des Betriebs soll ein Wechsel der Leistungsstufe jederzeit durch Auswahl und Betätigung des Schalters zur Veränderung der Leistungsstufe möglich sein. e Bei erneutem Schließen der Tür soll der zuletzt aktive Zustaud wieder eingenommen werden (Gerät in Betrieb oder Gerät abgeschaltet). Die folgenden Hinweise sollten Sie beim Lösen der· Aufgabe beachten: Das Chart ist eventgesteuert, in den Chad PrQperties muss daher die Update-Methode auf Inherited gesetzt werden. Bei der Initialisierung soll das Chart einmalig ausgeführt werden, so dass alle Stan. dardübergänge ausgewertet werden. Wählen Sie dazu Execute Chwrt At Initialization im Menü Chart Properties. Die Heizstufe wird am besten durch eine Konstante von Simulink an das Chart übergeben. Die benötigten Eingangsevents werden in Simulink am einfachsten durch manuelle Schalter realisiert, wobei der Trigger-Typ der Events auf Either Edge gesetzt ist.
448
12 Statefiow
Machen Sie bei der Realisierung so ausgiebig wie möglich von der Bildung von Superstates und Substates Gebrauch. Dadurch lassen sich viele, ansonsten benötigte logische Abfragen vermeiden.
12.6.2
Zweipunkt-Regelung
Symbolverzeichnis
Gegeben ist das dynamische System gemäß Abb. 12.53. Es soll ein Zweipunkt-Regler
u
1
-11+Tl'S
~
~ _
1
l+T,·s
Randzeichen
Y
Abb. 12.53: Dynamisches System für die Zweipunkt-Regelung
für die Regelgröße y in Stateflow realisiert werden, der die folgenden Anforderungen erfüllt: " Die möglichen Stellgrößen u betra.gen +10 oder O. Die Zeitkonstanten der Regelstrecke betragen Tl = 0.1 und T 2 = l. '" Bei einer Abweichung der Regelgröße y vom Sollwert w von mehr als 10% wird ein Schaltvorgang von 0 auf +10 bzw. von +10 auf 0 durchgeführt.
" Der Regler besitzt einen Zustand blockiert, in dem kein Regelvorgang durchgeführt wird (Stellgröße u = 0) und einen Zustand Freigabe, in dem die geforderte Stellaktivität durchgeführt wird. Die Freigabe der Regelung erfolgt durch eine boolesche Variable, die in Simulink von einem manuellen Schalter verändert wird. .. Um die Belastung des Stellglieds abzuschätzen, wird bei freigegebenem Regler bei jedem lOten Schaltvorgang von u = 0 auf u = +10 die Workspace-Variable zaehler um eins erhöht. Entwerfen Sie ein Stateflow Chart mit der geforderten Funktionalität und den Eingangssignalen freigeben (Freigabe der Regelung), 1-1 (Sollwert) und y (Regelgröße). Beachten Sie, dass das Chart kontinuierlich ausgeführt werden muss. Führen Sie die Simulation nir eine Dauer von 120 s mit einem Sollwert von w = 5 durch und schalten Sie nach t = 60 seine Störgröße z = 2 auf das System. Stellen Sie die Regelgröße y und die Stellgröße u in einem Scope dar und verwenden Sie eine feste Schrittweite von< 10- 3 , um die Schaltvorgänge verfolgen zu können. Überprüfen Sie am Ende der Simulation die Workspace-Variable zaehler.
» So wird Matlab-Programrn-Code gekennzeichnet, » wie er direkt am Matlab-Prompt eingegeben
und ausgegeben wird.
Text- und Schrifthervorhebungen inverse
MATLAB-Befehl
Block
Simulink-Block
V
Variable in Formeln; Variable in MATLAB-Befehlen
[ optional J Optionale Parameter in eckigen Klammern
Allgemeine Vereinbarungen A x
x Im{b.} Re{ i}.}
Matrizen Vektoren (in MATLAB-Formeln nicht fett) Skalare Imaginärteil von . Realteil von .
Symbole Nullstellen in Nullstellen-Polstellen-Verteilung (Befehl pzmap) (I;;::::''TB) Polst ellen in Nullstellen-Polstellen-Verteilung (Befehl pzmap) (~~;;::::TB)
o
x
5(t) 5[I;;J i}.p i}.w
Ai (T
±jw
Dirac-Impuls Einheitsimpuls bei diskreten Systemen Frequenzauflösung (%%~~"i"gTB) Frequenzauflösung (lf;;;;~"i"gTB) reelle Eigenwerte eines Systems (I;~t':,':!TB) komplexe Eigenwerte eines Systems (I;'~~::.JTB) Autokorrelationsfunktion des Ausgangs
450
Symbolverzeichnis <]ixx
<]iXY
c,o(w) c,oR X(s) W w
WA WN Wn Wo
A A Ae ak, bk
Am Ane Ano A a ant
B B Be Ba b
b
C C Ce Co Co c c D D
cl clen(s)
Autokorrelationsfunktion der Zustände Autokorrelationsfunktion (%%~"1.,;"gTB) Kreuzkorrelationsfunktion (!jiJ[,~~~,;"gTB) Phasenwinkel der Frequenzgangfunktion (f;~;;::/TB) Phasenrand (Phasenreserve) (f~~~::!TB) Charakteristisches Polynom einer Übertragungsfunktion (f;;'~::!TB) Frequenz, Frequenzvektor (f;~,~::!TB) Phasen-Durchtrittsfrequenz (f;;,~;"TB) Amplituden~ Durchtrittsfrequenz (f;:,;';,'TB) Nyquist-Frequenz (f;~,~;"TB) natürliche Frequenz = Kennkreisfrequenz (f;;'~::!TB) Kennkreisfrequenz = natürliche Frequenz (f;;'~::!TB) Systemmatrix (Nx x Nx) (f;,1;;::!TB) Systemmatrix der Beobachtbar- bzw. Steuerbarkeitsform (f;;,~;"TB) Systemmatrix des steuerbaren Teilsystems (f;;;;::!TB) Koeffizienten der reellen l:iburierreihe ('liJ[,~'j,,;"gTB) Systemmatrix in Modalform (fj):;,;;~:TB) Teilmatrix der unsteuerbaren Zustände (f):;';;::!TB) Teilmatrix der unbeobachtbaren Zustände (fj):;~;;:;"TB) Systemmatrix (MATLAB- Variable) (f;~;;::!TB) Systemmatrix (MATLAB- Variable) (f;;'~;"TB) Vektor mit den komplexen Frequenzanworten (f;:;,;;::"TB) Eingangsmatrix (Nx x Nu) (f;;';;;/TB) Eingangsmatrix der Beobachtbar- bzw. Steuerbarkeitsform (f;;~~~'TB) Eingangsmatrix des steuerbaren Teilsystems (f;;';';,'TB) Eingangsmatrix des beobachtbaren Teilsystems (f~;;;::!TB) Eingangsvektor (Nx x 1) (f;;;;:::"TB) Eingangsmatrix (MATLAB- Variable) (f;~;;;"TB) Ausgangsmatrix (Ny x Nx) (f;;;;:;"TB) Ausgangsmatrix der Beobachtbar- bzw. Steuerbarkeitsform (f;,~::"TB) Ausgangsmatrix des steuerbaren Teilsystems (f;;':'::!TB) Ausgangsmatrix des beobachtbaren Teilsystems (f;;'~::"TB) Steuerbarkeitsmatrix (Controllability Matrix) (f):;';;:;"TB) Ausgangsvektor bei MISO- und SISO-Systemen (1 X Nx) (fy;'~::"TB) Ausgangsmatrix (MATLAB- Variable) (f):;';';,'TB) Durchschaltmatrix (Ny x Nu) (f;;';;::"TB) Dämpfungsfaktor Durchschaltmatrix (MATLAB- Variable) (f):;,~;"TB) Nennerpolynom einer Übertragungsfunktion (f;;;;;"TB)
Symbolverzeichnis e
eh
Exponentialfunktion Einheit der Freqnenz
451
(f;;~~'TB)
freq
vektorwertige Funktion (°t,'!/:JA"TB) Frequenzgangfunktion (f;;~;';,'TB) Übertragungsfunktion des offenen Regelkreises (f;;~;;::!TB) Amplitudenrand (Amplitudenreserve) (f;;';;::"TB) Frequenzgang-Daten-ModelljFrequency Response Data (f;;~':::!TB) skalare Funktion (°t,'!/:JATB) Frequenzenvektor (f;::,':::!TB)
G(w)
Übertragungsfunktion (f;;,;;;/TB)
h(t) hij
Zeitsignal (f1fb~!~smgTB)
F(x) -F(jw) -Fo(jw) FR FRD
fex)
Übertragungsfunktion vom Systemeingang j znm Systemausgang i (~ß~/:~fTB)
H(jw) Hd(Wk)
H(Z-l) H
Nullstellen-Polstellen-Darstellung vom Systemeingang j zum Systemausgang i (fi):;,;;:;.'TB) zeitkontinuierliches komplexes Spektrum (!jifo~;;,,;"gTB) zeitdiskretes komplexes Spektrum der DFT (!jifo~;;,,;"gTB) Filterübertragnngsfunktion (i1f;~~";,,gTB) zweidimensionale Matrix VOll Übertragungsfunktionen (f;:'~~'TB) zweidimensionale Matrix von Nullstellen-Polstellen-Darstellungen (~;;t~~ITB)
Index für Systemausgang (~;:;';;::!TB) komplexer Operator i = P J ij j
k m mag
Jacobi-Matrix (°t,'t,':inB) Index für Systemeingang (f;;'':::!TB) komplexer Operator j= P Abtastschritt in zeitdiskreter Darstellung Verstärkungsfaktor in Nullstellen-Polstellen-Darstellung
(~):;,'::;"TB)
Ordnung des Zählerpolynoms einer Übertragungsfunktion (f;;,;;::"TB) Anzahl der Nullstellen bei Nullstellen-Polstellen-Darstellung (f;:,~~'TB) Amplitudengang (dreidimensionaler Array) (f;:'';%''TB)
Symbolverzeichnis
452
num(s)
Ordnung des Nennerpolynoms einer Übertragungsfunktion (f;;';';;'TB) Anzahl der Polstellen bei Nullstellen-Polstellen-Darstellung (f;:,':::,'TB) Zählerpolynom einer Übertragungsfunktioll (f;:,':,~'TB)
Nf Ns Nu Nx Ny
Anzahl der Frequenzen eines FRD-Modells (Befehl size) Systemordnung/ Anzahl der Zustände (Befehl size) Anzahl der Systemeingänge (f;:,':::iTB) Anzahl der Systemzustände (~;:,':::iTB) Anzahl der Systemausgänge (~~;''::,'TB)
Ob
Beobachtbarkeitsmatrix (Observabilty Matrix) . (~~~,':::iTB)
[2) AMANN, H.: Gewöhnliche Differentialgleichungen. Walter De Gruyter Verlag, Berlin, 1995.
p
Polstellen in ZPK-Modellen Nullste!1en-Polstellen-Darstellung (f~:,':~'TB) Variable der s- Transformation
[3) BEUCHER, 0.: MATLAB und Simulink lernen. Grundlegende Einführung. Addi-
phase
Phasengang (dreidimensionaler Array) (~';~'::;,'TB)
[4) BODE, H.: MATLAB in der Regelungstechnik. Teubner Verlag, Stuttgart, Leip-
SS s sys
Zustandsdarste!1ung/State-Space (~;:,;'%/TB) Variable der s-Transformation UfI-Modell (~~;''::;,'TB)
T
T'ransformationsmatrix (~;;~~:::TB) Zeitkonstante (~;;:',':::,'TB) Abtastzeit (~f:c~$;n.TB) Abtastzeit (f';.'::,'TB) Übertragungsfunktion/Transfer Function (~~;;'::;,'TB) Toolbox
n
T Ts TF TB
Eingangsvektor (Nu x 1) (~;:,'::;,'TB) Systemeingang bei SIMO- und SISO-Systemen (f~~':::iTB) Eingangssignal (~~;~':,~rB)
w
Frequenzvektor
x
Zustandsvektor (Nx x 1) (f~;''::;,'TB) Anfangswertvektor
Xo
(~:;,'::::TB)
y y
Ausgangsvektor (Ny x 1) (i';,':,~TB) Systemausgang bei MISO- und SISO-Systemen (~~:,':~'TB) Ausgangssignal (~;;''::;,'TB)
ZPK z
Nullstellen-Polstellen-Darstellung/Zero-Pole-Gain (~;'~'::::TB) Nullstellen in ZPK-Modellen Nullstellen-Poistellen-Darstellung (~;'1':%,'TB) Ein-Schritt vorwärts Schiebeoperator der z- Transformation Ein-Schritt rückwärts Schiebeoperator der z- Transformation
Z-l
[1] ABEL, D.: Theorie ereignisdiskreter Systeme. Oldenbourg Verlag, 1998.
son Wesley Verlag, 2000. zig, 1998.
1L
11
Literaturverzeichnis
[5) BJÖRK, A., DAHLQUlST, G.: Numerische Methoden. Oldenbourg Verlag, München, Wien, 1972. [6] BRONSTEIN,1. N., SEMENDJAJEW, K. A.: Taschenbuch der· Mathematik. Verlag Harri Deutsch, Thun und Frankfurt am Main, 25. Auflage, 1991.
[7) CAMACHO, E. F., BORDONS, C.: Model Predictive GontTOI. Springer Verlag, Heidelberg, London, New York, 2000.
[8) CAVALLO, A., SETOLA, R., VASCA, F.: Using Matlab, Simulink and Gontrol System Toolbox. Preutice Hall, Londou, 1996. [9) GILL, P. E., MURRAY, W., WRIGHT, M. H.: Practical Optimization. Academic Press, London, 1981. [10) HÄMMERLlN, G., HOFFMANN, K.-H.: Numerische Mathematik. Springer Verlag, Berlin, Heidelberg, New York, 1994. [11) HALE, J.: Ordinary Differential Equations. Wiley-Interscience, N ew York, 1969. [12J HOFFMANN, J.: MATLAB ~Lnd Simulink: Beispielorientie1"te Einführung in die Simulation dynamischer Systeme. Addison Wesley Verlag, 1998.
[13) HOFFMANN, J., BRUNNER, U.: MATLAB und Tools fürd'ie Simulation dynamischer Systeme. Addison Wesley Verlag, 2002. [14] KAUTSKY, J., NrCHOLS, N. K. Robust Pole AsS'ignrnent in Linear State Feedback. Int. J. Control, no. 41, S. 1129-1155,1985. [15J KIENCKE, U.: Ereignisd'iskrete Systeme - Modellierung und Steuerung verteilteT Systeme. Oldenbourg Verlag, 1997.
454
Literaturverzeichnis
[16J LOCHER, F.: Numerische Mathematik für Informatiker. Springer Verlag, Berlin, Heidelberg, New York, 1993. [17] LUDYK, G.: Theoretische Regelungstechnik 1. Springer Verlag, Berlin, Heidelberg, 1995. [18J LUDYK, G.: Theoretische Regelungstechnik 2. Springer Verlag, Berlin, Heidelberg, 1995. [19] LUTZ, H., WENDT, W.: Taschenbuch der Regelungstechnik. Verlag Harri Deutsch, Thun und Frankfurt am Main, 3. Auflage, 2000.
:1:11 :1
[20] MEYBERG, K., VACHENAUER, P.: Höhere Mathematik 1. Springer Verlag, Berlin, Heidelberg, 2001.
:,:;
[21] MEYBERG, K., VACHENAUER, P.: Höhere Mathematik 2. Springer Verlag, Berlin, Heidelberg, 2001. [22] NOSSEK, J. A.: Netzwerktheorie 1. Vorlesungsskript, TU München, München, o. J. [23] OBERLE, H. J., OPFER, G.: Optimierung mit MATLAB - Einführung in die Theorie und die numerischen Verfahren. Vorlesungsskript, Institut für Angewandte Mathematik, Universität Hamburg, 1999. [24J OHM, J.-R., LÜKE, H.-D.: Signalübertragung. Springer Verlag, Heidelberg, Ber!in, 2002. [25J PAPAGEORGIOU, M.: Optimierung: Statische, dynamische, stochastische Verfahren für die Anwendung. Oldenbourg Verlag, München, 1996.
Literaturverzeichnis
'155
[33] SHAMPINE, L. F., REICHELT, M. W.: The Matlab ODE Suite. SIAM Journal on Scientiflc Gomputing, VoL 18, 1997, pp 1-22. http://www.mathworks.de/access/helpdesk/help/pdf_doc/ otherdocs/ode_suite.pdf [34J STÖCKER, H.: Taschenbuch mathematischer Formeln und modem er VeTfahTen. Verlag Harri Deutsch, Thun und Frankfurt am Main, 3. Auflage, 1995. [35J STOER, J.: Numerische Mathematik 1. Springer Verlag, Heidelberg, 1999. [36J STOER, J., BULIRSCH, R.: Numerische Mathematik 2. Springer Verlag, Heidelberg, 2000, [37] THE MATHWORKS: Control System Toolbox - Using the Control System Toolbox, Version 6, The MathWorks lnc., 2004, Online: usingcontrol.pdf [38J THE MATHWORKS: MATLAB - Creating Graphical User Interfaces, Version 7. The MathWorks lnc., 2004, Online: buildgui. pdf [39J THE MATHWORKS: MATLAB Online-Manuals. The MathWorks lnc., 2004. [40J THE MATHWORKS: MATLAB - Using MATLAB Version 7. The MathWorks lnc., 2004, Online: using_ml.pdf
[41J THE MATHWORKS: Optimization Toolbox - Users Ouide, Version 3. The MathWorks lnc., 2004, Online: optim_tb.pdf
[42] THE MATHWORKS: Signal Processing Toolbox - Users Guide, Version 6. The MathWorks lnc., 2004, Online: signal_tb,pdf
[26J SCHMIDT, G.: Grundlagen der Regelungstechnik. Springer Verlag, Berlin, 1994.
[43J THE MATHWORKS: Using Simulink, Version 6. The Ma.thWorks Irre., 2004, Online: sl_using.pdf
[27J SCHMIDT, G.: Regelungs- und Steuerungstechnik 2. Skriptum zur Vorlesung an der TU München, 1996.
[44J THE MATHWORKS: Writing S-Jilunctions, Version 6. The MathWorks lne., 2004, Online: sfunctions. pdf
[28J SCHRÖDER, D.: Elektrische Antriebe - Grundlagen. Springer Verlag, Heidelberg, Ber!in, 2000.
[45] Voss, H.: Grundlagen der NumeTischen Mathematik. TU Hamburg-Harburg, Arbeitsbereich Mathematik, 2000.
[29J SCHRÖDER, D.: Elektrische Antriebe - Regelung von Antriebssystemen. Springer Verlag, Heidelberg, Berlin, 2001.
[46J ZAUDERER, E.: Partial Differential Equations of Applied Mathematics. Wiley, 1989,
[30J SCHRÖDER, D. (ED.): Intelligent ObseTver and Contml Des'ign fOT Nonlinear . Systems. Springer Verlag, Heidelberg, Berlin, 2000, [31J SCHRÜFER, E.: Signalverarbeitung - Numerische Verarbeitung digitaler Signale. Garl Hanser Verlag, München, 1992. [32J SHAMPINE, L. F.: Numerical Solution of Ordinary Differential Equations. Ghapman & Hall, New York, 1994.
Index , (Transposition, konjugiert-komplexe), 12 " (String), 14, 34 , (Ausgabe freigeben), 8 . (Separator für Strukturen), 14 .' (Transposition), 12 .* ./ .- (elementweise Operatoren), 12 ... (Zeilenumbruch in M-Files), 22 : (Doppelpunkt-Operator), 10, 11 ; (Ausgabe unterdrücken), 8 ~ (Zuweisung), 8 == (gleich), 19 -~ (ungleich), 19 - (logische NEGATION), 19 <, <~ (kleiner, kleiner gleich), 19 >, >= (größer, größer gleich), 19 » (Prompt), 6 0,23 {}, 15, 22 [J, 10, 23 %(Kommentar einzeilig), 22 %% (Kommentar u. Cell-Abschnitt), 22 %% (Prozent in Strings), 36 %{ .. , %} (Kommentar mehrzeilig), 22 &, && (logisches UND), 19, 29 I, 11 (logisches ODER), 19, 29 ! (Betriebssystem-Aufruf), 40 @ (Function Handle), 26 \ (Matrix-Linksdivision), 12, 232, 254 \\ (Backslash in Strings), 35 \n (Zeilenumbruch in Strings), 35 \r (Wagenrücklauf in Strings), 38 \ t (Tabulator in Strings), 36 2D-Grafik,44 3D-Grafik,48 Abbruchbefehle, 20 Ablaufsteuerung, 17 Abs,299 abs,9 Abtastsysteme, 359 Abtasttheorem, .200
Abtastung c2d, d2c, d2d, 127 Downsampling, 198 Halteglied O. Ordnung (ZOH), 124, 125, 127, 363 Halteglied 1. Ordnung (FOH), 124, 125, 127 mit geänderter Abtastzeit, 126 Trapezmethode (Thstin), 124, 125, 127, 219 Upsampling, 198 Abtastzeit, 108, 124, 359 gemischt, 364 Offset, 359, 364 Vererbung, 359 Achsen, 43 Achsenbeschriftung ändern, 46, 61 acker, 169, 173 Action Language, 435 Events,440 Variablen, 440 Adams-Bashforth-Verfahren, 297 after, 442 Aigebraic Constraint, 349 algebraische Schleifen, 330, 348 Align Objects (GUI), 54 all, 19 allmargin, 147, 150 Amplitudengang, 143 Amplitudenrand, 146 Analoge Filter, 211 Anfangswertantwort, 138 Anfangswertproblem, 67 Anfangswertvektor, 385 angle, 9 Ankerkreis, 379 ans, 8 Anwendungsbeispiel Getränkeautomat, 442 Heizgebläse, 445 any, 19
458 append, 121, 123 Approximation, 195 Arbeitspunkt, 374 Arbeitsspeicher , 5, 29, 30 Arithmetische Operationen, 118 Array-Editor, 30 Arrays Cell Arrays, 15, 29 EdiLor, 17 Vektoren und Matrizen, 10 Vorbelegung, 29 Assertion, 347 assignin, 26, 242 at,442 atan, atan2, 9 Atomic Subsystem, 315 Ausführungsreihenfolge, 405, 424 Ausgabe, formatierte, 35 Ausgangsdaten, 419 Ausgangsmatrix, 105, 115 Auslöschung, 182 Autokorrelationsfunktion, 137, 207 automatische Ordnungsreduktion, 154 automatische Umwandlung, 118 A veraging, 202 axis, 43 Backlash, 339 balreal, 155 Band-Limited White Noise, 280 Bandpass, Bandsperre, 212, 213, 222 bandwidth, 137 bar, 44 bartlett, 203 Basic Fitting-Tool, 196 before, 442 Benutzerdialoge, 34 Beobachtbarkeitsform, 158 Transformation auf Stufenform, 158 Beobachtbarkeitsmatrix, 158 Beobachterentwurf, 167, 169, 173, 384 Beobachterfehler, 386, 387 besselap, 218 besself, 211, 218 Betrags-Optimum (BO), 367, 379 Betriebssystem-Aufruf, 40 Biegebalken (Beispiel), 92 Bildschirmausgabe, 33 bilinear, 220
Index
Bilineare Methode, 125, 219 Binary Integer Programmierung, 253 Bind Action, 406, 418 bintprog, 253 Bitwise Operator, 293 blackman, 203 Block Parameters Dialogbox, 269 Block Properties Dialogbox, 271 Block-Kontextmenü, 271 BO, siehe Betrags-Optimum bode, 47, 143, 150, 376 Bode-Diagramm, 143 Boundary Value Problem (BVP), siehe 'Randwertproblem box (Grafik), 49 Box (Stateflow), 425 break, 20 Breakpoint, 22 Broadcasting gerichtet, 440 ungerichtet, 440 Bus Selector, 311 buttap,218 butter, 211 bvp4c, 89 bvpget, bvpset, 90 bvpinit, 89 c2d, 124, 127, 365, 367 Callback (Gur), 54, 56 Callback-Routinen (Simulink), 307 Callback-'fracing, 307 Camera Toolbar, 49 eanon, 157, 161 care, 173 ease, 19 cast, 437 eaxis, 49 cd, 40 ceil,9 cell, 15 Cell Arrays, 15, 19, 29, 38, 57, 101, 104 ,Cell Mode (Editor), 22 . char, 34 Chart,402 grafische Elemente, 404 nicht grafische Elemente, 415 'frigger-Methode, 406, 413 Update-Methode, 413
Index eheblap, eheb2ap, 218 ehebyl, eheby2, 211 Check Dynamic Gap, 347 Check Dynamic Lower Bound, 348 Check Dynamic Range, 347 Check Dynamic Upper Bound, 348 Check Static Gap, 347 Check Static Lower Bound, 348 Check Static Upper Bound, 348 clas,s, 129 eIe, 34 clear, 16, 29, 30 functions, 27 global, 26 elf, 41 Clock, 292 elose, 29, 41 Code-Optimierung, 28 colormap, 48 cond, 181, 182 condeig, 181, 182 condest, 181, 182 Configuration Parameters Dialogbox, 294 eonj, 9 Connective Junction, 410 Constant, 278 constrailled optimization, 242 continue, 20 Continuous-Bibliothek, 329 eontour,48 Control System Toolbox, 99, 374, 378, 384, 398 Control System Toolbox Preferences, 153 conv, 13 copyfile, 40 cos,9 Coulomb & Viscous Friction, 341 eovar, 137 coverage, 28 cpsd,205 cstblocks, 378, 384 ctranspose, 12 etrb, ctrbf, 160, 161 ctrlpref, 152, 153 cumsum, cumprod, 13 curve fitting, 253, 258 d2c, 124, 127 d2d, 126, 127
'159 Dämpfungs-Optimum (DO), 389 damp, 130, 137, 375 dare, 173 Data Cursor, 45· Data Dictionary, 415 Data Statistics-Tool, 197 Data Store Memory, 313 Data Store Read, 313 Data Store Write, 313 Dateiverwaltullg, 40 Datentyp Umwandlung, 437 Datentypen, 6, 9, 19, 34 Datums-Rechner (Beispiel), 52 datenum, 56 datevec, 57 now,57 weekday,56 degain, 130, 137 dde23, 83 ddeget, ddeset, 84 Dead Zone, 341 Dead Zone Dynamic, 341 Debugger, 22 Debugger (Simulink), 305 Debugger (Stateflow), 402 Breakpoint, 407 decic, 87 decimate, 198 Decomposition, 404 Default 'I\'a.nsition, 409, 421 Delclaration von Events, 416 von Variablen, 416 Delay Differential Equation (DDE), 83 delete,40 Demux,310 Derivative, 330 Description, 407, 418 det, 13, 232 Determinante, 232 deval, 70, 85, 90 DFT, siehe Diskrete Fouriertransformation Diagonale Verlmüpfung, siehe Verknüpfung diff, 13 Differential Algebraic Equation (DAE), 80 Differentialgleichung, 67 Event,77 gewöhnliche, 67
Index
'160 History, 83 implizite, 8C mit Totzeiten, 83 numerische Integration, 295 partielle (PDE), 94 nnstetige, 77 Digitale Filter, 213 Design & Analysis Tool, 217 Pre-warping, 220 Visualization Tool, 217 dir, '10 Discontinuities-Bibliothek, 339 Discrete Filter, 362 Discrete' State-Space, 363 Discrete Transfer Function, 363 Discrete Zero-Pole, 363 Discrete-Bibliothek, 361 Discrete- Time Integrator, 362 Diskrete Fouriertransformation (DFT) , 200, 221 Diskretisierungsmethode, 124 foh, 127 Halteglied O. Ordnung (ZOH), 124, 125, 127 Halteglied 1. Ordnung (FOH), 124, 125, 127 Trapezmethode (Tustin), 124, 125, 127, 219 tustin, 127 zoh, 127 disp, 35 dlinmod, 365, 366, 374, 376 dlmread,39 dlqr, 174, 179 DO, siehe Dämpfungs-Optimum doc,7 DocBlock, 348 Document Link (Stateflow), 407, 418 Dokumentation (Stateflow), 407 Doppelhelix (Beispiel), 64 Doppelpunkt-Operator, 10, 11 Dot Product, 291 double, 10, 31 downsampIe, 198 Drehzahlregelung, 381 drmodel, 123, 124 drss, 123, 124 Drucken eines Simulink-Modells, 314 Druckerausgabe, 51, 62
dsort, 133, 137 DSP-Format, 109 Durchschaltmatrix, 105, 115 During Action, 406 echo, 33 Echo-Laufzeit (Beispiel), 208 Eckfrequenz, siehe Grenzfrequenz edit,21 Editor, 21 Cell Mode, 22 Effiziente Programmierung, 29 eig, 13, 132, 137 einfache Genauigkeit, 437 Eingahe und Ausgabe, 33 Eingabedialog, 35 Eingangsdaten, 419 Eingangsmatrix, 105, 115 Einheitsimpuls, 139 Einheitssprung, 140 Einschwingvorgang (Beispiel), 63 elastischer Stoß, 78 elektrische Antriebssysteme, 379 elementweise Operation, 12, 225 ellip,211 ellipap, 218 else, elseif, 19 Embedded MATLAB Function, 345, 433 Embedded MATLAB Run-Time Function Library, 345 Enable,316 Enable (GUI), 54 Enabled Subsystem, 316 end (Ablaufsteuerung), 19 end (Index), 11 Entry Action, 406 eps, 8, 230 erf,9 error, 24 Erstellen von LTI-Modellen (Beispiel), 183 esort, 133, 137 estim, 169, 173, 386 Euler, Polygonzugverfahren nach, 295 eva1,40 evalfr, 142, 150 Event, 77, 401 Ausgang, 419 Eingang, 418 Either,418
Index Falling, 418 Function Call, 418 lokal, 418 Rising,418 every, 442 Excel-Format, 37 exist, 18 exit, 5 Exit Action, 406 Exklusiv-Zustände, 404, 421 exp, 9 explizite Ordnungsreduktion, 155 Exponent, 6 Export (GUI), 57, 60 Export von Daten, 29, 36 Excel,37 Exportieren eines Simulink-Modells, 314 Extrapolation, 195 eye, 11 ezplot,45 Faltung,13 Farben (Grafik), 45, 60 Tabelle (colormap), 48 fclose,37 fdatool, 217 Feder-Masse-Schwinger, 96 feedback, 122, 123 Fehler absolut, 180 relativ, 180 Fehlerfortpflanzung, 182 Fehlerquadratsumme, 254 Fehlersuche, 30 Fensterfunktionen, 202, 204 Design & Analyis Tool, 203 feval, 26 fft, 200 fgetl, fgets, 37 fgoalattain, 247 Fibonacci-Folge (Beispiel), 31 Fig-File, 51, 56 Figure, 29, 41 MATLAB-Funktion generieren, 43, 61 Achsenbeschriftung ändern, 46, 61 Ausschnitt verschieben, 43 Basic Fitting-Tool, 196 Camera Toolbar, 49 Data Cursor, 45
461 Data Statistics-Tool, 197 Handle, 41 Tipps, 60 figure, 41 FileName (GUI), 55 Filter analoge, 211 Design & Analysis Tool, 217 digitale, 213 Korrekturfaktor, 211, 219 Pre-warping, 220 Prototyp-Tiefpässe, 218 Transformationen, 218 Visualization Tool, 217 Filter Designer, 217 fiiter, filtfilt, 214, 215 Final-Action, 432 find, 19 findobj, 56 FIR-Filter, 213 firl, 213 fir2, 214 First Order Hold, 363 Fixed-step-Solver, 295, 300 floor, 9 Flussdiagramm, 402, 413, 428 fminbnd, 237 fmincon, 243 fminimax, 247 fminsearch, 239 fminunc, 239 foh, 124, 127 FOH (First Order Hold), siehe Halteglied 1. Ordnung Font (Grafik), 60 fopen, 37 for, 19 Far-Schleife (Stateflow), 412 format, 31 Formatierung, 36, 39, 61 Fouriertransformation, 200, 221 inverse, 221 fplot,45 fprintf, 38 FRD, siehe Frequenzgang-Daten-Modelle frd, 107 fread, 39 freie Bewegung, 138 freqresp, 142, 150 c
462 freqs, 212 Frequency, 115 Frequency Response Data, siehe Frequenzgang-Daten-Modelle . Frequenzantwort, 142 Frequenzgang-Daten-Modelle, 99, 106 Frequenzraum-Methoden, 100 freqz, 213 Frobenius-Norm einer Matrix, 181 From, 313 From File, 281 From Workspace, 281 fscanf, 37 fsolve, 228, 232, 233 Führungsintegrator, 173, 190, 192, 392 Function, 344 function, 23 Function Handle, 26, 72, 223 Funktionen, 23 Übergabe-Parameter, 23 clear functions, 27 clear global, 26 feval, 26 Function Handle, 26 globale Variablen, 24, 30 Hilfetext, 26 Inline Objects, 27 inputname, 23 Laufzeitoptimierung, 30 lokale Funktionen, 23 lokale Variablen, 24 nargchk,24 nargin, nargout, 23 P-Code, 27 Plotten, 45 Rückgabewerte, 23 rationale in s, 100, 103 in z, 108 statische Variablen (persistent), 24 whos global, 24 fvtool, 217 fwrite, 39 fzero, 228 Gain, 291, 292 Gauß-Glocke (Beispiel), 63 Gauß-Normalverteilung, 9 Gauß-Eliminationsverfahren, 232
Index
Index
gca, 41, 46 gei,41 gensig, 141 Gerade (Beispiel), 31, 65 get, 41, 56 get_param, 273 G leichstrom-N ebenschluss-Maschine, 369 Ankerkreis, 379 Beobachterentwurf, 384 Beobachterfehler, 386 Betrags-Optimum (BO), 379 Drehzahlregelung, 369, 381 Gleichungen, 369 Initialisierung, 370, 393 Kaskadenregelung, 379 Luenberger-Beobachter, 385 ModelIierung (Beispiel), 356 Schätzfehler, 386 Signalflussplan, 369 Simulink-Modell, 371 SS-LTI-Modell, 374 Störgrößen-Beobachter, 387 Stellgrößenbegrenzung, 381 Stromregelung, 369, 379 Stromrichter, 379 Systemeigenschaften, 373 Totzeit des Stromrichters, 379 Widerstandsmoment, 383 Zustandsbeobachter, 384 ZustandsdarstelJung, 374 Zustandsregler mit Zustandsbeobachter, 389 Gleichungssystem, 232 globale Variablen, 24, 30, 57 GNM, siehe Gleichstrom-NebenschlussMaschine goal attainment problem, 247 Goldener Schnitt, 239 Goto, 313 Grafik, 29, 40, 41 2D,44 3D,48 Achsen, 43, 61 Beschriftung, 43, 46, 60 I!rucken, 51, 62 Farben, 48, 60 Perspektive, 49 Plotstil, 44, 60 Polarkoordinaten, 44
Tipps, 60 Grafische Benutzeroberfläche (GUI), 52 Align Objects, 54 Application-lVI-File, 56 Ausführen, 57 Callback, 56 Export-lVI-File, 57, 60 Fig-File (Layout), 56 Funktionalität, 56 Gruppieren, 53 GUIDE-Editor, 52 Handle, 56, 57 Layout, 52 Menu Editor, 57 Object Browser, 53 Objekt-Reihenfolge, 52, 57 Property Inspector, 53 Speichern, 55, 56 Titel,55 grafische Funktion (Stateflow), 428 Gravitationspendel (Beispiel), 325 Grenzfrequenz, 211 Korrekturfaktor, 211, 219 grid, 44 griddata, 196 Griechische Zeichen, 43 GUI, siehe Grafische Benutzeroberfläche guidata, 58 guide, 52 H 2 -Norm, 136 Hoc-Norm, 136 Halteglied O. Ordnung (ZOH), 124, 359, 363 1. Ordnung (FOH), 124, 125 hamming, 203 Handle Datei,37 Figure, 41, 51 Funktion, 26 GUI, 56, 57 Subplot, 41, 46 hann,203 Harmonisches lVIittel (Beispiel), 63 hasdelay, 129 help, helpwin, 7, 26 Heun, Trapezverfahren von, 296 Hierarchiebildung, 420 Hilfe, 7, 26
~
.,
463 History, 83 History Junction, 422 Hit Crossing, 342 Hoch-, TiefsteIlung, 43 Hochpass, 46, 212, 213 hold, 45 Horizontale Verknüpfung, siehe Verknüpfung HTML, 22, 62 Hybride Systeme, 365, 401 Hysterese, 341 i,8 IC,313 If, 318 if, 19, 29 Ir Action Subsystem, 318 If-Abfrage (Stateflow), 413 Hft, 221 IIR-Filter, 215 imag, 9 image, 51 impinvar, 220 implizite F\mktionen, 45 Import von Daten, 29, 36 Excel,37 Import von Grafiken, 51 Import lillizard, 39 Impulsantwort, 139 impulse, 139, 141 imread, 51 Index, 11, 15 logical indexing, 18 inf,8 Init-Action, 432 initial, 138, 141 Initialisierung (GNM), 370 inline, 27, 224 Inline Objects, 27, 224 Inner Transition, 409, 423 Inport, 315, 316, 372 input, 35 Input Point, 398 InputDelay, 110, 111 inputdlg, 57 inputname, 23 Instabilität, numerische, 182 int8, int16, int32, 10 Integrationsalgorithmen, 294
zeitdiskret, 362, 365 Illtegratiollsschrittweite, 74 Integrator, 329, 332 Interaktive Modellanalyse, 151 interp, 199 interpl, 195 Interpolation, 195 inv, 13, 232 inverse Fouriertransformation, 221 ioDe1ay, llO iopzmap, 134, 137 isa, 129 isct, isdt, 129 isempty, 24, 129 isproper, 129 issiso, 129 j,8 Jacobi-Matrix, 76, 234, 236 Java Virtual Machine, 30 JIT-Accelerator, 29 kaIman, kalmd, 176, 179 Kaiman-Filter, 175, 399 erstellen, 176, 399 kaIman, 176, 179 Kaiman-Verstärkung, 176 kalmd, 176, 179 Messrauschen, 399 Prozessrauschen, 399 Rauschsignale, 399 Zustandsbeobachter, 399 Kanonische Zustandsbeschreibungen, 157 Kaskadenregelung, 379 Kettenljnie, 98 Klammern, 6 () runde, 23 [l eckige, 10, 23 {} geschweifte, 15, 22 kleinste Qua.drate, 223, 253 Komma, 8 komplexe Zahlen, 44 Kondition, 181 Beispiel, 193 gute, 181 schlechte, 181 Konditionszahl, 181 konsistenter Anfangswert, 81 Konstante, 419
Index
Index
464
Korrekturfaktor Grenzfrequenz, 211, 219 Korrelation, 207 Kreuzkorrelationsfunktion, 207 Kreuzleistungsdiclltespektrum, 205 Label, 405, 408 Laplace-Bereich, 100 Large-Scale, 233, 239 ß>.'JEl(-Konventionen, 43, 61 Laufzeitoptimierung, 29 Layout (GUI), 52 Leakage-Effekt, 201, 202 least squares, 223,.253 Linksdivision, 12 nichtlinear , 260, 261 nonnegative, 255 Leerzeichen, 10, 30, 36, 41 legend, 43, 61 Leistungsdichtespektrum, 204 length, 16 Linear-quadratisch optimale (LQ-Regelung), 173
Regelung
lineare Programmierung, 250
lineares zeitinvariantes System, 99 Linien, 45, 60 Linksdivision, 12 linmod, 333, 365, 374, 376, 385, 398, 399 linmod2, 334, 374, 376 linprog, 250 linspace, 10 Lint, 28, 30 load, 36 log, log10, 9 Logic and Bit Operations-Bibliothek, 293 logical, 19 logical indexing, 18 Logical Operator, 293 Logische Operatoren, 17 Shortcut, 18, 29 loglog, 44, 60, 144 logspace, 10, 143 lokale Events, 418 lokale Funktionen, 23 lokale Variablen, 24, 417 lookfor, 7 Lookup Table, 342 Lookup Table (2-D), 343 Lookup Table (n-D), 344 Lookup Table Editor, 343
! I
Lookup Tables-Bibliothek, 342 Lorenz Attraktor (Beispiel), 324 lp21p (Filtertransformationen), 218 LQ-optimaler Zustandsregler Rückführmatrix berechnen, 174 Zustandsregler erstellen, 179 lqgreg, 179 lqr,lqrd, lqry, 174, 179 lS,40 lsim, 140, 141 lsqcurvefit, 258 lsqlin, 256 lsqnonlin, 260, 261 lsqnonneg, 255 LTI-Modelle Addition, 118, 119 auswählen, 120 Eigenschaften, 112 abrufen, 113 ändern, 112 allgemein, 114 FRD,115 modellspezifisch, 114, 115 setzen, 112 SS, 115 TF,115 ZPK,115 Erstellen (Beispiel), 183 Inversion, 119 linksseitige Matrix-Division, 119 Multiplikation, 119 rechtsseitige Matrix-Division, 119 spezielle, 123 Subtraktion, 118, 119 verändern, 120 verbinden, 120 verknüpfen, 121 Zufallswertsysteme, 123 LTI-Objekte, 112 LTI-System, 99 LTI System (Simulink), 378 LTI-Viewer (MATLAB), 151 Itiview, 151, 153 Luenberger-Beobachter, 167 M-File, 21, 26, 56 Publish to HTML, 22, 62 M-File (Level-2) S-Function, 346
465 ManualSwitch, 312 margin, 146, 150 Maskierung (Beispiel), 325 Maskierung von Subsystemen, 319 Masse-Matrix, 80 Math Function, 291, 292 Math Operations-Bibliothek, 290 Mathematische Funktionen, 9 Mathematische Verknüpfungen und Operatoren, 290 MATLAB Desktop, 5 Editor, 21 F\mktion, 23, 30, 438 Hilfe, 7 Laufzeitoptimierung, 29 Online-Hilfe, 7 Optimization Toolbox, 223 Profiler, 28 Signal Processing Toolbox, 195 Skript, 21, 30 Starten und Beenden, 5, 30 MATLAB Function, 345 Matrix Gain, 291 Matrix-Riccati-Gleichung, 173 Matrizen, 10 Linksdivision, 12, 232 Transposition, 12 max, 13 Max (GUI), 54 mean, 13 Median, 197 Medium-Scale, 233, 239 Memory, 363 Menu Editor (GUI), 57 mesh,48 meshgrid, 49 Messrauschen, 399 Metafile, 51 MIMO, 99, 105 min, 13 Min (GUI), 54 Minimax-Problem, 247 Minimierung, 237 olme Nebenbedingungen, 237, 239 unter NebenbedingUl1gen, 2'12 MinMax, 299 minreal, 154, 156 Mittelwert, 197
Index
466 Mittelwert (Beispiel), 23-25, 32, 63 mkdir, 40 ml-Datentyp, 417 mI-Operator, 439 mlint, 28, 30 mod, 9 Model, 319
Model Explorer, 277 Model Verification-Bibliothek, 347 Model-Wide Utilities-Bibliothek, 347
modred, 155, 156 more, 33 msgbox, 57 multiobjective optimization problem, 247 Multiple-InputjMultiple-Output, 99, 105 Multiport Switch, 312 Mux, 310 Name (Gur), 55 NaN, 8, 195 nargchk, 24 nargin, nargout, 23 natürliche Norm einer Matrix, 181 Nebenbedingung, 242 Gleichungs-, 242, 244 Ungleichungs-, 242 negative Rückkopplung, 163 Nennerpolynom, 100 Newton-Methode, 239 Nichtlineare Differentialgleichungen (Beispiel), 324 nichtlineare Programmierung, 242 nonnegative least squares, 255 Norm, 136, 256 '.
H2-Norm, 136 Hoo-Norm, 136
einer Matrix Frobenius, 181 na.türliche, 181 spektrale, 181 Unendlich, 181 norm, 136, 137, 256 Normalverteilung, 9 now, 57 Nulls teilen, 102, 115 Nullstellen-Polstellen-Darstellung, 99, 102 N ullstellen-Polstellen-Kürzung, 154 num2str, 35, 57 numerische Instabilität, 182
Beispiel, 193 numerische Integration, 295 nyquist, 148, 150 Nyquist-Diagramm, 148 Object Browser (GUI), 53 obsv, obsvf, 158, 161 ODE, siehe Ordinary Differential Equation (ODE) odeget, odeset, 73, 74 odeplot, odephas2, odephas3, odeprint, 75 odextend, 70 offener Regelkreis, 148 Offset der Abtastzeit, 359, 364 On-Event Action, 406 ones, 11 Online-Hilfe, 7, 269, 345 Operatoren logische, 17,436 numerische, 12, 436 unäre, 436 optimget, 225 Optimierung, 223 MATLAB-Code, 28 ohne Nebenbedingungen, 237 Simulink-Modell, 261 unter Nebenbedingungen, 242 optimization constrained, 242 unconstrained, 237, 239 Optimization Toolbox, 223 optimset, 225 ord2, 124 Ordinary Differential Equa.tion (ODE), 67, 374 Ordnungsreduktion, 154 automatische, 154 explizite, 155 strukturierte, 154 Ortskurve, 148 otherwise, 19 Outport, 315, 316, 372 Output Point, 398
Output State Activity, 407 Output-Funktion, 241 OutputDelay, 110, 111 P-File, 27
Index Pade-Approximation, 111 Papierformat (Grafik), 62 parallel, 122, 123 Parallel-Zustände, 404, 423 Parallele Verlmüpfung, siehe Verknüpfung Parameter, 419 Parameter kurven, 45 Parser, 402 partielle Differentialgleichung (PDE), 94 Path Browser, 40 pathtool, 40 pause, 33 pcode, 27 pcolor, 64 pdepe,95 pdeval,96 Pendel (Beispiel), 70 elastischer Stoß, 78 persistent, 26 Perspektive, 49 Phasengang, 143 Phasenrand, 146 pi, 8 Pixel-Grafik, 51 place, 169, 173, 386 plot, 44, 60 plot3, 48, 60 Plotstil, 44, 60 polar, 44 Polar koordinaten, 44 pole, 132, 137 Polplatzierung, 169, 173 Polstellen, 102, 115 polyfit, 197, 255 Polygonzugverfahren nach Euler, 295 Polynom, 196 Ports & Subsystems-Bibliothek, 315
Position (Gur), 54, 55 Positionsbestimmung (Beispiel), 209 Postscript-Datei, 51, 62 Pre-warping, 220 print, 51, 62 printdlg, 57 Probe, 314 prod, 13 Product, 291, 292 Profiler, 28 Prompt, 6, 22 Property Editor, 42
467 Property Inspector (GUI), 53 Prototyp-Tiefpässe, 218 Prozessrauschen, 399 Publish M-Files to HTML, 22, 62 Pulse Generator, 279
Punkte (Grafik), 45 pwd, 40 pwelch,205 pzmap, 133, 137, 163, 376 quadprog, 248 quadratische Programmierung, 247 quadratisches Gütekriterium, 173 Quantizer, 340
questdlg, 57 quit, 5 Ramp, 279 rand, randn, 11 Random Number, 280
Randwertproblem, 88 Anfangslösung, 89 Multi-Point, 93 singuläres, 91 unbekannte Parameter, 88 rank, 13 Rate Limher, 339 Rate Limiter Dynamic, 339 Rate Transition, 314 rationale Funktion, siehe Funktion
Rauschsignale, 399 real, 9 Rechengenauigkeit (Beispiel), 31 Rechenzeit (Beispiel), 32 Rechenzeitoptimierung, 29 rectwin, 203 Referenzieren von Modellell, 322 reg, 171, 173 Regelkreis, offener, 148 Regelung PT2-Funktion instabil (Beispiel), 190 stabil (Beispiel), 189 Reglerentwurf mittels Polplatzierung, 169 mittels Wurzelortskurve, 162 Reglerkonfigurator (Beispiel), 55 Relational Operator, 294 Relay, 341 rem, 9
468 Repeating Sequence, 280, 286 resample, 199 Resize (GUI), 55 ResponseData, 1.15 return, 20 Riccati, siehe Matrix-Riccati-Gleichung rlocfind, 164, 165 rlocus, 163, 165 rmodel, 123, 124 roots, 132, 137, 230 rotate3d, 49 round, 9 rss, 123, 124 Rückführmatrix L, 169, 173, 386 Rückführvektor/matrix k/K, 162, 169, 173, 174, 390 Rückgabewerte, 23 Riicldwpplung, 122 negative, 163 Runge-Kutta-Verfahren, 296 s-Ebene, 100, 103, 133 5-Function, 346 S-Function Bui/der, 346 S-Function Examples, 350 S-Funktionen,350 Saturation, 339 Saturation Dynamic, 339 Saturierung, 10 save, 36 saveas, 51 Schachtelung, 19 Schätzfehler , 386 Schleifen, 19 Schriftart, -größe (Grafik), 60 Schwingkreis, 97 Scope, 283, 286 floating scope, 284, 303 Signal Selector, 284 Selector, 312, 390 Self Loop TI:ansition, 412 semilogx, semilogy, 44, 60, 1'14 Serielle Verlmüpfung, siehe Verknüpfung series, 122, 123 set, 41, 46, 60 set_param, 273, 307 sfprint, 404 sgrid, 133, 137, 163 SllOrtcut-Leiste (Desktop), 6,16
Index Shortcut-Operator, 18, 29 Sign,299 sign, 9 Signal & Scope Manager, 289 Signal Attributes-Bibliothek, 310 Signal Builder, 282 Signal Generator, 279 Signal Logging, 288 Signal Processing Toolbox, 195 Filter Design & Analysis Tool, 217 Filter Visualization Tool, 217 Signal Processing Tool, 205 Window Design & Analyis Tool, 203 Signal Properties Dialogbox, 272 Signal Routing-Bibliothek, 310 Signal-Kontextmenü, 271 sim, 272 simget, simset, 262, 272, 273 Simplex-Methode, 250 Simulation Anhalten, 272 Bloclcparameter (VersteIlbarkeit), 302 Fehlerbehandlung, 305 Fehlermeld ung, 303 Fehlersuche, 305 Fixed-step-Solver, 295, 300 Initalisierung von Zustandsgrößen, 301 Initialisierung von Blockparametern, 307 Integrationsalgorithmen, 294, 362, 365 Solver, 294 Starten, 272 Unstetigkeitsstellen, 299 Variable-step-Solver, 295, 298 zero crossing detection, 299 zero crossing-Blöcke, 299 Simulation Diagnostics Viewer, 305 Simulationsparameter , 294 Simulink, 211, 261 A btastsysteme, 359 algebraische Schleifen, 330, 348 Bausteinbibliothek, 267 Benutzer-definierb8ore Funktionen, 344 Bestimmung eines Gleichgewichtspunkts, 337 Block Properties Dialogbox, 271
Index Block-Kontextmenü, 271 boole8on, 276, 303 Oallback-Routinen, 307 Oallback-Tracing, 307 Continuous-Bibliothek, 329 Data Import/Export-Register, 300 Datenobjekte, 276, 289 DatentYP
469
Organisation eines Simulink-Modells, 306 Ports & Subsystems-Bibliothek, 315 S-Funktionen, 350 SampIe time colors, 359 Schalter, 312 Signal & Scope Manager, 289 Signal Attributes-Bibliothek, 310 Signal Logging, 288 Signal Properties Dialogbox, 272 Signal Routing-Bibliothek, 310 Signal-Kontextmenü, 271 Signalausgabe, 283 Signalerzeugung, 278 Signalspeicherung, 288 Simulationsparameter , 294 Simulink Oontrol Design, 376 single, 276 Sinks-Bibliothek, 283 Solver-Register, 294 Sources-Bibliothek, 278 Stateflow, 401 Subsysteme, 314, 315 Maskierung, 319 uint,276 User-Defined Functions-Bibliothek, 344 Zeitkontinuierliche Systeme, 329 Simulink Oontrol Design (Simulink), 376 Simulink LTI-Viewer, 398 Simulink-Modell, 371 Editieren, 270 Erstellen, 270 sin, 9
sine, 9, 23 Sine Wave, 280, 286 single, 10 Single-Input/Single-Output, 99, 105 Sinks-Bibliothek, 283 SISO, 99, 105 SISO Design Tool, 153, 166 sisotool, 166 size, 16, 129 skalare Expansion, 440 Skripts, 21 Slider Gain, 291 sminreal, 154, 156 SO, siehe Symmetrisches Optimum Sollwertanpassung, 173, 190, 390
470
.i j
!I
Solver, 69 deval,70 Event Behandlung, 77 ode15i, 69, 86 ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb, 69 odeget, ode set, 73, 74 Optionen, 73 Solver-Register, 294 Sonderzeichen, 36, 43 Sourees-Bibliothek, 278 specgram, 205 Spectrum Viewer, 205 Speicher (RAM), 5, 30 Speicher-Optimierung, 29 '. Speicherelement, 105 Speichern Daten, 36 Excel-Format, 37 Grafische Benutzeroberfläche (GUI), 55,56 Spektralanalyse, 199 Spektralnorm einer Matrix, 181 Spirale (Beispiel), 64 Splines, 195 sprintf, 35, 57 Sprungantwort, 140 sptool, 205, 217 sqrt, 9 square, 221 SS, siehe Zustandsdarstellung ss, 105, 366, 374, 376 SS-LTI-Modell, 374 SS-LTI-Objekt, 398 ss2tf, 218 ssbal, 183 sscanf, 57 Stabilität, natürliche, 182 Stabilität, numerische, 182 Stabilitätsanalyse (Beispiel), 187 . stairs, 44, 60, 359 Standardabweichung, 197 St.andardtransition, 409 State Machine, 401, 402 State-Space, siehe Zustandsdarstellung State-Spaee, 330, 384, 399 Stateflow, 401 Aufruf von MATLAB-Funktionen, 438 Chart,404
Index
Exklusiv-Zustände, 404 Explorer, 402 grafische Elemente, 404 Library, 402 ml-Datentyp, 417 Model Explorer, 415 nichtgrafische Elemente, 415 Parallel-Zustände, 404, 423 Simulationszeit, 441 ,Transition, 407 Zustände, 404 StateName, 115 std, 13 Stellgrößenbegrenzung, 381 stern, 44 Step, 279 step, 140, 141 Steuerbarkeitsform, 158, 160 Transformation auf Stufenform, 160 Steuerbarkeitsmatrix, 160 Störeingriffsmatrix, 387 str2num, 57 String, 14, 15, 27, 34 String (GUI), 54 Stromregelung, 379 Stromrichter, 379 struet, 14 Strukturen, 14, 29, 57 strukturierte Ordnungsreduktion, 154 Strukturierung, 420 Style (GUI), 54 Subchart, 426 subplot, 41 Substate, 420 Subsystem, 315 Subsysteme, 315 Maskierung, 319 Suchintervall, 229 Sum, 290 SUffi, 13 Superstate, 420 Supertransition, 422, 427 surf,48 Switeh,312 switeh, 19 Symmetrisches Optimum (SO), 367, 382 System 2. Ordnung, 124 Dämpfungsfaktor, 124 Kennkreisfrequenz, 124
L171
Index Systemantwort auf beliebiges Eingangssignal, 140 im Frequenzbereich, 142 im Zeitbereich, 138 Systemeigenschaften, 373 Systemmatrix, 105, 115 Tabulator, 6, 36, 57 Tag (GUI), 55, 56 tan,9 Temporallogik Operatoren, 441 after, 442 at,442 before, 442 every, 442 Testsignal, 141 text, 44, 60 textread, 38 textsean, 39 TF, siehe Übertragungsfunktion tf, 47, 100,365-367 tfdata, 367 tie, toe, 28, 32 Tiefpass, 46, 198, 213 Time-Based Linearization, 334, 348 title, 43, 60 To File, 286 To Workspaee, 285 Toleranz, 74 TooltipString (GUI), 55 Totzeit, 148 Stromrichter, 379 Totzeitrand, 148 Transfer Function, siehe Übertragungsfunktion Transfer Funetion, 330 Transition, 407 Bedingung, 408 Bedingungsaktion, 409 Condition, 408 Condition Action, 409 Default, 409 Event, 408 Label,408 Self Loop, 412 Transition Action, 409 Transponierte, 12 Transport Oelay, 331 transpose, 12
Trapezmethode (Tustin), 124, 125, 219 Trapezverfahren von Reun, 296 . triang, 203 Trigger, 317 Trigger-Based Linearization, 334, 348 Trigger-Methode, 406, 413 Triggered Subsystem, 317 Trigonometrie Fun etion , 291 Truth Tables, 430 tust in, 124, 127 Tustin-Approximation, 124, 125, 219 type, 437 Typumwandlung, 437 Typumwandlung (Beispiel), 187 Übergabe-Parameter, 23 Übertragungsfunktion, 99, 100 des geschlossenen Regelkreises, 163 des offenen Regelkreises, 163 uigetfile, uiputfile, 57 uint8, uint16, uint32, 10 Umwandlung, kontinuierliche und diskrete Systeme, 124 unconstrained optimization, 237, 239 Unendlich-Norm einer Matrix, 181 Unit Oelay, 362 Units, 115 Units (GUI), 55, 56 Unstetigkeit, 77 Detektion von, 77 Update Methode Continuous, 413 Discrete, 413 Inherited, 413 upsample, 198 User-Oefined Funetions-Bibliothek, 344 Value (GUI), 55 Variable, 115 Variable Transport Oelay, 331 Variable-step-Solver, 295, 298 Variablen, 8 globale, 24, 30, 57 löschen, 16, 30 Laufzeitoptimierung, 29 lokale, 24 statische, 24 Vektoren, 10 Verbindungspunkt, 410
472 Vererbung der Abtastzeit, 359 Vergleichsoperatoren, 17 Verknüpfen von LTI-Modellen, 121 Verknüpfung Diagonale, 121 Horizontale, 121 Parallele, 122 Serielle, 122 Vertikale, 121 Verzögerte Übertragungsglieder (Beispiel), 185, 186 Verzögerungsglied, 362 Verzweigungen, 19 view,49 Visible (GUI), 55 waitbar,57 Wasserfall-Diagramm, 48 waterfall, 48 weekday,56 weißes Rauschen, 137 which, 8, 30 while, 19, 29 who, whos, 16 global, 24 Widerstandsmoment, 383 wintool, 203 VVorkspace, 8, 16, 25, 30, 37 assignin, 26, 242 Browser, 17 workspace, 17 Wurmloch, 428 Wurzel, 102 Wurzelortskurve, 162 xcorr,207 xlabel, 43, 60 xlsread, xlswrite, 37 xor, 19 XY Graph, 285, 286 ylabel, 43, 60 yulewalk, 216 z-Ebene, 133 z-'II-ansformation, 108 Zählerpolynom, 100 Zahlenformat, 36 Zeichen
Index Griechische, 43 Hoch-, TiefsteIlung, 43 Sonder-, 36, 43, 61 Zeilen umbruch, 10, 35, 38, 61 Zeitdiskrete Systeme, 99, 361 Darstellung, 108 Zeitkontinuierliche Systeme, 99, 329 Zeitverzögerungen, 110 am Ausgang, 110 am Eingang, 110 bei zeitdiskreten Systemen, 111 in LTI-Modellen, 110 Pade-Approximation, 111 zwischen Ein- und Ausgängen, 110 zero, 132, 137 zero crossing detection, 299 zero crossing-Blöcke, 299 Zero-Order Hold, 363 Zero-Pole, 331 Zero-Pole-Gain, siehe Nullstellen-Polstellen-Darstellung zeros, 11, 29 zgrid, 133, 137, 163 Zielfunktion, 223 vektorwertig, 247 zlabel, 43, 60 zoh, 124, 127 ZOH (Zero Order Hold), siehe Halteglied O. Ordnung zoom, 43 zp2ss, 218 ZPK, siehe Nullstellen-Polstellen-Darstellung zpk,103 Zufallswertsysteme, 123 Zustände, 404 Elimination, 154 Label, 405 Zustandsautomat, 401 Zustandsbeobachter, 167, 168, 384, 399 erstellen, 169 Kalman-Filter, 175 Luenberger-Beobachter, 167 Polplatzierung, 173 Rückführmatrix L, 169, 173 Zustandsdarstellung, 99, 105, 374 zeitdiskret, 363 Zustandsrückführung, 167 Zustandsregler, 167, 190, 192
Index erstellen, 171, 399 Führungsintegrator, 173, 190, 192, 392 LQ-optimiert, 399 mit Zustandsbeobachter, 389, 390 Rückführvektor/matrix k/K, 169, 173 Sollwertanpassung, 173, 190 Zustandsübergangsdiagramm, 401, 402 Zustandsvektor, 105 Zuweisung, 8 Zuweisungsalction, 436 Zweipunkt-Regelung (Beispiel), 448
473