Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

Jochen Auer

Hallo zusammen,

ich setze seit einigerzeit auch den PID20 Regler ein und bin total zufrieden damit.

Jetzt habe ich ein neues Einsatzgebiet für den Regler und würde gerne mit einem PID20 Regler zwei Stellantriebe ansteuen ist dies möglich?
Wenn ja was muss ich dafür machen?

Grüße
Jochen

John

Hallo Jochen,

ZitatJetzt habe ich ein neues Einsatzgebiet für den Regler und würde gerne mit einem PID20 Regler zwei Stellantriebe ansteuen ist dies möglich?
Wenn ja was muss ich dafür machen?

Wenn du dem PID20 als Stellglied einen Dummy anbietest, sollte dein Vorhaben realisierbar sein.
Du setzt dich über ein Notify auf die Aktualisierung des Dummys drauf und verteilst den Stellbefehl, so wie du es benötigst.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

unimatrix

Bevor es wieder Winter wird, möchte ich endlich meine (sehr alte) FB-Heizung mit thermischen Ventilen ausstatten. Ja, es gibt 100 Argumente dagegen, so etwas überhaupt zu tun. Aber ich weiß, warum ich es will.

Wie auch immer, hierzu muss ich Ventile für die einzelnen Räume mit thermischen Stellantrieben ausstatten. Dies sind 2-Punkt-"Steller" können also nur auf oder zu. Daher muss der Aktorwert als PWM auf die Stellantriebe gegeben werden. Beispiel: Aktor-Wert 50% -> Duty Cycle 50% (sagen wir bei einer Frequenz von 1 / 15 min, wäre dann das ventil 7,5 Minuten auf und 7,5 Minuten zu)

Darf ich es als Feature Request einbringen, so eine PWM-Regelung mit in das PID20 Modul einzubauen? Ich kann natürlich auch alle 30 Sekunden ein Polling machen und das so "von Hand" realisieren, da ich aber eine ganze Reihe von Ventilen haben werde, wäre das als integrierte Funktion natürlich schöner.

Oder vll. hat jemand eine bessere Idee für diese Problemstellung.

John

Hallo Unimatrix,
warum verwendest du nicht das Modul Threshold zur Lösung des Problems ?

Das ist für schaltende Stellglieder weitaus besser geeignet.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Martin W

Zitat von: Jochen Auer am 25 Mai 2014, 15:17:43
Jetzt habe ich ein neues Einsatzgebiet für den Regler und würde gerne mit einem PID20 Regler zwei Stellantriebe ansteuen ist dies möglich?

Hallo Jochen,
ich habe es über eine structure gelöst (zuerst).

Aber inzwischen habe ich meinen Antrieben (FHT8V) einfach mit dem selben Hauscode gepairt und steuerer auf dem PID20 den ersten an.
Der zweite läuft dann synchron mit.

Gruß
Martin

My-FHEM

@unimatrix

Ich habe die PWM für Fussbodenheizungen so gelöst: http://forum.fhem.de/index.php/topic,11025.msg123773.html#msg123773

Vielleicht ist dieses Prinzip für dich auch nutzbar.

ob PID o. PID20 ist dabei egal.

Gruss.

Rockojfonzo

Hallo My-FHEM,
kannst Du ein paar Tipps geben, wie Du Dich den richtigen Werte für P, I und D genähert hast (außer durch ein Studium an einer Technischen Hochschule)?  ;D

Dank

Tino
FHEM auf Shuttle XS 35V2 mit CUL und HM-LGW
9 x HM-CC-RT-DN; 2 x HM-LC-SW4-DR; 3 x HM-WDS30-OT2-SM; 3 x HM-SEC-SD; 1 x HM-LC-Bl1PBU-FM; 1 x HM-LC-SW1-PL2;1 x HM-LC-SW1-FM; 2 x HM-SEC-SC-2

cwagner

Hallo John,

jetzt mit der beginnenden Heizsaison bekommt auch PID20 wieder Arbeit. Über den Sommer hatte sich anscheinend einiges geändert, was zu "Perl"-Fehlermeldungen führte, von denen der eine Teil durch den jüngsten Update beseitigt wurde. Nun habe ich aber noch eine Fehlermeldung, für die ich nicht verstehe. Es wird immer mal wieder das Fehlen eines Sensorwertes angemeckert, obwohl er da ist. Im Einsatz:
# $Id: 98_PID20.pm 6796 2014-10-20 21:17:57Z john99sr $

Die Konfiguration:
Internals:
   CFGFN      ./FHEM/pid.cfg
   DEF        T_Vorlauf_FBH:temperature:(\d[0-9].[0-9]) FBH_Stellwert
   NAME       PID_Mischer_FBH
   NR         717
   NTFY_ORDER 50-PID_Mischer_FBH
   STATE      processing
   TYPE       PID20
   Readings:
     2014-10-24 08:24:25   actuation       100.0
     2014-10-24 08:29:26   actuationCalc   105.35
     2014-10-24 08:29:26   delta           6.4
     2014-10-24 08:24:25   desired         26
     2014-10-24 08:24:25   measured        19.6
     2014-10-24 08:29:26   p_d             0
     2014-10-24 08:29:26   p_i             79.75
     2014-10-24 08:29:26   p_p             25.6
     2014-10-24 08:29:26   state           processing
   Helper:
     actor      FBH_Stellwert
     actorCommand
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 1
     actorKeepAlive 24000
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 2
     actorTimestamp 2014-10-24 08:04:24
     actorValueDecPlaces 1
     adjust
     calcInterval 60
     deltaGradient 0
     deltaOld   6.4
     deltaOldTS 2014-10-24 08:29:29
     deltaTreshold 1
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.2
     factor_P   4
     isWindUP   1
     measuredName measured
     reading    temperature
     regexp     (\d[0-9].[0-9])
     reverseAction 0
     sensor     T_Vorlauf_FBH
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   group      Fussbodenkreis
   pidActorInterval 1
   pidActorKeepAlive 24000
   pidActorTreshold 2
   pidActorValueDecPlaces 1
   pidDeltaTreshold 1
   pidFactor_D 0
   pidFactor_I 0.2
   pidFactor_P 4
   room       Heizung


Beispielhaft ein Stück Log, eingedampft auf PID20:

2014.10.23 22:06:02 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.23 22:07:27 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 00:03:27 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 01:22:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 01:25:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 02:30:27 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 02:35:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 03:34:28 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 03:40:28 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 05:37:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 05:38:28 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 07:32:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 07:43:28 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 07:53:01 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.
2014.10.24 08:00:22 3: Stellwertveränderung 37.145
2014.10.24 08:00:22 3: PID20 PID_Mischer_FBH: Calc.686 <set FBH_Stellwert  60.9> with ret:
2014.10.24 08:01:23 3: Stellwertveränderung 25.27
2014.10.24 08:01:23 3: PID20 PID_Mischer_FBH: Calc.686 <set FBH_Stellwert  87.5> with ret:
2014.10.24 08:02:23 3: Stellwertveränderung 6.555
2014.10.24 08:02:23 3: PID20 PID_Mischer_FBH: Calc.686 <set FBH_Stellwert  94.4> with ret:
2014.10.24 08:03:24 3: Stellwertveränderung 4.085
2014.10.24 08:03:24 3: PID20 PID_Mischer_FBH: Calc.686 <set FBH_Stellwert  98.7> with ret:
2014.10.24 08:04:24 3: Stellwertveränderung 1.235
2014.10.24 08:04:24 3: PID20 PID_Mischer_FBH: Calc.686 <set FBH_Stellwert  100> with ret:
2014.10.24 08:07:28 1: PERL WARNING: Use of uninitialized value $sensorValue in subtraction (-) at ./FHEM/98_PID20.pm line 244.

PID_Mischer_FBH ist ein Dummy
Was kann ich tun?

Danke für Dein Modul und dank für eine Antwort im Voraus!

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

John

#218
Hallo Christian,
kannst du mir bitte ein EventLog deiner Sensorwerte schicken.

Sieh dir bitten nochmal dein regexp an, dass scheint mir verdächtig.
Was spricht gegen die Default-Regexp, die verwendet wird, wenn du nichts angibst ?
^([\+,\-]?\d+\.?\d*$)
John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

cwagner

Hallo John,

mit dem RegEx warst Du auf der richtigen Spur - über 16 Stunden hinweg habe ich jetzt die Fehlermeldungen nicht mehr und die Steuerung des Mischers mit Hilfe von PID20 und STELLMOTOR läuft wie gewünscht:

2014-10-25 15:43:14 OWTHERM Zuluft temperature: 18.4375
2014-10-25 15:43:19 STELLMOTOR Stellmotor2 position: 18
2014-10-25 15:43:19 STELLMOTOR Stellmotor2 queue_lastdiff: 0
2014-10-25 15:43:19 STELLMOTOR Stellmotor2 locked: 1
2014-10-25 15:43:19 STELLMOTOR Stellmotor2 lastStart: 1414244599.20334
2014-10-25 15:43:19 STELLMOTOR Stellmotor2 stopTime: 1414244616.10148
2014-10-25 15:43:19 OWSWITCH Switch_Heizkeller output Mischer_mehr ON
2014-10-25 15:43:19 OWSWITCH Switch_Heizkeller output Mischer_weniger OFF
2014-10-25 15:43:19 PID20 PID_Mischer_FBH actuation: 18
2014-10-25 15:43:20 OWSWITCH Switch_Heizkeller Brenner: OFF Mischer_weniger: OFF Mischer_mehr: ON Waschkueche: OFF EWT: OFF F: OFF G: OFF H: OFF
2014-10-25 15:43:35 OWTHERM T_Vorlauf_FBH temperature: 22.9375
2014-10-25 15:43:35 OWTHERM T_Vorlauf_FBH T: 22.94 °C
2014-10-25 15:43:36 OWSWITCH Switch_Heizkeller output Mischer_weniger OFF
2014-10-25 15:43:36 OWSWITCH Switch_Heizkeller output Mischer_mehr OFF
2014-10-25 15:43:36 STELLMOTOR Stellmotor2 position: 18
2014-10-25 15:43:36 STELLMOTOR Stellmotor2 queue_lastdiff: -0.24103139576159
2014-10-25 15:43:36 STELLMOTOR Stellmotor2 locked: 0
2014-10-25 15:43:36 STELLMOTOR Stellmotor2 stopTime: 0
2014-10-25 15:43:36 STELLMOTOR Stellmotor2 18
2014-10-25 15:43:38 OWTHERM Abluft temperature: 20.95
2014-10-25 15:43:39 OWSWITCH Switch_Heizkeller Brenner: OFF Mischer_weniger: OFF Mischer_mehr: OFF Waschkueche: OFF EWT: OFF F: OFF G: OFF H: OFF
2014-10-25 15:44:09 OWTHERM T_Vorlauf_FBH temperature: 23.4375
2014-10-25 15:44:09 OWTHERM T_Vorlauf_FBH T: 23.44 °C
2014-10-25 15:44:19 STELLMOTOR Stellmotor2 position: 16
2014-10-25 15:44:19 STELLMOTOR Stellmotor2 queue_lastdiff: 0
2014-10-25 15:44:19 STELLMOTOR Stellmotor2 locked: 1
2014-10-25 15:44:20 STELLMOTOR Stellmotor2 lastStart: 1414244659.9365
2014-10-25 15:44:20 STELLMOTOR Stellmotor2 stopTime: 1414244662.14973
2014-10-25 15:44:20 OWSWITCH Switch_Heizkeller output Mischer_mehr OFF
2014-10-25 15:44:20 OWSWITCH Switch_Heizkeller output Mischer_weniger ON
2014-10-25 15:44:20 PID20 PID_Mischer_FBH actuation: 16
2014-10-25 15:44:21 OWSWITCH Switch_Heizkeller Brenner: OFF Mischer_weniger: ON Mischer_mehr: OFF Waschkueche: OFF EWT: OFF F: OFF G: OFF H: OFF
2014-10-25 15:44:22 OWSWITCH Switch_Heizkeller output Mischer_weniger OFF
2014-10-25 15:44:22 OWSWITCH Switch_Heizkeller output Mischer_mehr OFF
2014-10-25 15:44:22 STELLMOTOR Stellmotor2 position: 16
2014-10-25 15:44:22 STELLMOTOR Stellmotor2 queue_lastdiff: 0.476996020266884
2014-10-25 15:44:22 STELLMOTOR Stellmotor2 locked: 0
2014-10-25 15:44:22 STELLMOTOR Stellmotor2 stopTime: 0
2014-10-25 15:44:23 STELLMOTOR Stellmotor2 16
2014-10-25 15:44:25 OWSWITCH Switch_Heizkeller Brenner: OFF Mischer_weniger: OFF Mischer_mehr: OFF Waschkueche: OFF EWT: OFF F: OFF G: OFF H: OFF
2014-10-25 15:44:38 OWTHERM T_Vorlauf_FBH temperature: 23.5625
2014-10-25 15:44:38 OWTHERM T_Vorlauf_FBH T: 23.56 °C
2014-10-25 15:48:37 OWTHERM T_Vorlauf_FBH temperature: 23.6875
2014-10-25 15:48:37 OWTHERM T_Vorlauf_FBH T: 23.69 °C
2014-10-25 15:49:11 OWTHERM T_Vorlauf_FBH temperature: 23.75
2014-10-25 15:49:11 OWTHERM T_Vorlauf_FBH T: 23.75 °C


Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Mauwges

Hallo zusammen,

ich habe ein (hoffentlich nicht Anfänger-)Problem.
Ich verwende zum Steuern meines FBH-Mischers ein MAX-Thermostat als Stellglied, und one-wire-Sensoren zur Temperatur Messung.
Die Regelung erfolgt über das PID20-Modul von FHEM.
Mein Tunen der Regelparameter ist mir aufgefallen, dass der D-Anteil an der Stellgröße immer 0 ist.

Woran kann das liegen?

Hier der Auszug aus meinem Info:
Internals:
   CFGFN      /opt/fhem/FHEM/Heizung.cfg
   DEF        Heizung.Ruecklauf.FBH:temperature Heizung.Mischer.FBH:maxValveSetting
   NAME       Heizung.FBH_Regler
   NR         211
   NTFY_ORDER 50-Heizung.FBH_Regler
   STATE      processing
   TYPE       PID20
   Readings:
     2014-11-10 19:44:47   actuation       16
     2014-11-10 19:53:47   actuationCalc   13.5532749999947
     2014-11-10 19:53:47   delta           -0.375
     2014-11-10 19:44:47   desired         29
     2014-11-10 19:44:47   measured        28.5
     2014-11-10 19:53:47   p_d             0
     2014-11-10 19:53:47   p_i             14.6782749999947
     2014-11-10 19:53:47   p_p             -1.125
     2014-11-10 19:53:47   state           processing
   Helper:
     actor      Heizung.Mischer.FBH
     actorCommand maxValveSetting
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 90
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 80
     actorThreshold 3
     actorTimestamp 2014-11-10 19:44:47
     actorValueDecPlaces 0
     adjust
     calcInterval 10
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   10
     factor_I   0.30
     factor_P   3
     isWindUP
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     Heizung.Ruecklauf.FBH
     sensorTimeout 3600
     sensorTsOld
     stopped    0
     updateInterval 600
Attributes:
   disable    0
   pidActorInterval 90
   pidActorLimitLower 0
   pidActorLimitUpper 80
   pidActorTreshold 3
   pidActorValueDecPlaces 0
   pidCalcInterval 10
   pidFactor_D 10
   pidFactor_I 0.30
   pidFactor_P 3
   room       Heizung
   verbose    2


Viele Grüße
Markus

John

Hallo Markus,

ich seh mir das Thema nochmal an. Selbst hab ich den D-Faktor noch nie produktiv benutzt.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

Hallo Markus,
würde dich bitte die angehängte Version zu testen und vom Ergebnis zu berichten.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

cwagner

Hallo John,

da bin ich natürlich sofort dabei - erste Rückmeldung nach einigen Stunden: P- und I-Anteil habe ich beibehalten und habe mal mit D=0.1 angefangen und in meinem Fall (alle 45 Sekunden eine Messung, sehr schnelle und extreme Ausschläge im Eingang) habe ich zwei sehr positive Effekte: 1. Deutlich weniger Regelschritte und 2. deutlich kleinere Ausschläge...

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

John

Hallo Christian,
besten Dank für die Rückmeldung.

Wäre schön, wenn du noch einen Plot reinstellen könntest, der auch den D-Anteil abbildet.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP