Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

fhainz

Danke, nun ist im Log ruhe.
Dafür ist mir noch etwas anderes aufgefallen.

Bis 6 Uhr regelte der Regler richtig. Um 6 Uhr wird die Solltemp von 18 auf 17 runtergesetzt. Wurde auch gemacht, nur dem Regler war's egal das die Temp. > 17 war. Sollte der Regler das Ventil nicht zudrehen wenn die Solltemp kleiner ist als die Isttemp?

Grüße

John

#16
Hallo fhainz,

es wäre hilfreich, wenn du die Werte der P und I- Anteile sowie actuationCalc wie im Wiki angegeben im Chart darstellen würdest.
Dann wirst du selbst den PID-Algorithmus besser verstehen und ich kann das Teil besser auswerten.

weiterhin bitte noch Ausgabe zu folgendem Befehle mitsenden
list <pid>

Beim Sollwertsprung, macht ja auch der Stellausgang einen Sprung. Dafür ist der p-Anteil verantwortlich, der sofort reagiert.
und nun deutlich negativ sein wird . Da die Summe der Anteile immer noch positiv ist muss somit der i-Anteil  sehr gross  sein.

Der I-Anteil wiederum hängt von der Vorgeschichte ab, die wir hier nicht sehen. Zumindest muss er vor dem Sollwertsprung
anwachsen, da die Regeldifferenz negativ war. (Soll-Ist)

Ausserdem erkennt man eine Totzeit von fast 3 Stunden. Solange dauert es bis die Temperatur auf die Sollwertänderung reagiert.

Ggf lässt sich das Verhalten noch verbessern, wenn du den I-Faktor reduzierst und den P-Faktor erhöhst.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fhainz

#17
Zitat von: John am 09 Dezember 2013, 13:33:34
es wäre hilfreich, wenn du die Werte der P und I- Anteile sowie actuationCalc wie im Wiki angegeben im Chart darstellen würdest.
Kann ich gerne machen wenn du die Werte benötigst um das Verhalten besser analysieren zu können. Mir sagen die Werte nichts und ich brauch sich auch nicht im live-system

Zitat von: John am 09 Dezember 2013, 13:33:34
weiterhin bitte noch Ausgabe zu folgendem Befehle mitsenden
list <pid>
Bitteschön:

Internals:
   CFGFN      ./FHEM/heizung.cfg
   DEF        Schlafzimmer:temperature szStellventil:valve
   NAME       szHeizung
   NR         369
   NTFY_ORDER 50-szHeizung
   STATE      processing
   TYPE       PID20
   Readings:
     2013-12-09 16:44:13   actuation       0
     2013-12-09 16:45:13   actuationCalc   -0.17499999999972
     2013-12-09 16:45:13   delta           -0.800000000000001
     2013-12-09 16:44:13   desired         16
     2013-12-09 16:44:13   measured        16.8
     2013-12-09 16:45:13   p_d             0
     2013-12-09 16:45:13   p_i             19.8250000000003
     2013-12-09 16:45:13   p_p             -20
     2013-12-09 16:45:13   state           processing
   Helper:
     actor      szStellventil
     actorCommand valve
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 1
     actorTimestamp 2013-12-09 16:34:12
     actorValueDecPlaces 0
     adjust     
     calcInterval 60
     deltaGradient 0
     deltaOld   -0.800000000000001
     deltaOldTS 2013-12-09 16:44:43
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.25
     factor_P   25
     isWindUP   1
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     Schlafzimmer
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   alias      Heizung
   group      Heizung
   icon       temp_temperature
   room       2. Schlafzimmer
   verbose    1


Zitat von: John am 09 Dezember 2013, 13:33:34
Beim Sollwertsprung, macht ja auch der Stellausgang einen Sprung.
Ab 6 Uhr ist die SollTemp 1 Grad unter der IstTemp. Sollte das Ventil dann nicht auf 0 gehen? Heizbedarf ist ja zu dem Zeitpunkt keiner vorhanden.

Zitat von: John am 09 Dezember 2013, 13:33:34
Ausserdem erkennt man eine Totzeit von fast 3 Stunden. Solange dauert es bis die Temperatur auf die Sollwertänderung reagiert.
Was meinst du damit genau? Die Zeit von 6-9?

Zitat von: John am 09 Dezember 2013, 13:33:34
Ggf lässt sich das Verhalten noch verbessern, wenn du den I-Faktor reduzierst und den P-Faktor erhöhst.
Wie viel soll ich da reduzieren? Sry ich hab von der Materie keine Ahnung.

Ich häng noch einen aktuellen Screenshot der Heizung an.

Grüße

John

Hallo fhainz,

als Erstmassnahme empfehle ich dir folgende Änderungen

a.) pidFactor_P auf 50
b.) pidFactor_I  auf 0.1

ZitatMir sagen die Werte nichts und ich brauch sich auch nicht im live-system
Wenn du PID verwenden willst, solltest du dich mit dem Gedanken anfreunden, das auch zu verstehen, was passiert,
sonst kannst du ihn nicht korrekt einstellen.
Dann brauchtst du auch die Werte auch im live-system.

ZitatWas meinst du damit genau? Die Zeit von 6-9?
sorry,hab grad gesehen, dass du um 08:30 nochmal die Temperatur auf 16 Grad reduziert hast.

Kann es sein, dass  die Heizung bis ca. 04:00 Uhr im abgesenkten Betrieb gefahren ist und dann in den Normalbetrieb
(erhöhte Vorlauftemperatur) zurückkehrt ?.

John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fhainz

Zitat von: John am 09 Dezember 2013, 20:14:42
sonst kannst du ihn nicht korrekt einstellen.
Ok ich wusste nicht das ich da noch was einstellen muss. Dachte das ding läuft wie es ist ;) Dann ist klar das ich die werte brauche.

Zitat von: John am 09 Dezember 2013, 20:14:42
Kann es sein, dass  die Heizung bis ca. 04:00 Uhr im abgesenkten Betrieb gefahren ist und dann in den Normalbetrieb
(erhöhte Vorlauftemperatur) zurückkehrt ?.
Bis 01:00 Uhr hab ich 19°, bis 06:00 18° und ab 06:00 17° eingestellt. Heute hab ich nur manuell um 08:30 auf 16° gestellt damit das Ventil auf 0 geht ;)

Ich lass jetzt mal mit neuen werten bis morgen mitloggen dann poste ich einen neuen Screenshot. Hab bisher nur Soll, Ist, Ventil geloggt.

Grüße

John

Hallo  fhainz

ich hab mich wohl nicht klar genug ausgedrückt.
Es ging mir nicht um die Einstellung des Thermostats, sondern um die Einstellung des Heizkessels.

Dazu kannst du natürlich nur etwas sagen, wenn du darauf Zugriff hast.

Normalerweise wird die Vorlauftemperatur nachts am Heizkessel abgesenkt.
Dies kann man mit Zeitprogrammen an der Kesselsteuerung einstellen.
Das von dir gewünschte Heizverhalten ist allerdings genau entgegengesetzt.
Du willst es Nachts warm haben.

Wenn dem so ist, dann muss der Regler gleich 2 Dinge ausgleichen.
1. er muss nachts mit weniger Wäremenergie versuchen den Raum zu erwärmen, was relativ lange dauern kann.
2. wenn dann der Tag beginnt wird er mit Wärme geflutet (Tagbetrieb beginnt bei Heizung mit höherer Vorlauftemperatur)
   und dann willst du abkühlen.

Wenn du Zugriff auf die Brennersteuerung hast, solltest du das vielleicht angleichen.

John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fhainz

Ahh ok jetzt weiß ich was du meinst. Nachdem ich in einer Wohnung in einem Mehrparteienhaus wohne hab ich keinen zugriff auf den Heizkessel.

Stimmt, ich will wenn ich ins Bett gehe es im Schlafzimmer warm haben ca. 18-19 Grad. In der nacht kanns dann kühler werden bis min. 17 Grad. Tagsüber wenn ich nicht zu hause bin muss es auch nicht wärmer als max. 16-17 grad sein.

Das der Heizkessels in der Nacht die Temperatur des Vorlaufes absenkt ist jetzt wirklich zu meinem Nachteil. Kann ich mit den Regler Einstellungen etwas dagegen machen?

Grüße

John

Klar kann man was machen.

Setzt den Sollwert so zeitig, dass du gegen 00:00 Uhr den Sollwert erreichst (war ja im Chart nicht der Fall).

Dazu wirst du mehrere Versuche brauchen, aber mit Hilfe der Charts gelingt das gut.
(ggf. musst du schon um 21:00 Uhr beginnen)

Dafür kannst du den Sollwert um 00:00 Uhr runternehmen, denn es darf ja kühler werden.
Es dauert nun auch wieder Stunden bis der Raum um 3 Grad runterkühlt, das sollte nachts auch kein Problem sein.

Der I-Anteil des Reglers wirds dir danken.

John

   
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Tobias

Hi John,
kannst du in der (noch kommenden)Comandref und im Wiki bitte ganz genau abgrenzen für welchen Einsatzzweck PID20  und für welchen das "alte" PID-Modul ist? Wo liegen die UNterschied im Einsatzzweck?

Wenn sie sehr marginal sind möchte ich dafür plädieren nur Eins mit fhem auszuliefern. Also Mergen oder eins wegwerfen. Rudi als Maintainer des PID-Moduls kann dir sicher auch die Maintainerrechte am PID-Modul übertragen.....

De arme FHEM-Anwender weiß später nicht mehr was nun besser für seinen Einsatzweck ist.


Btw: Hast du schonmal die BatterieLebenszeit beim PID20 Einsatz gecheckt?
Ich zb. sende alle 10min ein FakeWT und nach 3-5Monaten sind die Batterien tot.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

John

Hallo Tobias

Zitatkannst du in der (noch kommenden)Comandref und im Wiki bitte ganz genau abgrenzen für welchen Einsatzzweck PID20  und für welchen das "alte" PID-Modul ist? Wo liegen die UNterschied im Einsatzzweck?
Das erschliesst sich aus dem anfangs erwähnten Forumseintrag, in dem die neuen und notwendigen Features von PID
diskutiert wurden.

ZitatWenn sie sehr marginal sind möchte ich dafür plädieren nur Eins mit fhem auszuliefern. Also Mergen oder eins wegwerfen.
Die Änderungen sind nicht marginal, sondern fundamental. Mergen macht keinen Sinn.

ZitatRudi als Maintainer des PID-Moduls kann dir sicher auch die Maintainerrechte am PID-Modul übertragen.....
Betateilchen ist der Maintainer. Er kann sich mit meinem Konzept nicht anfreunden, wie dies ebenfalls aus dem zuvor genannten
Forumseintrag zu entnehmen ist.

ZitatDe arme FHEM-Anwender weiß später nicht mehr was nun besser für seinen Einsatzweck ist
Nachvollziehbar. Wir sind aber derzeit in der Evaluationsphase.

Zitat
Btw: Hast du schonmal die BatterieLebenszeit beim PID20 Einsatz gecheckt?
Ich zb. sende alle 10min ein FakeWT und nach 3-5Monaten sind die Batterien tot.
Es gibt einige Parameter im PID20, mit den der Anwender die Zugriffshäufigkeit beeinflussen kann
und damit auch die Lebensauer der Batterie.
Ich selbst verwendet den MaxScanner nun seit bald 1 Jahr. Hier wird alle 15 Minuten der Mode umgeschalten.
Die Batterien halten bisher.

Da das WT selbst alle 3 Minuten den Istwert sendet, halte ich die als Ursache für schwindende Batterie-Ladung
für nicht plausibel.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Hans Franz

Hallo,

Der Regler scheint, soweit ich das nach dieser kurzen Testphase beurteilen kann, gut zu regeln.
Was mich noch stört, sind diese kleinen Ventilbewegungen bei einer Verminderung des I-Anteils.

Hier die Daten:



Internals:
   DEF        CUL_WS_5:temperature stellantrieb.04:valve
   NAME       heizung.04
   NR         370
   NTFY_ORDER 50-heizung.04
   STATE      processing
   TYPE       PID20
   Readings:
     2013-12-10 10:24:23   actuation       0
     2013-12-10 10:28:23   actuationCalc   -0.225000000000115
     2013-12-10 10:28:23   delta           -1
     2013-12-10 10:24:23   desired         15.0
     2013-12-10 10:24:23   measured        16.0
     2013-12-10 10:28:23   p_d             0
     2013-12-10 10:28:23   p_i             24.7749999999999
     2013-12-10 10:28:23   p_p             -25
     2013-12-10 10:28:23   state           processing
   Helper:
     actor      stellantrieb.04
     actorCommand valve
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 1
     actorTimestamp 2013-12-10 10:24:23
     actorValueDecPlaces 0
     adjust     
     calcInterval 60
     deltaGradient 0
     deltaOld   -1
     deltaOldTS 2013-12-10 10:26:05
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.25
     factor_P   25
     isWindUP   1
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     CUL_WS_5
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   alias      Heizungen_4
   room       Heizungen
   verbose    1


(//)
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

betateilchen

Zitat von: John am 10 Dezember 2013, 07:59:58Betateilchen ist der Maintainer. Er kann sich mit meinem Konzept nicht anfreunden,

Erzähl bitte nicht solch einen Unsinn!

Du schreibst selbst:

Zitat von: John am 10 Dezember 2013, 07:59:58Die Änderungen sind nicht marginal, sondern fundamental. Mergen macht keinen Sinn.

Und genau aus diesem Grund - es machte einfach keinen Sinn, alle von Dir konzipierten Änderungen in das "alte" Modul zu packen - habe ich das damals so entschieden. Man muss bei sowas auch immer an die Benutzer denken, die das Modul in seiner bisherigen Version bereits einsetzen (ob sie damit zufrieden sind oder nicht sei dahingestellt).

Wenn Du nun daraus ein neues Modul gebaut hast - umso besser.

Ein Mergen macht tatsächlich keinen Sinn. Was ich mir vorstellen kann, ist der Weg, das alte Modul PID in absehbarer Zeit in den Zweig /contrib zu verschieben, dies auch im Forum entsprechend anzukündigen und Dein neues Modul dann im Hauptzweig von FHEM mit auszuliefern. Das wird aber erst dann relevant, wenn Du der Meinung bist, dass Dein Modul "fertig" ist. Solange die von Dir angesprochene Evaluierungsphase noch läuft, tut diese Umstrukturierung aber nicht Not.

Und nochwas: Maintainer eines Moduls zu sein, heißt nicht, dass man auch der Entwickler des Moduls ist oder die Funktionalität des Moduls uneingeschränkt gutheißt. Das kann auch "nur" bedeuten, dass man u.a. die Verantwortung dafür übernommen hat, ein Modul regelmäßig konform der aktuellen fhem-Entwicklung zu halten.

Viele Grüße
Udo
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

John

Hallo Hans Franz

sieh  dir nochmals die Attribute pidActorThreshold und pidActorInterval im Wiki an.

Damit kannst du das Verhalten ändern.

Vorschlag:
pidActorThreshold zwischen 5 und 10 einstellen
pidActorInterval auf 600-900 stellen (max alle 10..15 Minuten Stellausgang betätigen)


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Hans Franz

Zitat von: John am 10 Dezember 2013, 14:38:00
Vorschlag:
pidActorThreshold zwischen 5 und 10 einstellen
pidActorInterval auf 600-900 stellen (max alle 10..15 Minuten Stellausgang betätigen)

Danke dir.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

fhainz

Zitat von: John am 09 Dezember 2013, 21:57:30
Klar kann man was machen.

Setzt den Sollwert so zeitig, dass du gegen 00:00 Uhr den Sollwert erreichst (war ja im Chart nicht der Fall).

Dazu wirst du mehrere Versuche brauchen, aber mit Hilfe der Charts gelingt das gut.
(ggf. musst du schon um 21:00 Uhr beginnen)

Dafür kannst du den Sollwert um 00:00 Uhr runternehmen, denn es darf ja kühler werden.
Es dauert nun auch wieder Stunden bis der Raum um 3 Grad runterkühlt, das sollte nachts auch kein Problem sein.

Der I-Anteil des Reglers wirds dir danken.
Alles klar, danke. Ich werde das mal versuchen!

Anbei noch ein Screenshot von heute mit p,i Kurve.

Grüße