Regelungstechnik day by day Sommersemester 2019
(EN google-translate)
(PL google-translate)
1 -- Donnerstag 21.03.2019
Behandelte Kapitel:
62_Regelungssysteme/03_Verzoegerungsglieder
62_Regelungssysteme/04_Laplace
2 -- Dienstag 26.03.2019
Themen:
|
//s als Argument für ein Polynom definieren: s = poly(0,"s"); //Übertragungsfunktion definieren: G = syslin('c',[1],[1+2*s+s^2]); t=[0:0.01:10]; u=ones(1,1001); y=csim(u,t,G); plot2d(t,y); //plzr(G);
Code 0-1: Verwendung von Scilab zur Handhabung von Übertragungsfunktionen (Beispiel)
Bild 0-1: Plot der Sprungantwort (aus Scilab-Skript oben).
Kapitel:
62_Regelungssysteme/07_Einstellregeln/04_Scilab (Ü5 modifiziert)
Aufgabe: Feder-Masse-Schwinger mit äußerer Kraft F im Zeit- und Laplacebereich simulieren. Lösung:
m = 1.0; C = 1.0; D = 1.0; F = 10.0; function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); f(1,1) = v; f(2,1) = -(C/m)*x -(D/m)*v + F/m; endfunction t = linspace(0,30,3000); y0 = [0,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)','gre'); // ----------------------------------------- // Laplace-Darstellung: //s als Argument für ein Polynom definieren: s = poly(0,"s"); //Übertragungsfunktion definieren: G = syslin('c',[1],[m*s*s + D*s + C]); u=10*ones(1,3000); //entspricht F y=csim(u,t,G); plot(t,y,'blu--'); //plzr(G);
Code 0-2: Feder-Masse-Schwinger mit äußerer Kraft F im Zeit- und Laplacebereich simulieren.
Bild 0-2: Plot zu Feder-Masse-Schwinger mit äußerer Kraft F im Zeit- und Laplacebereich simulieren.
3 -- Dienstag 02.04.2019
Fortsetzung des Themas der letzten Woche:
|
Beachten Sie: Input-Größe des offenen Regelkreises ist die Stellgröße u (Sprung), Input-Größe des geschlossenen Regelkreises ist der Sollwert (/die Führungsgröße) w.
m = 1.0; C = 1.0; D = 1.0; F = 10.0; K = 10.0; //erreicht 9,5 (näher an Sollwert, stärkeres Schwingen zu Beginn) //K = 1.0; //erreicht 5 (halb so groß wie Sollwert) // Laplace-Darstellung: //s als Argument für ein Polynom definieren: s = poly(0,"s"); //Übertragungsfunktion definieren: G = syslin('c',[1],[m*s*s + D*s + C]); R = syslin('c',[K],[1]); H = R*G; Q = R*G/(1+R*G); t = linspace(0,30,3000); u=10*ones(1,3000); //entspricht xsoll y=csim(u,t,Q); plot(t,y,'blu--'); //plzr(Q); //Polstellen des Gesamtsystems anzeigen.
Code 0-3: Linearer Schwinger mit Dämpfung mit P-Regler, Realisierung im Laplace-Bereich mit Scilab.
m = 1.0; C = 1.0; D = 1.0; F = 10.0; xsoll = 1.0; K = 10; function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); F = K*(xsoll - x); f(1,1) = v; f(2,1) = -(C/m)*x -(D/m)*v + F/m; endfunction t = linspace(0,30,3000); y0 = [0,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)','gre');
Code 0-4: Linearer Schwinger mit Dämpfung mit P-Regler, Realisierung im Zeit-Bereich mit Scilab.
4 -- Dienstag 09.04.2019
Das Auslegungsverfahren nach Ziegler und Nichols:
ziegler1.zip -- Alle in der Vorlesung entwickelten Scilab-Skripte.
Bild 0-3: Plots für P-Regelung (blau), PI-Regelung (grün) und PID-Regelung (rot) nach Auslegung mit Methode1 nach Ziegler und Nichols.
5 -- Dienstag 16.04.2019
62_Regelungssysteme/07_Einstellregeln/06_Uebung (Übung zu Ziegler-Nichols in Hinblick auf den Tag der Offenen Tür)62_Regelungssysteme/07_Einstellregeln/05_Daempfungsgrad -- Einführung des Begriffs "Dämpfungsgrad"
23.04.2019 keine Vorlesung (Ostern)
6 -- Dienstag 30.04.2019
|
Einfaches Kriterium für die Festlegung der Lage der Polstellen:
7 -- Dienstag 07.05.2019
|
|
8 -- Dienstag 14.05.2019
1. E-TEST (IWZ135 12:30-14:00)
9 -- Dienstag 21.05.2019
|
Bild 0-4:
Bild 0-5:
10-- Dienstag 28.05.2019
|
clear(); disp("Schritt 1: Eigenwerte des linearisierten Systems:"); // phi.. = phi * mgh/J + FA * h/J // => phi. = om // om. = phi * mgh/J + FA * h/J // => m = 1; //kg g = 9.81; //m/s^2 h = 0.5; //m r = 0.1; //m l = 2*h; J = 0.25*m*r^2 + (1/12)*m*l; // kg*m^2 A = [0,1 ; m*g*h/J, 0] B = [0;h/J] lambda = spec(A); disp("EW ohne Regler:"); disp(lambda); // lambda1/2= +/- 7.5594729 (instabil) disp("Schritt 2: Bestimmung der Parameter des Zustandsreglers mit ppol:"); //R=ppol(A,B,EW), [phi.; om.] = A*y - B*R*y //(vergl. Kapitel 8 unten) //Ergebnis überprüfen: EW = [-1+%i,-1-%i] R=ppol(A,B,EW) // == 10.153333 0.3433333 spec(A-B*R) disp("Testen des Refglers im Originalsystem: siehe inverspendel_test.sce"); // FA = -10.153333*phi -0.3433333*om
Code 0-5: inverspendel.sce
clear(); disp("Verwenden der Regelparameter im Originalsystem:"); m = 1; //kg g = 9.81; //m/s^2 h = 0.5; //m r = 0.1; //m l = 2*h; //m J = 0.25*m*r^2 + (1/12)*m*l; // kg*m^2 function f = rechteSeite(t,y) phi = y(1,1); om = y(2,1); f(1,1) = om; FA = -10.153333*phi -0.3433333*om; N = J + m*h*h*sin(phi)*sin(phi); f(2,1) = (-m*h*h*om*om*sin(phi)*cos(phi) + h*m*sin(phi)*g + h*cos(phi)*FA )/N; endfunction t = linspace(0,20,3000); y0 = [0.2,0.1]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)',t,y(2,:)');
Code 0-6: inverspendel_test.sce
Bild 0-6: Anfangsbedingungen im Fangbereich des Reglers: y0 = [0.2,0.1]';
Bild 0-7: Anfangsbedingungen außerhalb des Fangbereichs des Reglers: y0 = [0.4,0.1]';
11-- Dienstag 04.06.2019
|
50_Simulationstechnik/06_Optimierung/03_ModifizierteG -- Implementierung eines modifizierten Gradientenverfahrens mit Scilab (Wiederholung)
67_Echtzeitsysteme/13_Fuzzy -- Einführung Fuzzy-Logik / Fuzzy-Regler
|
Bild 0-8: Simulationsergebnis nach Optimierung.
Unzulänglichkeiten:
|
|
R1=10.153333; R2=0.3433333; m = 1; //kg g = 9.81; //m/s^2 h = 0.5; //m r = 0.1; //m l = 2*h; //m J = 0.25*m*r^2 + (1/12)*m*l; // kg*m^2 function f = rechteSeite(t,y) phi = y(1,1); om = y(2,1); f(1,1) = om; FA = -R1*phi -R2*om; N = J + m*h*h*sin(phi)*sin(phi); f(2,1) = (-m*h*h*om*om*sin(phi)*cos(phi) + h*m*sin(phi)*g + h*cos(phi)*FA )/N; endfunction
Code 0-7: modell.sce
function z = berechneFehler(RR1,RR2) R1 = RR1; R2 = RR2; t = linspace(0,20,3000); y0 = [0.2,0.1]'; t0 = 0; yy = ode(y0,t0,t,rechteSeite); fehler = sum(abs(yy(1,:))); z = fehler; endfunction //Wie oben, aber mit Ausgaben: function z = berechneFehlerTest(RR1,RR2) R1 = RR1; R2 = RR2; t = linspace(0,20,3000); y0 = [0.2,0.1]'; t0 = 0; yy = ode(y0,t0,t,rechteSeite); fehler = sum(abs(yy(1,:))); disp(fehler); plot(t,yy(1,:)',t,yy(2,:)'); z = fehler; endfunction
Code 0-8: fehlerfunktion.sce
clear(); exec modell.sce exec fehlerfunktion.sce RRR1_start = 10; RRR2_start = 0.3; RRR1 = RRR1_start; RRR2 = RRR2_start; ALFA1 = 0.01; ALFA2 = 0.01; FAKTOR = 1.01; aktueller_fehler = berechneFehler(RRR1,RRR2); for i=1:1000 //innere Befehle iterativ ausführen dx = floor(grand(1, 1, "unf", 0, 2.999999999)) - 1; //liefert -1 oder +1 zufällig dy = floor(grand(1, 1, "unf", 0, 2.999999999)) - 1; //liefert -1 oder +1 zufällig RRR1_neu = RRR1 + ALFA1*dx; RRR2_neu = RRR2 + ALFA2*dy; neuer_fehler = berechneFehler(RRR1_neu,RRR2_neu); //Prüfen, ob neuer Fehler kleiner, wenn ja, zu neuem Punkt gehen, sonst bei altem bleiben if neuer_fehler<=aktueller_fehler then RRR1 = RRR1_neu; RRR2 = RRR2_neu; if neuer_fehler<=aktueller_fehler then disp('fehler='+string(aktueller_fehler)); disp('RRR1='+string(RRR1)); disp('RRR2='+string(RRR2)); end aktueller_fehler = neuer_fehler; if dx>0 then ALFA1 = ALFA1 * FAKTOR; end if dx<0 then ALFA1 = ALFA1 * FAKTOR; end if dy>0 then ALFA2 = ALFA2 * FAKTOR; end if dy<0 then ALFA2 = ALFA2 * FAKTOR; end else if dx>0 then ALFA1 = ALFA1 * (1/FAKTOR); end if dx<0 then ALFA1 = ALFA1 * (1/FAKTOR); end if dy>0 then ALFA2 = ALFA2 * (1/FAKTOR); end if dy<0 then ALFA2 = ALFA2 * (1/FAKTOR); end end end berechneFehlerTest(RRR1,RRR2);
Code 0-9: optimierer.sce
12-- Dienstag 11.06.2019
|
13-- Dienstag 18.06.2019
2. E-TEST (IWZ135 12:30-14:00)
14-- Dienstag 25.06.2019
|