Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

abc2006

Also haben wir einen Regelbereich:

pidActorLimitLower 1
pidActorLimitUpper 8
pidActorValueDevPlaces 0
pid_Factor_P //
Annahmen: Soll-Wert= 500 (abhängig von a) was geht, wenn zwei Personen anwesend sind und die Anlage auf 8 röhrt, b) welches ist dein Wunsch-Ziel
Maximalwert 1500 -> hier soll die Anlage auf Stufe 8 laufen
8 Stufen / Differenz 1000ppm = 0,008

pid_Factor_I //
Dieser Faktor bestimmt, wenn der PID in einem stabilen Zustand steht, wann die Anlage trotzdem hoch oder runter schaltet.
Annahme: wenn der CO2-Gehalt nach Entscheidung der Stufe weiterhin nicht passt:
1 Regelstufe / 150PPM Abweichung IST-SOLL * 600 Sekunden = 0,00001 wird bei Abweichung von 150ppm vom Sollwert nach 600 Sekunden eine Stufe höhergeschaltet. Achtung, gilt dann natürlich auf fürs zurückschalten...

pid_Factor_D //
Größe ist ausschließlich abhängig davon, wie schnell die Anlage regelt, ob sie ins schwingen kommt usw. Kann ich anhand der verfügbaren Daten leider nicht abschätzen.
Dieser Faktor regelt, wie schnell die Anlage reagiert, wenn sich der gemessene Wert ändert.
Soll heissen, wenn die Anlage auf 8 steht, und der Wert fällt plötzlich von 2000 auf 1500, fährt der D-Anteil die Anlage bereits zurück, obwohl nach I und P noch hochgeregelt werden müsste.

Praxistipps: SVG zeichnen, da sieht man sehr schnell, welcher der drei Parameter für unerwünschtes Verhalten verantwortlich ist, und kann ihn anpassen...

Grüße,
Stephan (der sich jetzt hoffentlich nicht verrechnet hat)...

PS: Wenn du es umsetzt in der 0-100%-Schaltung, kannst du natürlich genauso vorgehen. Musst dann nur die Werte anpassen (die bei diesem Regel/Messbereich natürlich sehr klein werden.. 



FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

LHBL2003

Hi,

Hinweis: Ich habe ein Bild im Anhang.

Ich setze mich gerade mit dem PID-Regler auseinander.
Den Sollwert setze ich aus einem Notify namens "n_Wolf_Ansteuerung" heraus auf den PID-Regler.
fhem("set Regelung_Wolf_Sparfaktor DesiredTempFromMaxTempDiff $DesiredTempFromMaxTempDiff");;
Der wird offensichtlich im PID gesetzt.

Der Istwert habe ich in meinem Notify als Reading "MeasuredTempFromMaxTempDiff" abgelegt . (Der wird offensichtlich schon abgeholt.)

Den Stellwerk möchte ich in einem Dummy Namens "d_Wolf_BM1" auf das Reading 65_Sollwertkorrektur schreiben. Wobei der Wert zwischen -4 und +4 liegen kann.

Bei mir steht als Status "alarm - missing desired" obwohl sich gerade mein desired Wert aktualisiert hat.
Was mache ich falsch bzw. was möchte mir die Meldung sagen?

LHBL2003

Hi,

also das Problem im Beitrag drüber konnte ich umgehen, indem ich mein Attribut "pidDesiredName" wieder entfernt habe und somit den Standard Reading Namen Desired beschrieben habe. Somit konnte ich nun den Regler auch starten.

Allerdings bekomme ich in meinem Haupt Fhem Logfile alle Minute diesen Fehlerblock, weiß jemand was man dagegen unternehmen muss?:


2018.03.31 19:59:13.514 1: ERROR: empty name in readingsBeginUpdate
2018.03.31 19:59:13.514 1: stacktrace:
2018.03.31 19:59:13.515 1:     main::readingsBeginUpdate           called by ./FHEM/98_PID20.pm (720)
2018.03.31 19:59:13.515 1:     main::PID20_Calc                    called by fhem.pl (3064)
2018.03.31 19:59:13.515 1:     main::HandleTimeout                 called by fhem.pl (615)
2018.03.31 19:59:13.515 1: readingsUpdate(,p_i,0) missed to call readingsBeginUpdate first.
2018.03.31 19:59:13.516 1: stacktrace:
2018.03.31 19:59:13.516 1:     main::readingsBulkUpdate            called by ./FHEM/98_PID20.pm (725)
2018.03.31 19:59:13.516 1:     main::PID20_Calc                    called by fhem.pl (3064)
2018.03.31 19:59:13.516 1:     main::HandleTimeout                 called by fhem.pl (615)
2018.03.31 19:59:13.517 1: ERROR: empty name in readingsBeginUpdate
2018.03.31 19:59:13.517 1: stacktrace:
2018.03.31 19:59:13.517 1:     main::readingsBeginUpdate           called by fhem.pl (4562)
2018.03.31 19:59:13.518 1:     main::readingsSingleUpdate          called by ./FHEM/98_PID20.pm (739)
2018.03.31 19:59:13.518 1:     main::PID20_Calc                    called by fhem.pl (3064)
2018.03.31 19:59:13.518 1:     main::HandleTimeout                 called by fhem.pl (615)
2018.03.31 19:59:13.519 1: readingsUpdate(,state,alarm - no  yet for ) missed to call readingsBeginUpdate first.
2018.03.31 19:59:13.519 1: stacktrace:
2018.03.31 19:59:13.519 1:     main::readingsBulkUpdate            called by fhem.pl (4563)
2018.03.31 19:59:13.519 1:     main::readingsSingleUpdate          called by ./FHEM/98_PID20.pm (739)
2018.03.31 19:59:13.520 1:     main::PID20_Calc                    called by fhem.pl (3064)
2018.03.31 19:59:13.520 1:     main::HandleTimeout                 called by fhem.pl (615)

rostak

Tach auch,

ich lese mich seit geraumer Zeit begeistert durch dieses Forum.
Jetzt habe ich eine eigene Anwendung, zu der ich noch nichts fand:
Der Pufferspeicher der Zentralheizung in unserem EFH wird von verschiedenen Wärmequellen beheizt.
Nun kommt ein elektrischer Heizstab hinzu, der ausschließlich überschüssige PV Energie verheizen wird.
Er heizt in einem Durchlauferhitzer, der per Pumpenkreislauf mit dem Speicher, der keinen Einschraubflansch hat, verbunden ist.
Um die Schichtung im Speicher zu gewährleisten, soll die Durchflussmenge der Umwälzpumpe per Differenztemperatur (Speicher oben - Ausgang Durchlauferhitzer) geregelt werden. Das soll PID20 erledigen.

Nun meine Frage:
Welchen Sollwert soll die Pumpe verarbeiten können, um möglichst einfach eingebunden werden zu können?
Analog 0-10V? PWM? Sonst was?
Bin gespannt...

Morgennebel

Bist Du Dir sicher, daß PID20 der richtige Weg ist?

Eigentlich willst Du doch überschüssige Energie in Wasser einbringen und zwischenspeichern. Ist doch egal, ob das punktgenau ist - je mehr Du reinheizt (im zulässigen Rahmen natürlich), je länger mußt Du nicht anders heizen.

D.h. ein notify oder DOIF reicht völlig aus: einfach auf UnusedEnergy > 0 und BelowMaxTemp pruefen. Wenn wahr, schalte die Pumpe ein und bringe Hitze in den Speicher...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

JoeALLb

Über welches System willst du die Pumpe ansprechen?
Zum Beispiel für KNX gibt es zig 0-10V Aktoren, jedoch nichts vernünftiges in PWM. Daher würde ich immer ersteres bevorzugen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

rostak

Bin stolz auf mich: Hab den schlummernden Thread geweckt :)

@Morgennebel: genau, von der überschüssigen PV soll so viel wie möglich in den Puffer. Die Kommunikation mit der PV erledigt der intelligente Heizstab selbst und saugt ab, was überschüssig gemeldet wird und die Max Temp nicht überschreiten lässt. So weit, so einfach, doch dann kommt die Hürde "Schichtung":
PID20 soll sicherstellen, dass das eingespeiste Wasser mindestens so warm ist, wie im Puffer am Vorlaufstutzen. Der Überschuss kann bei heiter bis wolkig höchst dynamisch schwanken. Dem muss die Fördermenge folgen, um die Schichtungsaufgabe zu bewältigen. Daher der Ansatz, die Temperaturdifferenz zu regeln.

@JoeALLb: Danke, genau so einen Einstieg hatte ich erhofft. Bin noch nicht systemgebunden und werde nun mal bei KNX 0-10V studieren

JoeALLb

Deine Heizung selbst kann das nicht mit regeln?
Meine Buderus kann bis zu 9 solcher Kreisläufe regeln, auch über 0-10V (aber auch per PWM). Funktioniert simpel und zentral. Ich habe 4 Zuführer, alle mit eigenem Wärmetauscher von der einen Heizung gesteuert. Bei mir wird der Solarstrom in eine Wärmepumpe gesteckt und somit die Wärmeausbeute nochmal um den Faktor 5 erhöht...

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

rostak

Danke auch für DEN Hinweis!
Hab die Vaillant Calormatic 470/3. Bislang fand ich darin nur Betriebsmodi mit 2 Wärmequellen. Die 1. -Vaillant LuftWasser Wärmepumpe arotherm vwl85- wird morgen nach  langem Streit mit meinem Heizunsbauer wegen illegaler Lärmemission von selbigem endlich zurückgebaut. Legale Varianten sind mir zu teuer, deshalb erstmal der Heizstab.
Werde mich also mal tiefergend mit der Calormatic beschäftigen.

rostak

Kleines Abdeet meinerseits:
Nach dem Rausschmiss der Lärmquelle arotherm hat meine Heizung keine ebus Versorgung mehr. Sowohl die Mischersteuerung VR61 als auch das ebus-Kesselmodul VR39 und die Calormatic 470/4 empfangen und liefern nur Signale.
Fand für erträgliches Geld eine Calormatic 630, die den ebus versorgt und mehrere Wärmequellen für den Puffer im Griff halten können soll. Dennoch sehe ich kommen, die Pufferladung durch den stark modulierenden Heizstab unabhängig davon zu realisieren. Werde berichten und ggf. hier weiter auf Hilfe hoffen, wenn es darum geht, mit Bastelelektronik den PID20 Ausgang in 0-10 V zu wandeln.
Werde weiter berichten...

JoeALLb

Zitat von: rostak am 03 September 2018, 21:42:35
weiter auf Hilfe hoffen, wenn es darum geht, mit Bastelelektronik den PID20 Ausgang in 0-10 V zu wandeln.
Werde weiter berichten...
mit KNX kann ich dir dabei helfen... Aber da brauchst du natürlich auch Mal das grundlegende wie einen Trafo.... ;-)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Tedious

#386
Guten Morgen,

ich habe gerade mal testweise ein MAX-Thermostat von dem *'!*'!! (problematischen...) fakeWT auf PID20 umgestellt. Eine Frage hierzu - wenn ich das richtig verstanden habe setze ich ja jetzt die gewünschten Temperaturen via PID per "set desired XXX", korrekt.

as ist denn mit den "alten" eingestellten Week-Profiles? Werden die direkt ignoriert? Muss ich die löschen? Will vermeiden dass sich da unterschiedliche Regelungen im Weg stehen. Sprich, wer "überstimmt" denn hier wen? Und was passiert wenn jemand am Themostat direkt dreht?

------------------------
EDIT: hat sich erledigt. Dachte ich hätte einen Parameter für die Übergabe im Modul übersehen. Ich hab jetzt einfach ein notify gebastelt das mir den Wert übernimmt.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

MarvinLu

Schönen guten Morgen zusammen,

ich könnte Hilfe bei der Einrichtung meines ersten PID-Reglers gebrauchen.. Ich werde aus dem Log nicht so ganz schlau und verstehe das Verhalten nicht so ganz..

Das Problem ist folgendes:
Um 7 Uhr springt die Soll-Temperatur von 18 auf 20 Grad. Die Ist-Temperatur beträgt aber bereits mehr als 20 Grad. Trotzdem geht das Ventil auf..
Um 9:45 Uhr habe ich gelüftet, das wird auch vom Fensterkontakt sauber erkannt und das Thermostat wird abgeschaltet.

List meines Thermostates:

Internals:
   DEF        HeatingThermostat 1b35b2
   FUUID      5c6eee46-f33f-dc26-5275-b94f1bb47cb3caa8
   IODev      cm
   LASTInputDev cm
   MSGCNT     1013
   NAME       MAX_HT_SZM
   NR         90
   RSSI       -65.5
   STATE      17.0 °C
   TYPE       MAX
   addr       1b35b2
   backend    cm
   cm_MSGCNT  1013
   cm_TIME    2019-03-04 10:28:31
   dstsetting 1
   mode       0
   rferror    0
   type       HeatingThermostat
   READINGS:
     2019-03-04 10:28:31   RSSI            -65.5
     2019-02-21 19:34:10   TimeInformationHour 2
     2019-03-04 10:28:31   battery         ok
     2019-03-04 10:28:31   batteryFKf1     ok
     2019-03-04 10:28:31   batteryState    ok
     2019-02-22 07:17:26   boostDuration   25
     2019-02-22 07:17:26   boostValveposition 80
     2019-02-22 07:17:26   comfortTemperature 21.0
     2019-02-22 07:17:26   decalcification Sat 12:00
     2019-03-04 10:28:31   desiredTemperature 17.0
     2019-02-22 07:17:26   ecoTemperature  17.0
     2019-02-22 07:17:26   firmware        1.0
     2019-02-22 07:17:26   groupid         0
     2019-03-04 10:28:31   humidity        46.6
     2019-03-04 10:27:10   maxValveSetting 0
     2019-02-22 07:17:26   maximumTemperature on
     2019-02-22 07:17:26   measurementOffset 0.0
     2019-02-22 07:17:26   minimumTemperature off
     2019-03-04 10:28:31   mode            auto
     2019-03-04 10:27:09   msgcnt          225
     2019-03-04 10:28:31   state           17.0 °C
     2019-03-04 10:28:31   temperature     18.1
     2019-02-22 07:17:26   testresult      160
     2019-02-22 07:17:26   valveOffset     0
     2019-03-04 10:28:31   valveposition   0
     2019-02-28 21:01:24   weekprofile-0-Sat-temp 19.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  19.0 °C  /  19.0 °C
     2019-02-28 21:01:24   weekprofile-0-Sat-time 00:00-08:00  /  08:00-10:00  /  10:00-21:00  /  21:00-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-1-Sun-temp 19.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  19.0 °C  /  19.0 °C
     2019-02-28 21:01:24   weekprofile-1-Sun-time 00:00-08:00  /  08:00-10:00  /  10:00-21:00  /  21:00-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-2-Mon-temp 18.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  18.0 °C  /  18.0 °C
     2019-02-28 21:01:24   weekprofile-2-Mon-time 00:00-07:00  /  07:00-09:00  /  09:00-21:30  /  21:30-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-3-Tue-temp 18.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  18.0 °C  /  18.0 °C
     2019-02-28 21:01:24   weekprofile-3-Tue-time 00:00-07:00  /  07:00-09:00  /  09:00-21:30  /  21:30-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-4-Wed-temp 18.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  18.0 °C  /  18.0 °C
     2019-02-28 21:01:24   weekprofile-4-Wed-time 00:00-07:00  /  07:00-09:00  /  09:00-21:30  /  21:30-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-5-Thu-temp 18.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  18.0 °C  /  18.0 °C
     2019-02-28 21:01:24   weekprofile-5-Thu-time 00:00-07:00  /  07:00-09:00  /  09:00-21:30  /  21:30-23:00  /  23:00-23:55  /  23:55-00:00
     2019-02-28 21:01:24   weekprofile-6-Fri-temp 18.0 °C  /  20.0 °C  /  17.0 °C  /  20.0 °C  /  18.0 °C  /  18.0 °C
     2019-02-28 21:01:24   weekprofile-6-Fri-time 00:00-07:00  /  07:00-09:00  /  09:00-21:30  /  21:30-23:00  /  23:00-23:55  /  23:55-00:00
     2019-03-04 10:28:31   window1         closed
     2019-02-22 22:56:47   windowOpenDuration 1
     2019-02-22 21:50:39   windowOpenTemperature off
   internals:
     interfaces thermostat;battery;temperature
Attributes:
   IODev      cm
   group      Heizung
   room       2_SZ_Marvin
   scanTemp   1
   scnModeHandling AUTO
   scnProcessByDesiChange 1
   scnShutterList MAX_FK_SZM
   userReadings window1 {ReadingsVal('MAX_FK_SZM','state','')} , humidity {ReadingsVal('DHT22_SZ1','humidity','')}, batteryFKf1 {ReadingsVal('MAX_FK_SZM','battery','')}
   userattr   scnProcessByDesiChange:0,1 scnShutterList scnModeHandling:NOCHANGE,AUTO,MANUAL


List meines Sensors:

Internals:
   DEF        100
   FUUID      5c5b2da1-f33f-dc26-26bc-672793b5f484faa4
   IODev      MySensorGateway
   NAME       DHT22_SZ1
   NR         54
   STATE      18.9°C - 46.9% - 10:30:44
   TYPE       MYSENSORS_DEVICE
   ack        0
   radioId    100
   repeater   0
   READINGS:
     2019-02-24 08:16:08   SKETCH_NAME     TemperatureAndHumidity
     2019-02-24 08:16:08   SKETCH_VERSION  1.1
     2019-03-04 10:30:44   humidity        46.9
     2019-02-24 08:16:07   parentId        0
     2019-02-24 08:16:08   state           received presentation
     2019-03-04 10:30:12   temperature     18.9
   gets:
   readingMappings:
     0:
       0:
         name       temperature
       1:
         name       humidity
       42:
         name       id
   sensorMappings:
     0:
       receives:
       sends:
         16
         15
     1:
       receives:
       sends:
         16
         15
     10:
       receives:
       sends:
         6
         7
     11:
       receives:
       sends:
         11
     12:
       receives:
       sends:
         12
         14
     13:
       receives:
         24
       sends:
         17
         18
         54
         55
         56
         24
     14:
       receives:
       sends:
         45
         21
         0
         2
     15:
       receives:
       sends:
         13
         43
     16:
       receives:
       sends:
         23
         37
     17:
       receives:
       sends:
     18:
       receives:
       sends:
     19:
       receives:
         36
       sends:
         36
     2:
       receives:
       sends:
         16
         15
     20:
       receives:
         32
       sends:
         33
         50
         32
     21:
       receives:
         24
       sends:
         34
         35
         24
     22:
       receives:
       sends:
         37
         43
     23:
       receives:
         24
         25
         26
         27
         28
       sends:
         24
         25
         26
         27
         28
     24:
       receives:
       sends:
         37
         43
     25:
       receives:
       sends:
         19
         20
     26:
       receives:
         40
         17
         3
       sends:
         40
         17
         3
     27:
       receives:
         41
         17
         3
       sends:
         41
         17
         3
     28:
       receives:
         40
       sends:
         40
     29:
       receives:
       sends:
         2
         0
         45
         44
         21
         46
         22
     3:
       receives:
         2
         17
       sends:
         2
         17
     30:
       receives:
       sends:
         38
         39
         14
     31:
       receives:
       sends:
         2
         16
     32:
       receives:
       sends:
         16
         15
     33:
       receives:
       sends:
         37
         16
         15
     34:
       receives:
       sends:
         37
         16
         15
     35:
       receives:
       sends:
         37
         16
         15
     36:
       receives:
         47
       sends:
         47
     37:
       receives:
       sends:
         34
         35
     38:
       receives:
       sends:
         49
     39:
       receives:
       sends:
         0
         51
         52
         53
         2
     4:
       receives:
         2
         3
         17
       sends:
         2
         3
         17
     5:
       receives:
         29
         30
         31
         3
       sends:
         29
         30
         31
         3
     6:
       receives:
       sends:
         0
         42
     7:
       receives:
       sends:
         1
     8:
       receives:
       sends:
         4
         5
     9:
       receives:
       sends:
         8
         9
         10
   sets:
     clear      noArg
     flash      noArg
     fwType     
     reboot     noArg
     time       noArg
   typeMappings:
     0:
       type       temperature
     1:
       type       humidity
     10:
       type       direction
     11:
       type       uv
     12:
       type       weight
     13:
       type       distance
     14:
       type       impedance
     15:
       type       armed
       val:
         0          off
         1          on
     16:
       type       tripped
       val:
         0          off
         1          on
     17:
       type       power
     18:
       type       energy
     19:
       type       button_on
     2:
       type       status
       val:
         0          off
         1          on
     20:
       type       button_off
     21:
       type       hvacflowstate
     22:
       type       hvacspeed
     23:
       type       brightness
       range:
         max        100
         min        0
         step       1
     24:
       type       value1
     25:
       type       value2
     26:
       type       value3
     27:
       type       value4
     28:
       type       value5
     29:
       type       up
     3:
       type       percentage
       range:
         max        100
         min        0
         step       1
     30:
       type       down
     31:
       type       stop
     32:
       type       ir_send
     33:
       type       ir_receive
     34:
       type       flow
     35:
       type       volume
     36:
       type       lockstatus
       val:
         0          off
         1          on
     37:
       type       level
     38:
       type       voltage
     39:
       type       current
     4:
       type       pressure
     40:
       type       rgb
     41:
       type       rgbw
     42:
       type       id
     43:
       type       unitprefix
     44:
       type       hvacsetpointcool
     45:
       type       hvacsetpointheat
     46:
       type       hvacflowmode
     47:
       type       text
     48:
       type       custom
     49:
       type       position
     5:
       type       forecast
       val:
         0          stable
         1          sunny
         2          cloudy
         3          unstable
         4          thunderstorm
         5          unknown
     50:
       type       ir_record
     51:
       type       ph
     52:
       type       orp
     53:
       type       ec
     54:
       type       value
     55:
       type       va
     56:
       type       power_factor
     6:
       type       rain
     7:
       type       rainrate
     8:
       type       wind
     9:
       type       gust
Attributes:
   IODev      MySensorGateway
   group      MySensors
   mapReading_humidity 0 humidity
   mapReading_id 0 id
   mapReading_temperature 0 temperature
   mode       node
   room       2_SZ_Marvin
   stateFormat {ReadingsVal('DHT22_SZ1','temperature','')."°C - ".ReadingsVal('DHT22_SZ1','humidity','')."% - ".substr(ReadingsTimestamp('DHT22_SZ1','humidity',''),11,8)}


List meines PID20-Reglers:

Internals:
   CHANGED   
   DEF        DHT22_SZ1:temperature MAX_HT_SZM:maxValveSetting
   FUUID      5c78ef90-f33f-dc26-6d02-37db176740e3f88c
   NAME       PID_SZM
   NR         106
   NTFY_ORDER 50-PID_SZM
   STATE      processing
   TYPE       PID20
   VERSION    1.0.0.9
   READINGS:
     2019-03-04 10:31:10   actuation       0
     2019-03-04 10:31:10   actuationCalc   -40.7399999999996
     2019-03-04 10:31:10   delta           -1.9
     2019-03-04 10:31:10   desired         17.0
     2019-03-04 10:31:10   measured        18.9
     2019-03-04 10:31:10   p_d             0
     2019-03-04 10:31:10   p_i             54.2600000000003
     2019-03-04 10:31:10   p_p             -94.9999999999999
     2019-03-04 10:31:10   state           processing
   helper:
     actor      MAX_HT_SZM
     actorCommand maxValveSetting
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 1
     actorTimestamp 2019-03-04 10:27:09
     actorValueDecPlaces 0
     adjust     
     calcInterval 60
     deltaGradient 0
     deltaOld   -1.9
     deltaOldTS 2019-03-04 10:31:17
     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     DHT22_SZ1
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   event-min-interval actuation:300,actuationCalc:300,delta:300,desired:300,measured:300,p_d:300,p_i:300,p_p:300
   event-on-change-reading actuation:1,actuationCalc:0.5,delta:0.2,desired,measured:0.2,p_d:0.1,p_i:1.0,p_p:1.0
   group      PID
   pidActorValueDecPlaces 0
   pidFactor_I 0.2
   pidFactor_P 50
   pidReverseAction 0
   room       2_SZ_Marvin


Kann mir helfen helfen bzw. Hilfe zur Selbsthilfe geben?

Liebe Grüße und schon mal vielen Dank,
Marvin

bartman121

#388
Hallo,

grundsätzlich scheint etwas Verständnis für den Regler zu fehlen, mal ganz grob beschrieben:

Proportional-Anteil (P) ... Jede Temperaturdifferenz erzeugt eine Ventilöffnung nach dieser Formel: deltaT*pidFactor_P
Beispiel: Soll: 20°C,IST:18°C,pidFactor_P=10 --> Ventilöffnung=20%
Beispiel 2: Soll: 20°C,IST:21°C,pidFactor_P=10 --> Ventilöffnung= -10%
Integraler Anteil (I) ... dieser Wert ist ein "gelernter Wert" aus der Vergangenheit, er beschreibt im Grunde genommen wie weit das Ventil geöffnet sein muss um eine Temperatur zu "halten". Denn bei deltaT=0K wäre der P-Anteil 0%, da aber Räume auch "nachgeheizt" werden müssen, benötigt man einen I-Anteil.

Zu jedem Zeitpunkt ergibt sich die tatsächliche Ventilöffnung als Summe aus I-Anteil + P-Anteil.

Dein Regler hat irgendwann mal gelernt (vermutlich hattest du das Attribut pidFactor_I irgendwann mal viel zu hoch), dass zum Halten der Temperatur etwa 50%Ventilöffnung nötig sind. Darum sinkt die Temperatur beim Absenken der Soll-Temperatur in der Nacht auch nicht ab.

dein I-Anteil ist, warum auch immer, viel zu hoch.

Als erstes würde ich empfehlen:
pidFactor_I 0.05
pidFactor_P 10

Danach den PID-Regler "resetten":
ZitatWie kann ich den I-Anteil (p_i) im Regler auf 0 setzen ?
Dies ist nach folgender Anweisung möglich:


set <Pid-Name> restart <p_p + p_d>

Danach rantasten Regler-Einstellungen --> empirische Dimensionierung

trollmars

Hi Folgendes Problem.

Bei meinen thermostaten ist "Handbetrieb" möglich.

Durch eine Regel wird beim Handbetrieb der manuelle Modus mit Ventilöffnung deaktiviert.

Der PID läuft aber weiter.
pidActorKeepAlive ist 3600


Jetzt wechsel ich via Visu wieder auf Ventilöffnung.
Die neue Sollvorgabe wird dann z.B 21 Grad gestellt. Im Zimmer ist aber schon 22 Grad (durch Handbetrieb)
Der PID20 soll jetzt wieder greifen. Das Thermostat wechselt auch auf Stellantrieb.

Beim PID steht die actuation z.B jetzt auf 0 da neues SOLL 21 Grad ist und IST 22 Grad ist.
Durch den pidActorKeepAlive 3600 wird aber nicht direkt neue actuation gesendet.
Auch wenn ich in einem DOIF "PID restart 10" sende.. passiert nichts.


Gibt es eine möglichkeit die actuation einmalig via Befehl zu senden?