Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: PID-Regler Kategorie: Programmierung (von krassos - 16.03.2005 21:41)
Als Antwort auf Re: PID-Regler von guido - 13.03.2005 14:55
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
> Hallo Krassos,
>  
> kansst du mir bitte sagen wo du den parameter
> if ki2>10000 and es>ex es=ex;  //Hier geändert
> if ki2<=-10000 es=-10000;         //Hier geändert
>
> vereinbart hast und berechnest ich kann leider auch im pid Programm nichts finden
>
> danke
>
>  Mfg Guido

Kein Problem, ich poste einfach nochmal das kpl. PID-Modul in der aktuell
für den Mischer verwendeten Fassung.
Mein grö�tes Problem bisher war die Stellzeit des Mischers und damit die Regelträgheit richtig
zu berücksichtigen.
Meine aktuellen Regelparameter sind wie folgt:
Abtastzeit ca 30sec.; d.h. alle ca 30sec wird PID aufgerufen.
tn=250  groÃ?er Wert, weil Reaktionsträges System (GröÃ?ere Werte verringern den Integralanteil)
Tv=350 Gro�er Wert Erhöht den Differentialanteil, Notwendig, um schon beim Anzeichen
            einer Temperaturänderung einen Stellwert zu generieren.
            Beispiel: Sollwert 37°C    Istwert: 38°C  Tendenz fallend
generiert ein Signal: Mischer auf, obwohl Der Istwert grö�er als der Sollwert ist.
kp=180
Für kp hab ich eine Dynamisierung bei mir eingefügt (Im Mischer Thread).
Damit mache ich kp von der Differenztemperatur an den Mischereingängen abhängig.
Dahinter steht folgender Gedanke:
Bei einem gro�en Temperaturunterschied zwischen den Mischereingängen genügt ein kleinerer
Regelschritt, ein kleiner Temperaturunterschied erfordert natürlich einen grö�eren Regelschritt.


//******************************
float ea;
float es,kd;
long z2;


function pid (int w,int x,int tv,int tn,float kp) returns int
{
//Bedingungen: tn>0
long z1;
float e,y,diff1,ki1,ki2,ta,ex;
int y1;
//**Abtastzeit****
z1=system.timer();
ta=(z1-z2);ta=ta/constant.tx;z2=z1;if ta<0.01 ta=0.01; //Abtastzeitermittlung

//**Regelabweichung***
e = w - x; //regelabweichung

//**I-Anteil***
ex=es;ki1=kp*e;
//ki2=kp*ta/tn*es+ki1;
ki2=kp*ta/tn*es+ki1;
es = es + ((ea + e) / constant.two);//else es=zero; //i-speicher
//**D-Anteil***
diff1=e-ea;
kd = (kd+tv / ta * diff1)/constant.two; //D-anteilsberechnung und d-Anteil ausklingen

//**Stellwert***
y = kp * (e +(ta / tn * es) + kd); //stellwertsberechnung
//y = kp * e +(ta / tn * es) + kd;
if y>19000 or y<-19000
{
if y>19000 y1=19000;
if y <-19000 y1=-19000;
}
else y1=y;
ea = e;//Regelabweichung für nächsten Durchlauf speichern
if ki2>10000 and es>ex es=ex;
if ki2<=-10000 and es<ex es=ex;

return y1;
}


    Antwort schreiben


Antworten:

Re: PID-Regler (von krassos - 8.04.2005 17:34)
    Re: PID-Regler (von Guido - 13.04.2005 21:21)
        Re: PID-Regler (von krassos - 14.04.2005 5:01)
            Re: PID-Regler (von Guido - 14.04.2005 19:50)