Neues Modul PID20 - Der PID-Regler

Begonnen von John, 02 Dezember 2013, 22:03:40

Vorheriges Thema - Nächstes Thema

gero

Hallo,

ich habe seit gestern auch in einem Testraum das PID20 Modul als Regler am Laufen.
Setup:
- Aktor: MAX HeizkörperThermostatPlus an einem normalen Heizkörper
- Istwert-Geber: Lacrosse Temperatursensor (TX29-IT)
- Heating_Control für das Wochenprogramm
- Anbindung von fakeSC (Fensterkontakt) und MAX Eco-Taster, Eco-Temperatur und FensterOffen-Temperatur werden aus dem MAX-Thermostat übernommen.

Der Testraum ist ein relativ kleines Badezimmer im Erdgeschoss und regiert sehr schnell mit großen Temperaturschwankungen auf minimale Energiezufuhr vom Heizkörper. Außerdem enthält das Wochenprogramm zur Zeit relativ geringe Sollwerte (6:00-18:00 19°C, 18:00-6:00 17°C). In der Vergangenheit habe ich den Termperatursensor mittels fakeWT angebunden und hatte ein starkes Schwingen der Temperatur (siehe erster Anhang, da war die comfortTemperatur allerdings noch auf 18°C eingestellt). Jetzt bin ich gespannt, wie sich das System mit dem PID20-Regler verhält und wie weit man es optimieren kann.
Die Vorlauftemperatur der Heizung habe ich schon so weit es geht reduziert. Die Heizung läuft zur Zeit mit einer Nachtabsenkung von 22:00 - 6:00 Uhr. Allerdings habe ich die Regelparameter der Heizung noch nicht ganz verstanden, da ich schon um ca. 3 Uhr einen Anstieg der Temperatur im Heizungsraum messe. Aber das ist ein anderes Thema.

Der zweite Anhang zeigt den Plot für die PID-Regelung von heute. Jetzt heißt es erstmal abwarten und das Verhalten beobachten.

Settings sind wie folgt:


Internals:
   DEF        T_00_Bad:temperature MAX_EG_Bad_HT:maxValveSetting
   NAME       PID_EG_Bad
   NR         250
   NTFY_ORDER 50-PID_EG_Bad
   STATE      processing
   TYPE       PID20
   Readings:
     2014-02-12 10:21:41   actuation       4
     2014-02-12 10:22:41   actuationCalc   -0.76
     2014-02-12 10:22:41   delta           -0.199999999999999
     2014-02-12 10:21:41   desired         19.0
     2014-02-12 10:21:41   measured        19.2
     2014-02-12 10:22:41   p_d             0
     2014-02-12 10:22:41   p_i             9.23999999999996
     2014-02-12 10:22:41   p_p             -9.99999999999996
     2014-02-12 10:22:41   state           processing
   Helper:
     actor      MAX_EG_Bad_HT
     actorCommand maxValveSetting
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 900
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 2
     actorTimestamp 2014-02-12 10:11:41
     actorValueDecPlaces 0
     adjust     
     calcInterval 60
     deltaGradient -0.00081274724405253
     deltaOld   -0.199999999999999
     deltaOldTS 2014-02-12 10:21:50
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.2
     factor_P   50
     isWindUP   1
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     T_00_Bad
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   pidActorInterval 900
   pidActorTreshold 2
   pidFactor_I 0.2
   pidFactor_P 50
   room       EG_Bad


@John: Vielen Dank für die Arbeit!

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

John

#136
Hallo Gero,

ich denk du solltest den pidFactor_P von 50 auf 25 nehmen, da die Aufheizung sehr schnell ist und bei geringer Öffnung
schon eine wuchtige Reaktion erfolgt.

Den pidFactor_I ebenso reduzieren von 0.2 auf 0.15.

Anmerkung:
irgendwas ist allerdings überdimensioniert (Vorlauftemperatur oder Heizkörper),
da die Ventilstellung nur im Bereich von    0..10 % im eingeschwungenen Zustand arbeitet.

Kannst du den Vorlauf weiter reduzieren oder den Volumenstrom über ggf vorhandene voreinstellbare Ventile begrenzen ?

Hast du mit der vorhergenden Variant via WT versucht über maxValveSetting den Arbeitsbereich zu reduzieren (z.B auf 30 statt 100 setzen) ?


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

gero

Hallo John,


Zitat von: John am 12 Februar 2014, 10:47:22
ich denk du solltest den pidFactor_P von 50 auf 25 nehmen, da die Aufheizung sehr schnell ist und bei geringer Öffnung
schon eine wuchtige Reaktion erfolgt.

Den pidFactor_I ebenso reduzieren von 0.2 auf 0.15.
Danke für den Hinweis, ich werde es heute mal umstellen.

Zitat von: John am 12 Februar 2014, 10:47:22
Anmerkung:
irgendwas ist allerdings überdimensioniert (Vorlauftemperatur oder Heizkörper),
da die Ventilstellung nur im Bereich von    0..10 % im eingeschwungenen Zustand arbeitet.

Kannst du den Vorlauf weiter reduzieren oder den Volumenstrom über ggf vorhandene voreinstellbare Ventile begrenzen ?
Der Testraum ist ein relativ kleines Badezimmer mit ca. 4m² und wahrscheinlich ist die Heizung für diesen Raum etwas überdimensioniert. Gestern verhielt sich der Raum bei gleichen Parametern etwas anders (siehe Anhang). Eine genaue Erklärung habe ich nicht dafür, außer dass ein Handtuch zum Trocknen über dem Heizköprer hing. Heute nachdem das Handtuch entfernt wurde, schwingt die Temperatur wieder lustig.

Die Vorlauftemperatur liegt zur Zeit bei ca. 40°C. Ich habe nur normale Heizkörper im ganzen Haus und keine Fußbodenheizung. Die Vorlauftemperatur und die Pumpenleistung kann ich nicht weiter reduzieren, weil es sonst in anderen Räumen nicht mehr warm genug wird. Anscheinend wurde aber nie ein hydraulischer Abgleich der gesamten Heizungsanlage gemacht. Aber welche Auswirkung hätte ein hydraulischer Abgleich für diesen Raum, wenn dort das Ventil auch so nie voll öffnet? Ich muß mich mit dem Thema hydraulischer Abgleich wohl noch etwas tiefer befassen. Hat die Voreinstellung am Ventil die gleiche Bedeutung, wie die Begrenzung durch das maxValveSetting?

Zitat von: John am 12 Februar 2014, 10:47:22
Hast du mit der vorhergenden Variant via WT versucht über maxValveSetting den Arbeitsbereich zu reduzieren (z.B auf 30 statt 100 setzen) ?
Bevor ich den PID20 eingesetzt habe stand maxValveSetting immer auf 100%. Ich habe lediglich einen externen Temperatursensor über fakeWT angebunden. Aber auch dort hat das Ventil ja nie mehr als 25% geöffnet.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

John

Hallo Gero,

die Regelkurve sieht doch nicht schlecht aus ?

ZitatHat die Voreinstellung am Ventil die gleiche Bedeutung, wie die Begrenzung durch das maxValveSetting?
Im Prinzip schon, da ja die maximale Durchflussmenge durch beide Massnahmen reduziert wird.
Allerdings muss MAX eben einen Teil seines Stellbereiches "opfern". Dies ist entfällt bei Nutzung der Voreinstellung und für MAX steht wieder der volle Stellbereich zur Verfügung. (Voller Hub des Ventils)

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

gero

Nachdem ich in einigen Räumen mit der MAX!-internen Regelung sehr unzufrieden bin, habe ich diese jetzt auch auf PID20 umgestellt.
Hierzu noch eine Frage:

Was ist der beste Weg, falls man in einem Raum mehrere Aktoren steuern will?
(Das PID20 Modul selbst kann nur einen Aktor steuern, soweit ich es verstanden habe.)
Hier die Ideen, die ich bisher hatte:
- Man könnte pro Heizkörper ein PID20- Regler definieren. (Das mache ich zur Zeit so). Das ist aber eigentlich zuviel, da sich die Regler innerhalb eines Raumes auch so gleich verhalten.
- Man könnte ein dummy Aktor definieren, der alle anderen zusammenfasst.
- Oder kann man nur einen Aktor anzusteuern und über die groupid automatisch alle anderen mit steuern?
- Kann man alle Heizkörper in einem Raum über eine structure zusammenfassen und diese structure dem PID20-Regler als Aktor angeben?

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

betateilchen

Zitat von: gero am 21 Februar 2014, 11:19:11- Kann man alle Heizkörper in einem Raum über eine structure zusammenfassen und diese structure dem PID20-Regler als Aktor angeben?

Ja, solange das alles identische Regler sind und für alle der Steuerbefehl gleich lautet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

gero

Danke für die Antwort.
Ich habe es gerade ausprobiert und es funktioniert.

Jetzt bin ich gespannt, ob die Regelung mittels PID20 zu besseren Resultaten führt als die Regelung mit  MAX ohne FHEM Eingriff.
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

gero

Ich hätte noch eine kurze Frage (wahrscheinlich eine dumme Anfängerfrage):

Ich würde gerne über das Web-Interface die gewünschte Temperatur des PID Reglers einstellen können.
Ein webCmd liefert keine DropDownListe, da die Werteliste für desired nicht im PID20_Set Kommando definiert ist.
Ein
attr <PID20_Regler> setList desired:...
funktioniert auch nicht, da dieses Attribute nicht unterstützt wird.

Der einzige Umweg, der mir einfällt, ist ein dummy Device. Aber ich möchte gerne ein weiteres Device umgehen, weil es irgendwann unübersichtlich wird,

Gibt es eine einfache Lösung? Ist es evtl. sinnvoll ein setList oder ähnliches dem Modul hinzuzufügen?

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

betateilchen

Soweit ich weiß (zumindest war das mal ursprünglich so), ist der set-Befehl dynamisch, weil nicht jedes Device "desired" verlangt, sondern bei manchen auch ein "desired-temp" (als Beispiel) vorkommt.

ZitatName des Setters kann vom Anwender über das Attribute "pidDesiredName" definiert werden

Deshalb ist das mit der Dropdownliste nicht so ohne weiteres möglich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

gero

Zitat von: betateilchen am 24 Februar 2014, 14:17:43
Soweit ich weiß (zumindest war das mal ursprünglich so), ist der set-Befehl dynamisch, weil nicht jedes Device "desired" verlangt, sondern bei manchen auch ein "desired-temp" (als Beispiel) vorkommt.

Deshalb ist das mit der Dropdownliste nicht so ohne weiteres möglich.

Das war mir bewußt. Deshalb auch mein Vorschlag, die Liste ebenfalls von extern definieren zu können.
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

Steve

Hey,

kann ich auch einen Istwert über GPIO4 vom RPI verarbeiten?


VG Steve

John

@Steve
jeder Wert der als Reading verfügbar ist, kann als Istwert verwendet werden.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

betateilchen

@John: Möchtest Du das Modul nicht irgendwann mal einchecken - z.B. vorläufig nach ./contrib ? Hier im Thread geistern jetzt schon drei verschiedene Versionen rum. Vielleicht kannst Du ja auch die aktuelle Modulversion immer im ersten Beitrag hier bereitstellen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Steve

@John,

ich habe den Sensor wie folgt erstellt "define Keller GPIO4 10-000802906860".

Wenn ich den Sensor mit Keller benenne kommt die Meldung "Unknown sensor device Keller specified"

Wo liegt der Fehler?

Steve

John

schick mal ein
list Keller

und dein PID20-define.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP