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 zusammen, > > ich zerbrech mir schon 'ne ganze Weile den Kopf, wie ich allgemeine Regelaufgaben > lösen kann, ohne die klassischen Nachteile eines Zweipunktreglers in Kauf nehmen > zu müssen. > Ich hab hier mal einen allgemeinen PID-Algorithmus zusammengebastelt, der theoretisch > in einer Excel-Simulation gut funktioniert. > Praktisch teste ich ihn gerade als allgemeinen Temperaturregler. > Die Doppelberechnungen in der function werde ich noch entfernen. Eine Autotuning-Funktion ist > noch geplant zur automatischen Berechnung der Regelparameter. > > Gruss krassos > > <code> > /******************************************************************/ > /* PID-Regler */ > /* */ > /* Author : Andreas Sperling */ > /* Vorlage : Andreas Sperling */ > /* Versionen : 0.3 */ > /* Datum : 29. Juni 2004 */ > /* geändert : */ > /* Getestet : ja */ > /* Benötigt : */ > /* */ > /******************************************************************/ > /* > w Sollwert > x istwert > ta abtastzeit > tv vorhaltezeit (D-Anteil) > tn nachstellzeit (i-anteil) > kp proportionalanteil > ********************************************************************** > Ansatz zur Realisierung eines Software-PID-Reglers für die CC2 > Änderungen, Verbesserungen und Beschleunigungen durchaus erwünscht > Der Stellwert ist hier auf 0...500 begrenzt. Diese Begrenzung kann > natürlich entfernt werden. > */ > const two = 2.0; > const tree = 3.0; > const zero = 0.0; > float ea; > float es,kd; > > function pid (int w,int x,float ta,int tv,int tn,float kp) returns float > { > float e,y;string diff,integral; > float diff1,esold; > int y1; > e = w - x;//regelabweichung > esold=es; > es = es + ((ea + e) / two); //i-speicher > diff1=e-ea; > kd = (kd+tv / ta * diff1)/two; > if (ta / tn * es)*kp > 500 or (ta / tn * es)*kp < 0 es =esold; > y = kp * (e + (ta / tn * es) + kd); > if y>500 or y<0 > { > if y>500 y1=500; > if y <0 y1=0; > } > else y1=y; > ea = e; > return y1; > } > </code>