Beitrag
von ivo-int » 04.12.2022, 12:56
jmaus hat geschrieben: ↑04.12.2022, 09:35
Na dann beschreib doch erst einmal was genau du so in dem argon skript immer änderst bzw. was dir daran nicht gefällt und vllt. schafft man es ja eine allgemeine Lösung hinzubekommen in einer der nächsten RaspberryMatic Versionen.
Von nicht gefallen würde ich jetzt nicht sprechen. Ich habe für meine Bedürfnisse die Stützpunkte angepasst. In etwa so:
Code: Alles auswählen
if [[ ${curtemp} -ge 60 ]]; then
dstspeed=100
elif [[ ${curtemp} -ge 55 ]]; then
dstspeed=75
elif [[ ${curtemp} -ge 50 ]]; then
dstspeed=50
elif [[ ${curtemp} -ge 45 ]]; then
dstspeed=35
elif [[ ${curtemp} -ge 40 ]]; then
dstspeed=15
else
dstspeed=0
fi
Wie geschrieben wäre eine PI-Reglung von Vorteil. Aber hier müsste ich das zuerst eine gewisse Testen um ein schlaues P-Band zu ermitteln.
Vorteil: Der Venti dreht mit der optimalen Drehzahl um die gewünschte Soll-Temperatur zu erreichen.
Ich habe einen Ansatz in einem älteren Beitrag gefunden den ich auf die schnelle angepasst habe. Die Funktions kontrollierte ich in einem Raspberrymatic Script. Hierzu war ich noch in der Lage. Aus meiner Sicht könnte das auch im Bash-Script funktionieren. Dies konnte ich aber noch nicht testen.
Das sieht dann in etwa so aus:
Code: Alles auswählen
! PI-Regler (Kühlen)
! lokale Variablen
real tz = 30.0; ! Zykluszeit in s
real xp = 50.0; ! P-Band
real tn = 600.0; ! Nachstellzeit in s
real x; ! Istwert
real w; ! Sollwert
real y; ! Reglerausgang
real p; ! P-Anteil
real i; ! I-Anteil
! Temperatur einlesen
x = 50; ! Istwert der Temperatur (curtemp)
w = 40; ! Sollwert Temperatur (eine Variabel in der Raspberrymatic)
! Sollwert
if ((w >= 35.0) && (w <= 70.0))
{w = 40;} ! Sollwert Temperatur (eine Variabel in der Raspberrymatic)
else
{w = 45;} ! Sollwert-Korrektur falls zu hoch eingestellt
! P-Regler
y = (-100.0 / xp) * (w - x);
p = y + 50.0;
if (p > 100.0) {p = 100.0;}
if (p < 0.0) {p = 0.0;}
! I-Regler bei Auslösung alle z Sekunden
i = dom.GetObject("A_Temp_Test").Value();
i = i + ((tz / tn) * y);
! PI-Regler
y = p + i;
if (y > 100.0)
{ y = 100.0;
i = 100.0 - p;
}
if (y < 0.0)
{ y = 0.0;
i = 0.0 - p;
}
WriteLine(y); ! Stellsiganl ausgeben
! I-Anteil speichern
dom.GetObject("A_Temp_Test").State(i);
! Stellsignal ausgeben
! Wert in ${dstspeed} schreiben
Mit der oben aufgeführten Variante sind 2 Werte notwendig. Ein Sollwert und der i-Anteil der gespeichert werden muss.
_______________________________________________________________________________________________________
Raspberrymatic auf einem Raspi 4 4GB (HB-RF-USB-2) mit 2 LAN Gateways,
42 RF Geräte, 4 IP Geräte und 21 Cuxd Geräte, 24 RF Eigenbau Geräte
hm_pdetect, E-Mail, XML-API, JB HB Devices, HB-TM-Devices-AddOn, CUx-Daemon, CCU-Historian auf einem separaten Raspi