|
From: <pf...@us...> - 2013-03-07 12:29:06
|
Revision: 1558
http://openautomation.svn.sourceforge.net/openautomation/?rev=1558&view=rev
Author: pfry
Date: 2013-03-07 12:28:59 +0000 (Thu, 07 Mar 2013)
Log Message:
-----------
PID-Parameter nun auch hausweit definierbar
Modified Paths:
--------------
wiregate/plugin/generic/Heizungsregler.pl
wiregate/plugin/generic/conf.d/Heizungsregler.conf
Modified: wiregate/plugin/generic/Heizungsregler.pl
===================================================================
--- wiregate/plugin/generic/Heizungsregler.pl 2013-03-07 09:38:50 UTC (rev 1557)
+++ wiregate/plugin/generic/Heizungsregler.pl 2013-03-07 12:28:59 UTC (rev 1558)
@@ -330,7 +330,10 @@
{
unless(defined $T{$type}{$s})
{
- $T{$type}{$s}=knx_read($s,5*$house{cycle},$dpt);
+ # wir lesen mit 1000s aus dem Cache, denn die Temp-Sensoren sind sowieso auf 1wire
+ # (und antworten daher nicht innerhalb der Plugin-Laufzeit).
+ # Achtung: sowohl Fensterkontakte als auch Temp-Sensoren sollten zyklisch senden!
+ $T{$type}{$s}=knx_read($s,5*$house{cycle},$dpt,1000);
delete $T{$type}{$s} unless defined $T{$type}{$s} && $T{$type}{$s}!=85;
}
}
@@ -390,7 +393,7 @@
# und wenn alle Stricke reissen, bleibt der vorkonfigurierte Wert
$R{spread}=$house{spread} unless defined $R{spread};
- plugin_log($plugname, $r.": ".(join " ", map "$_=$R{$_}", qw(sensor inflow floor outflow spread window)));
+ #plugin_log($plugname, $r.": ".(join " ", map "$_=$R{$_}", qw(sensor inflow floor outflow spread window)));
return @R{qw(sensor inflow floor outflow spread window)};
}
@@ -444,9 +447,18 @@
# Regelparameter einlesen
my ($Tv,$Tn,$lim,$prop,$refspread)=(30,30,1,1,10); # Defaults
- ($Tv,$Tn,$lim,$prop,$refspread)
- =@{$house{$r}{pid}}{qw(Tv Tn lim prop refspread)}
- if defined $house{$r}{pid};
+ if(defined $house{$r}{pid})
+ {
+ ($Tv,$Tn,$lim,$prop,$refspread)=@{$house{$r}{pid}}{qw(Tv Tn lim prop refspread)};
+ }
+ else
+ {
+ $Tv=$house{Tv} if defined $house{Tv};
+ $Tn=$house{Tn} if defined $house{Tn};
+ $lim=$house{lim} if defined $house{lim};
+ $prop=$house{prop} if defined $house{prop};
+ $refspread=$house{refspread} if defined $house{refspread};
+ }
$Tv*=60; $Tn*=60; # in Sekunden umrechnen
@@ -468,6 +480,8 @@
mode=>$mode, T0=>$T0, Told=>$T, told=>$t, IS=>$IS, DF=>$DF,
temps=>$temps, times=>$times, Uvals=>$Uvals, U=>$U
};
+
+ plugin_log($plugname, "$r: WINDOW");
writeactuators($r,$U);
return ($T,$T0,$U,0);
@@ -569,9 +583,9 @@
}
else
{
- # Tn, Tv, prop und refspread wurden am Ende der HEAT-Periode bereits berechnet
- # Wir nutzen die "cooling"-Periode sowieso nicht.
- # Also Parameter ins Konfig-File schreiben.
+ # Tn, Tv, prop und refspread wurden am Ende der HEAT-Periode bereits berechnet.
+ # Wir nutzen die "cooling"-Periode sowieso nicht fuer die Berechnung der Parameter.
+ # Also Parameter jetzt (Beginn "cooling") schon ins Konfig-File schreiben.
my ($Tn, $Tv, $prop, $refspread) = @{$dyn{$r}}{qw(Tn Tv prop refspread)};
my $date=strftime("%F %X",localtime);
my $lim=0.5;
@@ -708,7 +722,7 @@
RESET($r);
$dyn{$r}{mode}='ON'; # ansonsten uebrige Werte behalten
$dyn{$r}{T0}=$T0old;
- return "FAILED:POS2";
+ return "FAILED:POS2 ";
}
$pos2 = nearest(1,$pos2-$S1/2);
@@ -755,7 +769,7 @@
$dyn{$r}{T0}=$T0old;
$dyn{$r}{Told}=$T;
- return "FAILED:NEG";
+ return "FAILED:NEG ";
}
# Statusvariablen zurueckschreiben
Modified: wiregate/plugin/generic/conf.d/Heizungsregler.conf
===================================================================
--- wiregate/plugin/generic/conf.d/Heizungsregler.conf 2013-03-07 09:38:50 UTC (rev 1557)
+++ wiregate/plugin/generic/conf.d/Heizungsregler.conf 2013-03-07 12:28:59 UTC (rev 1558)
@@ -62,6 +62,30 @@
# outflow => '1/2/3', # hausweite Ruecklauftemp, falls nicht raumweise messbar
spread => 20, # hausweite Spreizung, falls alle Stricke reissen
+ # PID-Regelparameter fuer alle Raeume, die keine eigenen Parametersaetze (siehe ganz unten) definieren
+ # Falls diese Werte fehlen, wird als Standard (30, 30, 1, 1, 10) genommen
+
+ # Vorausblickende Zeit - D-Koeffizient
+ # groessere Werte sind aggressiver
+ Tv=>20,
+
+ # Nachstellzeit - I-Koeffizient, kleinere Werte sind aggressiver
+ # kleinere Werte sind aggressiver
+ Tn=>50,
+
+ # maximaler Beitrag der I-Komponente zur Ventilstellung, verhindert "wind-up"-Effekt
+ # groessere Werte sind aggressiver
+ lim=>0.5,
+
+ # Proportionalitaetsbereich (K) - Koeffizient vor allen drei (P, I, D)-Regelbeitr\xE4gen
+ # kleinere Werte sind aggressiver
+ prop=>0.7,
+
+ # alle obigen Koeffizienten (au\xDFer lim) beziehen sich auf diesen Referenzspread und werden fuer andere Spreads angepasst
+ # Es kommt im Endeffekt nur auf den Quotienten prop/refspread an!
+ # groessere Werte sind aggressiver
+ refspread=>20,
+
# Die Gruppenadressen fuer
# sensor (Ist-Temperatur im Raum),
# window (Fensterkontakte, dpt-Typ 1, Wert 1 bedeutet offen)
@@ -74,6 +98,8 @@
# Falls die auch fehlen, wird der fixe Spread weiter oben genommen.
# Wenn der auch noch fehlt, arbeitet der Regler nicht.
+# Es folgen die Definitionen der Raeume
+
WZ => {
control => $eibgaconf{TS_WZ}{ga}, # GA zum Setzen der Solltemperatur
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|