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 ! > Danke für deine Hilfe > ich habe deine Skrips erstmal kopiert und versuche Sie zu verstehen > > nochmal danke > > MFG > > Guido > > Hallo Guido, > > > > Warum so umständlich ? > > Und warum willst Du eine Widerstandsberechnung durchführen ? > > Dafür gibt es Meßadapter, mit denen Du ein (fast) lineare Spannung zur > > Temperatur bekommst. > > Außerdem, versuche den Variabeltyp float zu vermeiden. > > Dieser ist sehr Rechenintensiv undmeistens nicht nötig. > > Meistens reciht es Festkommazahlen zu verwenden. > > Wenn Du z.B. eine Nachkommastelle benötigst, und die Zahl nicht größer als 3276,7 und > > nicht kleiner als -3276,8 werden kann/soll, reicht Integer völlig. > > Hier ein Beispiel für die Auswertung von PT1000 und AD592. > > Der Programmcode stammt aus meiner eigenen Regelung. > > Ich verwende, durch einen kleine Patch, zwei versch. Sensortypen (AD592 und PT1000). > > Die Meßbereiche sind bei mir: > > AD592: -40 bis +130°C > > PT1000: -30 bis +275°C > > Beim PT1000 führe ich zusätzlich eine Anpassung zwecks der Linearität durch, > > Da die Widerstandskurve des PT sich bei ca. 0°C und ca. 100°C ändert und ab hier > > sich nicht mehr ganz linear zur Temperatur verhält. > > > > <font face="courier new" size=2>int value[16]; > > <font color="green"><i>//------------------------------- > > // Temperatur berechnen > > //-------------------------------</i></font> > > function getAD592(int x) returns int > > {long y; > > y=x; > > y=(170*y)/1023 - 395; > > if x==10230 y=-32000; // Fühler Kurzschluß > > if x==0 y=-31000; // Fühler unterbrochen > > return y; > > } > > > > function getPT(int x) returns int > > {long y; > > y=x; > > if x>=7800 y=((y-7800)*75)/243 +2000; > > else > > if x>=5810 y=((y-5810)*60)/199 +1400; > > else > > if x>=4130 y=((y-4130)*50)/150 + 900; > > else > > if x>=1030 y=((y-1030)*90)/310; > > else y=(y*30)/103 - 300; > > if x==0 y=-32000; // Fühler Kurzschluß > > if x==10230 y=-31000; // Fühler unterbrochen > > return y; > > } > > > > > > <font color="green"><i>//------------------------------- > > // AD-Werte holen und als temp > > // in var speichern > > //-------------------------------</i></font> > > thread gettemp > > {byte i; > > run 25; > > loop > > { > > for i=0...15 > > { > > if i%4==3 value[i]=getAD592(rbports.ad(i)); > > else value[i]=getPT(rbports.ad(i)); > > } > > sleep 250; > > } > > }</font> > > > > Hier hab' ich noch eine Berechnung der Temperatur bei Verwendung von KTY81-210(KTY10-6) Sensoren. > > Diese ist für eine Regelung mit dem "Vorgänger" des CC2-ReglerBoards: > > Der Meßbereich hier ist -39°C bis +135°C > > > > <font face="courier new" size=2>function getTemp(int ad)returns int > > {long temp; > > temp=ad; > > <font color="green"><i>// LP = -39,0°C = 0 > > // HP = 135,0°C =1023 > > // tkges = 0,17008797653958944281524926686217 K/digit > > > > // -39°C = 0 Tk = 0,20000 > > // -30°C = 45 Tk = 0,18182 > > // -20°C = 100 Tk = 0,17241 > > // 0°C = 216 Tk = 0,16556 > > // 25°C = 367 Tk = 0,16098 mitte > > // 110°C = 895 Tk = 0,17544 > > // 120°C = 952 Tk = 0,20000 > > // 130°C = 1002 Tk = 0,238095 > > // 135°C = 1023</i></font> > > > > if ad >=1002 temp=((temp-1002)*2381)/1000 +1300; > > else > > if ad >=952 temp=((temp-952)*2) +1200; > > else > > if ad >=895 temp=((temp-895)*2193)/1250 +1100; > > else > > if ad >=367 temp=((temp-367)*8049)/5000 +250; > > else > > if ad >=216 temp=((temp-216)*4139)/2500; > > else > > if ad >=100 temp=((temp-100)*17241)/10000 -200; > > else > > if ad >=45 temp=((temp-45)*9091)/5000 -300; > > else > > temp=(temp*2)-390; > > > > if ad==0 temp=-31000; // Fühler Kurzschluß > > if ad==1023 temp=-30000; // Fühler unterbrochen > > > > yield; > > return temp; > > }</font> > > > > Und noch ein Tip zur Verwenung von Variablen: > > Anstatt für jeden Sensor eine eigene Varable zu benutzen, solltest Du lieber ein Array nehmen. > > So sind z.B. Änderungen der Fühlerreihenfolge leichter möglich. > > z.B.: > > temp.value[var.kollektor] > > in var.kolektor (Konstante oder Variable) steht nur die Fühlernummer(0-15). > > > > MfG André H. > > > > > > > Hallo > > > > > > könnt ihr mir helfen?? > > > Ich habe folgenden Code geschrieben um die Sensorwerte der Regelboards in Temeraturen umzurechnen. > > > Leider arbeitet der Code nicht im Simulator der Wert der Variablen schwankt zwischen 56 0 und kann nicht ausgewertet werden > > > des weiteren verursacht das Skript einen Feheler im Modul rbports.c2 (Stacküberlauf) owohl es zZ noch gar nicht aufgerufen wird. > > > Ich bin noch absoluter Anfänger und für jede Hilfe dankbar. > > > float u[15] ,r[15], t[15]; > > > byte i; > > > > > > > > > > > > > > > //********* > > > thread temp > > > //********* > > > > > > { > > > for i=0...15 > > > { > > > u[i]=10000*0.0004; // für 10000 soll rbports.AD[i] eingesetzt werden > > > r[i]=5/u[i]-1;// Wiederstandsberechnung > > > t[i]=1000/(math.ln(r[i])/4.3+1000/298)-273;// Umrechnung in Temp (nach Buch) > > > } > > > } > > > thread main > > > { > > > int olkessel, vorlaufoel, ruecklaufoel, holzkessel, vorlaufholz, vorlaufheizung, > > > ruecklaufheizung, speicheroben, speichermitte, speicherunten, aussentemp; > > > string s; // Ausgabe Display > > > run temp; > > > olkessel = t[0]; > > > vorlaufoel = t[1]; > > > ruecklaufoel = t[2]; > > > holzkessel = t[3]; > > > vorlaufholz = t[4]; > > > vorlaufheizung = t[5]; > > > ruecklaufheizung = t[6]; > > > speicheroben = t[7]; > > > speichermitte = t[8]; > > > speicherunten = t[9]; > > > aussentemp = t[10]; > > > sleep 2000; > > > } > > >