Einführung in Scilab/Scicos/RtaiLabVersion 4.1.2
H. Nahrstaedt, T. Schauer
Fachgebiet RegelungssystemeTU Berlin
20. Mai 2008
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 1 / 68
Scilab
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
2 Lineare Systeme und Reglerentwurf
3 Scicos
4 Nichtlineare Regelsysteme
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 2 / 68
Scilab Allgemeine Informationen über Scilab
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 3 / 68
Scilab Allgemeine Informationen über Scilab
Was ist Scilab?
ScilabKostenloses Open-Source Software-Paket für wissenschaftliche Berechnungen
Hunderte von Funktionen für allgemeine Zwecke und eine Vielzahl von speziellen Routinenfür numerische Berechnungen
Funktionesbibliotheken → Toolboxes für Simulation, Optimierung, Systemanalyse,Reglerentwurf, Signalverarbeitung ...
ScicosScilab Toolbox mit graphischen Block-Diagramm-Editor für die Erstellung und Simulationdynamischer Systeme
Automatische C-Code-Generierung
Geschichte
Entwickelt seit 1994 durch INRIA (Institut National de Recherche en Informatique et enAutomatique) und ENPC (Ecole Nationale des Ponts et des Chaussées) in Frankreich
Seit 2003: Koordination der Entwicklung durch ein internationales Scilab Konsortium mitIndustriebeteiligung
Scilab/Scicos: einzige wirkliche Alternative zu kommerziellen Programmpaketen wieMATLAB/Simulink und MATRIXx/SystemBuildH. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 4 / 68
Scilab Allgemeine Informationen über Scilab
Verfügbarkeit / Literatur
Downloadwww.scilab.org
Verfügbar für Unix/Linux, Windows, MacOSX
Downloadgröÿe kleiner 20MByte
LiteraturBuch: S.L. Campbell, J.-P. Chanceller und R. Nikoukhah, Modeling and Simulation inScilab/Scicos, Springer Verlag, 2006
Kapitel 1 und 2: Scilab(frei verfügbar: Download-Link auf http://www.control.tu-berlin.de/Teaching:Scilab)Kapitel 6 und 7: Scicos(frei verfügbar: http://www.scicos.org/book.html)
Report: R. Bucher et al. RTAI-Lab tutorial: Scilab, Comedi, and realtime control.,http://www.rtai.org/RTAILAB/RTAI-Lab-tutorial.pdf, 2007
Jean-Marie Zogg, Arbeiten mit Scilab und Scicos. (frei verfügbar:http://www.fh-htwchur.ch/Arbeiten-mit-Scilab-und-Scicos.1100.0.html)
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 5 / 68
Scilab Allgemeine Informationen über Scilab
Nutzung am Fachgebiet Regelungssysteme
Rechnerpool
Rechnerpool im Raum EN 152/153, Zugang über Code-Schloss, Code über Sekretariaterhältlich.
Individuelle Logins für das RS-Netz, Guest-Accounts während der Übungen
Vorgehen
1. Anmelden
2. Konsolen-Fenster starten (Terminal-Icon auf dem Desktop)
3. Scilab starten:�s c i l a b &� �
4. Datensicherung via Web-Mailer (Hotmail, Google-Mail, GMX, etc.); FireFox oder Konquerorstarten
5. Datensicherung via USB-Stick; Zugri� auf den USB-Stick über Link auf dem Desktop
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 6 / 68
Scilab Erste Schritte
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 7 / 68
Scilab Erste Schritte
Start
Scilab Command WindowInteraktives Fenster
Bestätigung von Befehlen mittels Return
Scilab ist sowohl ein Interpreter als aucheine Programmiersprache!
Einzelne Befehle oder Skriptdateien mitBefehlslisten können ausgeführt werden(exec-Befehl, // - Kommentare).
Blättern in alten Befehlen mittelsPfeil-Hoch- und -Runter-Tasten
Scilab Help Browser
Online Dokumentation mit Suchfunktion undProgrammbeispielen
Scilab EditorKomfortabler Editor mit Syntax-Hervorhebungund Debugging-Interface
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 8 / 68
Scilab Objekte
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 9 / 68
Scilab Objekte
Philosophie
1. Objekte erstellen
keine expliziete Deklaration oderSpeicherzuordnung
eine zufällige 2x3 Matrix erstellen:�−−>a = rand ( 2 , 3 ) ;−−>typeof ( a )ans =
cons t an t� �
3. Typ dynamisch ändern�−−>a = ' s c i l a b ' ; typeof ( a )ans =
s t r i n g� �4. Objekt löschenNiemals clear() ohne Parameter ausführen!!!�−−>c l e a r ( ' a ' ) ; e x i s t s ( ' a ' )ans =
0 .� �2. Dynamische Anpassung der Gröÿe�−−>a=[a , zeros ( 2 , 2 ) ]a =
0.2113249 0.0002211 0.6653811 0 . 0 .0 .7560439 0.3303271 0.6283918 0 . 0 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 10 / 68
Scilab Objekte
Speicher und Zahlen
Speicher
Der verfügbare Speicher in Scilab wirdüber den Befehl stacksize eingestellt.
Speicher anzeigen (Gröÿe undmaximale Anzahl von Variablen) undvergröÿern:�−−>s t a c k s i z eans =
5000000. 15983 .−−>s t a c k s i z e (6000000)
−−>� �
ZahlenDouble-Precision Floats
Prozessortypabhängige Genauigkeit
mögliche Erweiterung der Zahlenmengeum %inf (in�nity) und %nan (not anumber) mittels des Befehls ieee�−−>i e ee ( )ans =
0 .−−>1/0
!−−e r r o r 27d i v i s i o n by z e r o . . .−−>i e ee (2 )−−>1/0ans =
I n f−−>0/0ans =
Nan−−>� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 11 / 68
Scilab Objekte
Matrizen
InfoBasis-Objekt: zweidimensionale Matrixmit �oating-point Zahlen
interne Speicherung alseindimensionales Feld(spaltengeordnet)
Skalar: 1x1 Matrix
Konstruktion von MatrizenSpalternverkettungsoperator: ',' oderLeerzeichen
Zeilenverkettungsoperator: ';' oderZeilenumbruch
beide Operatoren erscheinen zwischen'[' und ']'
�−−>A=[1 ,2 ,3 +5]A =
1 . 2 . 3 . 5 .
−−>A=[1 ,2 ,3 ∗5 ]A =
1 . 2 . 15 .
−−>A=[A, 0 ; 1 , 2 , 3 , 4 ]A =
1 . 2 . 15 . 0 .1 . 2 . 3 . 4 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 12 / 68
Scilab Objekte
Matrizen
Funktionen zur Erstellung von Matrizen
' transponiertdiag (m,n) Matrix mit gegebener Diagonale (oder Ausgabe der Diagonale)eye (m,n) Matrix mit Einsen auf der Hauptdiagonalenrand (m,n) Zufallsmatrixzeros (m,n) Matrix bestehend aus Nullenones (m,n) Matrix bestehend aus Einsenlinespace or ':' linearly spaced vectorlogspace logarthmically spaced vectormatrix Formen einer (m,n) Matrix aus einem (n*m) Vektor�
−−> A = [ eye ( 2 , 1 ) , 3∗ones ( 2 , 3 ) ; l i n s pa ce ( 3 , 9 , 4 ) ; zeros ( 1 : 4 ) ]� ��A =
1 . 3 . 3 . 3 .0 . 3 . 3 . 3 .3 . 5 . 7 . 9 .0 . 0 . 0 . 0 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 13 / 68
Scilab Objekte
Extraktion, Einfügen und Löschen von Matrixelementen
InfoSpezi�kation von Matrixeinträgen überA(B) oder A(B,C) wobei B und C sindnumerische oder boolesche Matrizensind die als als Indizes genutzt werden.
'$' - letzter Index
':' - alle Einträge
'=' Zuweisungsoperator
A(B)= oder A(B,C)=
Die Einträge der Matrix auf der linkenSeite werden ersetzt durch die Einträgevon der rechten Seite, falls es sich umkeine Matrix verschieden von Nullhandelt und die Gröÿen kompatibelsind.
Wenn die rechte Seite eine leere Matrix([]) ist, werden die Elemente auf derlinken Seite gelöscht.
�−−>c l e a r A;−−>A(2 ,4 ) = 1A =
0 . 0 . 0 . 0 .0 . 0 . 0 . 1 .
−−>A( [ 1 , 2 ] , [ 1 , 2 ] )=3 ∗ ones ( 2 , 2 )A =
3 . 3 . 0 . 0 .3 . 3 . 0 . 1 .
−−>A(: ,1)=8A =
8 . 3 . 0 . 0 .8 . 3 . 0 . 1 .
−−>A( : , $ )=[ ]A =
8 . 3 . 0 .8 . 3 . 0 .
−−>A( : , $+1)=[4;5]A =
8 . 3 . 0 . 4 .8 . 3 . 0 . 5 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 14 / 68
Scilab Objekte
Extraktion, Einfügen und Löschen von Matrixelementen
=A(B) oder A(B,C)
Falls die Audrücke A(B) oder A(B,C)auf der rechten Seite der Zuweisungstehen, werden Untermatrizenextrahiert.�
−−>D=A( : , 2 : 3 )D =
3 . 4 .3 . 5 .
−−>A(: ,4 )=D( 1 , : ) 'A =
8 . 3 . 4 . 3 .8 . 3 . 5 . 4 .� �
Boolesche MatrizenWerte für eine boolesche Variable:'True' %t oder 'False' %f
Benutzung von %t und %f zurKonstruktion von booleschen Matrizen
Vergleichsoperatoren '==','>', '<','<=' und '=' (ungleich) liefernboolesche Matrizen.
Logikoperatoren wie '&' (and), '|' (or)und '' (not) lassen sich auf boolescheMatrizen anwenden.�
−−>[~(1>=2) %T&%F]ans =T F
−−>x=1:2:10x =
1 . 3 . 5 . 7 . 9 .−−>x ( x>5)=4x =
1 . 3 . 5 . 4 . 4 .−−>f i n d ( x<5) // I n d i z e s b e s t .ans =
1 . 2 . 4 . 5 .� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 15 / 68
Scilab Objekte
Elementare Matrixoperationen
Operatoren
| logisches Oder& logisches Und˜ negieren==,>=,<=,>,<,<>,= Vergleichsoperatoren+,- binäre Addition und Subtraktion+,- unäre Addition und Subtraktion.*,./,. .*,./.,.,*,/,/., Multiplikationen und Divisionen, **, ., .** Potenzieren',.' transponieren
Operatoren mit dem Punkt-Symbol stehen für elementweise Operationen.
Transponieren und gewöhnlichesMatrixprodukt:�−−>A=(1:3) '∗ ones ( 1 , 3 )A =
1 . 1 . 1 .2 . 2 . 2 .3 . 3 . 3 .� �
Elementweise Multiplikation:�−−>A.∗Aans =
1 . 1 . 1 .4 . 4 . 4 .9 . 9 . 9 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 16 / 68
Scilab Objekte
Elementare Matrixoperationen
Lösen des linearen Gleichungssystems Ax=b.�−−>A=[1 , 2 ; 3 , 4 ] ; b = [ 5 ; 6 ] ;−−>x = A \ b ; norm (A∗x−b )ans =
0 .� �Unterbestimmtes System - eine Lösung mitminimaler Norm wird ermittelt:�−−>A1=[A, zeros (A ) ] ; x=A1 \ bx =− 4 .
4 . 50 .0 .� �
Überbestimmtes System -Least-Squares-Lösung wird ermittelt:�−−>A1=[A;A ] ; x=A1\ [ b ; 7 ; 8 ]x =− 5 .
5 . 5� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 17 / 68
Scilab Objekte
Zeichenketten und Polynome
Zeichenkettenbegrenzt durch ' ' oder
Matrix aus Zeichenketten
Vielzahl von Funktionen fürZeichenketten�
−−>S=[ ' Die ' , ' 2 x2 ' ; ' Mat r i x ' , ' ! ' ]S =
! The 2x2 !! !! Mat r i x ! !
−−>l ength (S)ans =
3 . 3 .6 . 1 .� �
Polynome
Ein Polynom kann mittels derScilabFunktion poly über seine Wurzeln oderKoe�zienten de�niert werden.
Polynome lassen sich addieren,multiplizieren, in Matrizen packen, etc.
Löser für Diophantische Gleichungen�−−>p=poly ( [ 1 3 ] , ' s ' )p =
23 − 4 s + s
−−>q=poly ( [ 1 2 ] , ' s ' , ' c ' )q =
1 + 2 s−−>G=q/p ;G =
1 + 2 s−−−−−−−−−−
23 − 4 s + s� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 18 / 68
Scilab Objekte
Listen
Erzeugung von Listen über die Funktionen list, tlist oder mlist
Indizierter Zugri� nur für list und tlist
Zugri� auf Elemente über Namen nur mit tlist und mlist�−−>sy s= l i s t ( ' Bla ' , 8 , [ 1 2 ] ) ;−−>sy s (2 )ans =
8 .−−>sy s= t l i s t ( [ ' m y l i s t ' , 'A ' , 'B ' , 'C ' ] , ' Bla ' , 8 , [ 1 2 ] ) ;−−>sy s ( 'B ' )ans =
8 .−−>sy s (3 )ans =Bla −−>−−>sy s .Bans =
8 .−−>sy s=ml i s t ( [ ' m y l i s t ' , 'A ' , 'B ' , 'C ' ] , ' Bla ' , 8 , [ 1 2 ] ) ;−−>sy s (3 )
!−−e r r o r 4unde f i n ed v a r i a b l e : %l_e� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 19 / 68
Scilab Objekte
Listen
Einfacherer Aufbau von mlist-Objekten mittels des '.' Operators�−−>sys_new .A=' Bla ' ;
−−>sys_new .B=8;
−−>sys_new .C=[1 2 ] ;
−−>sys_newsys_new =
A: "Bla "B : 8C : [ 1 , 2 ]� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 20 / 68
Scilab Objekte
Funktionen
Auch Funktionen werden auch als Okjekte betrachtet.
Man unterscheided hard-coded Funktionen (z.B. sin) und Scilab-coded Funktionen (z.B.sinh).
De�nition von Funktionen durch die Schlüsselwörter function und endfunction
Scilab-coded Funktionen können von Scilab-Skripten aus geladen werden mittels exec
Scilab-coded Funktionen im Speicher können im Binärformat gespeichert oder geladenwerden mittels save bzw. load.
Scilab-coded Funktionen werden später ausführlich betrachtet.
Betrachten des Source-Codes von Scilab-Coded Funktionen mittels fun2string�−−>f unc t i on y=foo ( x , g ) ; y=g ( x ) ; endfunct ion−−>typeof ( foo )ans =f unc t i on−−>foo (%pi , s i n )ans =
1.225E−16� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 21 / 68
Scilab Objekte
Funktionen
Achtung: Funktionen können gelöscht order maskiert werden durch Zuweisungen!�−−>s i n=[1 3 ] ;Warning : r e d e f i n i n g f unc t i on : s i n−−>s i n (2 )ans =
3 .−−>c l e a r s i nWarning : r e d e f i n i n g f unc t i on : s i n−−>s i n (2 )ans =
0.9092974� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 22 / 68
Scilab Programmierung
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 23 / 68
Scilab Programmierung
Scilab-Programme
Scilab-Programme
Scilab-Programm: Anzahl von Instruktionen die in einer spezi�erten Reihenfolge ausgeführtwerden.
gewöhnlich in einer ASCII-Datei spezi�ziertAusführen des Programms mittels exec
Endung von Scilab-Skripten: *.sce
Endung von Scilab-Skripten, die nur Funktionen beinhalten: *.sci
Beim start von Scilab werden die Skripte scilab.star im Scilab Installationsverzeichnis, sowie.scilab oder scilan.ini im Home-Verzeichnis oder aktuellen Verzeichnis ausgeführt.�
exec ( ' pa ramete r . s c e ' ) ; // Fuehr t das S k r i p t ausexec ( ' d i o . s c i ' ,−1); // Laedt d i e Funkt ion und
// un t e r d r u e c k t d i e Ausgabe .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 24 / 68
Scilab Programmierung
Verzweigungen
Verzeigungen mittels if/then/else bzw. elseif
if <condition> then <instruction> else <instructions> end
Mehrfachverzweigungen durch: elseif�−−>A=l og ( rand ( 3 , 3 ) ) ;−−> i f imag (A)==0 then d i sp ( 'A i s a r e a l mat r i x ' ) ;−−>e l s e ( 'A i s complex ' ) ; end ;A i s a r e a l matr ix� �Mehrfachverzweigungen mittels select
Der Inhalt der Variablen (<expr>) wird nacheinander mit <expr1>, <expr2> usw.verglichen
Bei keiner Übereinstimmung kommen die Anweisungen hinter else zum tragen.�s e l e c t <expr >,
case <expr1> then <i n s t r u c t i o n s >case <expr2> then <i n s t r u c t i o n s >. . .e l s e <i n s t r u c t i o n s >
end� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 25 / 68
Scilab Programmierung
Schleifen 1/2
Die for-Schleifefor <name>=<expr>
<instructions>end
Die <expr> Instruktion wird einmal evaluiert.
Danach wird der innere Block wiederholt ausgeführt, bei bei jeder Iteration nimmt dieVariable <name> einen neuen Wert an.
Wenn <expr> eine Matrix ist, so nimmt <name> nacheinander den Wert der Spalten an.
Ist <expr> eine Liste, so nimmt <name> nacheinander den Wert der Listenelemente an.�−−>y=0;−−>f o r x=1:100−−> y=y+x ;−−> end−−>yy =
5050 .−−>� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 26 / 68
Scilab Programmierung
Schleifen 2/2
Die while-Schleifewhile <condition>
<instructions>end
Solange der Ausdruck <condition> wahr ist, wird die Instruktionen des inneren Blockesausgeführt.�
−−>y=0;x=1;−−>whi le ( x<=100)−−> y=y+x ;−−> x=x+1;−−> end−−>yy =
5050 .−−>� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 27 / 68
Scilab Programmierung
Scilab-Funktionen 1/4
Funktionen haben Eingangsargumente und Rückgabewerte
Deklaration:function [<name1>,<name2>,...]=<name−of−function>(<arg1>,<arg2>,...)
< instructions>endfunction
<arg1>,<arg2>,...: Funktionsargumente
<name1>,<name2>,...: Rückgabewerte
Funktionsaufruf: <name−of−function>(<expr1>,<expr2>,...)oder[<v1>,<v2>,...,<vp>]=<name−of−function>(<expr1>,<expr2>,...)
Im letzteren Fall werden die Rückgabewerte in die p Variablen <v1>,<v2>,...,<vp> kopiert.
Überprüfen der Argumente nach Funktionsaufruf und Werteübergabe (calling by value)
Bei der Ausführung des Funktion wird nach Variablen in der lokalen Umgebung der Funktionund der Aufrufsumgebung der Funktion gesucht.
Variablen aus der Aufrufsumgebung werden jedoch nicht geändert (lokale Kopie falls nötig)!
Beendigung einer Funktion bei endfunction oder vorzeitig mittels return
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 28 / 68
Scilab Programmierung
Scilab-Funktionen 2/4Beispiel einer rekursiven Funktion:�−−>f unc t i on y=f a c t ( x )−−> i f x<= 1 then y=x ;−−> e l s e y=x∗ f a c t ( x−1);−−> end−−>endfunct ion−−>f a c t (4 )ans =
24 .� �Nutzung einer Variablen aus derAufrufumgebung�−−>f unc t i on y=f ( x ) ;−−> y=2∗x ;−−> x=2∗x ;−−>endfunct ion−−>x=90;−−>f ( )ans =
180 .−−>xx =
90 .� �
Im Funktionskörper kann die Anzahlder gegebenen Eingangsargumente(rhs) und die Anzahl der erforderlichenRückgabewerte (lhs) mittels�[ l h s , r h s ]=argn ( )� �erfragt werden.
Durch die Funktion error kann eineFehlermeldung erzeugt werden.
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 29 / 68
Scilab Programmierung
Scilab-Funktionen 3/4Beispiel�−−>f unc t i on [ u , v ]= f ( x , y )−−> [ lh s , r h s ]=argn ( )−−> i f r h s <= 0−−> then e r r o r ( ' a t l e a s t one argument must be g i v en ' ) ; end−−> i f r h s <= 1 then y=2; end−−> i f l h s == 2 then−−> u=x ; v=y ;−−> e l s e−−> u=x+y ;−−> end−−>endfunct ion−−>−−>[u , v ]= f (4 )v =
2 .u =
4 .� �Globale VariablenDe�nition in der Ausrufsumgebung und in der entsprechenden Funktion mit global <variablename>!
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 30 / 68
Scilab Programmierung
Scilab-Funktionen 4/4
Funktionen mit variabler Anzahl von Ein- und Ausgangsargumenten
Letzes Eingangsargument: varargin
Letzer Rückgabewert: varargout
varargin und varargout sind im Funktionskörper Vektoren, die Ein- und Ausgangsargumentebeinhalten.�
−−>f unc t i on [ l ]= f ( x , va ra rg i n ) ; l=va ra rg i n ; endfunct ion−−>f (0 , 1 , 2 )ans =
ans (1 )1 .
ans (2 )2 .� ��
−−>f unc t i on [ varargout ]= f ( )−−> varargout= l i s t ( 1 , 2 , 3 )−−>endfunct ion−−>[a , b]= f ( )b =
2 .a =
1 .� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 31 / 68
Scilab Programmierung
Programme debuggen
Vorgehensweise
Programm unterbrechen mittels Ctrl-C oder dem Befehl pause → Prompt ändert sich undzeigt den Pause-Level.
Variablen können überprüft werden.
Mittels where und whereami kann ermittelt werden, wo die Pause erzeugt wurde.
Fortsetzen des Programms mit dem Befehl resume
Beenden des Programms mit dem Befehl abort
Schrittweise Abarbeitung von Programmcode mit dem Befehl exec
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 32 / 68
Scilab Ein- und Ausgabefunktionen
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 33 / 68
Scilab Ein- und Ausgabefunktionen
Datei-Funktionen 1/3
Ö�nen und Schlieÿen von Dateien
Ö�en einer Datei: [ fd , err ]=mopen(�lename, mode)
mode: 'r' - Lesen, 'w' - Schreiben, 'r+' Lesen und Schreiben, Zusatz 'b' → Binärmodus
Schlieÿen von Dateien: [ err ]=mclode([fd]) ([fd] - Vektor mit fd Werten vom Dateiö�nen)
Schlieÿen aller Dateien: [ err ]=mclode('all ' )
Formatiere Ein-Ausgabe im Textmodus
Formatierte Ausgabe mit mfprintf (Schreiben)
Formatierte Eingabe mit mfscanf (Lesen)
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 34 / 68
Scilab Ein- und Ausgabefunktionen
Datei-Funktionen 2/3
Beispiel: Einlesen von Daten aus folgender Textdatei (mfscanf.dat):
An example of reading a file with a separator of type "[ ]*,[ ]*"
-------------------------------------------------------------------------
CLKIN_f.sci , 98 , 16
CLKINV_f.sci , 91 , 16�−−>fd=mopen( "mfscan f . dat " , " r " ) ; // opens a f i l e i n r ead mod−−>mgetl ( fd , 2 ) ; // bypa s s i n g the f i r s t two l i n e s−−>[n , a , b , c ]=mfscanf (−1 , fd , "%[^ , ] ,%∗ [ , ]%d%∗ [ , ]%d\ n" ) ;
// f o rma t t ed r e ad−−>n //number o f r ead arguments
ans =3 .
−−>s t r i p b l a n k s ( a )~// removing space s and t r a n p o s i n g s t r i n g mat r i xans =CLKIN_f . s c i CLKINV_f . s c i
−−>[b , c ] // nume r i c a l v a l u e sans =98 . 16 .91 . 16 .
−−>mclose ( fd ) ;� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 35 / 68
Scilab Ein- und Ausgabefunktionen
Datei-Funktionen
Ein- und Ausgabe im Binärmodus
Variablen aus der aktuellen Umgebung können mit save gespeichert werden.
Mit load könnnen gespeicherte Variablen in die aktuellen Umgebung geladen werden.�−−>A=rand ( 2 , 2 ) ; B=' h a l l o ' ;−−>save s i t z u n g // s p e i c h e r t a l l e Va r i a b l e n i n de r Date i S i t zung−−> // oder save ( ' s i t z ung ' )−−>c l e a r a l l−−>load s i t z u n g // oder l oad ( ' s i t z ung ' )−−>AA =
0.2113249 0.00022110.7560439 0.3303271
−−>save ( ' S i t zung ' ,A) // s p e i c h e r t nur A i n de r Date i S i t zung� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 36 / 68
Scilab Ein- und Ausgabefunktionen
Datei-Funktionen
Ein- und Ausgabe im Binärmodus mit mget,mput
Ö�nen und Schlieÿen von Dateien mit mopen und mlose (Option 'b' !)
Binäre Eingabe (lesen): mget
Binäre Ausgabe (schreiben): mput
Beispiel: Schreiben einer Matrix und Einlesen einer Matrix�−−>fd=mopen( ' t e s t . dat ' , 'wb ' )−−>A=rand ( 2 , 3 )A =
0.2312237 0.8833888 0.30760910.2164633 0.6525135 0.9329616
−−>mput (A, ' d ' ) ;−−>mclose ( fd ) ;−−>fd=mopen( ' t e s t . dat ' , ' rb ' ) ;−−>y=mget (2∗3 , ' d ' , f d ) ;−−>A=matr ix ( y , 2 , 3 )A =
0.2312237 0.8833888 0.30760910.2164633 0.6525135 0.9329616
−−>mclose ( fd ) ;� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 37 / 68
Scilab Gra�kfunktionen
Gliederung
1 ScilabAllgemeine Informationen über ScilabErste SchritteObjekteProgrammierungEin- und AusgabefunktionenGra�kfunktionen
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 38 / 68
Scilab Gra�kfunktionen
2D Plot als Beispiel 1/3
Allgemeines
Vielfältige Gra�kfunktionen
Export von Gra�ken nach EPS, Gif,X�g
EPS-Export mit xs2eps
Gra�ken sind ObjekteAktuelle Handles:
Achsen: h1=gca()Figure: h2=gcf()Elemente: h3=gce()
Speichern und laden von Figurenmittels xsave und xload
2 Plotbefehle: plot (Matlab-like) undplot2d (Scilab)
Figure erzeugen: scf
Figure löschen: xdel
Figure-Inhalt löschen: clf
Beispiel (Scilab-Skript für plot):�// example w i th s u b p l o t st =0 : 0 . 1 : 1 00 ;y1=s i n ( t ∗0 . 1 )∗50 ;y2=s i n ( t ∗0 . 3 )∗75 ;subp lot (211)p lo t ( t , y1 , ' r ' , t , y2 , ' b ' ) ;a=gca ( ) ;a . y_ labe l . t e x t="y1" ;a . g r i d =[1 1 ] ;a . data_bounds=[20 −100 ;80 1 0 0 ] ;subp lot (212)p lo t ( t , y2 , ' b ' ) ;a=gca ( ) ;a . y_ labe l . t e x t="y2" ;a . x_ labe l . t e x t="x" ;a . g r i d =[1 1 ] ;a . data_bounds=[0 0 ;100 1 0 0 ] ;xsave ( ' my f i gu r e ' ) ;x s2ep s (0 , ' my f i gu r e . eps ' ) ;� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 39 / 68
Scilab Gra�kfunktionen
2D Plot als Beispiel 2/3
Ergebnis des Plot-Skripts:
20 30 40 50 60 70 80−100
−80
−60
−40
−20
0
20
40
60
80
100
y1
0 10 20 30 40 50 60 70 80 90 1000
10
20
30
40
50
60
70
80
90
100
x
y2
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 40 / 68
Scilab Gra�kfunktionen
2D Plot als Beispiel 3/3
Beispiel (Scilab-Skript für plot2d):�// example w i th s u b p l o t st =0 : 0 . 1 : 1 00 ;y1=s i n ( t ∗0 . 1 )∗50 ;y2=s i n ( t ∗0 . 3 )∗75 ;// c r e a t e s f i g u r e w i th i d 4f 4=s c f ( 4 ) ;plot2d ( t , [ y1 ' y2 ' ] , . . .s t y l e =[1 1 ] , . . .r e c t =[0 , −100 ,100 ,100 ] , . . .l o g f l a g=' nn ' ) ;
e=gce ( ) ;e . c h i l d r e n ( 1 ) . l i n e_ s t y l e =1;e . c h i l d r e n ( 1 ) . l i n e_ s t y l e =2;l e g end ( [ ' y1 ' ; ' y2 ' ] ) ;xg r i dx t i t l e ( ' Example ' , ' t ' , ' y ' ) ;x s2ep s (4 , ' p lot2d_example . eps ' ) ;xde l ( 4 ) ;� �
Ergebnis des Plot-Skriptes:
0 10 20 30 40 50 60 70 80 90 100−100
−80
−60
−40
−20
0
20
40
60
80
100
Example
t
y
y1
y2
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 41 / 68
Lineare Systeme und Reglerentwurf
Gliederung
1 Scilab
2 Lineare Systeme und Reglerentwurf
3 Scicos
4 Nichtlineare Regelsysteme
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 42 / 68
Lineare Systeme und Reglerentwurf
De�nition linearer Systeme 1/2
Zeitkontinuierliche Systeme
Polynomkoe�zienten dürfen nicht komplex sein!
De�nition als Transferfunktion über Wurzeln:�S1=s y s l i n ( ' c ' ,2∗ poly (−0.5 , ' s ' )/ poly ( [ 0 , 0 ] , ' s ' ) ) ;� �
De�nition als Transferfunktion über Koe�zienten:�s=poly (0 , ' s ' )S2=s y s l i n ( ' c ' ,(1+2∗ s )/ ( s ^2 ) ) ;� �
De�nition als Zustandsraummodell:�A= [ 0 , 1 ; 0 , 0 ] ;B= [ 1 ; 1 ] ;C= [1 , 1 ] ;S3=s y s l i n ( ' c ' ,A ,B,C ) ;� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 43 / 68
Lineare Systeme und Reglerentwurf
De�nition linearer Systeme
Zeitdiskrete Systeme
Polynomkoe�zienten dürfen nicht komplex sein!
De�nition als Transferfunktion über Wurzeln:�TA=1;S4=s y s l i n (TA,−1.5∗ poly ( 0 . 6 , ' z ' )/ poly ( [ 1 1 ] , ' z ' ) ) ;� �
De�nition als Transferfunktion über Wurzeln:�z=poly (0 , ' z ' ) ;S5=s y s l i n (TA,(−1.5+2.5∗ z )/(1−2∗ z+z ^2 ) ) ;� �
De�nition als Zustandsraummodell:�A= [ 1 , 1 ; 0 , 1 ] ;B= [ 1 . 5 ; 1 ] ; C=[1 , 1 ] ;S6=s y s l i n (TA,A,B,C ) ;� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 44 / 68
Lineare Systeme und Reglerentwurf
Transformationen, Zugri� auf Systemparameter
TransformationenTransferfunktion nachZustandsraummodell:�
S3=t f 2 s s ( S1 ) ;� �Zustandsraummodell nachTransferfunktion:�−−>typeof ( S3 )
ans=sta t e−spaceS1=t f 2 s s ( S3 ) ;−−>typeof ( S1 )
ans=r a t i o n a l� �Diskretisierung:�
TA=1;S6=dscr ( S1 ,TA) ;S6=dscr ( S3 ,TA) ;� �
Zugri� auf Systemparameter
Verstärkung einer Transferfunktion:�−−>horner ( S1 , 1 ) ;
ans=3� �Zugri� auf Systemeigenschaften:�S1 . den ; S1 . num ; S3 . dt ;S3 .A ; S3 .B ; S3 .C ; S3 .D;� �
Koe�zienten eines Polynoms:�coe f f ( S1 . num ) ; coe f f ( S1 . den ) ;� �Wurzeln eines Polynoms:�root s ( S1 . num ) ; root s ( S1 . den ) ;� �Bei der Weiterverwendung vonWurzeln in Polynomen immer Ergebnismit real() umwandeln!
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 45 / 68
Lineare Systeme und Reglerentwurf
Bodeplot, P/Z-Plot und Nyquistdiagramm
Bodediagramm:�bode ( S1 ) ; // Frequenz i n Hz ! ! ! ! anwendbar au f S1−S6� �Nyquist:�nyqu i s t ( S1 ) ; // anwendbar au f S1−S6� �P/Z-Plot:�p l z r ( S1 ) ; // anwendbar au f S1−S6� �Wurzelortskurve: RL-TOOL http://www.ee.iitb.ac.in/uma/vishan/scilab/rltool.htm
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 46 / 68
Lineare Systeme und Reglerentwurf
Simulation linearer Systeme
Sprungantworten
Zeitkontinuierliche Systeme�t =0 : 0 . 0 1 : 1 ; u=ones (1 , l ength ( t ) ) ;csim ( ' s t e p ' , t , S1 ) ; // a l t e r n a t i v cs im (u , t , S1 ) ;� �Zeitdiskrete Systeme�ds imul (S6 , u ) // Zustandsraummode l l e r f o r d e r l i c h� �
Frquenzantworten�f=logspace (−2 ,2 ,100) ; // F r equenzvek to r i n Hz ![ f , r ]= r ep f r eq (S1 , f ) ; // 1 . Va r i a n t e[ f , r ]= r ep f r eq (S1 , fmin , fmax ) ; // 2 . Va r i a n t e[ db , ph i ]=dbphi ( r ) ; // Ampl i tude und Phase� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 47 / 68
Lineare Systeme und Reglerentwurf
Beispiel
Scilab-Skript zur Erzeugung desAmplitudenganges:�s=poly (0 , ' s ' ) ;G=s y s l i n ( ' c ' , 1/( s^2+2∗ s +1)) ;f=logspace (−2 ,2 ,100) ;[ f , r ]= r ep f r eq (G, f ) ;[ db , ph i ]=dbphi ( r ) ;s c f ( 1 ) ;c l f (1 , ' r e s e t ' ) ;plot2d ( f ∗2∗%pi , db , . . .s t y l e = [ 1 ] , . . .l o g f l a g=' l n ' ) ;
e=gce ( ) ;e . c h i l d r e n ( 1 ) . l i n e_ s t y l e =1;xg r i dx t i t l e ( ' Ampl i tudengang ' , . . .' Frequenz i n [ rad / s ] ' , . . .' Ve r s taekung i n [ dB ] ' ) ;
x s2ep s (1 , ' example_AG . eps ' ) ;� �
Ergebnis:
−210
−110
010
110
210
310
−120
−100
−80
−60
−40
−20
−0
Amplitudengang
Frequenz in [rad/s]
Ver
stae
kung
in [d
B]
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 48 / 68
Lineare Systeme und Reglerentwurf
Warnung: Fehlerhafte Polynomde�nitionen über Wurzeln!!!
Falsch:�−−>z=poly (0 , ' z ' ) ;−−>A=(z−0.7+%i ∗0 . 1 )∗ ( z−0.7−%i ∗0 . 1 )A =r e a l part
20 .5 − 1 .4 z + z
imag i na r y part− 6 .661E−18
−−>� �Führt zu komplexen Polynomkoe�zienten!!!Richtig:�−−>A=poly ([−0.7+%i∗0.1 ,−0.7−%i ∗ 0 . 1 ] , ' z ' )A =
20 .5 + 1 .4 z + z
−−>� �Poly-Befehl nutzen, um ein Polynom über seine Wurzeln zu beschreiben!
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 49 / 68
Lineare Systeme und Reglerentwurf
Lösung Diophantischer Gleichungen
ProblemLösen einer Diophantischen Gleichung vomTyp
A(z)R(z)Rd (z)+
B(z)S(z)Sd (z) = Ac(z)
wobei die Regelstecke durch B(z)/A(z)gegeben ist.
Der Regler hat die Struktur(S(z)Sd (z))/(R(z)Rd (z)).
Die Reglerpolynome R(z) und S(z) sindfür ein gegebenes Wunschpolynom Ac(z)des geschlossenen Kreises zu bestimmen.
Die Reglerpolynome Rd (z) und Sd (z) sindfest vorgegeben, um z.B. ein gewünschtesSystemverhalten gegenüber Störungen zuerzielen. Eine häu�ge Annahme istRd (z) = z − 1 (integrales Reglerverhalten)und Sd (z) = 1.
Routine auf der Scilab-Website desFachgebiets.
Beispiele:�exec ( ' d i o . s c i ' ,−1)z=poly (0 , ' z ' ) ;
//Example 1A=z2+0.3∗ z +0.1 ;B=0.4+0.1∗ z ;Ac=z3+0.2∗ z2+0.3∗ z +0.4 ;Rd=1;Sd=1;[R , S]= d i o (A,B, Rd , Sd , Ac ) ;
//Example 2 wi th i n t e g r a t o rA=z2+0.3∗ z +0.1 ;B=0.4+0.1∗ z ;Ac=z4+2∗z3+0.2∗ z2+0.3∗ z +0.4 ;Rd=z−1;Sd=1;[R , S]= d i o (A,B, Rd , Sd , Ac ) ;� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 50 / 68
Scicos
Gliederung
1 Scilab
2 Lineare Systeme und Reglerentwurf
3 Scicos
4 Nichtlineare Regelsysteme
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 51 / 68
Scicos
Einführung
Was ist Scicos?Graphischer Editor zur Erstellung vonBlockdiagramm-Modellen
Blöcke von verschiedenen Paletten
Automatische Codegenerierungmöglich
Start von Scicos:�−−>s c i c o s ;� �Laden eines existierenden Diagramms:�−−>s c i c o s my_diagramm . cos ;� �ACHTUNG: Scilab - Command - Windowist zunächst blockiert, wenn Scicos läuft;Aktivierbar unter Scicos über MenüpunktTools → Activate Scilab Window
EditierenBlöcke hinzufügen über Menü: Edit →Palettes oder Pal Tree
Shortcuts:m - Block bewegen,c - kopieren, l - verbinden,o - Maske ö�nen, r - neu zeichen
Triggerung zeitdiskreter Blöcke wieScopes mittels einer Uhr
Bei Scopes den Wertebereich(Ymin,Ymax) und Darstellzeit (RefreshPeriod) festlegen!
SimulationSimulationseinstellungen über Menü:Simulate → Setup
Anpassen der Simulationsdauer: FinalIntegration Time
Start der Simulation über Menü:Simulate → Run
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 52 / 68
Scicos
Symbolische Parameter
Vorgehensweise
Alle Parameter aus demScilab-Workspace können in Scicos alssymbolische Parameter verwendetwerden.
Es emp�elt sich immer vor derSimulation den Menüpunkt Simulate-> Eval auszuführen, damit Scicos dieaktuellen Werte der Parameter kennt.(ACHTUNG: Ansonsten wird einbereits kompiliertes Modell mit altenParameterwerten simuliert!)
Um Daten zu ändern, muss man überden Menüpunkt Tools → ActivateScilab Window nach Scilab wechseln;Nach dem Anpassen der Daten einfachauf Scicos klicken! (Eval nichtvergessen)
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 53 / 68
Scicos
Datenaustausch über Dateien und Batchsimulation
DatenaustauschEinlesen und Speichern von Daten überASCII-Dateien, in denen die Daten inSpalten gespeichert sind.
Schreiben und Lesen der Dateien unterScilab mit write und read
Von Scicos gespeicherte Daten habenals erste Spalte immer die Zeit!
Eingangsdaten in Scilab können eineneigenen Zeitvektor beinhalten odergetaktet sein!
Die letzten de�nierten Eingangsdatenwerden gehalten.
Festlegen der Anzahl der Ein- undAusgänge und Dateinamen in Scicos.
Batch SimulationStarten der Simulation von Scilab aus!
Symb. Parameter über Scicos-Context!
Beispielskript:�// gen e r a t e i n pu t data// Sampl ing t ime 0 .1 assumedunix ( ' rm i n p u t_ f i l e ' ) ;u=[ zeros ( 0 : 0 . 1 : 1 ) . . .ones ( 1 . 1 : 0 . 1 : 2 ) . . .zeros ( 2 . 1 : 0 . 1 : 3 ) ] ' ;
wr i te ( ' i n p u t_ f i l e ' , u ) ;
load example . cos// pa ramete r s i n t o con t e x t%sc icos_context . k = 5 ;// s imu l a t i o ns c i c o s_ s imu l a t e ( scs_m , l i s t ( ) , . . .%sc icos_context ) ;
// read i n s t o r e d t ime and outpu t sdata=read ( ' o u t p u t_ f i l e ' ,−1 ,3) ;// arg : f i l e name , rows , columnsunix ( ' rm ou t p u t_ f i l e ' ) ;
t=data ( : , 1 ) ; y=data ( : , 2 ) ;u=data ( : , 3 ) ;� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 54 / 68
Scicos
Datenaustausch über Dateien und Batchsimulation
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 55 / 68
Scicos
Datenaustausch und Batchsimulation
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 56 / 68
Scicos
From/To Workspace
IdeeSpeichern von Signalen im Scilab-Workspace
Auslesen von Signalen aus dem Scilab-Workspace
Entsprechende Blöcke in den Paletten Sources und Sinks
Bei To Workspace muss spezi�ziert werden, wie viele Datenpunkte man speichern möchte!
Nach der Simulation sind die Signale als Struktur mit den Zeiten und Signalwerten unterdem spezi�zierten Variablennamen in Scilab verfügbar und können gespeichert oder ggf.weiter verarbeitet werden.
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 57 / 68
Scicos
Scicos - Blöcke 1/4
Idee
Erstellung eigener Blöcke (statischeroder dynamischer Natur) unter Scicos
Verschiedene Typen: Scilab (Type 5),C/C++ (Type 4)
Verarbeitene Funktion: ComputationalFunction
Scicos steuert die Funktionen über�ags:Flag 0: Berechnung der kont.ZustandsableitungenFlag 1: Berechnung der AusgängeFlag 2: Update der Zustände durchexterne Aktivierung
Ein- und Ausgänge können Matrizensein!
Comp. Functions müssen in Scilabgeladen werden, bevor Scicos gestartetwird!
Beispiel für System 3-ter Ordnung (kont.und zeitdiskret):�f unc t i on b l o ck=model ( b lock , f l a g )// Parameterk1=1;k2=2;i f f l a g==0 //\ dot x updateb l o ck . xd (1 ) = . . .−k1∗ b l o ck . x (1)+ b l o ck . i n p t r ( 1 )^2 ;b l o ck . xd (2 ) = . . .−k2∗ b l o ck . x (2)+ b l o ck . x ( 1 ) ;e l s e i f f l a g==2 // z updateb l o ck . z (1)= b l o ck . z (1)+b l o ck . i n p t r ( 1 ) ;e l s e i f f l a g==1 // ou tpu t s
b l o ck . o u t p t r ( 1 ) ( 1 ) = . . .b l o ck . x ( 1 ) ;
b l o ck . o u t p t r ( 2 ) ( 1 ) = . . .b l o ck . z ( 1 ) ;
b l o ck . o u t p t r ( 3 ) ( 1 : 2 ) = . . .b l o ck . x ;
endendfunct ion� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 58 / 68
Scicos
Scicos - Blöcke 2/4
DatenstrukturEingänge: block.inptr
Ausgänge: block.outptr
Kont. Zustand: block.x
Ableitung des kont. Zustands:block.xd
Zeit-diskreter Zustand: block.z
Reelle Parameter: block.rpar
Integer-Parameter: block.ipar
Listen-Parameter: block.opar
Matrizen als Zustände
Umwandlung der Matrix M (Zeitpunkt:k bzw. k + 1 , Dimension n x m) ineinen Vektor Mvec=M(:) (�ag 2).
Speichern des Vektors Mvec innerhalbvon block.z (�ag 2).
Auslesen des Vektors Mvec (Zeitpunkt:k − 1 bzw. k ) aus block.z (�ag 1).
Umwandlung des Vektors Mvec in eineMatrix M=matrix(Mvec,n,m) (�ag 1).
Achtung: Scicos ruft immer zuerst �ag1 auf, und dann �ag 2.
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 59 / 68
Scicos
Scicos - Blöcke 3/4
Einbinden in ScicosGenerelle Maske: Palette - Others,Block - Generic
Eintragen des Names derComputational Function, derDimension der Eingangs- undAusgangsgröÿen
Initialisierung der Zustände
Festlegung, ob ein direkter Durchgri�vom Ein- zum Ausgang existiert(Detektion algebraischer Schleifen).
Zeitdiskrete Blöcke mit einerAbtastzeit:Input event port size = [1]
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 60 / 68
Scicos
Scicos - Blöcke 4/4
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 61 / 68
Nichtlineare Regelsysteme
Gliederung
1 Scilab
2 Lineare Systeme und Reglerentwurf
3 Scicos
4 Nichtlineare Regelsysteme
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 62 / 68
Nichtlineare Regelsysteme
Simulation gewöhnlicher Di�erentialgleichungen
Vorgehensweise
De�nition des DGL-Systemsx = f (t, x) über eineFunktion, welche dieAbleitungen zurückliefert.
Zeitabhängigkeit der DGLmöglich!
Simulation der DGL mittels derFunktion ode.
Argumente von ode sind derVektor der Anfangswerte, dieAnfangszeit t0, der Zeitvektort für die Simulationausgabesowie der Name der Funktion,welche das DGL-Systemsbeschreibt.
Beispiel (Pendel):�−−>f unc t i on xdot=pendulum_ode ( t , x )−−> a=1; b=2;−−> xdot (1)=x ( 2 ) ;−−> xdot (2)=−a∗x(2)−b∗ s i n ( x ( 1 ) ) ;−−>endfunct ion� ��−−>t =0 : 0 . 0 1 : 1 0 ; t0=0;−−>x0=[%pi / 2 ; 0 ] ;−−>x=ode ( x0 , t0 , t , pendulum_ode ) ;−−>h=s c f ( ) ; plot2d ( t , x ( 1 , : ) , [ 2 ] ) ;−−>xs2eps ( h . f i g u r e_ id , ' ode . eps ' ) ;� �
0 1 2 3 4 5 6 7 8 9 10−0.5
0.0
0.5
1.0
1.5
2.0
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 63 / 68
Nichtlineare Regelsysteme
Erstellung von Vektorfelddiagrammen für Systeme 2. Ordnung
Vorgehensweise
De�nition des DGL-Systemsx = f (t, x) über eine Funktion,welche die Ableitungenzurückliefert.
Zeitabhängigkeit der DGL möglich!
Erstellung des Vektorfeldes mittelsder Funktion fchamp.
Argumente von fchamp sindzunächst der Name der Funktion,welche das DGL-Systemsbeschreibt sowie der Zeitpunkt tzur Berechnung des Vektorfeldesbei zeitvarianten Systemen.Anschlieÿend werden zwei Vektorenübergeben, welche die Gitterpunktebestimmen, an denen die Vektorengezeichnet werden. Optionalkönnen die Gröÿe der Pfeile und dieAchsenmaÿe vorgegeben werden.
�−−>f unc t i on xdot=pendulum_ode ( t , x )−−> xdot (1)=x ( 2 ) ;−−> xdot (2)=−1∗x (2)−2∗ s i n ( x ( 1 ) ) ;−−>endfunct ion� ��−−>x1=−4:0 .5 :4 ; x2 =−4:0 .5 :4 ; t =0;−−>fchamp ( pendulum_ode , 0 , x1 , x2 , . . .−−> 1 , [ −4 , −4 ,4 ,4 ] ) ;� �
−4 −3 −2 −1 0 1 2 3 4−4
−3
−2
−1
0
1
2
3
4
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 64 / 68
Nichtlineare Regelsysteme
Einführung in die Symbolic Toolbox
GenerellesDie Toolbox ist nicht in der Standardinstallation enthalten.
Quelle: http://www.cert.fr/dcsd/idco/perso/Magni/toolboxes.html#symbolic
Basierend auf Maxima, einem Computeralgebrasystem
Maxima und Perl müssen installiert sein.
Scilab kommuniziert mit Maxima.
Die Symbolic Toolbox sollte im Scilab-Programmverzeichniss installiert sein.
Initialisierungsskript (Laden der Toolbox und De�nition der Jacobian-Matrix):�−−> i f e x i s t s ( 'MAX' )==0;−−> exec ( ' SCI/OVLD/ l o a d e r . s c e ' )−−> exec ( ' SCI/SYM/ l o a d e r . s c e ' )−−> mexec ( ' j a c o b i a n ( e , v a r s ):= b l o ck ( [m, n , i , j ] , i f mat r i xp ( v a r s ) . . .−−> then n : l e n g t h ( v a r s ) e l s e [ n : 1 , v a r s : mat r i x ( [ v a r s ] ) ] , . . .−−> i f mat r i xp ( e ) then m: l e n g t h ( e ) e l s e [m: 1 , e : mat r i x ( [ e ] ) ] , . . .−−> genmat r i x ( lambda ( [ i , j ] , d i f f ( e [ i , 1 ] , v a r s [ j , 1 ] ) ) ,m, n ) ) $ ' ) ;−−> %st_isempty = [ ] ;−−>end ;� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 65 / 68
Nichtlineare Regelsysteme
Symbolic Toolbox Beispiel: Linearisierung 1/3
StartDe�nition von symbolischen Variablen mittel syms
Viele Maxima Befehle wurden nach Scilab überführt.
Alle Maxima Befehle lassen sich mittels dem Befehl maxima aus Scilab heraus starten.
Beispiel - Ruhelagen und Linearisierung des Systems
x1 = x2
x2 = −x1 + x31 − x2.�−−>// d e c l a r e s ymbo l i c v a r i a b l e s−−>syms x1 x2 lambda−−>// d e c l a r e v e c t o r f u n c t i o n−−>f=[x2 ; −x1+x1^3−x2 ] ;−−>// d e c l a r e s t a t e s−−>x=[x1 ; x2 ] ;−−>// f i n d e q u i l i b r i um po i n t s−−>RL=maxima ( ' s o l v e ' , syml ( [ f ( 1 ) , f ( 2 ) ] ) , syml ( [ x1 , x2 ] ) ) ;� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 66 / 68
Nichtlineare Regelsysteme
Symbolic Toolbox Beispiel: Linearisierung 2/3
�−−>[RL . x1 RL . x2 ]ans =
!−1 0 !! !! 1 0 !! !! 0 0 !−−>// l i n e a r i s e−−>A=maxima ( ' j a c o b i a n ' , f , x )A =!0 1 !! !!3∗ x1^2−1 −1 !−−>// l i n e a r i s a t i o n at e q u i l . p o i n t 1−−>A_RL1=subs (A , [ x1 x2 ] , [ RL . x1 (1 ) RL . x2 ( 1 ) ] )A_RL1 =!0 1 !! !! 2 −1 !� �H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 67 / 68
Nichtlineare Regelsysteme
Symbolic Toolbox Beispiel: Linearisierung 3/3
�−−>// e i g e n v a l u e s−−>e i g (A_RL1)ans =
!1 !! !!−2 !−−>// conv e r t s ymbo l i c type to s c i l a b mat r i x−−>A_RL1=db l (A_RL1)A_RL1 =
0 . 1 .2 . − 1 .� �
H. Nahrstaedt, T. Schauer (FG RS) Einführung in Scilab/Scicos/RtaiLab 20. Mai 2008 68 / 68