Hallo!
Bräuchte mal wieder eure Hilfe:
Beschreibung:
In einem anderen Script wird durch Max Auswahl die grösste Stellgrösse (ca. 6 Raumregler) zum Heizkessel geschickt, dort wird die Kesselsolltemp auf Grund der Stellgrösse berechnet.
Das funktioniert.
Bei plötzlichem Heizbedarf, z.B. im Bad, Stellgrösse geht innerhalb von Sekunden von 20% auf 100%. Der Kesselsollwert geht dann natürlich auch bis Max.= 70 Grad.
Die übrigen Heizkörper sind zu ca. 50 % geöffnet.
Diese bekommen dann die 70 Grad auch ab. Folge : Die Räume überhitzen weil die Ventile nicht schnell genug schliessen.
Deshalb will ich die neue Stellgrösse mittels Rampenfunktion langsam verzögert an den Heizkessel schicken.
Bedeutet der Kesselsollwert soll gedämpft ansteigen.
Dachte so an ca. alle Minuten die alte Stellgrösse an die neue Schrittweise anzupassen.
Mit untenstehendem Script gelingt mir ein Auf-Ab Zählen der Stellgrösse.
Leider krieg ich nicht hin dass der Zähler bei Erreichen der neuen Stellgrösse aufhört zu Zählen.
(er zählt unendlich weiter ins Plus oder Minus)
Mit Excel-VBA hab ichs simuliert probiert, ging Problemlos.
Nur mit PHP krieg ichs nicht hin.:o
Oder hat wer eine bessere Idee .
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Sollwertrampe.ips.php
Trigger :
Interval :
*/
$stellalt=GetValueInteger("stellalt");
$stelleingang=GetValueInteger("stelleingang"); // Wert kommt von den Raumtemp.Reglern
$stellausgang =GetValueInteger("stellausgang"); // Wert zum Heizkessel senden
if ($stellalt <= $stelleingang){ //alter stellwert kleiner dann +
$stellausgang=$stellausgang+1;
echo "stellausgang : $stellausgang
";
}
else
{
$stellausgang=$stellausgang-1; // alter Stellwert> dann -
}
// wenn stellausgang =stelleingang dann stellalt auf stelleingang setzen
// also keine Differenz mehr, dann soll nicht weiter rauf oder runtergezählt werden
if ($stellausgang = $stelleingang){ // das funktioniert nicht ??????
$stellalt=$stelleingang; // ?????
} // ??????
//EIB Wert zum Kessel zum Testen rausgenommen
//EIB_DimValue(53750,$ipstell); // Berechnete Stellgrösse zum EIB-Heizkessel
SetValueInteger("stellausgang",$stellausgang);
SetValueInteger("stellalt",$stellalt);
//echo "stellalt : $stellalt
";
?>
Wenn du das Script jede Minute aufrufst, sollte es eigentlich klappen.
Ich habs jetzt aber selber nicht getestet … plag mich grad mit Windpocken rum :mad:
@tk6
Die paar Codezeilen oben sind doch schon ein PI-Regler.
Wenn du dann -1 bzw. +1 noch abhängig von der Regeldifferenz machst, dann hast einen kompletten PID-Regler.
Es könnte natürlich schon ein mutierter IPS-Virus sein.
IPS verknüpft soviele Hardwareplattformen, bietet soviele Interfaces … wer weiss, was da über das HMI-Interface zu mir rüberkam. Als überzeugter Linux-Anwender hat mich IPS eh schon Überwindung gekostet :rolleyes:
Nur etwas zum Verständnis:
Ich würde hier nur einen I-Regler erkennen. Wenn man dazu noch eine bewertete Soll-Ist-Differenz hinzu addiert, ists ein PI-Regler.
Oder sehe ich den Wald vor lauter Bämen nicht??? :eek:
BTW:
Die zusätzliche Temperaturehöhung des Kessels ist doch normalerweise nicht notwendig, oder zumindest sollte sie nicht mit der Anforderung steigen. Eine andere Sache ist die Absenkung, wenn kein Bedarf da ist…
Die Regler stellen doch bereits durch die Durchflussmenge eine Veränderung her. Die zusätzliche Erhöhung der Kesseltemp. „stört“ eher das Regelverhalten der Regler.
Übrigens liegt das „Überheizen“ meist nur an der großen Wärmekapazität der Heizkörper, samt Inhalt. Ich habe in zwei Räumen Gußheizkörper, da tritt das beim Anheizen des kalten Raums auch auf.
Eine dann erhöhte Kesseltemp verstärkt diesen Effekt noch.
du hast recht. Das Script ist ein klassischer I-Regler. Ohne Wenn und Aber.
Man(n) sollte sich nicht mit solchen Themen beschäftigen, wenn man nicht fit ist