Fussbodenheizung mit PWM steuern

Begonnen von jamesgo, 24 September 2015, 08:28:49

Vorheriges Thema - Nächstes Thema

My-FHEM

#165
Ich bin noch am tunen der PI Parameter. Da der ALgo. minütlich durchgerechnet wird, musste ich erst langsam die Werte ermitteln.

Bin jetzt bei P: 0.09 I: 0.04. Erst jetzt bekomme ich eine Modulation der Energiezufuhr. Voher war der Regler nur Übersteuert. 2-Punkt Verhalten.

Im Ersten Chart sieht man schön die negative Temp Änderung ohne das dort der Regler anfängt zu öffnen. Der D-Anteil
könnte dort helfen und im positiven Anstieg ebenfalls.

Ich denke für die PWM zur Fussbodenheizung sind bei minütlicher Rechnung 10 historische Werte zu wenig. Ich denke auch, das es nicht nötig ist
jede Minute neu zu rechnen. Besser alle 3 Min. entspricht in etwa der minimale Zykluszeit der Stellglieder (termische Stellantriebe). Schneller geht eh
nicht. Dann sind 10 historische Temp Werte schon eine halbe Stunde. Besser wären vielleicht 20 Historsche Werte?

Lass mir doch die neue Version zukommen. Ich teste das gerne.

Danke für deine Mühe.

Gruß

Das erste Chart zeigt die Regelung,
das Zweite erklärt sich selbst,
das Dritte sind die Vorlauf u. Rücklauf Temperatur des Heizkreises in dem Raum

jamesgo

Hallo,
hier mal die Version (sf ist zur Zeit im offline Modus)

Die Dokumentation habe ich angepasst. (evtl noch perl contrib/commandref_join.pl machen)

Hinter dem d-faktor einfach mit ":<DLookBackCnt>" angeben wieviele Temperaturen gespeichert und verwendet werden sollen.

Bei den Internals zeigt h_PID_previousTemps im Moment den Buffer an (bei vielen Nachkommastellen und 20 Werten ist das vermutlich zu lang).
Der linke Wert ist der Älteste. Diese Variable möchte ich später aber wieder entfernen.
Für das Delta wird die aktuelle Temperatur und die älteste im Buffer verwendet (Achtung: nach der Rechnung ist der Wert nicht mehr im Buffer)

Das Interval bei dem PWMR objekt bezieht sich auf die Regeln für die desired-temp.
Das Interval bei dem PWM objekt legt fest wie oft gerechnet wird ... das muss nicht 60 Sekunden sein.

Grüße
Andy

My-FHEM

#167
Hi,

was bedeutet actorState unknown?
Wodurch entsteht dieser Zustand,  und wie sollte dieser auf das Stellglied weitergegeben werden?

Gruß



jamesgo

Hallo,

actorState wird mit "unknown" initialisiet und bei jedem Schalten auf "on" bzw. "off" aktualisiert.
(Dummerweise wird "PWMR_Define" beim Starten von FHEM und wenn man im Web GUI auf "DEF" klickt um Parameter anzupassen aufgerufen.)

Für die Entscheidung ob der actor on oder off ist wird immer der Status des actors (aus STATE des actors) und das reading actorState nur im Fehlerfall verwendet.

Grüße
Andy

juppzupp

#169
Hallo,

ich sehe gerade den wald vor lauter bäumen nicht. hätte actor nicht schon anspringen müssen ?

danke fürs drüber schauen.


fhem> list fh
Internals:
   CFGFN     
   CYCLETIME  900
   DEF        60 900 120
   INTERVAL   60
   MINONOFFTIME 120
   MaxPulse   0.85
   MaxSwitchOffPerCycle 1
   MaxSwitchOnPerCycle 1
   NAME       fh
   NR         1082
   NoRoomsToStayOff 0
   NoRoomsToStayOn 0
   NoRoomsToStayOnThreshold 0
   OverallHeatingSwitch
   OverallHeatingSwitch_followUpTime
   OverallHeatingSwitch_regexp_on
   OverallHeatingSwitch_roomBased
   OverallHeatingSwitch_threshold
   STATE      lastrun: 2016-02-07 15:45:48
   TYPE       PWM
   Readings:
     2016-02-07 12:04:37   OverallHeatingSwitch
     2016-02-07 12:04:37   OverallHeatingSwitchWaitUntil
     2016-02-07 15:45:48   avgPulseRoomsOff 0.11
     2016-02-07 15:45:48   avgPulseRoomsOn 0
     2016-02-07 15:45:48   lastrun         calculating
     2016-02-07 15:45:48   pulseMax        0.11
     2016-02-07 15:45:48   pulseSum        0.11
     2016-02-07 15:45:48   roomsActive     1
     2016-02-07 15:45:48   roomsOff        1
     2016-02-07 15:45:48   roomsOn         0
Attributes:
   room       Dachzimmer
   verbose    4


und der raum :
fhem> list roomDach
Internals:
   ACTOR      esp8266_d
   CFGFN     
   DEF        fh 1 CUL_HM_HB_UW_Sen_THPL_I_E453C2 esp8266_d
   FACTOR     0.7
   FOFFSET    0.11
   INTERVAL   300
   IODev      fh
   NAME       roomDach
   NR         1100
   STATE      Manual
   TEMPSENSOR CUL_HM_HB_UW_Sen_THPL_I_E453C2
   TYPE       PWMR
   WINDOW     
   a_regexp_on on
   actor      esp8266_d
   c_PID_DFactor 0
   c_PID_DLookBackCnt 1
   c_PID_IFactor 0
   c_PID_PFactor 0
   c_PID_useit -1
   c_autoCalcTemp 0
   c_desiredTempFrom
   c_frostProtect 0
   c_tempC    22
   c_tempD    20
   c_tempE    19
   c_tempFrostProtect 6
   c_tempN    16
   c_tempRule1 1-5 0600,D 2200,N
   c_tempRule2 6-0 0800,D 2200,N
   c_tempRule3
   c_tempRule4
   c_tempRule5
   h_PID_previousTemps 19.4
   h_deltaTemp -0.1
   h_deltaTemp_prev -0.1
   h_pid_integrator 0.00
   t_reading  temperature
   t_regexp   ([\d\.]+)
   t_sensor   CUL_HM_HB_UW_Sen_THPL_I_E453C2
   w_regexp   .*Open.*
   windows   
   Helper:
     Dblog:
       Energyusedp:
         Mydblog:
           TIME       1454856408.13639
           VALUE      0.0
       State:
         Mydblog:
           TIME       1454856408.13639
           VALUE      energyused:
       Temperature:
         Mydblog:
           TIME       1454856408.10333
           VALUE      19.4
   Readings:
     2016-02-07 15:46:48   PWMOnTime       00:00
     2016-02-07 15:46:48   PWMPulse        0
     2016-02-07 12:07:18   actorState      unknown
     2016-02-07 12:08:09   desired-temp    19.5
     2016-02-07 15:46:48   desired-temp-used 19.5
     2016-02-07 15:46:48   energyused     
     2016-02-07 15:46:48   energyusedp     0.0
     2016-02-07 12:06:47   lastswitch      1454843207.32703
     2016-02-07 12:11:39   manualTempDuration 0
     2016-02-07 15:46:48   oldpulse        0.11
     2016-02-07 15:46:48   temperature     19.4
   Helper:
Attributes:
   autoCalcTemp 0
   room       Dachzimmer
   verbose    4

fhem>


der log :
2016.02.07 15:25:48.004 3: PWM_Calculate fh
2016.02.07 15:25:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:25:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:25:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.5 von(2016-02-07 15:23:34)), state(off)
2016.02.07 15:25:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:25:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:25:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:25:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:26:48.004 3: PWM_Calculate fh
2016.02.07 15:26:48.011 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:26:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:26:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:26:23)), state(off)
2016.02.07 15:26:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:26:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:26:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:26:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:27:48.004 3: PWM_Calculate fh
2016.02.07 15:27:48.011 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:27:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:27:48.044 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:26:23)), state(off)
2016.02.07 15:27:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:27:48.045 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:27:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:27:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:28:48.004 3: PWM_Calculate fh
2016.02.07 15:28:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:28:48.013 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:28:48.047 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:26:23)), state(off)
2016.02.07 15:28:48.048 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:28:48.048 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:28:48.049 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:28:48.050 4: PWMR_SetRoom roomDach <>
2016.02.07 15:29:48.005 3: PWM_Calculate fh
2016.02.07 15:29:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:29:48.013 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:29:48.054 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:28:56)), state(off)
2016.02.07 15:29:48.055 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:29:48.055 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:29:48.056 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:29:48.057 4: PWMR_SetRoom roomDach <>
2016.02.07 15:30:48.004 3: PWM_Calculate fh
2016.02.07 15:30:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:30:48.015 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:30:48.054 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:28:56)), state(off)
2016.02.07 15:30:48.055 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:30:48.055 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:30:48.056 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:30:48.057 4: PWMR_SetRoom roomDach <>
2016.02.07 15:31:48.004 3: PWM_Calculate fh
2016.02.07 15:31:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:31:48.013 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:31:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:31:13)), state(off)
2016.02.07 15:31:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:31:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:31:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:31:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:32:48.004 3: PWM_Calculate fh
2016.02.07 15:32:48.011 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:32:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:32:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:31:13)), state(off)
2016.02.07 15:32:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:32:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:32:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:32:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:33:48.005 3: PWM_Calculate fh
2016.02.07 15:33:48.014 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:33:48.015 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:33:48.055 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:31:13)), state(off)
2016.02.07 15:33:48.056 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:33:48.056 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:33:48.057 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:33:48.058 4: PWMR_SetRoom roomDach <>
2016.02.07 15:34:48.004 3: PWM_Calculate fh
2016.02.07 15:34:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:34:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:34:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:34:25)), state(off)
2016.02.07 15:34:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:34:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:34:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:34:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:35:48.004 3: PWM_Calculate fh
2016.02.07 15:35:48.011 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:35:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:35:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:34:25)), state(off)
2016.02.07 15:35:48.045 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:35:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:35:48.046 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:35:48.047 4: PWMR_SetRoom roomDach <>
2016.02.07 15:36:48.004 3: PWM_Calculate fh
2016.02.07 15:36:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:36:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:36:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:34:25)), state(off)
2016.02.07 15:36:48.046 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:36:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:36:48.047 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:36:48.048 4: PWMR_SetRoom roomDach <>
2016.02.07 15:37:48.004 3: PWM_Calculate fh
2016.02.07 15:37:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:37:48.012 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:37:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:37:21)), state(off)
2016.02.07 15:37:48.046 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:37:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:37:48.047 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:37:48.048 4: PWMR_SetRoom roomDach <>
2016.02.07 15:38:48.004 3: PWM_Calculate fh
2016.02.07 15:38:48.012 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:38:48.013 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:38:48.045 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:37:21)), state(off)
2016.02.07 15:38:48.046 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:38:48.046 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:38:48.047 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:38:48.048 4: PWMR_SetRoom roomDach <>
2016.02.07 15:39:48.024 3: PWM_Calculate fh
2016.02.07 15:39:48.033 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:39:48.034 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:39:48.063 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:37:21)), state(off)
2016.02.07 15:39:48.064 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:39:48.064 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:39:48.065 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:39:48.066 4: PWMR_SetRoom roomDach <>
2016.02.07 15:40:48.025 3: PWM_Calculate fh
2016.02.07 15:40:48.029 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:40:48.030 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:40:48.064 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:40:05)), state(off)
2016.02.07 15:40:48.065 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:40:48.065 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:40:48.066 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:40:48.067 4: PWMR_SetRoom roomDach <>
2016.02.07 15:41:48.050 3: PWM_Calculate fh
2016.02.07 15:41:48.055 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:41:48.055 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:41:48.083 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:40:05)), state(off)
2016.02.07 15:41:48.084 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:41:48.084 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:41:48.085 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:41:48.086 4: PWMR_SetRoom roomDach <>
2016.02.07 15:42:48.055 3: PWM_Calculate fh
2016.02.07 15:42:48.062 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:42:48.062 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:42:48.095 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:42:25)), state(off)
2016.02.07 15:42:48.096 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:42:48.096 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:42:48.097 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:42:48.098 4: PWMR_SetRoom roomDach <>
2016.02.07 15:43:48.059 3: PWM_Calculate fh
2016.02.07 15:43:48.066 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:43:48.067 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:43:48.098 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:42:25)), state(off)
2016.02.07 15:43:48.099 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:43:48.099 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:43:48.100 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:43:48.101 4: PWMR_SetRoom roomDach <>
2016.02.07 15:44:48.065 3: PWM_Calculate fh
2016.02.07 15:44:48.072 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:44:48.073 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:44:48.105 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:42:25)), state(off)
2016.02.07 15:44:48.105 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:44:48.106 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:44:48.106 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:44:48.107 4: PWMR_SetRoom roomDach <>
2016.02.07 15:45:48.069 3: PWM_Calculate fh
2016.02.07 15:45:48.077 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:45:48.077 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:45:48.109 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:45:44)), state(off)
2016.02.07 15:45:48.110 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:45:48.110 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:45:48.111 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:45:48.112 4: PWMR_SetRoom roomDach <>
2016.02.07 15:46:48.073 3: PWM_Calculate fh
2016.02.07 15:46:48.081 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:46:48.081 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:46:48.122 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:45:44)), state(off)
2016.02.07 15:46:48.123 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:46:48.123 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:46:48.124 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:46:48.125 4: PWMR_SetRoom roomDach <>
2016.02.07 15:47:48.078 3: PWM_Calculate fh
2016.02.07 15:47:48.085 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:47:48.086 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:47:48.120 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:45:44)), state(off)
2016.02.07 15:47:48.121 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:47:48.121 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:47:48.122 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:47:48.123 4: PWMR_SetRoom roomDach <>
2016.02.07 15:48:48.082 3: PWM_Calculate fh
2016.02.07 15:48:48.089 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:48:48.090 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:48:48.124 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:45:44)), state(off)
2016.02.07 15:48:48.124 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:48:48.125 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:48:48.126 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:48:48.127 4: PWMR_SetRoom roomDach <>
2016.02.07 15:49:48.086 3: PWM_Calculate fh
2016.02.07 15:49:48.096 4: PWM_Calculate calc fh, room roomDach
2016.02.07 15:49:48.098 4: PWM_CalcRoom: fh (roomDach)
2016.02.07 15:49:48.135 4: PWMR_ReadRoom roomDach: desT(19.5), actT(19.4 von(2016-02-07 15:48:48)), state(off)
2016.02.07 15:49:48.136 4: PWMR_ReadRoom roomDach: newpulse(0.11/00:00), oldpulse(0.11), lastSW(1454843207.32703 = 2016-02-07 12:06:47), window(0)
2016.02.07 15:49:48.136 3: PWM_CalcRoom roomDach: F2 new on
2016.02.07 15:49:48.138 3: PWM_Calculate roomDach: F0 stay unchanged off: (99 < 120 sec)
2016.02.07 15:49:48.141 4: PWMR_SetRoom roomDach <>

jamesgo

Hallo,

für mich sieht die definition gut aus.

Allerdings liegt deine Raumtemperatur bei 19.4 und deine desired-temp bei 19.5. Daraus ergibt sich PWMPulse = 0.
Die Meldung "F0 stay unchanged off: (99 < 120 sec)" bedeutet Puls von 99 Sekunden und ein minimaler Puls von 120 ... also auch "off".

Grüße
Andy

jamesgo

Hallo,

ich habe gerade eine Änderung an der PID Berechnung vorgenommen.

Betroffen ist die Definition generell und die Berechnung des I-Anteils.

Definition ist nun:

[<usePID 0|1>:<PFactor>:<IFactor>[,<ILookBackCnt>]:<DFactor>,[<DLookBackCnt>]

D.h. der DLookBackCnt wird nun nicht mehr mit ":" sondern "," definiert (also zur Verversion inkompatibel)

Für den I-Anteil gibt es nun ebenfalls einen Buffer (default 3). Damit kann der I-Anteil schneller reagieren und wird flexibler in der Parametrisierung:

Z.B. Alt: I-Anteil hat sich (über Nacht) auf -1 aufsummiert, Faktor = 0.1, Intervall 60 Sekunden ... dauert 10 Minuten bis er neutral wird wenn -1 Grad Temperaturabweichung. Ist die Temperaturabweichung nur -0.5 Grand dann dauert es noch 20 Minuten.

oder Alt: I-Anteil hat sich (über Nacht) auf -1 aufsummiert, Faktor = 0.04, Interval 60 Sekunden, -0.2 Grad Temperaturdifferenz wirkt der I-Anteil 125 Minuten (>2 Stunden) nach

Z.B. Neu: IFactor=0.3, ILoopBackCnt=5, bedeutet nur die Temperaturdifferenzen der letzen 5 Minuten werden in der I-Berechnung verwendet. Also Temperaturdifferenz (-)0.2 Grad führt nach 4 Minuten (da 4 Werte mit Abweichung) zu einem I-Anteil von (0.0+0.2+0.2+0.2+0.2) * 0.3 = 0.24 = 24%.
Nach 5 Minuten dann (0.2+0.2+0.2+0.2+0.2) * 0.3 = 0.3 = 30%.

Grüße
Andy




My-FHEM

#172
Hallo,

ich hab das neue Modul jetzt seit zwei Tagen im Test.

Mich wundert etwas, das der PID_PVal 0 ist trotz ist-soll != 0. Müsste nicht auch im Letzen Pulsblock der Wert von StellGR hochlaufen aufgrund des I-Anteils?

Zum Thema Windup; Wenn Stellausgang obere oder untere Begrenzung erreicht, dann I-Anteil einfrieren, bis durch P die Begrenzung verlassen wird.

Vielen Dank für deine Mühe bisher.

Ps. Es wird alle 180 sec gerechnet



jamesgo

Hallo,

sieht doch sehr gut aus.
Der P-Anteil kann aktuell nicht negativ sein (deine temperatur ist um 0.1 größer als desired-temp-used)

Wenn du den I-Anteil noch ein bisschen vergrößerst kommst du schneller an das Soll.

Das mit dem Windup muss ich mir mal überlegen.

Grüße
Andy

My-FHEM

Hallo,

warum soll P-Anteil nicht negativ sein?

Gruss

My-FHEM

#175
Hallo Andy,

Anbei aktuelles Chart. Ich Frage mich dabei, wieso bleibt die StellGR über zwei stunden konstant, obwohl eine
negative Regelabw. existiert?  Müsste nicht durch den I-Anteil die StellGR immer größer werden?

Liege ich dabei falsch?

Grüße

jamesgo

Hallo,

auf welchen Zeitraum beziehst du deine Frage?

Du hast die I-Anteil auf 3 Zyklen limitiert. Bei 180 Sekunden/Zyklus sind das 9 Minuten. Bei konstant 0.2 Grad Abweichung sind das
(0.2+0.2+0.2) *0.6 = 36%. Das ist dann der maximale I-Anteil.

Grüße
Andy

PS: das mit dem negative P-Antei werde ich noch fixen.

My-FHEM

#177
Hallo,

Vielleicht verstehe ich Begrenzung des I-Anteils im Zusammenhang mit der Anzahl der Rechen? o. PWM?  Zyklen nicht ganz.

Aber nach meinem generellen Verständnis müsste sich der I-Anteil bei bestehender Regelabweichung aufsummieren. Erst bei Regelabweichung Null sollte der I-Anteil unverändert bleiben.

Dh. im Chart sollten die On Zeiten  zwischen 1h00 u. 5h00 von mal zu mal größer werden. Bis das die Regelabweichung 0 ist oder
der I-Anteil in die Windup Begrenzung fährt.

So wie es für mich aussieht hat nur P u. D die gewünschte  Wirkung?


Grüsse, Danke für deine Mühe.

Ps. sollte ich die I-Anzahl bei PWM= 15min u. 120 sec CalcIntervall denn auf z.B. 20 setzen?

jensbergemann

#178
Hallo zusammen,

Zitatwie kann ich den nachträglich einen Fensterkontakt einem PWMR zu ordnen?

Habe es jetzt doch nocht hinbekommen. Ich habe den Aktor einfach in der Config nachgetragen.

jamesgo