Hallo Leute,
Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des
Taupunktes zu unternehmen.
ABER OHNE LOGARITMUS NATURALIS!!!!
Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte
rechnen kann. (-32768 bis +32767)
Daher kann ich keine Exponentialfunktion/Logaritmus benutzen :-(
Bereits gegeben sind:
Temperatursensor (-40°C bis +60°C)
Feuchtesensor ( 0% bis 100%)
Absolutfeuchtesensor ( 0 g/m³ bis 50g/m³)
Lässt sich diese Aufgabe irgendwie lösen?
Dewi schrieb:> Lässt sich diese Aufgabe irgendwie lösen?
Wie wärs mit einer Tabelle, wo Stützpunkte der Funktion abgelegt sind?
Und dann einfach zwischen ein zwei Punkten interpolieren...
Es würde mich allerdings wundern, wenn das Problem nicht schon in
vereinfachter Ganzzahlarithmetik gelöst wäre.
Ansonsten:
In Zeiten, als es noch keine Taschenrechner gab, hat man für so etwas
einen Rechenschieber oder eine Tabelle herangezogen.
Leg Dir doch so eine Tabelle an, nicht in normalen, sondern in
angepassten Abständen - sonst wird's zu ungenau - und interpoliere den
Rest. Ist eigentlich nur eine Frage des vorhandenen Platzes und der
gewünschten Genauigkeit.
Welche Formeln verwendest Du? Ich kenne mich nicht so gut mit der
Luftfeuchtigkeit aus. Aber wenn die Formen die Du verwendest diesen hier
ähneln, dann sollte das möglich sein.
http://www.wetterochs.de/wetter/feuchte.html
Die Frage ist nur wie genau es werden soll und wieviel Speicher zur
Verfügung steht. Dann kannst Du die Funktionen mal am PC plotten lassen
und dann Stützstellen so wählen, daß bei einer (linearen) Interpolation
der Fehler unter deinen Grenzwerten bleibt. Diese Stützstellen kommen
dann in ein Array auf dem µC. Damit kann man dann die Funktion mit
relativ wenig Rechenleistung bewältigen. Ein großer Wertebereich und
eine hohe Anforderung an die Genauigkeit können aber den Speicherbedarf
stark ansteigen lassen.
Hallo,
anstatt Tabellen kann man auch transzendente Funktionen ersetzen durch
ein Polynom n-ten Grades, das die gewünschte Funktion im Messinterval
genau genug approximiert. Ich verwende z.B. für die Temperatur eines
Pt100 die Formel
1
3.27946 * R * R + 106.54505 * R - 9.04725
anstatt der Exponentialfunktion, das sind nur 3 Multiplikationen und das
Ergebnis ist +- 0,1 Grad genau von -20 bis +100 Grad Celsius.
Welchen Polynomgrad man für eine bestimmte Genauigkeit braucht, muss man
berechnen, ich lasse mir die Koeffizienten von MathCad kalkulieren.
Und bevor jetzt das Riesengeschrei losgeht - natürlich kann man auch
Tabellen verwenden. Aber so ist das Problem in einer Programmzeile
gelöst. Jeder nach seinen Vorlieben und Fähigkeiten.
Gruss Reinhard
PS wieso muss man Multiplikationen mit "*" als Code deklarieren, damit
das Mal-Zeichen nicht verschluckt wird??
@ Reinhard
Das geht natürlich auch, ist sogar viel eleganter, aber es wurden sehr
enge Grenzen bei der Fragestellung gesetzt. Da könnte es knapp werden
mit dem Wetrtebereich. Prinzipiell könnte man den natürlich aufblähen.
Aber ob das so leicht vom Themenersteller in seiner Umgebung mit seinen
Mitteln zu bewerkstelligen ist?
Ich finde deinen Ansatz natürlich auch viel schicker.
Dewi schrieb:> Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte> rechnen kann. (-32768 bis +32767)
Carsten R. schrieb:> Dewi schrieb:>> Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte>> rechnen kann. (-32768 bis +32767)
Da hast du recht, das ist eine herbe Einschränkung - da muss man ja
ständig hin und her normieren um überhaupt im erlaubten Zahlenbereich zu
bleiben.
Irgendwie geht immer alles (siehe Turing), aber so recht sinnvoll kann
man die Aufgabe nur mit Gleitkommaarithmetik rechnerisch (ohne Tabellen)
lösen.
Gruss Reinhard
Welche Funktion hättest du denn gerne mit Integerarithmetik berechnet:
Die von Carsten gepostete
http://www.wetterochs.de/wetter/feuchte.html
oder die aus Wikipedia (Gl. 2.3)
http://de.wikipedia.org/wiki/Taupunkt#Der_Taupunkt_in_Abh.C3.A4ngigkeit_von_relativer_Luftfeuchtigkeit_und_Lufttemperatur
?
Es handelt sich beidesmal um die gleiche Funktion, aber mit leicht
unterschiedlichen Parametern. Eine von beiden wird wohl in dem von dir
gewünschten Temperatur- und Feuchtebereich bessere Ergebnisse liefern
als die andere. Die Frage ist nur welche.
Dewi schrieb:> Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des> Taupunktes zu unternehmen.
Ich weiß nicht, ob die ±0,1 K realistisch sind. Alleine die Abweichung
zwischen den beiden o. g. Funktionen ist schon größer. Das sind eben
auch nur Näherungsfunktionen.
> ABER OHNE LOGARITMUS NATURALIS!!!!
Die Taupunkttemperatur ist in erster Näherung eine logarithmische
Funktion der relativen (und auch der absoluten) Luftfeuchtigkeit. Möchte
man den kompletten Wertebereich der Luftfeuchtigkeit ab 0% abdecken,
gibt es keine einfachere Näherungsfunktion. Man kann allenfalls
versuchen, den Logarithmus in Integerarithmetik zu berechnen.
Liegt die relative Luftfeuchtigkeit unter 1%, wird die
Taupunktbestimmung aber sowieso ungenau, da in diesem Bereich bereits
ein kleiner Fehler in der Feuchtigkeitsmessung zu einem großen Fehler im
Ergebnis führt. Dagegen hilft auch die exakteste Formel oder die
feinstaufgelöste Wertetabelle nicht.
Aber treten solch niedrige relativen Luftfeuchtigkeiten in der Realität
überhaupt auf? Wird der Wertebereich der relativen Luftfeuchtigkeit
bspw. auf 10%–100% oder gar 20%–100% eingeschränkt, sieht die Sache
schon sehr viel günstiger aus. Da sich die Messwerte dann nur noch über
eine Dekade erstrecken, kann man den Logarithmus auch – wie von Reinhard
vorgschlagen – durch ein relativ einfaches Polynom annähern.
> Feuchtesensor ( 0% bis 100%)> Absolutfeuchtesensor ( 0 g/m³ bis 50g/m³)
Da die relative und die absolute Luftfeuchtigkeit bei Kenntnis der
Temperatur ineinander umgerechnet werden können, reicht prinzipiell
einer von beiden Feuchtesensoren. Welcher ist genauer? Oder kann es
sein, dass der eine bei trockener und der andere bei feuchter Luft
bessere Ergebnisse liefert? Dann müsste die optimalen Bereiche für jeden
Sensor kennen, so dass man immer den jeweils günstigsten auswählen kann.
Dewi schrieb:> Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des> Taupunktes zu unternehmen.
Ach ja, diese Genauigkeit ist alles andere als halbwegs genau. Man kann
schon froh sein wenn man überhaupt auf 0,5 Grad genau die Temperatur
messen kann. Man schafft vielleicht eine höhere Auflösung, diese ist
dann abwer nicht genau. Macht es da Sinn die Berechnungen mit einer
höheren Genauigkeit auszuführen als es die Sensoren erlauben? Das ist
wirklich sehr kontextabhängig was man genau vor hat.
Ich würde mich mal beim DWD erkundigen, was für relative Feuchten in
unseren Breiten erreicht werden.
10% klingt nach künstlich getrockneter Luft oder nach einer
Grußbotschaft aus dem Kühlhaus.
Aber man kann den Integer als Festkommazahl mißbrauchen.
Ob man nun den Integer beispielsweise als 3141 oder als 3,141 (Pi) liest
ist letztlich egal. Bei Festkomma ist ein Cast nur eine Frage der
Interpretation. Man muß nur aufpassen daß man mit dem Wertebereich
auskommt. Wenn man weiß daß die zahlen beispielsweise nie über 600
hochlaufen, könnte man den Integer 30000 als 600 lesen ind jeder
Ingegerschritt entspräche einem Festkommasprung von 600/30000 = 0,02.
Dann muß man diese Umwandlung nur ganz am Ende bei der Ausgabe
berücksichtigen.
Das ist zwar kein Gleitkomma, aber manchmal schon ausreichend genau,
wenn die auftretenden Zahlen in ihrer Größenordnung vorher schon
absehbar sind. Und das scheint mir in diesem Fall zutreffend zu sein.
Ich kenne ehrlich gesagt keinen µP, dem man nicht, zumindest durch
Tricks, eine 64 Bit Integerrechnung aufsetzen könnte. Selbst die
08/15-er 8-Bit-Grübler können das.
Die Alternative: Erst dividieren und dann multiplizieren verträgt sich
nicht mit dem Begriff "Genau".
amateur schrieb:> Ich kenne ehrlich gesagt keinen µP, dem man nicht, zumindest durch> Tricks, eine 64 Bit Integerrechnung aufsetzen könnte.
Das liegt auch sicher nicht am (bisher geheimen) Prozessor, sondern an
der Softwareausstattung des Systems. Meine approximierten Polynome habe
ich schon im vorigen Jahrhundert auf einem Z80 eingesetzt, und der hatte
keinerlei Probleme damit.
Gruss Reinhard
und wie wäre es mit einem bereichsflag? dann wären nur die mantissen
der logrithmen mit hinreichender Auflösung aus einer tabelle zu
entnehmen der Rest ist linear zu berechnen. Der Rechenschieber lässt
grüßen.
p.s.
die Fusnägel folgen in ihrer Krümmung ebenfals dem Logarithmus naturalis
;)
@Reinhard
Aber auch Opa z80 kannte bereits ADC und SBC.
@Winfried
Das mit den Fußnägeln erscheint mir auch nicht unbedingt praktikabel.
Die Skalierung anhand der Schuhgröße und die Anpassung über den
Platzfußkoeffizienten dürfte das wohl als zu umfangreich
disqualifizieren.
Dewi schrieb:> Das Problem ist eben der Integer Wertebereich.
Das ist ein Problem, aber nur ein ganz kleines. Prinzipiell könnte man
auch auf der Basis von 16-Bit-Integer-Arithmetik eine
Floating-Point-Bibliothek mit beliebiger Genauigkeit aufbauen. Das wird
auf jedem Mikroprozessor ohne FPU so gemacht.
Das löst aber dein eigentliches Problem nicht, da die Ungenauigkeit
nicht von der Berechnung, sondern der Messung kommt.
Rechenbeispiel:
Temperatur: 60 °C
Relative Luftfeuchtigkeit: 3,10%
Nach der Formel in Wikipedia liegt dann der Taupunkt bei 0,18 °C.
Angenommen der Feuchtesensor wäre ultrapräzise und hätte einen Fehler
von nur 0,05%. Er misst also 3,15% statt 3,10%. Eingesetzt in die Formel
ergibt dies 0,40 °C. Der Fehler im Taupunkt liegt somit bei 0,22 K, also
mehr als doppelt so hoch wie die von dir geforderten 0,1 K.
Ich glaube aber nicht, dass dein Sensor einen Messfehler von nur 0,05%
hat. 2% sind da schon sehr viel realistischer. Bei 3,10% + 2% = 5,1%
,liegt der berechnete Taupunkt schon bei 7,25 °C. Das ist ein Fehler von
mehr als 7 K.
Weitet man den Wertebereich des Taupunkts auf negative Temperaturen aus
(dann heißt der Taupunkt Frostpunkt), wird die Sache noch sehr viel
schlimmer.
Merkst du etwas?
Es bringt überhaupt nichts, an der Genauigkeit Approximation oder der
Arithmetik herumzudoktern, bevor du die erwartete Genauigkeit und der
betrachtete Messbereich sinnvoll festgelegt hast.
Wenn sich einem da mal nicht die Fußnägel hochrollen. ;-)
Reinhard Kern schrieb:> Das liegt auch sicher nicht am (bisher geheimen) Prozessor, sondern an> der Softwareausstattung des Systems.
Genau das vermute ich auch. Ich erinnere mich beispielsweise noch an ein
System Namens Basic Tiger. Das waren fertige Module die eine lange Zeit
immer auf der Rückseite der c't beworben wurden. Die hatten auch eine
eigene Entwicklungsumgebung. Das System gibt es bis heute noch. Zudem
gibt es noch andere SPS und Mikro-SPS Systeme. Da kommt es darauf an was
die IDE zuläßt, bzw. was man leicht damit implementieren kann. Vom darin
werkelnden µC bekommt der Nutzer nichts mit.
Auch wenn man diesen unter umgehen der IDE direkt hardwarenah
programmieren könnte und somit auch Gleitkomma implementieren könnte, so
ist bei solchen Systemen davon abzuraten. Zum einen verliert man den
Komfort der IDE und zum anderen ist das vorhandensein eines speziellen
µC keine zugesicherte Produkteigenschaft. Der µC könnte von Charge zu
Charge, je nach Verfügbarkeit, Markt und Preislage und auch durch
Modernisierungen der Produktlinie (auch beim Zulieferer), jederzeit
wechseln. So gibt es vom Rondostat unterschiedliche Versionen, mal mit
Atmel und mal nicht. Der Nutzer wird dank der IDE nicht mit dem
Hardwarewechsel hinter den Kulissen belästigt. Das wäre dann Bestandteil
den Konzeptes. Man muß sich dann aber nach den Möglichkeiten der IDE
richten und nicht nach den Möglichkeiten der Hardware.
Es handelt sich um eine ELC-12 Stuerung von http://www.xlogic-plc.com/ .
Es handelt sich um keinen uC.
Die PLC wird Blockorientiert programmiert. Daher das Problem mit der
Berechnung. Die Steuerung kann nur + - * : Mehr nicht.
>Die Steuerung kann nur + - * : Mehr nicht.
Vielleicht solltest du die Taupunktberechnung mitsamt dem zugehörigen
Sensor einer Sub-Baugruppe zuordnen, die dann das Ergebnis über RS232
oder wie auch immer der besagten Kleinsteuerung zuschickt.
Gruss
ah ein LOGO Clone
hehe IDE beschränkung also volltreffer
am ende ist da ach nur ein µC drinnen
....
also Tabelle
Ich wette es geht um Kondenswasservermeidung mittels Heizung/Lüftung
deren Energieverbrauch optimiert werden soll.
Dewie schrieb:> Es handelt sich um eine ELC-12 Stuerung von http://www.xlogic-plc.com/ .> Es handelt sich um keinen uC.
Selber Schuld, wenn man son SPS Abklatsch verwendet. Die Dinger machen
dir n Treppenhauslicht und ne Marquisensteuerung, nicht aber unbedingt
gute Regler oder gute Frequenzmesser oder gute Messgeräte... Dafür sind
die nicht gebaut worden. Rechnen ist meist garnicht deren Stärke.
Ich nutze für sowas immer n µC mit der Peripherie die ich genau für mein
Projekt brauche!
Guck mal auf der Homepage, wofür dein Gerät gebaut ist...
"being specifically designed to replace mini PLCs, multiple components,
such as , various timers, relays, contactor and counters etc;"
Da du das Ding jetzt aber hast, musst du dir ne Lösung überlegen,
Tabelle wird das Ding wohl auch nicht können...
Ingo
Hallo,
also ich habe mir mal vor einigen Jahren meine Floating Point Library
selber Programmiert, weil zu der Zeit noch kein Compiler eine wirklich
fehlerfreie hatte. Meine Library hatte mit Log und Exp eine Codegröße
von 1,8Kbyte auf dem 8051. Wo liegt also das Problem. (Die Compiler sind
doch heute gut!!!)
Ich stand vor ca.15 Jahren als ich mit Sensoren angefangen habe auch vor
dem Problem, dass ich bemerkte das es auch mit 64 Bit Mathe nicht mehr
weiter ans Ziel geht. Also war Floating Point bis Heute der richtige Weg
mit unter.
Dann zum Thema Tausensor, wie Yalu X. das Rechenbeispiel schon
aufgeführt hat, kann ich nur bestätigen du wirst mit dem Feuchtesensor
nicht auf deine gewünschte Genauigkeit kommen.
Meine Firma hat solsche Tausensoren gekauft, verbaut und anschließend
alle verschrottet. Ein ordentlicher Tausensor geht nur mit der
Spiegelmessung.
Gruß Sascha
Eine Taupunktformel ohne Logarithmus...
http://wwwcaps.ou.edu/arpsbrowser/arps5.2.4browser/html_code/adas/mthermo.f90.html
t in °C, rh in %
x = 1.0 - 0.01 * rh;
// dew point depression
dpd = (14.55 + 0.114 * t) * x + ((2.5 + 0.007 *t) * x)^3 + (15.9 + 0.117
* t) * x)^14
dpt = t - dpd;
> Meine Firma hat solsche Tausensoren gekauft, verbaut und anschließend> alle verschrottet. Ein ordentlicher Tausensor geht nur mit der> Spiegelmessung.http://www.rotronic.de/hc2-hk25-hc2-hk40.html
Im Handbuch ist ein Diagramm zur Genauigkeit der Taupunktberechnung und
diese reicht in den meisten Fällen aus.
Wenn es wirklich auf +-0.1 K genau sein soll, geht es allerdings
wirklich nur mit einem Taupunktspiegel...
Arc Net schrieb:> Eine Taupunktformel ohne Logarithmus...> http://wwwcaps.ou.edu/arpsbrowser/arps5.2.4browser/html_code/adas/mthermo.f90.html
Ja, diese Approximation sieht wirklich nicht schlecht aus. Sie hat im
Bereich der relativen Luftfeuchtigkeit von 7% bis 100% und der
Temperatur von -40 °C bis +60 °C eine maximale Abweichung von unter 0,5
K bezogen auf die Formel in Wikipedia. Bei sehr geringer
Luftfeuchtigkeit steigt der Fehler erwartungsgemäß stark an. Aber wenn
die Formel für amerikanische Wissenschaftler gut genug ist, sollte sie
es für Dewi ebenfalls sein ;-)
Amateur schrieb:>>(14.55 + 0.114 * t)>> ... sieht nicht gerade nach Vorzeigeintegerzahlen im Bereich von -32K> bis +32K aus.
In dieser Form natürlich nicht. Das Stichwort lautet "Skalierung".