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