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

Re: PT1000 Umrechnungsformel Kategorie: CC2-Unit & Appl.Board / CC2-Station (von André H. - 10.01.2006 16:24)
Als Antwort auf PT1000 Umrechnungsformel von Lars - 10.01.2006 9:58
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Lars,

Zuerst eine wichtige Bitte: Benutze bitte die code-Tags, wenn Du Quellcode postest.
Einfache Routinen kann man zwar noch recht gut lesen, wenn es aber mal etwas komplexer
wird, erleichtert eine entsprechende Formatierung die Arbeit sehr.

> ich nehme über Multiplexer von PT1000 Rohwerte auf und muss diese für korrekte Temperaturdaten in
> eine Formel einbinden. Folgende Standartformel habe ich dazu in den Modulen von Helbig gefunden:
> ...
> Jedoch verlaufen meine Rohdaten ausschlieÃ?lich von 0 bis 1023 und nicht wie sonst bis 10230.
> Kann ich nun einfach bei allen Faktoren und Summanden die Werte eine 10er Potenz kleiner
> einstellen oder werden dann meine gewollten Temperaturwerte völlig falsch?
> >also so stelle ich mir die Formel dann vor:
> function getPT (int x) returns int
>   {
>    long y;
>    y=x;                                
>    if x>=723 y=(y-723)/0,5+140;        
>    else
>    if x>=418 y=((y-418)*62,5)/317,7+80;
>    else y=(y*4)/20,9;
>    return y;
>   }

Nein, so einfach ist das wieder nicht.
Die Funktion, die Du hast, ist für das CC2-ReglerBoard, besser gesagt, für AD-Werte
aus dem Modul rbports.c2 .
Hier wird 10mal hintereinander der AD-Wert eingelesen und die Summe zurückgegeben,
um eine etwas bessere Auflösung zu erhalten.
Die Funktion für den normalen Bereich müsste so aussehen:
function getPT (int x) returns int
{long y;
 y=x;                                
 if x>=723 y=(y-723)*2+1400; //
                         // 1400 muÃ? bleiben(Offset in 10tel Grad)
 else
 if x>=418 y=((y-418)*6250)/3177+800;
 else y=(y*400)/209;
 return y;
}


Die AD-Wert-Offsets müssen durch 10 geteilt werden.
Die Faktoren müssen mit 10 multipliziert werden.
Die Temperaturoffsets müssen unverändert bleiben.

Wie aber Krassos bereits schrieb, ist die Funktion für 0 bis 200°C gedacht.
Wenn Du also Deinen MeÃ?adapter anders abgeglichen hast, muÃ? auch die Funktion
entsprechend geändert werden.
Bei mir sieht beispielsweise die Auswertung der PT1000 so aus:
function getPT(int x) returns int
{long y;
 if x==0 return -32000; // Fühler KurzschluÃ?
 if x==10230 return -31000; // Fühler unterbrochen
 y=x;
 if x>=7800 return ((y-7800)*75)/243 +2000;
 if x>=5810 return ((y-5810)*60)/199 +1400;
 if x>=4130 return ((y-4130)*50)/150 + 900;
 if x>=1030 return ((y-1030)*90)/310;
 return (y*30)/103 - 300;
}


Wenn man dies für den normalen AD-Bereich umschreiben müsste, sieht das so aus:
function getPT(int x) returns int
{long y;
 if x==0 return -32000; // Fühler KurzschluÃ?
 if x==1023 return -31000; // Fühler unterbrochen
 y=x;
 if x>=780 return ((y-780)*750)/243 +2000;
 if x>=581 return ((y-581)*600)/199 +1400;
 if x>=413 return ((y-413)*500)/150 + 900;
 if x>=103 return ((y-103)*900)/310;
 return (y*300)/103 - 300;
}


Im Allgemeinen ist die Funktion so aufgebaut, daÃ? die Berechnung in mehrere Teilbereiche
der Temperaturen aufgeteilt ist.
Im letzten Beispiel sind das folgende Bereiche:
200,0°C bis 275,0°C (wobei 275,0°C als unterbrochener Fühler gewertet wird)
140,0°C bis199,9°C
 90,0°C bis 139,9°C
  0,0°C bis 89,9°C
-30,0°C bis -0,1°C (wobei -30°C als Fühlerkurzschlu� gewertet wird)
Das ganz wird gemacht, um die Nichtlinearität des Fühlers auszugleichen.
Es gibt auch leute, die machen das mit einer "abstrakten" Formel, aber so genau
muÃ? es z.B. in der Heizungstechnik auch nicht sein. ;-)

Der Aufbau aus einer Formelzeile sollte so ersichtlich werden:
if ADWert>=ADOffset return ((ADWertL - ADOffset)*TBereich)/ADBereich + TOffset

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: