kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Simulations- u. Regelungstechnik im Wintersemester 2025/26

(EN google-translate)

(PL google-translate)

  • Studierendengruppen: 5-3-MT
  • Hier bei "day by day" werden chronologisch im Verlauf des Semesters die behandelten Inhalte vermerkt.
  • Meistens werden Links innerhalb von kramann.info angegeben, wo der jeweils behandelte Stoff dargestellt wird.
  • Zur Orientierung finden Sie auf kramann.info auch noch das "day by day" der gleichen Lehrveranstaltung vom vorangehenden Jahr.
  • Die Prüfung in diesem Fach ist eine Klausur in elektronischer Form (E-Test)

SRT am Dienstag den 16.11.2025 -- TEIL 1: FUZZY LOGIK, FUZZY SYSTEME, FUZZY REGLER

Themen

  1. Überblick
  2. Fuzzy-Logik
  3. Fuzzy-Regler
  4. Übungen

1. Überblick

In der Lehrveranstaltung Simulations- und Regelungstechnik 2 werden Themen aus der ersten Vorlesung, wie der Zustandsregler, weiter vertieft und Sonderthemen, wie beispielsweise Fuzzy-Regler, neu eingeführt. Auch erhält das Thema Optimierung ein größeres Gewicht.

2. Fuzzy-Logik

62_Regelungssysteme/18_Fuzzy -- Theorie
62_Regelungssysteme/18_Fuzzy/03_Uebung9 -- Beispiel 1
02_WS2021_22/05_REGmecha5/01_day_by_day -- Beispiel 2
72_COACH2/12_Fuzzy/01_Uebungsaufgabe -- Übung
80_Robuste_Systemintegration/10_EvoFuzzy -- Preview: Aufbau von Fuzzy-Reglern und deren Optimierung über Evolutionäre Algorithmen

3. Fuzzy-Regler

Beispiel für einem Fuzzy-Regler.

Bild 0-1: Beispiel für einem Fuzzy-Regler.

Übung: Ersetze den Zustandsregler unten durch einen Fuzzy-Regler
Umzusetzender Fuzzy-Regler (gleiche Geometrie wie oben, aber andere Regeln und erweitertes Ausgangsfuzzyset)

Bild 0-2: Umzusetzender Fuzzy-Regler (gleiche Geometrie wie oben, aber andere Regeln und erweitertes Ausgangsfuzzyset)

clear;

function F = fregler(x,v)
    F = -x-v;
endfunction

function f = rechteSeite(t,y)
    x = y(1,1);
    v = y(2,1);

    F = fregler(x,v);

    f(1,1) =  v;
    f(2,1) = -x + F;
endfunction

t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);

plot(t,y(1,:)',t,y(2,:)');

Code 0-1: Rahmensystem, in dem der Zustandsregler durch die Implementierung eines Fuzzy-Reglers ersetzt werden soll.

clear;

function nzp = fuzzysetX(x)

endfunction
function nzp = fuzzysetV(v)

endfunction

function F = fregler(x,v)
   // 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße
   //    jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet.
   nzp_x = fuzzysetX(x);
   nzp_v = fuzzysetX(v);
   // 2. Erfülltheitsgrade jeder Regel berechnen
   erfuelltheit = zeros(9);
   erfuelltheit(1) = min(nzp_x(1),nzp_v(1));
//...
   // 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung.


endfunction

function f = rechteSeite(t,y)
    x = y(1,1);
    v = y(2,1);

    F = fregler(x,v);

    f(1,1) =  v;
    f(2,1) = -x + F;
endfunction

t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);

plot(t,y(1,:)',t,y(2,:)');

Code 0-2: Noch unfertige Umsetzung, jedoch mit kompletter Programmstruktur.

clear;

function A=flaecheTrapez(h)
    q = 2.0;
    p = 2.0*(1.0-h);
    A = h*(p+q)/2.0;
end

function nzp = fuzzysetX(x)
   nzp = zeros(3);
   if x<-1 then
      nzp(1)=1.0;
      nzp(2)=0.0;
      nzp(3)=0.0;
   elseif x<0 then
      nzp(1)=-x;
      nzp(2)=1-nzp(1);
      nzp(3)=0.0;
   elseif x<1 then
      nzp(3)=x;
      nzp(2)=1-nzp(3);
      nzp(1)=0;
   else
      nzp(1)=0.0;
      nzp(2)=0.0;
      nzp(3)=1.0;
   end
endfunction

function nzp = fuzzysetV(v)
   nzp = zeros(3);
   if v<-1 then
      nzp(1)=1.0;
      nzp(2)=0.0;
      nzp(3)=0.0;
   elseif v<0 then
      nzp(1)=-v;
      nzp(2)=1-nzp(1);
      nzp(3)=0.0;
   elseif v<1 then
      nzp(1)=0.0;
      nzp(3)=v;
      nzp(2)=1-nzp(3);
   else
      nzp(1)=0.0;
      nzp(2)=0.0;
      nzp(3)=1.0;
   end
endfunction

function erg=mini(x,y)
   if x<y then
      erg=x;
   else
      erg=y;
   end
end

function F = fregler(x,v)
   // 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße
   //    jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet.
   nzp_x = fuzzysetX(x);
   nzp_v = fuzzysetV(v);
   // 2. Erfülltheitsgrade jeder Regel berechnen
   ef = zeros(9); //erfuelltheit
   ef(1) = mini(nzp_x(1),nzp_v(1)); //Regel 1
   ef(2) = mini(nzp_x(2),nzp_v(1)); //Regel 2
   ef(3) = mini(nzp_x(3),nzp_v(1)); //...
   ef(4) = mini(nzp_x(1),nzp_v(2));
   ef(5) = mini(nzp_x(2),nzp_v(2));
   ef(6) = mini(nzp_x(3),nzp_v(2));
   ef(7) = mini(nzp_x(1),nzp_v(3));
   ef(8) = mini(nzp_x(2),nzp_v(3));
   ef(9) = mini(nzp_x(3),nzp_v(3));


//...
   //F = F/Ages;
   // 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung.
   F=0.0;
   Ages=0.0;   

   sp=[2,1,0,1,0,-1,0,-1,-2];

   //Regel 1..9:
   for i=1:9
     A=flaecheTrapez(ef(i));
     s=sp(i);   
     Ages=Ages+A;
     F=F+s*A;
   end


   F=F/Ages;
endfunction

function f = rechteSeite(t,y)
    x = y(1,1);
    v = y(2,1);
    F = fregler(x,v);
    f(1,1) =  v;
    f(2,1) = -x + F;
endfunction

t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);

plot(t,y(1,:)',t,y(2,:)');


Code 0-3: Komplettes System.

4. Übungen

Aufgabe 1

Am Eingang eines Fuzzy-Systems liegen folgende Werte an: x=2, y=-1

Fuzzy-System.

Bild 0-3: Fuzzy-System.

Die Fuzzy-Regeln lauten:


r1: WENN xgross UND ygross DANN Fklein
r2: WENN xgross UND yklein DANN Fklein
r3: WENN xklein UND ygross DANN Fgross
r4: WENN xklein UND yklein DANN Fgross


Code 0-4: Fuzzy-Regeln

Geben Sie den Erfülltheitsgrad zu jeder Regel an.

r1=...
r2=...
r3=...
r4=...

Code 0-5: Erfülltheitsgrad zu jeder Regel.

Aufgabe 2
Fuzzy-System.

Bild 0-4: Fuzzy-System.

  • Oben ist ein Fuzzy-System komplett mit den Fuzzy-Regeln gegeben.
  • Implementieren Sie dieses System als Funktion in Java-Processing und C.
  • Der Kopf der Funktion soll folgende Form haben: double berechneC(double A, double B).
  • Erstellen Sie mit Hilfe der Funktion eine Wertetabelle, in der im relevanten Bereich A und B kombiniert werden und C berechnet wird.

SRT am Dienstag den 16.11.2025 -- TEIL 2: OBJEKTORIENTIERTE PROGRAMMIERUNG

  1. Einführung in Java-Processing
  2. Einführung in die Objektorientierte Programmierung mit Java-Processing
  3. Vergleich: Objektorientierte Programmierung mit C/C++
  4. Einführung in Android-Processing
  5. Einrichtung eines Hotspots unter Linux und unter Android
  6. Programmierung von Anwendungen mit UDP
  7. Schnittstellen / Interfaces
Studentische Lösung
clear;
mode(0);
clc;

A=3.5;
B=2.5;

function a = SystemA(A)
    if A<=2 then
        a(1)=1;
        a(2)=0;
        a(3)=0;
    end
    if A>2 && A<=3 then
        a(1)=-A+3;
        a(2)=A-2;
        a(3)=0;
    end
    if A>3 && A<=4 then
        a(1)=0;
        a(2)=-A+4;
        a(3)=A-3;
    end
    if A>4 then
        a(1)=0;
        a(2)=0;
        a(3)=1;
    end
endfunction

function b = SystemB(B)
    if B<=2 then
        b(1)=1;
        b(2)=0;
        b(3)=0;
    end
    if B>2 && B<=3 then
        b(1)=-B+3;
        b(2)=B-2;
        b(3)=0;
    end
    if B>3 && B<=4 then
        b(1)=0;
        b(2)=-B+4;
        b(3)=B-3;
    end
    if B>4 then
        b(1)=0;
        b(2)=0;
        b(3)=1;
    end
endfunction

function A=flaecheTrapez(h)
    q = 2.0;
    p = 2.0*(1.0-h);
    A = h*(p+q)/2.0;
end

function C = berechneC (A,B)
    a=SystemA(A);
    b=SystemB(B);
    
    Reg1=min(a(1),b(3));
    Reg2=min(a(2),b(2));
       
    A1=flaecheTrapez(Reg1);
    A2=flaecheTrapez(Reg2);
    
    s1=4;
    s2=5;
    
    C=(s1*A1+s2*A2)/(A1+A2);
    pause;
endfunction

C=berechneC(A,B);


Code 0-6: Studentische Lösung zu Aufgabe 2.

1. Einführung in Java-Processing

78_Processing
SRT001.zip -- Lösung zu Aufgabe 2 oben mit Java-Procressing.
public class Vektor
{
     double x,y;
     
     public double berechneLaenge()
     {
         return Math.sqrt(x*x+y*y);
     }
}


public void setup()
{
    Vektor v1,v2;
    v1 = new Vektor();
    v2 = new Vektor();
    
    v1.x = 3.0;
    v1.y = 4.0;
    
    v2.x = 1.0;
    v2.y = 0.0;
    
    println("Länge v1: "+v1.berechneLaenge());
    println("Länge v2: "+v2.berechneLaenge());
}

public void draw()
{
}

Code 0-7: Konzept der Objektorientierung am Beispiel des mathematischen R2-Vektors

2. Einführung in die Objektorientierte Programmierung mit Java-Processing

Allgemein: 30_Informatik3/01_Vom_struct_zur_Klasse/06_Objektabstraktion

3. Vergleich: Objektorientierte Programmierung mit C/C++

C++: 30_Informatik3/01_Vom_struct_zur_Klasse/03_Klassen_Programm

4. Einführung in Android-Processing

93_Android_Proc
77_Android

5. Einrichtung eines Hotspots unter Linux und unter Android, oder mittels eines Routers

Vernetzung mehrerer Geräte: 92_Soundinstallation/03_material/11_Snippets/11_UDP

Hotspot Android Device

05_esp32AV/01_Bauanleitung/01_Elektronik_und_Software/03_Videostream

Hotspot Linux Computer

08_Archiv/06_Ing/01_Bauplan/04_Hotspot

W-LAN-Router

siehe ganz unten!: Einrichtung am Beispiel von tp-link-W-LAN-Routern: 05_esp32AV/01_Bauanleitung/03_FAQs

6. Programmierung von Anwendungen mit UDP

Internetprogrammierung -- 67_Echtzeitsysteme/09_Internetprogrammierung/04_Java

7. Schnittstellen / Interfaces