hi...
also ich hab's so gelöst und bin mit dem ergebnis recht zufrieden. der vorteil meiner lösung ist, dass sie recht einfach zu handhaben ist. dazu braucht du einen "referenzwiderstand". dazu habe ich mit einen 100 ohm und einen 10 ohm widerstand in serie geschaltet und 2 krokodilklemmen dran gelötet. das entspricht ca. einer temperatur von 25°. diese schliese ich dann direkt an die wago an und notiere mir die gemessene temperatur als referenztemperatur. dann verwende ich den folgenden baustein, um die einzelnen leitungswiderstände zu ermitteln:
FUNCTION_BLOCK FB_H_Kalibrierung
VAR_INPUT
inSensorwert: INT;
inReferenzTemp: INT;
END_VAR
VAR_OUTPUT
outLeitungswiderstand: REAL := -100;
END_VAR
VAR
rBuff1: REAL;
rBuff2: REAL;
END_VAR
IF (inSensorwert > -2000 AND inSensorwert < 2000) THEN
rBuff1 := inSensorwert;
rBuff1 := rBuff1 / 10;
rBuff2 := inReferenzTemp;
rBuff2 := rBuff2 / 10;
rBuff1 := RES_PT(T := rBuff1, R0 := 100);
rBuff2 := RES_PT(T := rBuff2, R0 := 100);
outLeitungswiderstand := rBuff1 - rBuff2;
END_IF
die inReferenztemp ist die direkt an der wago gemessene temperatur, inSensorwert ist der gemessene wert inklusive leitungswiderstand. outLeitungswiderstand ist dann der ermittelte leitungswiderstand.
dann verwende ich den folgenden baustein zum ausgleichen des ermittelten leitungswiderstands:
FUNCTION_BLOCK FB_H_Sensor
VAR_INPUT
inSensorwert: INT;
inKorrekturOhm: REAL := 0;
END_VAR
VAR_OUTPUT
outSensorwert: INT;
END_VAR
VAR
rBuff: REAL;
END_VAR
rBuff := INT_TO_REAL(inSensorwert);
(* widerstand ausrechnen und korrektur durchführen*)
rBuff := RES_PT(T := rBuff / 10, R0 := 100) - inKorrekturOhm;
(* temperatur ausrechnen *)
outSensorwert := REAL_TO_INT(ROUND(TEMP_PT(Res := rBuff, R0 := 100), 1) * 10);
versuch das mal und gib kurz bescheid, ob du so bessere ergebnisse erhältst.
grüße
volkmar