Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Programmcode funzt nicht Kategorie: Programmierung (von Guido, http://ferienwohnung-wiekert.de - 4.07.2003 18:50)
Als Antwort auf Re: Programmcode funzt nicht von André H. - 4.07.2003 7:45

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.
>
> int value[16];
> //-------------------------------
> //   Temperatur berechnen
> //-------------------------------

> 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;
> }

>
> //-------------------------------
> //   AD-Werte holen und als temp
> //   in var speichern
> //-------------------------------

> 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;
>  }
> }

>
> 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
>
> function getTemp(int ad)returns int
> {long temp;
>  temp=ad;
// 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

>
>  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;
> }

>
> 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;
> > }
> >

Meine Seite: http://ferienwohnung-wiekert.de


    Antwort schreiben


Antworten: