Hallo!
Hab mir die Arbeit gemacht und in VB.NET einen PT100 Leitungswiderstands Korrekterer programmiert.
Er berechnet sehr exakt von -50°C - +100°C.
Es funktioniert folgendermaßen wenn man im Besitz einer KL3204 Klemme von Beckhoff ist, die gleich die Temperatur ausgibt:
Man benötigt einmalig die von der KL3204 ausgegebener Temperatur z.B.: 40°C und die tatsächliche Temperatur z.B.: 35°C.
Diese beiden Werte werden an die Funktion GetPT100CelciusCorrected() immer mit übergeben damit diese weiß wie sie korrigieren muss, samt der aktuellen Temperatur die die KL3204 ausgibt.
Also z.B.: GetPT100CelciusCorrected(curTemp,40,35)
Diese Funktion gibt dann die korrekten °C zurück die tatsächlich herrschen, alle Widerstände mit einberechnet!
Hier der Code, ich hoffe er kommt halbwegs formatiert rüber, sauber ist auch noch was anderes aber funktionieren tut er:
Public Class clsPT100
Public Shared Function GetPT100CelciusCorrected(ByVal celcius As Double, ByVal ISTcelcius As Double, ByVal SOLLcelcius As Double) As Double
Dim dOhm As Double
Dim dISTOhm As Double
Dim dSOLLOhm As Double
Dim dDiffOhm As Double
Dim dCelcius As Double
'ISTcelcius = Temperatur IST Zustand, also mit dem Leitungswiderstand
'SOLLcelcius = Diese Temperatur müsste ohne Leitungsstand herschen
dISTOhm = GetPT100Ohm(ISTcelcius)
dSOLLOhm = GetPT100Ohm(SOLLcelcius)
dDiffOhm = dISTOhm - dSOLLOhm
'dDiffOhm ist die Different, es kommen also immer diese Ohm mehr bei der SPS an!
dOhm = GetPT100Ohm(celcius) 'Diese Ohm kommen gerade an
dOhm -= dDiffOhm 'Diese Ohm sind die eigentlich gemessenen, also ohne den Leitungswiderstand
'Nun diese neuen Ohm umrechnen in °C
dCelcius = GetPT100Celcius(dOhm)
Return dCelcius
End Function
Private Shared Function GetPT100Celcius(ByVal ohm As Double) As Double
Dim dCelcius As Double = -1
Dim dKorrekturCelcius As Double
If (ohm >= 100) And (ohm <= 138.5) Then
'°C zwischen 0 und 100
'dOhm = 100 * (1 + 0.00385 * celcius)
dCelcius = (((ohm / 100 - 1) / 0.00385))
ElseIf (ohm < 100) And (ohm >= 80.307) Then
'°C zwischen -50 und 0
'1,15065°C...19,693Ohm
'x°C.........(100-ohm)
dKorrekturCelcius = 1.15065 * (100 - ohm) / 19.693
dCelcius = (((ohm / 100 - 1) / 0.00385)) + dKorrekturCelcius
End If
Return dCelcius
End Function
Private Shared Function GetPT100Ohm(ByVal celcius As Double) As Double
'Diese Funktion rechnet die gemessene Temperatur in die OHM Werte um von -50°C - 100°C geeicht!
Dim dOhm As Double = -1
Dim dKorrekturOhm As Double
If (celcius <= 100) And (celcius >= 0) Then
'Formel PT100 von 0°C - 100°C
dOhm = 100 * (1 + 0.00385 * celcius)
ElseIf (celcius < 0) And (celcius >= -50) Then
'Bei -50° ist eine Abweichung von 0,443 Ohm festzustellen
'100%....0,443
'(dCelcius*2 sind die Prozent weil von -50°C ausgegangen wird).....X
dKorrekturOhm = (celcius * 2) * 0.443 / 100
dOhm = (100 * (1 + 0.00385 * celcius)) + dKorrekturOhm
End If
Return dOhm
End Function
End Class