Autor Beitrag
Andy090778
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 14.05.06 00:18 
Hallo zusammen,

ich wollte mal der Allgemeinheit was Gutes tun, und stelle hier mal ein Beispielprogramm für einen PID-Regler rein. Am Programm bastel ich zur Zeit wieder. Den alten Status von 2002 will ich aber gerne veröffentlichen.

Programm-Kurzerklärung:
Das Programm wechselt zwischen Sollwertvorgaben +10,00 und -10,00.
Durch anpassen der PID-Faktoren kann der Verlauf des Istwerts verändert werden.

Hier im TimerPID befindet sich der eigentliche Regler:

EDIT: Neuester Code, bitte den im Programm ersetzen ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
      //P-Anteil
      P := Diff * StrToFloat(P_Faktor.Text);
      //I-Anteil
      I := (I +Diff) * StrToFloat(I_Faktor.Text);
      //D-Anteil
      D := (Diff - D_Save) * StrToFloat(D_Faktor.Text);
      D_Save := Diff;
      //Stellwert
      F := P + I + D;


Gute Ergebnisse hab ich durch P=100 I=0,90 und D=1000 erzielt.

ausblenden Delphi-Quelltext
1:
2:
  QPC := GetTickCount();
  dt := (QPC - QPC_OLD)/1000;


Der berechnete Stellwert entspricht hier im Beispiel der Beschlunigung a:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    A := Stellwert / StrToFloat(M_Faktor.Text);
    V := V + A * t - V * K;
    if V > StrToFloat(V_Faktor.Text) then
      V := StrToFloat(V_Faktor.Text);
    if V < -StrToFloat(V_Faktor.Text) then
      V := -StrToFloat(V_Faktor.Text);
    Istwert := Istwert + V * t;


V dann der Geschwingigkeit v und der Istwert ist der Weg s.

Der Anteil V * K, der von der Geschwingkeit abgezogen wird antspricht einer einfachen geschwindigkeitsabhängigen Verzögerung. So kann ziemlich einfach eine Störgröße (wie im Realen) simuliert werden.

Zur Übersichtlichkeit der Bedienung oder sonstiges im Bezug auf das Design gebe ich keine Stellungnahme, da es sich hier bei um eine Beipsielsoftware handelt, wie man einen PID-Regler programmieren kann. Dies soll anregen und nicht das Layout ;-)

Ansonsten viel Spaß damit
Andreas

PS: Helfe bei Fragen bzgl. Regler gerne weiter.
Einloggen, um Attachments anzusehen!
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Mo 22.01.07 11:16 
super. Genau das, was ich will :-)

Lade mir das jetzt mal runter.

Gruß
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Mo 22.01.07 11:25 
hm.... irgendwie verstehe ich das Programm nicht.
Wenn ich Sinus einstelle, ändert sich der Sollwert überhaupt nicht. Soweit ich weiß, sollte sich auch der P-Anteil nicht verändern, oder?

Hast du noch Erklärungen dazu?