PID-Regler

Hallo Steiner, paresy.

Da es im anderen Thread (http://www.ipsymcon.de/forum/showthread.php?t=701) untergegangen ist, wollte ich nochmal nach dem Stand eines (PID-) Reglermoduls fragen. Ich könnte es für meine Heizung gut gebrauchen. Ansonsten muss ich mir selbst was einfallen lassen. :confused:

Grüße
Fabian

Hallo Fabian,

leider haben wir uns entschlossen kein PID Modul zu veröffentlichen, da diese Materie viel zu komplex ist.
Infos u.a.: http://de.wikipedia.org/wiki/Regler
Als Anlage ein kleines (unfertiges) PHP-Skript zum probieren - es ist nicht für die Hausfrau gedacht :wink:

MST


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

$w = 30;                                                    // Sollwert
$walt = GetValueFloat("PID_Soll_alt");

if ($w <> $walt) {
   SetValueFloat("PID_Soll_alt", $w);
   if ($w + 5 > $walt) {
      SetValueInteger("PID_Tnull", time());                 // Zeit merken
      SetValueBoolean("PID_Flag_Tmessung", True);
   }
}
$x = GetValueFloat("Temp_1Wire_PID");                       // Istwert
if ($x <> $walt) {
   SetValueBoolean("PID_Flag_Tmessung", False);
}
// Einstell-Regeln
$tg = 600;                                                  // Tg = Ausgleichs-Zeit inSekunden
$tu = 60;                                                   // Tu = Verzugs-Zeit (nicht Tot-Zeit) Sekunden
// Ziegler-Nichols-Methode
$kpfakt = 0.25;                                             // Faktor      0,6...0,95
// Proportionalitäsfaktor
$kp = $kpfakt * ($tg / $tu);                                // Proportionalanteil
//echo $kp;
$tvfakt = 0.3;                                              // Faktor   0,2...0,5 alt 0,35
$tv = $tvfakt * $tu;                                        // Vorhatezeit / D-Anteil
//echo $tv;
$tnfakt = 2;                                                // Faktor  1...5
$tn = $tnfakt * $tu;                                        // Nachstellzeit / I-Anteil
$ea = GetValueFloat("PID_Regelabweichung");
$kd = GetValueFloat("PID_Danteil");
$es = GetValueFloat("PID_Ianteil");
$z2 = GetValueInteger("PID_Zeitalt");
$z1 = time();
$ta = $z1 - $z2;
$z2 = $z1;
if ($ta <= 0.1){
   $ta = 1;                                                 //Abtastzeitermittlung
   }
if ($ta >= 100){
   $ta = 100;                                               //Abtastzeitermittlung
   }
//echo "Abtast-Zeit: $ta
";
//IPS_LogMessage("PDI", "Abtast-Zeit: $ta");
// Ist-Wert -  Soll-Wert
$e = $w - $x;                                               //Regelabweichung (Sollwertabweichung auch Xw)
//IPS_LogMessage("PDI", "Regelabweichung: $e");
if ($kp * $e <= 100) {
   $es = $es + (($ea + $e) / 2);
   //echo "I-Anteil: $ta
";
 }else{
   $es = 0.01;    //i-speicher
}
if ($es >= 10) {
   $es = 10;
}
if ($es <= -10) {
   $es = -10;
}
// IPS_LogMessage("PDI", "I-Anteil: $es");
$diff1 = ($e - $ea) * 10;                                   // Diff. der Regelabweichung (alt neu)
//IPS_LogMessage("PDI", "Diff-Regelabweichung: $diff1");
 //  D-anteilsberechnung und d-Anteil ausklingen
$kd = ($kd + ($tv / $ta) * $diff1) / 2;
//IPS_LogMessage("PDI", "D-Anteil: $kd");
$y = $kp * ($e + (($ta / $tn) * $es) + $kd);                //Stellwert-Berechnung
//IPS_LogMessage("PDI", "Stellwert ohne Limit: $y");

// Limits
if ($y >= 16) {
   $y = 16;
}
if ($y <= 0){
   $y = 0;
}

$y1 = $y;                                                   // Wert merken
$ea = $e;

// abspeichern
SetValueFloat("PID_Regelabweichung", $ea);
SetValueFloat("PID_Danteil", $kd);
SetValueFloat("PID_Ianteil", $es);
SetValueFloat("PID_Stellwert", $y);
SetValueInteger("PID_Zeitalt", $z2);
// Regeln

// Schalten
if ($y >= 5) {
   //FS20_SwitchMode($id, True);
   echo "PID An";
} else {
   //FS20_SwitchMode($id, False);
   echo "PID Aus";
}
?>

Hallo Fabian,

nutzt Du eigentlich WIIPS? Dort wird einer drin sein.

Gruss Torro

@MST:
Erstmal danke fürs Script. Ich habe mir bereits ähnliche Gedanken gemacht. Da ich schon seit längerem den Temperaturtrend in den Räumen errechne, habe ich daraus einen einfachen PI-Regler gestrickt. (D-Anteil ist bei FBH nicht ganz so wild :rolleyes: ) Allerdings war ich noch nicht fertig. Dazu hatte ich erstmal ein paar Testreihen in Exceltabellen simuliert. Das Script arbeitet sehr ähnlich.

@Torro:
Ja ich benutze das wiips noch. Leider muss ich schnell was Brauchbares aus dem Hut zaubern. Aus Platzgründen wurde das Ventil vorgestern unterhalb des zu regelnden Fußbodens eingebaut. Somit ist der alte Flüssigkeitsthermostat nicht mehr verwendbar. Und da ich bereits einen thermischen Stellantrieb habe…

BTW: Ich weiß, man kann übergangsweise mit einem Zweizeiler einen „Zweipunktregler“ schreiben. Im Moment benutze ich sogar sowas. Aber man will ja auch noch Spaß an der Sache haben… :wink:

@steiner:

Fuer heizung ist D absolut nicht geëignet. D-kompo immer nur wenn es schnelle processablaufe gibt. (um die regelgeschwindigkeit von das messprocess zu verschnellen)
Und weil heizung sehr sehr trage arbeitet ist ein Integral uber zeit ganz wichtig. Meine meinung nach ist das vorheriger messpunkt als basis fur die integrale uber zeit nicht genugend. (Meine reglung wurde 5 referenz punkte in die zeit mit einkalkulieren) Aber aber aber… Das alles abzustimmen ist nicht einfach zu nennen vonwegen stunden und stunden ausprobieren - wer hat da noch die zeit :rolleyes:

Fur zb. lichtsteuerung ist dein script extrem geëignet -> sonnenaufgang / untergang simulation (wobei das einschalten von eine lichtquelle im haus das messverfahren stören wurde, oder eine vorbeiziehende wolke)

Bin mal gespannt was Torro aus sein Hut zauberen will. (Nicht schlecht gemeint Torro; du weisst : bei bedarf steht hilfe bereit)

Grusse an allen,
Fredje

Fuer heizung ist D absolut nicht geëignet. D-kompo immer nur wenn es schnelle processablaufe gibt. (um die regelgeschwindigkeit von das messprocess zu verschnellen)

Ja, das Script ist mehr für schnellere Abläufe „dimensioniert“. In meiner Variante hatte ich ja bereist auf den D-Anteil verzichtet. :smiley:

Meine reglung wurde 5 referenz punkte in die zeit mit einkalkulieren

Dann bin ich ja gar nicht so weit von der Realität entfernt gewesen. Denn meine Trendberechnung umfasst maximal 5 Werte, welche allerdings nicht älter als eine halbe Stunde sein dürfen. :smiley:

Na dann, schönen Sonntag
Fabian

@Prof

Hattest du deine Arbeit zum PI(D) hier schon veröffentlicht oder ist mir das irgendwie untergangen? Nutzt du das für eine FBH?

Doc

Hi Doc,

nein ich habe noch nix veröffentlicht. Aber ich arbeite seit einigen Tagen an einer Lösung. Und wie man als IPSler so ist, befragt man erstmal das Orakel, äähhhmm ich meine das Forum. :smiley:

Mir ist dabei nur aufgefallen, dass einige meiner Ansätze schon in die richtige Richtung gehen.
Gedacht ist das Ganze für eine FBH. Wie gesagt, im Moment mit „Zweipunktregler“.

Gruß
Fabian