Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
am DUSTI bin ich immer mal wieder dran, das Design wird wohl über die Weihnachtstage sein Ende finden (da habe ich auch wieder mehr Luft). Ich denke Q2/2021 für ein Paket vom DHL ist da nicht unrealistisch.
Jetzt aber bitte wieder back to topic, hier gehts doch um den Smelly :-)
Ich versuche schon länger den RTR des Smelly zu optimieren, komme aber nicht wirklich zu einem sauberen Ergebnis.
Nun mal die Frage, wer nutzt denn noch alles den RTR des Smelly?
Was hab ich bisher versucht:
Ich steuere mit dem RTR eine FBH, nun habe ich festgestellt, dass wenn der Istwert>Sollwert ist, der Smelly das Ventil sofort wieder schließt.
Code:
if ((RTR)&&[MARKIEREN](Sollwert>temp)[/MARKIEREN]) {
...
...
if (y_res >= (oldy_res + offsetBus) || y_res < (oldy_res - offsetBus)) {
oldy_res = y_res; //Stellgröße Wert nerken
result = knx.groupWrite1ByteInt(KNX_GA_VALVE, (y_res*2.55));
}
}
}
else if (((BA==1)||(BA==3)||(BA==4))&&(y_res!=0)&&(temp>=S ollwert)&&(RTR)) {[MARKIEREN]y_res=0[/MARKIEREN]; Valve_str=float2str(y_res,0); result = knx.groupWrite1ByteInt(KNX_GA_VALVE, y_res);} //Stellgröße 0 setzen, wenn keine Regelung
Das ist bei einer FBH nicht gerade sinnvoll.
Nun hab ich den oben genannten Code wie folgt geändert:
Dabei ist mir dann aufgefallen dass das Stellsignal noch mit 2.55 multipliziert wird, ich dachte es wird hier mit 0-100% gearbeitet, so hatte ich auch meinen Ventilantrieb-Aktor auf PWM 0-100% eingestellt.
Also hab ich überall im Code die "*2.55" entfernt.
Jetzt habe ich das Problem dass der Smelly eine Ventilstellung von 100% zeigt aber laut Aufzeichnung es nur 39% sind. Nun weiß ich nicht was wirklich passiert.
Habe zu Testzwecken weitere KNX_GAs angelegt, aber die verwirren mich eher als dass sie mir helfen.
Kann mir jemand helfen den RTR vom Smelly für meine FBH zu optimieren?
Ich vermute mal der Faktor 2.55 war drin da der Wert (denke ein DPT 5/6) mit 0-255 für die Einstellung der Ventile verwendet wird, dargestellt allerdings mit 0-100%. Würde wieder mit dem Faktor passen 39*2,55=99,45
Ich vermute mal der Faktor 2.55 war drin da der Wert (denke ein DPT 5/6) mit 0-255 für die Einstellung der Ventile verwendet wird, dargestellt allerdings mit 0-100%. Würde wieder mit dem Faktor passen 39*2,55=99,45
Wie gesagt habe ich alle Multiplikationen/Divisionen mit 2.55 entfernt, mein Ventil wird mit DPT 5.001 (0-100%) gesteuert.
Wie gesagt habe ich alle Multiplikationen/Divisionen mit 2.55 entfernt, mein Ventil wird mit DPT 5.001 (0-100%) gesteuert.
Das hat aber nichts zu sagen denn DPT 5 ist ein Byte, also Werte von 0-255. Diese werden beim DPT 5.001 lediglich als Prozentwert dargestellt. Wird wie hier mit Prozenten gerechnet, bleibt der DPT auf dem Bus aber immer noch ein Byte ist und deshalb muss der Prozentwert mit 2.55 multipliziert werden, um aus den internen Prozent dann einen Wert im Bereich zwischen 0 und 255 zu machen.
Das hat aber nichts zu sagen denn DPT 5 ist ein Byte, also Werte von 0-255. Diese werden beim DPT 5.001 lediglich als Prozentwert dargestellt. Wird wie hier mit Prozenten gerechnet, bleibt der DPT auf dem Bus aber immer noch ein Byte ist und deshalb muss der Prozentwert mit 2.55 multipliziert werden, um aus den internen Prozent dann einen Wert im Bereich zwischen 0 und 255 zu machen.
Ok, aber dann versteh ich nicht warum der Smelly bei einer Solltemperatur von 22,50 °C und einer Isttemperatur von 23,34°C das Ventil 100% öffnen will.
Wie oben schon erwähnt hab ich zur Analyse des P-, I- und D-Anteils weitere KNX_GAs eingefügt.
Hier zeigt mir der P-Anteil bei den o.g. Temperaturen einen Wert von 255,04 (Kp =5 und TI= 30*60)
Sind meine Änderungen für die Analyse so überhaupt korrekt?
Kann ich den Byte-Wert so einfach als Float-Wert speichern oder muss ich den umwandeln?
Code:
//RTR
float d, e_sum, e_alt=0, Sollwert=0, Sollwert_alt=0, Ki, Kd=0,[MARKIEREN] fyP, fyI, fyD;[/MARKIEREN]
byte yP, yI, yD, y_res, oldy_res, oldy;
unsigned long Td;
...
...
...
//RTR
//if ((RTR)&&(Sollwert>temp)) {
if (RTR) { //Regelung notwendig ?
if (Sollwert!=Sollwert_alt) {
Sollwert_alt=Sollwert;
e_sum=0;
e_alt=Sollwert-temp;
}
else if ((millis() - prevMillisRTR > (Ti*1000))&&(! MinMax)) { //Regelalgorithmus starten
prevMillisRTR = millis();
d=Sollwert-temp;
result = knx.groupWrite2ByteFloat(KNX_GA_D, d);
// P-Glied:
yP = (Kp * d);
[MARKIEREN]fyP = yP;
result = knx.groupWrite2ByteFloat(KNX_GA_YP, fyP);[/MARKIEREN]
if (Kp==0) { Kp = 1; }
// I-Glied:
Ki = Kp / Ti;
e_sum = e_sum + d;
if (!I_Glied) Ki=0;
else if (Windup) {
if (e_sum>(y_max/(Ki*Ti))) {e_sum=y_max/(Ki*Ti);}
if (e_sum<(y_min/(Ki*Ti))) {e_sum=y_min/(Ki*Ti);}
}
[MARKIEREN]result = knx.groupWrite2ByteFloat(KNX_GA_ESUM, e_sum);[/MARKIEREN]
yI = Ki * Ti * e_sum;
[MARKIEREN]fyI = yI;
result = knx.groupWrite2ByteFloat(KNX_GA_YI, fyI);[/MARKIEREN]
// D-Glied:
Td = Ti;
Kd = Kp * Td;
yD = Kd * (d-e_alt) / Td;
[MARKIEREN]fyD = yD;
result = knx.groupWrite2ByteFloat(KNX_GA_YD, fyD);[/MARKIEREN]
e_alt=d;
// Gesamt-Stellgröße
if (!P_Glied) yP=0; // P-Anteil nullen
if (!I_Glied) yI=0; // I-Anteil nullen
if (!D_Glied) yD=0; // D-Anteil nullen
y_res = yP + yI + yD+y; // Stellgröße (y) = P-Anteil + I-Anteil + D-Anteil + Arbeitspunkt y
if (y_res>y_max) y_res=y_max; // Stellgröße begrenzen: max
if (y_res<y_min) y_res=y_min; // Stellgröße begrenzen: min
Valve_str=float2str(y_res,0);
if (y_res >= (oldy_res + offsetBus) || y_res < (oldy_res - offsetBus)) {
oldy_res = y_res; //Stellgröße Wert merken
result = knx.groupWrite1ByteInt(KNX_GA_VALVE, y_res);
}
}
}
//else if (((BA==1)||(BA==3)||(BA==4))&&(y_res!=0)&&(temp>=Sollwert)&&(RTR)) {y_res=0; Valve_str=float2str(y_res,0); result = knx.groupWrite1ByteInt(KNX_GA_VALVE, y_res);} //Stellgröße 0 setzen, wenn keine Regelung
Was ich nicht ganz verstehe ist dass der Smelly heute Nacht auf einmal mit dem Regeln anfängt. Kann es sein dass es daran liegt das Ist<Soll ist?
Kann es ein Problem mit den Variablen yP, yI und yD die als byte deklariert sind geben wenn es negative Werte gibt? smelly1.JPG smelly2.JPG
ich habe heute meinen ersten Smelly One in Betrieb genommen. Löten hat funktioniert und erfasst nun auch alle Werte. Habe den Sketch und die Gruppenadresse wie folgt konfiguriert:
bool piep_allow=false; //Piepser bei Grenzwertüberschreitung zulassen (Jumper setzen !)
bool Taup_Anz=true; //Taupunkt in Sektion 5 dauerhaft anzeigen
bool Lux_Anz=false; //Helligkeitswert anzeigen, Wert wird reziprog angezeigt
bool StatusiAQ_Anz=false; //Status iAQ anzeigen
bool LEDs_Anz=true; //RGB LED anzeigen für Luftqualität CO2 nach Grenzwerten
bool LEDB_Anz=false; //Blaue LED anzeigen für Feuchtigkeit > 65%
bool KNX_receive=true; //KNX Empfang einschalten
bool RTR=false; //RTR freigeben
Wenn ich nun auf der ETS die Temperatur auslese erhalte folgende Antworten, unteranderem auf der Gruppe 8/0/0 die überhaupt nicht konfiguriert ist sowie für die Gruppe 4/1/0 Status IAQ kommt keine Antwort:
ich bin mir nicht sicher, aber als Hauptgruppe ist normalerweise nur 0...31 zulässig (zumindest nach dem alten Standard, ich weiß nicht ob die Library auch mehr unterstützt).
Status GA schaue ich mal nach.
Ich würde auch mal die vielen Leerzeichen im Sketch rausnehmen, eines reicht :-)
Die Status GA sowie andere GA's können bei Bedarf hier einfach ergänzt werden, wenn diese bei einer Leseanfrage an die Tmeperatur mitgesendet werden sollen:
Wenn Du oben "bool KNX_receive=true" setzt, werden bei einer Lesenanfrage auch die RTR-GA's gesendet, das dürften bei Dir die 8er Hauptgruppen sein. Egal ob der RTR aktiviert ist oder nicht. Der KNX_receive wird nur benötigt, wenn der RTR genutzt wird...ansonsten einfach ausschalten (=false).
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar