# Temperatursensor PT100, Gradanzeige im Webvisu in Codesys



## u.stemler (25 August 2017)

Hallo,
ich nutze codesys und raspi. 
ich habe den Temperatursensor PT100 (-50 - 150 Grad, 4-20 ma, 24 Volt) an der Analogkarte, Eingang 1,  von Horter angeklemmt und bekomme einen Wert von ca 4 Volt. Was soweit auch ok ist.
Was muss ich im Webvisu im Anzeigeinstrument eingeben, dass ich den Digitalwert in Grad Celsius angezeigt bekomme?

Viele Grüße
Udo


----------



## weißnix_ (25 August 2017)

4 Volt??
Was ist das für eine Analogkarte? Wie ist der Sensor angeschlossen (Skizze)?


----------



## wollvieh (25 August 2017)

Wie wär's mit skalieren? 🤔


----------



## Morymmus (25 August 2017)

> ich habe den Temperatursensor PT100 (-50 - 150 Grad, 4-20 ma, 24 Volt) an der Analogkarte, Eingang 1, von Horter angeklemmt und bekomme einen Wert von ca 4 Volt. Was soweit auch ok ist.
> Was muss ich im Webvisu im Anzeigeinstrument eingeben, dass ich den Digitalwert in Grad Celsius angezeigt bekomme?



Also irgendwie passt das noch nicht zusammen, finde ich.

PT100 ist ein Temperaturabhängiger Widerstand, von Hause aus hat der in der Regel keinen Stromausgang. Gleichzeitig misst Du aber scheinbar eine Spannung? 

Wenn Du weißt, wie warm es an Deinem Sensor ist kannst Du den Wert den Du misst umrechnen - einfach mit dem Messbereich skalieren.


----------



## weißnix_ (25 August 2017)

Ich hab jetzt bei Horter keine Eingangskarten für PT100 gefunden. Die normale Analogeingangskarte kannst Du ivm einem PT100 nur über einen 0(2)...10V oder 0(4)...20mA Transmitter einsetzen. Der direkte Anschluss eines PT100 an die Analogkarten wird nicht funktionieren, weil die Auflösung grottenschlecht wäre und der PT durch den Meßstrom eine nennenswerte Eigenerwärmung erfahren würde.
Alternativ kannst Du über einen NTC nachdenken. Die haben eine steilere Kennlinie und sind mit geringen Genauigkeitsansprüchen im Spannungsteiler einsetzbar.

Mach mal 'ne Skizze!!!


----------



## u.stemler (25 August 2017)

ich habe her mal drei Bilder und einen link zur Analogkarte





http://www.ebay.de/itm/Temperature-...e=STRK:MEBIDX:IT&_trksid=p2060353.m2749.l2649



http://www.horter.de/blog/i2c-analog-input-5-kanaele-10-bit/

Das gelbe Kabel geht vom Transmittermodul, Bild2, VOUT +, zur Analogkarte an Eingang 1.
Der Eingang 1 wird in Codesys auch angezeigt mit dem Wert um  430. Müssten 430 von 1023 Bit sein.
Ich habe das so verstanden: 0 Bit müssten - 50 Grad und 1023 Bit müssten 150 Grad sein.
Messbereich geht von -50 bis 150 Grad.
Wenn ich den Thermofühler in die Hand nehme, geht der Wert 430 auch hoch, als fühlt er Temperatur.
Diesen (wahrscheinlich) Bitwert möchte ich in Codesys, Webvisu mit einem Anzeigegerät als Grad Celsius ausgeben lassen.

Ich hoffe, ich kann mich hier verständlich machen.

Viele Grüsse 
Udo


----------



## wollvieh (26 August 2017)

Schau mal hier.

Codesys  als Anfänger , Analoge werte skalieren,
alles wird gut.


----------



## Dr.MirakulixX (26 August 2017)

Also zuerst mal denke ich das Dein Temperatur Bereich bei 0^C beginnt und bis 100^C geht. 
Das ist der Bereich den dein Messumformer kann. 
Also bedeutet das 0V = 0^C und 10V=100^C. 
Jetzt benötigst du noch die Auflösung deiner Karte für den Bereich 0V bis 10V. 
Dann ein wenig Dreisatz und du bist schon da.


----------



## oliver.tonn (27 August 2017)

Hallo Udo,
ich fasse hier mal die Antworten aus diesem Thread zusammen und ergänze sie etwas. Doch zunächst ein Tipp. Bitte such Dir mal Unterlagen zum Thema Temperaturmessung mit PT-Widerstandsthermometern, Messumformer und analoge Eingangsklemmen/-karten raus und arbeite diese durch. Du hast hier so einiges durcheinander gebracht. Außerdem ist es für uns wenig hilfreich, wenn Du Bilder von einem Messumformer anhängst, der Link aber auf einen verweist, der zwar auch für einen PT100 gedacht ist, aber einen Strom und nicht wie der auf Deinen Bildern eine Spannung ausgibt.
Doch nun zum Thema. Du möchtest einen PT100 über einen Messumformer an eine analoge Eingangsklemme anschließen. Dies ist, wie Morymmus in Beitrag #4 schon schrieb ein temperaturveränderlicher Widerstand, die Angaben 24V und 4-20mA sind dort völlig falsch. Lediglich der Messbereich (-50° - 150°) ist von Bedeutung und welcher PT (Hier PT100) es ist sind wichtig. Der Messbereich des Sensors ist aber nur solange wichtig, solange der Messumformer den gleichen oder einen größeren Messbereich abdeckt. In Deinem Fall bedeutet dies, dass der maximale Messbereich durch den Messumformer auf 0° - 100° begrenzt ist, was Dr.MirakulixX in seinem Post #8 schon festgestellt hat. Für die anschließende Berechnung ist dann der Messbereich des Messumformers und die Auflösung der Eingangskarte entscheidend.
Laut Handbuch hat Deine Karte eine Auflösung von 10Bit, das heißt sie gibt Werte von 0-1023 oder in Hex von 0Hex - 3FFHex aus. Um jetzt von dem Wert den Dir die Karte liefert musst Du den Wert über einen einfachen Dreisatz skalieren, wie wollvieh in #3 und #7 schon festgestellt hat.
So, jetzt kommt Mathe. Die Formel lautet in -deinem Fall.
Maximaler Messbereich / Maximaler dezimaler Zahlenbereich * Zahlenwert der Eingangskarte

Um bei Deinem Beispiel mit der Zahlenwert von 430 zu bleiben bedeutet dies:

100° - 0° = 100° Messbereich
1023 maximaler dezimaler Zahlenbereich
Messwert = 430

100 / 1023 * 430 = 42°

Was mich bei der ganzen Geschichte nur irritiert ist, dass der Sensor bei Raumtemperatur schon einen Messwert 420 an der Karte ergibt und dieser dann noch steigt wenn Du den Sensor berührst, weil dann wärst Du ein echt heißer Typ. Bei Deinem Durcheinander hast Du Deinen Messumformer der 0-10V ausgibt aber nicht aus versehen an eine Eingangskarte für 4-20mA gehängt, oder?


----------



## weißnix_ (27 August 2017)

Hast Du den GND-Anschluss des INP1 der Horter-Karte auch auf GND/0V/- gelegt??


----------



## oliver.tonn (27 August 2017)

weißnix_ schrieb:


> Hast Du den GND-Anschluss des INP1 der Horter-Karte auch auf GND/0V/- gelegt??


Stimmt, die Fehlermöglichkeit hatte ich vergessen.

Von irgendwas mit Internetzugang gesendet


----------



## weißnix_ (27 August 2017)

Nach 5 mal hinsehen hab ich jetzt auf Deinem Foto auch gesehen, das der Meßbereich des Transmitters bei -50° beginnt, sofern der Chinese die 5 mit Edding vornedrangemalt hat.
Dann wäre  die Temperatur bei einem Analogwert von ~430 immer noch

150/1024*430-50~ 13°C

Stimmt also auch nicht ganz. Im Idealfall machst Du eine eigene Sensorkalibrierung mit der Eiswasser/siedendes Wasser-Methode. Diese beiden Temeperaturen sind mit einem akzeptablen Fehler bekannt und reproduzierbar.
Alternativ kannst Du auch mit zwei Präzisionswiderständen 100Ohm und 138Ohm, welche Du statt des PT100-Sensors anklemmst, kalibrieren.


----------



## oliver.tonn (27 August 2017)

weißnix_ schrieb:


> Dann wäre  die Temperatur bei einem Analogwert von ~430 immer noch
> 
> 150/1024*430-50~ 13°C
> 
> Stimmt also auch nicht ganz.


Zumindest wäre es im Raum dann nicht sonderlich warm. Die 5 hatte ich ganz übersehen, danke für den Hinweis. 

Von irgendwas mit Internetzugang gesendet


----------



## weißnix_ (27 August 2017)

Und wenn ich vom Ebay-Angebot mit einem MB von -50...150°C ausgehe, komme ich auf:

200/1024*430-50~34°C

Das Fehlerpotential wird also durch die Raterei nicht kleiner. Schon ein einzelner Widerstand im Bereich zwischen 100Ohm und 138Ohm kann die Sache aufklären. (Einpunktkalibrierung unter Annahme linearer Kennlinie und bekannter Endwerte.)


----------



## u.stemler (15 September 2017)

Ich bin wieder da.
Ich werde den PT100 mit einem 100 und 138 Ohm Widerstand kalibrieren.

Wo trage ich in Codesys die o.g. Formel (200/1024*430-50) ein, damit ich den Temperaturwert bekomme.

Nochmal vielen Dank für Eure Rückmeldungen.
udo


----------



## weißnix_ (15 September 2017)

Im Code, der zur Auswertung der Temperatur anscheinend erst noch geschrieben werden muß.
Temperatur:=200/1024*(Analogeingang-50);
Dabei muss die Variable "Analogeingang" mit dem Analogeingang verknüpft werden. Der Wert "Temperatur" ist dann der Wert, der im weiteren Programmablauf benutzt wird.
Die Formel muss dabei noch angepasst werden mit den Ergebnissen der Kalibrierung, sodass der Temperaturwert dann bei Anschluss des 100 Ohm Widerstands auch wirklich 0 ist bzw. bei 138 Ohm 100.
Alternativ kann es sein, das die Analogkarte bereits eine Anwenderskalierung ermöglicht, dann kann die Kalibrierung dort passieren und die Formel im Code bleibt unverändert.


----------



## oliver.tonn (15 September 2017)

Hallo weißnix_,
noch nicht ganz wach gewesen? Wenn ich mich nicht völlig täusche hat Deine Formel an zwei Stellen leider einen Fehler. Erstmal muss er (Achtung, Klugscheißerei!!!)  durch 1023 und nicht durch 1024 teilen und dann dürfen die 50 nicht in der Klammer abgezogen werden, weil das ja 50° sind und nicht der Eingangswert um 50 reduziert werden soll. Soweit die "Punkt vor Strich" Regel von der CPU beachtet wird sollte die Formel so aussehen:

200/1023*Analogeingang-50


----------



## weißnix_ (15 September 2017)

In beiden Fällen hast Du Recht. Hab Kopfschmerzen - Rüsselseuche.
Das mit der Schrittgröße unterläuft mir regelmäßig.


----------



## u.stemler (16 September 2017)

Der GND stimmt. Ich habe es nochmal kontrolliert.
Ich warte auf die Widerstände, dann werde ich den PT100 kallibrieren.

Wo trage ich die o.g. Formel in Codesys ein.
Oder brauche ich ein Modul von Oscat_Basic.
Und wenn, welches Moduel brauche ich .
Ich hatte es mit dem OSCAT_BASIC.TEMP_NI probiert, bin aber nicht weiter gekommen.
Wenn ich die Formel direkt irgendwo eingeben könnte, wäre mir lieber, da ich dann auch noch andere Sensoren (Abstandsmesser usw.) nach diesem Prinzip nutzen könnte.

Viele Grüße
Udo


----------



## weißnix_ (16 September 2017)

In einer grafischen Programmiersprache wie FUP könnte die Umsetzung der Formel etwa so aussehen:



Dabei sollte Temperatur dann als REAL deklariert sein.


----------



## u.stemler (17 September 2017)

Hallo Weißnix,

hat super geklappt.
Vielen Dank
udo


----------

