MATLAB & Simulink – Eine Einführung Mechatronik 3. Semester 2 CP, 2 SWS Sommersemester 2010 Helmut Scherf Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -1- MATLAB & Simulink – Eine Einführung Allgemeines MATLAB steht für Matrix Laboratory MATLAB ist eine Hochsprache und eine interaktive Umgebung, mit der man rechenintensive Aufgaben schneller als mit herkömmlichen Programmiersprachen wie C, C++ oder Fortran ausführen kann Simulink ist eine MATLAB-Toolbox zur blockschaltbildorientierter Simulation von dynamischen Systemen Weiter Toolboxen für Regelungstechnik, Signalverarbeitung, Statistik, Optimierung, C-Code-Generierung etc. Pfad Workspace Command-Window CommandHistory Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -2- MATLAB & Simulink – Eine Einführung Command Window Dieser Bereich stellt das Kernstück von MATLAB dar. Hier werden alle Eingaben in den Workspace gemacht und die Berechnungen ausgegeben. Der Prompt >> signalisiert die Eingabebereitschaft. >> (40^3 + 3*2e3) / 7 ans = 10000 Jede Eingabe wird mit der Taste ENTER abgeschlossen. Die Regel „Punkt vor Strich“ sowie Klammern gelten wie gewohnt. Große Zahlen werden mit Exponent e (bzw. auch E) eingegeben. Beendet wird MATLAB durch Schließen des Desktops oder durch Eingabe des Befehls quit, exit oder mit der Tastenkombination Strg+q. Ein Semikolon nach der Eingabe unterdrückt die Ausgabe. Mit der Pfeiltaste ↑ können die letzten Befehle wiederholt werden. Command History Hier werden die im Command Window eingegeben Befehle gespeichert und angezeigt. Durch Doppelklicken können die Befehle wiederholt werden, auch lassen sich einzelne oder mehrere Befehle ausschneiden, kopieren oder löschen. Workspace Hier werden alle im Workspace existierenden Variablen, Funktionen etc. mit ihrem Namen, Dimension, Größe in Bytes und dem Datentyp angezeigt. Zusätzlich lassen sich diese Daten speichern und Variablen mittels des Array Editors einfach verändern. Pfad Hier sucht MATLAB nach Unterprogrammen, m-Files etc. Variablen, Vektoren, Matrizen, Polynome a=7 b=[4, 5, 6]; a=[6 4 22]; c=[4; 5; 6] E=[3 a 9]; E(4)=input('Zahl eingeben: ') A=[1 4 5;4 6 8] A(2,1) A(2,:) I=eye(3) pi c=1:.1:2 a*b a.*b b' a*b' a wird als Skalar interpretiert oder 1x1-Matrix Zeilenvektor, Trennung durch Komma oder Leerzeichen Semikolon verhindert Antwort Spaltenvektor, Trennung durch Semikolon MATLAB unterscheidet Groß- und Kleinschreibung E ist der Vektor 3 6 4 22 9; jetzt wird das 4. Element also die 22 ersetzt. A ist eine 2x3-Matrix; Adressierung: Zeile, Spalte Liefert 4 als Ergebnis Liefert 4 6 8; : heißt alle Spalten Liefert 3x3-Einheitsmatix Erzeugt den Vektor [1 1.1 1.2 1.3 ... 2] Zeile*Zeile = nicht definiert Elementweise Multiplikation Transposition -> Spaltenvektor Zeile*Spalte = Skalarprodukt Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -3- MATLAB & Simulink – Eine Einführung a'*b a.*b' Elementweise Zeile*Spalte = geht nicht Spalte*Zeile = dyadisches Produkt (Matrix) clear a b F=ones(2,3) a=exp(-2) A=[1 2 3; 3 4 5;4 5 99] inv(A) det(A) b=0:0.1:5; length(b) [m,n]=size(A) Löscht die Variablen a und b 2x3-Matrix mit Einsen a e 2 A(:,3) A(2,:) whos help fft lookfor fft why i j %Kommentar str='Hallo Welt!' roots([1 3 3 1]) poly ([1 2 3]) conv([1 3 3 1], [1 4]) deconv(...) residue(...) polyval(...) polyadd(...) Matrix A invertieren Determinante berechnen Liefert Vektor 0, 0.1, 0.2, 0.3, … 4.8, 4.9, 5.0 Gibt Länge des Vektors b an m = Anzahl Zeilen, n = Anzahl Spalten Adressierung: Zeile, Spalte 3. Spalte von A, : bedeutet alle Zeilen 2. Zeile von A, alle Spalten zeigt alle Variablen an Liefert Hilfe zu MATLAB-Befehl fft Sucht alle Help-Texte nach dem Begriff fft ab Liefert Universal-Antwort! Imaginäre Einheit Imaginäre Einheit Eingabe von Zeichenketten entspricht Vektor aus Buchstaben ['H' 'a' 'l' ...] Wurzeln eines Polynoms x 3 3x 2 3x 1 bestimmen Erstellt das Polynom mit den angegebenen Wurzeln Multiplikation von zwei Polynomen Polynomdivision Partialbruchzerlegung Auswertung des Polynoms Addition von Polynomen Funktionen Viele MATLAB-Funktionen sind skalare Funktionen und werden elementweise ausgeführt, wenn sie auf Matrizen angewandt werden. s. help elfun (elementare Funktionen) oder s. help specfun (spezielle Funktionen) Kategorie Funktion Beschreibung (gemäß Matlab) Trigonometrisch sin Sine sinh Hyperbolic sine asin Inverse sine cos Cosine cosh Hyperbolic cosine acos Inverse cosine acosh Inverse hyperbolic cosine Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -4- MATLAB & Simulink – Eine Einführung Exponentiell tan tanh atan atanh cot coth acot acoth Tangent Hyperbolic tangent Inverse tangent Inverse hyperbolic tangent Cotangent Hyperbolic cotangent Inverse cotangent Inverse hyperbolic cotangent exp expm1 log log1p log10 log2 Exponential Compute exp(x)-1 accurately Natural logarithm Compute log(1+x) accurately Common (base 10) logarithm Base 2 logarithm and dissect floating point number Square root Real n-th root of real numbers sqrt nthroot Komplex Runden und Rest abs angle complex conj imag real Absolute value Phase angle Construct complex data from real and imaginary parts Complex conjugate Complex imaginary part Complex real part fix Round towards zero floor ceil round mod rem sign Round towards minus infinity Round towards plus infinity Round towards nearest integer Modulus (signed remainder after division) Remainder after division Signum Vektorfunktionen Eine zweite Klasse von MATLAB-Funktionen sind Vektorfunktionen. Sie können mit derselben Syntax sowohl auf Zeilen- als auch auf Spaltenvektoren angewandt werden. Solche Funktionen operieren spaltenweise, wenn sie auf Matrizen angewandt werden. Einige dieser Funktionen sind Funktion Beschreibung (gemäß MATLAB) max Largest component mean Average or mean value median Median value min Smallest component prod Product of elements sort Sort array elements in ascending or descending order Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -5- MATLAB & Simulink – Eine Einführung sortrows std sum trapz cumprod cumsum cumtrapz diff find Sort rows in ascending order Standard deviation Sum of elements Trapezoidal numerical integration Cumulative product of elements Cumulative sum of elements Cumulative trapezoidal numerical integration Difference function and approximate derivative Find indices of nonzero elements Spezielle Konstanten MATLAB besitzt einige Funktionen, die nützliche Konstanten liefern Funktion Beschreibung (gemäß MATLAB) pi 3,14159265 . . . i Imaginäre Einheit 1 ; sollte daher nicht als Zählindex verwendet werden. j Wie i eps Relative Genauigkeit der Fliesskomma-Zahlen 2 52 realmin Kleinste Fliesskomma-Zahl 21022 realmax Größte Fliesskomma-Zahl 21024 Inf Unendlich , 1/0 NaN Not-a-number, 0/0 Lineare Gleichungssysteme 3 x1 2 x2 3 x3 15 1 x1 4 x 2 4 x3 6 2 3 x1 3 15 A x2 b, A 1 4 4 , b 6 x3 2 3 2 5 2 x1 3 x 2 2 x3 5 x1 A A x2 A1 b x3 A=[3 2 3;1 -4 -4;-2 -3 -2] b=[15; -6; -5;] inv(A)*b 1 Matrix A eingeben Spaltenvektor Programmsteuerung MATLAB besitzt für die Programmsteuerung for-, while-, if- und switchcase-Konstrukte. Diese Elemente der MATLAB -Programmiersprache kann man nicht nur in m-Files sondern auch direkt im Befehlsfenster eingeben. If-Anweisung Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -6- MATLAB & Simulink – Eine Einführung e = exp(1); if 2^e > e^2 disp('2^e ist größer') else disp('e^2 ist größer') end Logischer Ausdruck For-Schleife Berechnung der Summe der natürlichen Zahlen von 1 bis 100000. N=1:100000; Vektor generieren SummeN=0; tic Start a stopwatch timer for k=1:length(N) SummeN=SummeN+N(k); end toc Read the stopwatch timer tic, sum(N),toc Beachte: Die Performance ist sehr viel schlechter als mit einem geeigneten MATLAB-Befehl! Unterprogramme, m-Files Mit MATLAB lassen sich eigene Funktionen schreiben, es können Parameter übergeben werden. Beachte: Die Variablen in einer Funktion sind lokal. Mit global können die Variablen global definiert werden. Berechnung der Summe aller Matrixelemente: MATLAB-Editor aufrufen über File NewM-File Funktion schreiben Abspeichern unter Funktionsname.m z.B. SummevonA.m Damit die Funktion gefunden und ausgeführt werden kann, muss der Pfad auf das Verzeichnis gesetzt werden, wo die Funktion abgespeichert ist. %Diese Funktion berechnet Kommentar %die Summe aller Matrixelemente einer Matrix Eingabewert ist die function summe=SummevonA(A) Matrix A Rückgabewert ist summe Unter SummevonA.m abspeichern! [m,n]=size(A) Dimension feststellen summe=0; for zeile=1:m Funktion for spalte=1:n summe=summe+A(zeile,spalte); end; end; Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -7- MATLAB & Simulink – Eine Einführung A=[3 2 3;1 -4 -4;-2 -3 -2] SummevonA(A) Matrix eingeben Aufruf der Funktion vom Command-Window Hinweis: Eleganter und schneller geht es natürlich mit sum(sum(A))! Es können auch mehrere Variable zurückgegeben werden: function [summe,differenz]=plusundminus(a,b) summe=a+b; differenz=a-b; Grafik MATLAB besitzt sehr leistungsstarke Grafikfähigkeiten. 2D-Plots x=linspace(2,57.9,100) Vektor generieren subplot(3,2,1) Liefert 3x2-Matrix, 1. Bild plot(x,sin(x)) Plot-Befehl, x und y-Vektoren müssen gleiche Länge haben; grid Gitter xlabel('x') Achsenbeschriftung ylabel('sin x') Achsenbeschriftung axis([0 50 -2 2]) Achsenskalierung text(10,1.5,'Text bei 10, 1.5') Text an Position einfügen subplot(3,2,3) Liefert 3x2-Matrix, 3. Bild plot(x,sqrt(x)) grid xlabel('x') ylabel('Wurzel x') axis([0 50 0 10]) subplot(3,2,5) plot(x,sin(x).*sqrt(x)) grid xlabel('x') ylabel('sin x*sqrt(x)') axis([0 50 -10 10]) subplot(3,2,2) semilogx(x,sqrt(x)) grid xlabel('x logarithmisch') ylabel('Wurzel x') subplot(3,2,4) semilogy(x,sqrt(x)) grid xlabel('x linear') ylabel('Wurzel x logarithmisch') subplot(3,2,6) loglog(x,sqrt(x)) grid xlabel('x logarithmisch') Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -8- MATLAB & Simulink – Eine Einführung ylabel('Wurzel x logarithmisch') Die Plots lassen sich ganz leicht in Word oder Powerpoint integrieren. Schritte: 1. Im Plot-Fenster unter Edit die Copy-Options einstellen 2. 3. 4. 5. 6. Im Plot-Fenster unter Edit ->Copy Figure anklicken; Powerpoint-Folie öffnen und ctrl+v (einfügen) Zeichnen->Gruppierung aufheben: Umwandlung in Powerpoint-Objekt Schritt 5 ggf. mehrfach durchführen 3D-Plots 2 2 Beispiel: Plotten der Funktion z x e x y im Bereich 2 x 2, 2 y 2 x=-2:.1:2; x-Vektor 1x41 Werte y=-2:.1:2; y-Vektor 1x41 Werte [X,Y] = meshgrid(x,y); Liefert 3D-Array X und Y: 41x41 Werte Z = X .* exp(-X.^2 - Y.^2); 41x41 Werte surf(X,Y,Z) 3D-Plotbefehl, s. auch mesh etc. xlabel('x') Achsenbeschriftung ylabel('y') zlabel('z=x*exp(-x^2-y^2)') Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -9- MATLAB & Simulink – Eine Einführung 2 2 z=x*exp(-x -y ) 0.5 0 -0.5 2 1 2 1 0 0 -1 y -1 -2 -2 x Differenzialgleichungen dy y e t 6 cos(7 t ), y (0) 3 dt Funktion schreiben, die die rechte Seite der Dgl. enthält. Geeignetes Integrationsverfahren wählen, hier ode45 Beispiel: function dy = rechteSeite(t,y) dy = -y-exp(-t)*6*cos(7*t); SimZeit = [0,10]; y0 = -3; [t,y] = ode45(@rechteSeite,SimZeit,y0); plot(t,y,'-'), grid, xlabel t, ylabel y(t) Abspeichern unter rechteSeite.m Simulationszeit Anfangsbedingung @rechteSeite Zeiger auf Funktion, die die Dgl. enthält Plot Symbolisches Rechnen Mit der Symbolic Math Toolbox kann man symbolische Variablen definieren, Differenzieren, Integrieren, symbolische Ausdrücke umformen, Gleichungssysteme lösen, Differenzialgleichungen lösen. Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -10- MATLAB & Simulink – Eine Einführung Viele Funktionen in Symbolic Math Toolbox haben dieselben Namen wie ihre numerischen Gegenstücke. MATLAB wählt diejenige aus, welche dem Typ der Eingabeparameter entspricht. Mit den Befehlen help eig bzw. help sym/eig kann man Hilfe für die numerische bzw. symbolische Eigenwertberechnung anzeigen. Differenzieren syms x y diff(sqrt(5*x^2 7*x + 4)) pretty(ans) symbolische Variablen definieren Differenzieren; wenn nichts angegeben wird nach x, sonst nach Variable, die x am nächsten steht. Kosmetik Integrieren MATLAB kann bestimmte Integrale sowie Stammfunktionen berechnen unter der Voraussetzung, dass sie existieren! syms a b t x y z symbolische Variablen definieren int(sin(a*t + b)) Stammfunktion, t ist Integrationsvariable int(sin(a*t + b),t) Oder so int(x/(x^2+1)) Stammfunktion, x ist Integrationsvariable f=(2*x^21)/(x+1)^2/(x+3); pretty(f) int(f,x,0,1) Bestimmtes Integral zwischen 0 und 1 syms a b int(exp( at a*t)*sin(b*t),0,inf) e sin( b t ) dt , existiert nur für a 0 , hier Protest 0 syms a b positive int(exp(a*t)*sin(b*t),0,inf) res = simplify(ans) Daher hier Einschränkung So geht's! Ausdruck vereinfachen, s. help simple Substituieren Die Funktion subs erlaubt eine Variable in symbolischen Ausdrücken durch andere Ausdrücke zu ersetzen, insbesondere auch durch Zahlwerte. syms a b f = a+b; Symbolische Variable subs(f,a,4) In f wird a durch 4 ersetzt subs(f,[a b],[4 -4]) Algebraische Gleichungen, Gleichungssysteme Der Befehl solve(s) versucht die Nullstelle des symbolischen Ausdruck s zu finden. syms x solve('3*x + 4 = 17') f = '5^(x-1) = 10'; solve (f) solve('tan(2*x) = sin(x)') Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -11- MATLAB & Simulink – Eine Einführung Wenn Zahlen mit Dezimalpunkt eingegeben werden (z.B. 1.2 statt 6/5), so wird das Resultat numerisch statt symbolisch ausgegeben. Auch lineare Gleichungssysteme können natürlich gelöst werden. syms x y z g1 = 'x + y + z = 0'; g2 = '4*x + 5*y + z = 3'; g3 = '-2*x + y - 3*z -5 = 0'; [x y z] = solve(g1,g2,g3) Differenzialgleichungen Die Funktion dsolve versucht gewöhnliche Differentialgleichungen zu lösen. Wenn nicht genügend viele Randbedingungen gegeben werden, so enthält die Lösung freie Parameter. Im Normalfall ist t die unabhängige Variable, D bedeutet d/dt, D2 = d2/dt2 etc. syms x y Y = dsolve('Dy = x^2*y','x') dy x2 y dx Hier ist x die unabhängige Variable! Y=dsolve('Dy = x^2*y','y(0)=4','x') Jetzt mit Anfangsbedingung dsolve('D2y + y = x^2','y(0)=4', 'Dy(0)=1','x') Messwerte laden Mit MATLAB können Messwerte hervorragend ausgewertet und dargestellt werden. Hierzu müssen diese allerdings im Workspace vorliegen. Am einfachsten gestaltet sich die Angelegenheit, wenn sich die Werte in einer ASCII-Datei befinden. Beispiel: Erzeugen einer Messwertdatei mit einem Editor: 1. Spalte Zeit, 2. Spalte Messwertvektor Abspeichern unter y.txt Laden der Messwert mit dem load-Befehl: load y.txt Beachte: Pfad muss gesetzt sein, sonst wird die Datei nicht gefunden. Eine weitere Möglichkeit besteht darin, dass der Import-Wizard benutzt wird unter FileImport Data… Hinweis: Im ASCII-File muss das Komma durch einen Punkt ersetzt werden! Nützliche MATLAB-Funktionen Name der Funktion abs acos asin atan atan2 axis bode c2d clear clf Beschreibung Berechnet Absolutbetrag Berechnet Arcuskosinus Berechnet Arcussinus Berechnet Arcustangens (2 Quadranten) Berechnet Arcustangens (4 Quadranten) Manuelles Skalieren der Achsen Erstellt Bode-Diagramm Konvertiert zeitkontinuierliches System in ein zeitdiskretes Löscht Arbeitsbereich Löscht Grafikfenster Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -12- MATLAB & Simulink – Eine Einführung conj conv cos ctrb damp diary d2c eig end exp expm eye feedback for format grid on help hold on i imag impulse inf j legend linspace load log log10 loglog logspace lsim margin max mesh meshgrid min minreal nan num2str nyquist obsv ones pade parallel plot pole Berechnet konjugiert komplexe Zahl Multipliziert 2 Polynome (Faltung) Berechnet Kosinus Berechnet Steuerbarkeitsmatrix Berechnet Eigenwerte, Dämpfung, Eckfrequenzen Speichert Sitzung auf der Festplatte Konvertiert zeitdiskretes System in ein zeitkontinuierliches Berechnete Eigenwerte und Eigenvektoren Beendet Steuerungsstrukturen Berechnet Exponenten zur Basis e Berechnet Matrixexponenten zur Basis e Erzeugt Einheitsmatrix Berechnet Rückkopplungsverbindung zwischen 2 Systemen Erzeugt eine Schleife Definiert das Anzeigeformat der Ausgabe Erzeugt ein Gitter in der Graphik Hilfethema zu einem Befehl Erhält die aktuelle Graphik im Fenster Imaginäre Einheit Berechnet den Imaginärteil Berechnet Impulsantwort eines Systems Stellt den Wert "unendlich" dar Imaginäre Einheit erstellt eine Legende für das aktuelle Diagramm Erzeugt Vektor mit linearem Abstand Lädt Variablen aus einer Datei Berechnet natürlichen Logarithmus Berechnet Zehnerlogarithmus Erzeugt doppeltlogarithmische Diagramme Erzeugt Vektor mit logarithmischen Abstand Berechnet die Zeitantwort eines Systems auf ein beliebiges Eingangssignal Berechnet Amplitudenrand, Phasenrand und die Übergangsfrequenz Ermittelt Maximalwert Erzeugt dreidimensionale Gitterflächen Erzeugt Felder für die Funktion mesh Ermittelt Minimalwert Kürzen der Pole und Nullstellen in Übertragungsfunktionen Not a number nichtnumerischer Ausdruck Konvertiert Zahlen in Zeichenketten Erstellt Ortskurve eines Übertragungssystems Berechnet die Beobachtbarkeitsmatirx Erzeugt eine Matrix mit Einsern Berechnet die Pade-Approximation Berechnet die parallele Verbindung zwischen Systemen Erzeugt ein Diagramm Berechnet die Pole eines Systems Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -13- MATLAB & Simulink – Eine Einführung poly polyfit polyval printsys pzmap rand rank real residue rlocfind rlocus roots semilogx semilogy series shg sin sqrt ss step subplot syms tan text title tf who whos why xlabel ylabel zero zeros Berechnet Polynom aus den Wurzeln Berechnet Polynomkoeffizienten eines Polynoms, das Messwertreihe annähert Analysiert Polynom Druckt die beschreibenden Zustandgrößen etc. schön aus Zeichnet Pol-Nullstellen-Diagramm Liefert gleichverteilte Pseudozufallszahl Berechnet Rang einer Matrix Berechnet Realteil Berechnet Partialbruchzerlegung Ermittelt Verstärkung bei WOK Berechnet WOK Ermittelt Wurzeln eines Polynoms Erzeugt halblogarithmisches Diagramm, y-Achse ist linear Erzeugt halblogarithmisches Diagramm, x-Achse ist linear Berechnet serielle Verbindung zwischen Systemen Anzeige des Grafikfensters Berechnet Sinus Berechnet Quadratwurzel Berechnet Zustandsmatrizen aus Übertragungsfunktion Berechnet Sprungantwort Teilt Grafikfenster in Unterfenster Deklariert symbolische Variablen Berechnet Tangens Fügt aktueller Grafik Text hinzu, auch LaTeX-Befehle! Fügt aktueller Grafik Titel hinzu Erzeugt Übertragungsfunktion-Modellobjekt Listet aktuell im Speicher befindlichen Variablen auf Listet die aktuellen Variablen und Größen auf Liefert alle Antworten dieser Welt auf nicht gestellte Fragen Fügt aktueller Grafik Beschriftung der x-Achse hinzu Fügt aktueller Grafik Beschriftung der y-Achse hinzu Berechnet Nullstellen eines Systems Erzeugt Matrix mit Nullen Internet-Adressen http://www.oldimrt.ethz.ch/education/tutorials/matlab/ http://www.math.mtu.edu/~msgocken/intro/intro.html http://www.math.siu.edu/matlab/tutorials.html http://math.ucsd.edu/~driver/21d-s99/matlab-primer.html http://www.engin.umich.edu/group/ctm/ Literatur Beucher, O.: MATLAB und Simulink, Scientific Computing, 3. Auflage 2006; Schweizer, W.: MATLAB kompakt, Oldenbourg, 2006 Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -14- MATLAB & Simulink – Eine Einführung Hoffmann, J.: MATLAB und Simulink: Beispielorientierte Einführung in die Simulation dynamischer Systeme, Addison-Wesley, 1998 Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -15- MATLAB & Simulink – Eine Einführung Einführung in Simulink Allgemeines - Simulink ist eine Tollbox von MATLAB Simulink arbeitet blockschaltbildorientiert Verknüpfung von Blöcken durch Pfeile (Signale) Rückwirkungsfrei: Signale gehen nur in Pfeilrichtung Blöcke sind in einer Bibliothek hinterlegt Simulation kontinuierlich, zeitdiskret oder hybrid Schnittstelle zu MATLAB Einfaches Lösen von gewöhnlichen Differenzialgleichungen und DglSystemen Standard-Tool für Simulation dynamischer Systeme Möglichkeit zur Erzeugung von C-Code aus dem Blockschaltbild Beispiel Zu lösen ist die Differenzialgleichung eines schwingungsfähigen Masse-FederDämpfersystems mit Krafterregung m x d x c x F (t ) mit den Anfangsbedingungen x (0) 0,5, x (0) 0 . m 2 kg Ns d 0,5 m N c5 m F 20 N sin(2 f t ) Masse Geschwindigkeitsproportionale Dämpfung Federkonstante Sinusförmige Erregerkraft mit der Frequenz f= 2 Hz Schritt 1: Auflösen der Dgl. Nach der höchsten Ableitung x d x c x F (t ) m (1) Schritt 2: Simulink starten: Im Workspace simulink eingeben oder Button Browser in der Menüleiste anklicken; es erscheint der Simulink-Library- Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -16- MATLAB & Simulink – Eine Einführung Continuous: Discrete: User – Defined Functions LookupTables Math: Nonlinear: Ports & Subsystems: Sinks: Sources: Linear, continuous-time system elements (integrators, transfer functions, state-space models, etc.) Linear, discrete-time system elements (integrators, transfer functions, state-space models, etc.) User-defined functions Tables for interpolating function values Mathematical operators (sum, gain, dot product, etc.) Nonlinear operators (coulomb/viscous friction, switches, relays, etc.) Blocks for controlling/monitoring signal(s) and for creating subsystems Used to output or display signals (displays, scopes, graphs, etc.) Used to generate various signals (step, ramp, sinusoidal, etc.) Schritt 3: Öffnen eines neuen Simulink-Modells: FileNewModel; es erscheint ein leeres Modell. Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -17- MATLAB & Simulink – Eine Einführung Schritt 4: Im Simulink-Library-Browser Block Continuous doppelklicken und aus der sich öffnenden Bibliothek den Block Integrator mit gedrückter linker Maustaste in das leere Modell ziehen. Schritt 4: Block Integrator duplizieren: Block mit gedrückter rechter Maustaste nach rechts ziehen und Maustaste loslassen Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -18- MATLAB & Simulink – Eine Einführung Schritt 5: Blöcke verbinden: hierzu mit dem Mauszeiger auf den Ausgang des Blocks Integrator gehen, es erscheint ein Kreuz und mit gedrückter Maustaste eine Linie zum Eingang von Integrator1 ziehen. Der Eingang des ersten Integrators ist x , der Ausgang ist damit x , und der Ausgang des zweiten Integrators ist x . Aus Gleichung ( 1 ) geht hervor, mit welchen Blöcken x erzeugt wird. Schritt 6: Aus dem Simulink-Library-Browser - Block Math Operations den Block Gain und Sum Block Sources den Block Sine Wave Block Sinks den Block Scope in das Modell ziehen und verbinden. Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -19- MATLAB & Simulink – Eine Einführung Schritt 7: Die Blöcke müssen nun parametriert werden. Dies erfolgt durch Doppelklicken auf den jeweiligen Block. Z. B.: Der Block Sine Wave sieht so aus: Des Weiteren ist es ratsam, die Linien zu beschriften. Das fertige Blockschaltbild sieht so aus: Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -20- MATLAB & Simulink – Eine Einführung Schritt 8: In MATLAB müssen nun die Systemparameter eingegeben werden f=2; c=5; d=0.5; m=2; damit diese bei der Simulation in Simulink bekannt sind. Schritt 9: Die Simulation ist startbereit: Drücken des Buttons in der Symbolleiste. Durch Doppelklicken auf das Scope kann der Weg x visualisiert werden. Ergebnis: Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -21- MATLAB & Simulink – Eine Einführung Der Plot sieht denkbar merkwürdig aus! Was sind die Gründe? Schritt 10: Simulink arbeitet mit numerischen Integrationsverfahren. Hier gibt es gewisse Standardeinstellungen, die für dieses Beispiel nicht ausreichend sind. Unter Simulation Configuration Prameters… gelangt man zum Einstellungsmenu. Neuseinstellung liefert Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -22- MATLAB & Simulink – Eine Einführung Ergebnis: Schritt 11: Die Ergebnisse lassen sich einfach dokumentieren. Im Scope, rechts neben dem Druckersymbol, kann das Signal im Workspace abgespeichert werden, um es dann mit MATLAB zu plotten. Es wird eine Matrix mit zwei Spalten abgespeichert: 1. Spalte: Zeit, 2 Spalte: x Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -23- MATLAB & Simulink – Eine Einführung Das Blockschaltbild kann ebenfalls im Menu EditCopy Model to Clipboard in die Dokumentation übernommen werden. Scope x'' 1 s Integrator x' 1 s Sine Wave x Integrator 1 c Federsteifig keit [N/m] d Dämpfungskonstante [Ns/m] Gain 2 1/m Bild 1: Blockschaltbild in Powerpoint-Folie übernommen Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -24- MATLAB & Simulink – Eine Einführung 0.6 0.4 0.2 x 0 -0.2 -0.4 -0.6 -0.8 0 5 10 15 20 25 30 35 40 45 50 Zeit in s Bild 2: Schwingweg x Aufrufen eines Simulink-Blockschaltbildes unter MATLAB Mit Hilfe des sim-Befehls lassen sich Simulink-Dateien ausführen. Dadurch erreicht man höchste Flexibilität. Beispiel: Das Schwingungsbeispiel soll mit drei verschiedenen Dämpfungskonstanten ausgeführt und in einem Plotfenster dargestellt werden. %Aufrufen eines Simulnk-Files unter MATLAB %Simulink-File: MasseFederDaempfer.mdl %Dämpfung wird variiert %----------------------------------------f=2; %Erregerfrequez [Hz] c=5; %Federsteifigkeit [N/m] daempfung=[0.05 0.5 5]; %Dämpferkonstante Dämpfungsvektor [Ns/m] m=2; %Masse [kg] for k=1:3 d=daempfung(k); sim('MasseFederDaempfer') Aufruf des subplot(3,1,k) Simulink-BSB plot(x(:,1),x(:,2)) grid xlabel('Zeit in s') ylabel('x') legend(['d=',num2str(d)]) end; subplot(3,1,1) Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -25- MATLAB & Simulink – Eine Einführung title('verschiedene Dämpfungen') [x,y]=dsolve('m*D2x+k*cos(alpha)*sqrt((Dy)^2+(Dx)^2)=0','m*D2y+k*sin(alpha)*sqrt((Dy) ^2+(Dx)^2)+m*g=0','y(0)=0,x(0)=0,Dy(0)=10,Dx(0)=10') Fakultät für Maschinenbau und Mechatronik Prof. Helmut Scherf Mechatronik -26-