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 Guido, > > hier jetzt mal was (eben grade) getestetes: > > <code> > /******************************************************************/ > /*********Mischeransteuerung***************************************/ > /* */ > /* Author : Andreas Sperling */ > /* Vorlage : Andreas Sperling */ > /* Version : 0.1 */ > /* Datum : 07.05.2005 */ > /* geändert : */ > /* Getestet : ja */ > /* */ > /******************************************************************/ > /* > > > Mischer auf/zu auf Basis zweier Temperatursignale unter > Verwendung eines PID-Moduls > > Aufgabe des Mischers ist die gesteuerte Entladung des Speichers > und die Verringerung der Brennerschaltungen. > > Der Mischer ist im Rücklauf des Kessels angeordnet (AB-Anschluß) > Die beiden anderen Anschlüsse sind jeweils Heizkreisrücklauf > und Speichermitte. > > Dadurch ermöglicht der Mischer eine Steuerung des Volumenstroms > durch den Speicher. > > /*****************************************************/ > > //cap[2]-zugriff auf tempfuehler._ > // Ausgänge: rbports.0(Relais1) -Umschaltung auf/zu > // rbports.5 -Mischer aktiv > > > int m1fuehrung,m1tn,m1tv,test; > float m1kp; > function m1reset() > { > int m1[5]; > eeprom.readintarray(7,20,m1,5); > m1fuehrung=m1[0]; > m1tn=m1[1]; > m1tv=m1[2]; > m1kp=m1[3];m1kp=m1kp/10.0; > }</code> > > Diese Funktion versorgt den Thread mit den von Hand änderbaren Parametern. > Das händle ich in meinem Projekt bis jetzt über einen Com-Thread, in dem ich > alle Parameter via Hyperterminal in einen EEPROM schreibe. > Nach jeder Änderung rufe ich einfach reset auf, wodurch der Thread ab diesem Moment > mit den neuen Parametern arbeitet. > > <code> > thread rlmisch > { > int mrl,smi,hkrl,x,y; > /* > Init: Mischer fährt für 25 sec auf und dann für > 160 sec zu. Damit wird Mischer sicher > zu gefahren. > > */ > m1reset(); > > rbports.set(2,1);rbports.set(5,0); > sleep 25000; > rbports.set(2,0); > sleep 32750;sleep 32750;sleep 32750;sleep 32750;sleep 32750; > rbports.set(5,1); //*/ > x=0; > loop > { > sleep 25000; > wait cap.Capture(2); > mrl=tempfuehler.mischrl();smi=tempfuehler.speichermitte(); > hkrl=tempfuehler.hkrl(); > cap.Release(2); > > /*Da ich nicht von dem Automatismus ausgehen kann, das ein bestimmter Anschluß > am Mischer immer kälter ist als der andere, habe ich am A- und B-Anschluß > jeweils einen Fühler. > Je nachdem welcher wärmer und welcher kälter ist, entscheide ich nachfolgend über den > Regelsinn. > */ > if hkrl>=smi //Kühlen. (Verlängern der Brennerlaufzeit) > { > yield; > run 255; > y=pid1.pid(mrl,m1fuehrung,m1tv,m1tn,m1kp); > run 32;yield; > } > else //Heizen (Möglichst gleichmäßige Nutzung evtl. Pufferwärme) > { > yield; > run 255; > y=pid1.pid(m1fuehrung,mrl,m1tv,m1tn,m1kp); > run 32;yield; > } > test=y; //Variable nur für Anzeigezwecke auf Testlcd > if math.abs(y)>1000 > { > if y<0 and x>0 > { > rbports.set(2,0);rbports.set(5,0); > sleep math.abs(y); //Das sleep hier ist noch provisorisch > rbports.set(5,1); > } > if y>0 and x<130000 > { > rbports.set(2,1);rbports.set(5,0); > sleep y; //Das sleep hier ist noch provisorisch > rbports.set(5,1); > } > x=x+y;if x<0 x=0;if x>130000 x=130000; > > } > > }} > </code> > > Ich verwende das PID-Modul Ver 0.4 vom 06. Juli 2004 mit folgenden Anpassungen: > > <code> > //**Stellwert*** > y = kp * (e +(ta / tn * es) + kd); //stellwertsberechnung > //y = kp * e +(ta / tn * es) + kd; > if y>10000 or y<-10000 //Hier geändert > { > if y>10000 y1=10000; //Hier geändert > if y <-10000 y1=-10000; //Hier geändert > } > else y1=y; > ea = e;//Regelabweichung für nächsten Durchlauf speichern > if ki2>10000 and es>ex es=ex; //Hier geändert > if ki2<=-10000 es=-10000; //Hier geändert > > return y1; > } > </code> > > Die Änderungen im PID-Modul beziehen sich nur auf die Skalierung von y. > Es werden also Stellzeiten von -10s (Richtung Mischer zu) bis +10s (Mischer auf) > ausgegeben. > Die Gesamtstellzeit für 90° Beträgt bei mir 125s. > Als Parameter für PID habe ich folgendes: (noch nicht optimal bei mir) > tn=200 > tv=200 > kp=6.5 > > Gruß krassos > >