Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > 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. > > <code> > //****************************** > 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; > }</code>