hi,
ich habe ein termometer mit einer genauigkeit von 0.1 grad aufgebaut.
jetzt möchte ich bei einer bestimmten temperatur einen schlatvorgang
auslösen...
zusätzlich willl ich vermeiden, das dieser jetzt die ganze zeit ein und
aus schaltet wenn sich die temperatur im bereich der schlatschwelle
bewegt...
ich stelle mir eine funktion vor, die die schalttemperatur, die
hysterese und die aktuelle temp übergeben bekommt, und eine eins oder
null zurückgibt...
z.b: aktuelle temp =14,3 grad
schalttemp 15,0 grad +/- 0,5grad
maddin
Ja, und. Wo liegt das Problem?
if( aktuelle_Temp > Schalttemp + Hysterese )
return Schalte_Aus;
else if( aktuelle_Temp < Schalttemp - Hysterese )
return Schalte_Ein;
else
return Mach_nichts;
Der Schluessel liegt in der Erkenntnis, dass es insgesamt
3 Zustände gibt:
Schalte_Aus
Schalte_Ein
Mach_nichts : Was immer momentan Sache ist, eingeschaltet
oder ausgeschaltet, behalte den Zustand bei.
wenn die tempertur in dem obigen bsp steigt, soll er bei 15,0 grad
einschalten...
wenn die temperatur über 15,0 plus hyst steigt, soll er, wenn sie wieder
fällt, auch bei 15,0 grad wieder ausschalten..
wenn die temperatur allerdings nicht über 15,0 grad plus hyst steigt,
soll er erst bei 15,0 grad - hyst schalten, usw...
das ganze wird recht komplex, und da dachte ich, evtl hat schonmal
jemand das selbe problem gelöst...
im grunde genommen, soll er wirklich immer genau bei der eingetsellten
temp schalten, ausser wenn die temperatur den angegebenen "trägen
bereich (ich dachte dies ist hysterese)" nicht in einem durchgang
verlässt, sie also um den schaltbereich schwankt...dann soll darauf
reagiert werden wie sie ihn verlässt
ich hoffe man kann das verstehen....
Maddin wrote:
> wenn die tempertur in dem obigen bsp steigt, soll er bei 15,0 grad> einschalten...>> wenn die temperatur über 15,0 plus hyst steigt, soll er, wenn sie wieder> fällt, auch bei 15,0 grad wieder ausschalten..>> wenn die temperatur allerdings nicht über 15,0 grad plus hyst steigt,> soll er erst bei 15,0 grad - hyst schalten, usw...>
if( Temp > 15 ) {
OffTemp = 15 - Hysterese
Schalte_EIN
}
if( Temp > 15 + Hyster ) {
OffTemp = 15
Schalte_EIN
}
if( Temp < OffTemp )
Schalte_AUS
So ungefähr?
Hallo Karl Heinz,
dank dir für die schnellen antworten, doch leider ist das ganze nicht so
trivial...
ich habe im anhang mal ein bildchen, evtl verdeutlicht das was ich
meine.
tut mi leid, das ich es nicht gleich mit angehängt habe, aber ich dachte
hysterese erklärt mein problem ausreichend....
das ganze muss warscheinlich eine art state maschine sein, die sich den
temperaturverlauf merkt, um dann entsprechend zu reagieren....
ich dachte, vielleicht hat jemand einen schönen code der genau dieses
problem löst...
maddin
...ach ja, was dieses problem der state maschine noch verschlimmert ist
die tatsache das die temp werte auch noch sehr weit auseinander liegen
können.... sie also nicht langsam durch die hyst wandern müssen... und
somit dann ausserhalb liegen...
dann müssen in der state maschine gleich mehrere stati durchlaufen
werden...
aber evtl. habe ich da ja aúch noch einen denkfehler...oder vielleicht
kann man das ja auch noch einfacher lösen...
maddin
In deiner Grafik widerspricht sich erste Zeile / Links
mit zweiter Zeile / rechts
In beiden Fällen kommt die Temp-Kurve von oberhalb
der Hysterese, sinkt unter die Schalttemperatur
unterschreitet aber nicht die untere Hysteresegrenze
und steigt wieder an.
Nur einmal wird bei der Schaltschwelle geschaltet
und einmal bei der oberen Hystereseschwelle
Hi,
...die wiedersprechen sich nicht...
in der ersten zeile links wird das ganze voll durchlaufen, also es wird
jedes mal die hysterese verlassen...
in der zeichnung 2te zeile rechts, wird sie druchlaufen, aber nicht
verlassen, letztendlich wird sie dann nach unten verlassen, in dem fall
muss ich auf der unteren schwelle der hyst schalten, da das ganze nur so
einen sinn ergibt... ansonsten bräuchte ich keine hysterese, da dann
immer geschaltet werden würde...
m.