Rampenscript Hilfe

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.:slight_smile:
Nur mit PHP krieg ichs nicht hin.:o
Oder hat wer eine bessere Idee . :smiley:

<?
/*
*******************************
 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
";
?>

Vielen Dank im Voraus
Egon

Egon,

hier brauchst du ein ==

Gruß
Dieter

Hallo Dieter!
Vielen Dank dafür.:slight_smile:
Leider wird der Wert noch nicht gesetzt wenn beide gleich sind.
Oder ist der „Moment“ wo beide gleich sind zu kurz

if ($stellausgang == $stelleingang){ // wenn beide gleich dann $stellalt auf $stelleingang
   $stellalt=$stelleingang;
}

schönen Gruß
Egon

Na, das wäre ja mal eine Anwendung für den noch nicht vorhandenen IPS PID-Regler :wink:

Gruss
Tk6

Egon,
ich glaube es geht ohne Hilfsvariable einfacher:

 <?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File     : Sollwertrampe.ips.php
Trigger  :
Interval :
*/

$stelleingang=GetValueInteger("stelleingang"); 
$stellausgang =GetValueInteger("stellausgang");

if ($stelleingang > $stellausgang){
  $stellausgang=$stellausgang+1;
}

if ($stelleingang < $stellausgang){
  $stellausgang=$stellausgang-1; 
}

EIB_DimValue(53750,$stellausgang);

SetValueInteger("stellausgang",$stellausgang);
?>  

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.

Gruß
Dieter

Hallo Dieter!

Danke habs auch schon so geändert.:smiley:

Funzt Einwandfrei.:slight_smile:

Schönern Gruß
Egon

[offtopic]
Den Virus hast Du aber nicht von uns
Gute Besserung
[ontopic]

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:

Danke für die Genesungswünsche
Dieter

Hallo,

für eine Trendauswertung habe ich die folgende Function programmiert:

/* Trend bestimmen */
  function T_Trend ($Neuer_Wert, $Alter_Wert, $Schranke) {
  $Diff1 = $Neuer_Wert - $Alter_Wert;
  /* +/- Diff2 bekommt den Trend +/- 1 */
  /* +/- Diff3 bekommt den Trend 0 */
  /* Alle anderen Werte bekommen den Trend +/- 2 */
  $Diff2 = Abs ($Alter_Wert * $Schranke);
  If ($Diff2 <> 0 ) $Diff3 = $Diff2 /2;

    /* Keine Veränderung */
  If (Abs($Diff1) <= $Diff3 ) {
  Return $Trend = 0;
  }
  If ($Diff1 > 0) {
     If ($Diff1 > $Diff2){
   $Trend = 2;
   } else {
   $Trend = 1;
   }
  }
  If ($Diff1 < 0) {
  $Diff1 = abs ($Diff1);
     If ($Diff1 > $Diff2){
   $Trend = -2;
   } else {
   $Trend = -1;
   }
  }
   Return $Trend;
  }

$Trend = -2 grossse neg. Änderung
$Trend = -1 kleine neg. Änderung
$Trend = 0
$Trend = 1 kleine pos. Änderung
$Trend = 2 grosse pos. Änderung

Ich setzte den Wert für die Schranke auf 0,05 = 5% damit wird die kleine Änderung 0,025=2,5%

Also einfach mal ausprobieren

LG Manfred

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.

Gruß
Fabian

Hallo Fabian,

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 :slight_smile:

Hier übrigends ein Link zum Thema Regler

Gruß
Dieter

Hallo zusammen,

http://webber.physik.uni-freiburg.de/~hon/vorlss02/Literatur/Ingenieurswiss/Regelungstechnik/ProgrammiereRegelung.pdf

So zum nachlesen.

LG Manfred