kramann.info
© Guido Kramann

Login: Passwort:










Regelungssysteme
1 day_by_day
2 Heizregelkreis
3 Verzoegerungsglieder
4 Laplace
..4.1 Eigenwerte
..4.2 PT1
..4.3 PRegler
..4.4 Scilab
5 Regleroptimierung
..5.1 Guetefunktion
..5.2 Heuristiken
..5.3 Scilab
..5.4 Gradientenverfahren
..5.5 ModifizierteG
..5.6 Gleichstrommotor
..5.7 Stoerverhalten
6 Javaanwendung
..6.1 PIDgeregelterAntrieb
..6.2 RungeKuttaIntegrator
..6.3 Gradientenverfahren
7 Einstellregeln
..7.1 Totzeit
..7.2 Methode1
..7.3 Methode2
..7.4 Scilab
..7.5 Daempfungsgrad
..7.6 Uebung
8 Polvorgabe
9 Beobachter
10 AutonomerHackenprosche
..10.1 Herleitung
..10.2 Scilab
..10.3 Modellerweiterung
..10.4 Scilab
..10.5 Modellgueltigkeit
..10.6 java
11 Stabilitaet
..11.1 Beispiele
..11.2 Nyqusitkriterium
..11.3 Windup
..11.4 Bode
12 Adaptiv
..12.1 Definition
..12.2 Einachser
..12.3 Auswertung
..12.4 Identifikation
..12.5 Regleroptimierung
..12.6 Zustandsregler
..12.7 Beobachter
13 Analyse
..13.1 Linear
..13.2 Nichtlinear
14 Kalmanfilter
15 Ue_04_2014
..15.1 Geschwindigkeit
..15.2 Richtung
..15.3 Gesamtsystem
..15.4 RiccatiUSW
..15.5 TdOT
16 Inverses_Pendel
17 Einachser
..17.1 Mechanik
..17.2 Uebung8
18 Fuzzy
..18.1 Fuzzylogik
..18.2 FuzzyRegler
..18.3 Uebung9
..18.5 Softwareentwicklung
....18.5.1 AgileSoftwareentwicklung
....18.5.2 FuzzyRegler
....18.5.3 Uebung
..18.6 Umsetzung
....18.6.1 FuzzyRegler
....18.6.2 Simulation
....18.6.3 Optimierung
....18.6.4 Uebung
..18.7 Haengependel
....18.7.1 Haengependel
....18.7.2 Simulation
....18.7.3 FuzzyRegler
....18.7.4 Optimierer
....18.7.5 Genetisch
..18.8 Information
..18.9 Energie
21 Beispiel1
98 day_by_day_WS2021_SoSe21
99 day_by_day_SoSe2018
kramann.info
© Guido Kramann

Login: Passwort:




Regelungstechnik day by day Sommersemester 2019

(EN google-translate)

(PL google-translate)

1 -- Donnerstag 21.03.2019

Behandelte Kapitel:

62_Regelungssysteme/02_Heizregelkreis
62_Regelungssysteme/03_Verzoegerungsglieder
62_Regelungssysteme/04_Laplace

2 -- Dienstag 26.03.2019

Themen:

  • PT1-Übertragungsglied
  • Laplace-Regeln
  • Überprüfung mit Scilab
  • P-Regler
  • Eigenwerte

//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)

Plot der Sprungantwort (aus Scilab-Skript oben).

Bild 0-1: Plot der Sprungantwort (aus Scilab-Skript oben).

Kapitel:

62_Regelungssysteme/04_Laplace/03_PRegler
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.

Plot zu 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:

  • Ergänzung eines P-Reglers im Zeitbereich beim Scilab-Skript.
  • Ergänzung eines P-Reglers im Laplacebereich beim Scilab-Skript.
  • Rechnerischer Nachweis der Identität beider Darstellungen
  • Untersuchung der veränderten Dynamik des geschlossenen gegenüber dem offenen Regelkreis.

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:

62_Regelungssysteme/07_Einstellregeln (mit Unterkapiteln)
ziegler1.zip -- Alle in der Vorlesung entwickelten Scilab-Skripte.
Plots für P-Regelung (blau), PI-Regelung (grün) und PID-Regelung (rot) nach Auslegung mit Methode1 nach Ziegler und Nichols.

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

  • Thema: Polvorgabe
62_Regelungssysteme/08_Polvorgabe

Einfaches Kriterium für die Festlegung der Lage der Polstellen:

62_Regelungssysteme/07_Einstellregeln/05_Daempfungsgrad

7 -- Dienstag 07.05.2019

  • Wiederholung der Behandlung von Zustandsreglern, die nicht auf Null regeln.
  • Wiederholungen in Hinblick auf den ersten E-Test.

8 -- Dienstag 14.05.2019


1. E-TEST (IWZ135 12:30-14:00)


9 -- Dienstag 21.05.2019

  • Sörverhalten
  • Modellierung invertiertes Pendel als Grundlage weiterer Reglerentwürfe.

Bild 0-4:

Bild 0-5:

10-- Dienstag 28.05.2019

  • Linearisierung des Modells des invertierenden Pendels
  • Reglerauslegung mit Polstellenvorgabe
inverspendel.zip -- Umsetzung: Suche von R, Verwenden im Originalsystem.
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

Anfangsbedingungen im Fangbereich des Reglers: y0 = [0.2,0.1]';

Bild 0-6: Anfangsbedingungen im Fangbereich des Reglers: y0 = [0.2,0.1]';

Anfangsbedingungen außerhalb des Fangbereichs des Reglers: y0 = [0.4,0.1]';

Bild 0-7: Anfangsbedingungen außerhalb des Fangbereichs des Reglers: y0 = [0.4,0.1]';

11-- Dienstag 04.06.2019

  • Aufbau eines Optimierers, der nach einem modifizierten Gradientenverfahren arbeitet, um optimale Parameter für den Zustandsregler des invertierenden Pendels zu finden.
  • Einbau eines "Fake-Zustands": Integral des Winkels &#phi;, um einen I-Anteil im Zustandsregler zu ermöglichen.
  • Fuzzy-Regelung als alternatives Konzept zur Regelung eines invertierenden Pendels (Vorschau)
50_Simulationstechnik/06_Optimierung/01_Gradientenverfahren -- Wiederholung Gradientenverfahren
50_Simulationstechnik/06_Optimierung/03_ModifizierteG -- Implementierung eines modifizierten Gradientenverfahrens mit Scilab (Wiederholung)
67_Echtzeitsysteme/13_Fuzzy -- Einführung Fuzzy-Logik / Fuzzy-Regler
  • Musterlösung aus der Vorlesung für die Optimierung mittels Gradientenverfahren:
inverpendel_gradient.zip
Simulationsergebnis nach Optimierung.

Bild 0-8: Simulationsergebnis nach Optimierung.

Unzulänglichkeiten:

  • Es müßten mehrere Simulationen mit mhereren Anfangsbedingungen als Grundlage für die Fehlerfunktion berechnet werden.
  • Eine Begrenztheit für die Stellkraft wurde nicht berücksichtigt.
  • Der Fangbereich und dessen mögliche Vergrößerung wurde nicht mit untersucht.
  • Der Code ist in mehrere Skripte aufgeteilt, die nacheinander ausgeführt werden (gesteuert durch optimierer.sce):
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

  • Fragestunde zum zweiten E-Test
  • Ergänzungen:
62_Regelungssysteme/11_Stabilitaet -- Stabilität, Ortskurve, Bodediagramm.

13-- Dienstag 18.06.2019


2. E-TEST (IWZ135 12:30-14:00)


14-- Dienstag 25.06.2019

  • Besprechung E-Test
  • I-Anteil bei Zustandsregler ergänzen
  • Modell für Gesamtzustand aufstellen und regeln
  • Kraftbegrenzung bei Stellgliedern
  • Fuzzy-Regler
  • HIL für invertierendes Pendel
  • Robustheit
  • Zustandsregler mit Beobachter



14b -- Mittwoch 26.06.2019 (2. E-TEST)