Wenn Soll-Hyst größer als Ist-Wert ist, soll Ventil öffnen, sonst schließen.
Das heißt das Ventil muss bei 145mbar shließen und erst bei 152mbar öffnen.
Leider ist mir bei der Messung aufgefallen, das er bei 148mbar öffnet und 144mbar schließt. Das vorgegebee Interval wird nicht ausgenutzt, so flattert das Ventil durch ständige auf und zu.
void uedruck_Flasche3(){
//Unterdruckventil zu macheen
if (Relai1Flag)
{
if (druck3 < PsollF3pos - Hyst1)
{
digitalWrite(Relai1, LOW);
digitalWrite(Relai2, LOW);
}
if (druck3 >= PsollF3pos)
{
digitalWrite(Relai1, HIGH);
digitalWrite(Relai2, LOW);
}
}
else
digitalWrite(Relai1, LOW);
digitalWrite(Relai2,HIGH);
}
Woran kann es liegen, das er den Interval nicht nutzt? liegt es an dem Code?
Ich hab eigentlich ein neuen Beitrag wo ich wegen Druck diskutiere, leider wird dort nicht mehr geantwortet hab viel zu viel gefragt :D. Da in diesem Beitrag speziel wegen Hysterese diskutiert wurde, dachte ich das es hier besser passt
Wenn Soll-Hyst größer als Ist-Wert ist, soll Ventil öffnen, sonst schließen.
Das heißt das Ventil muss bei 145mbar shließen und erst bei 152mbar öffnen.
Leider ist mir bei der Messung aufgefallen, das er bei 148mbar öffnet und 144mbar schließt. Das vorgegebee Interval wird nicht ausgenutzt, so flattert das Ventil durch ständige auf und zu.
So wie Du das programmiert hats öffnet es bei 144mb :
(druck3 < PsollF3pos - Hyst1) = (druck3 < 150 - 5) = (druck3 < 145) (druck3 <= 144)
Und schließt bei 149mb:
(druck3 >= PsollF3pos) = (druck3 >= 150)
Maria2:
ah Okay. Ich dachte immer das es reicht wenn man auf einer Seite die Hysterese abzieht und das andere braucht man nicht. Deshalb flattert er immer?
Du kannst alles machen.
Die Frage ist soll die Hysterese unterhalb, um oder oberhalb des Sollwerts sein.
Das Ventil flattert weil die Hyterese kleiner als die Störungen auf dem Meßwert sind.
Wenn Du 150 mbar hast, und die Messung +/- 3mbar schwankt, muß die Hysterese größer als 6 sein.
Maria2:
Kann ich anstatt größer/kleiner-zeichen nur = schreiben?
(druck3 = PsollF3pos - Hyst1)
Die = und == Problematik wurde schon angesprochen.
Nein besser nicht.
Wenn nämlich aus irgendeinem Grund der Wert ausgelassen wird schaltet der Ausgang nicht obwohl der Meßwert sehr viel größer oder sehr viel kleiner als der Sollwert ist.
Grüße Uwe
Warum editierst Du nicht Deine ganzen Post's, wenn Du 'noch was dazu schreiben' willst?
Das liest sich echt sehr anstrengend!!
Ob Dein Druckflag nun gesetzt ist, oder nicht, sollte bei diesem Problem ganz weit außen vor sein.
Hier geht es ausschließlich um die Hysterese dieses einen Ventil.
Wenn DAS klappt, kannst Du die Anforderung drum herum bauen, daß dieses Ventil überhaupt 'auf den Druck achten' soll.
Druck_Max=250mBar
Hysterese=10mBar
Druckerhöhung_abschalten WENN Druck>=Druck_Max
Druckerhöhung_einschalten WENN Druck+Hysterese<Druck_Max (oder Druck<Druck_Max-Hysterese)
Das schalten bei >=250mBar AUS
Und schalten bei <240mBar EIN
Wenn Das jetzt klappt, packe Dein 'Relai1Flag' drum herum.
Wenn Das ein Relais befeuern soll, solltest Du den Namen auch Relais nennen - ein Relai gibt's schlicht nicht.
Wenn Du auf Probleme triffst, isoliere Diese, baue einen eigenen Sketch, Der Sich NUR um dieses eine Problem kümmert.
Wenn das Problem dann kein Problem mehr ist, die gefundene Lösung in den Produktiv-Sketch - eine Baustelle fertig, auf zur Nächsten.
In einem Nachbar-Thread wurden bool'sche Ausdrücke mit 'nachtkalt' erstellt - Gleiches kannst Du auch mit Deiner Hysterese machen.
Du musst der Prüfung nur Akt_Druck, Grenz_Druck, Hysterese mitgeben - oder die Hysterese kommt fest in den Sketch - Deiner Fantasie sind hier kaum Grenzen gesetzt.