Autor Thema: Neues Modul PID20 - Der PID-Regler  (Gelesen 56654 mal)

Offline abc2006

  • Full Member
  • ***
  • Beiträge: 421
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #345 am: 05 Januar 2017, 15:57:32 »
Gerade habe ich versucht, meine gestrigen Erkenntnisse umzusetzen. Dabei ist mir aufgefallen, dass actuation immer ziemlich lange auf dem gleichen Wert bleibt, während sich actuationCalc ändert.
2017-01-05 15:42:20.206 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:42:20.206 PID20 PID.FUBO actuationCalc: 0.350500000000001
2017-01-05 15:43:20.284 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:43:20.284 PID20 PID.FUBO actuationCalc: 0.354000000000001
2017-01-05 15:44:20.362 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:44:20.362 PID20 PID.FUBO actuationCalc: 0.357500000000001

Un das zu beheben, habe ich ActorInterval kleiner gemacht (ist bei mir egal, wie groß das ist, weil ich auf die Events triggere).
hat aber nicht geholfen. Normal müsste doch bei ActorInterval = CalcInterval, immer beide actuation-Readings gleichzeitig aktualisiert werden, oder?

Sieht man auch schön im SVG... Ich weiss nicht, woran das liegt...
habs gefunden: ActorThreshold ist standardmäßig auf 1. Und da ich mit werten <1 arbeite... Wäre es nicht sinnvoll, standardmäßig alles auszugeben und nur bei Bedarf einzuschränken?

Internals:
   DEF        RE_TEMP_VorlaufHK:temperature D_MischerPID
   NAME       PID.FUBO
   NR         358
   NTFY_ORDER 50-PID.FUBO
   STATE      A: 0.5 AC: 0.4 Soll: 29.1°C Ist: 28.8°C
   TYPE       PID20
   VERSION    1.0.0.9
   Helper:
     Dblog:
       Actuation:
         Logdb:
           TIME       1483627400.2707
           VALUE      0.5
       Actuationcalc:
         Logdb:
           TIME       1483627400.2707
           VALUE      0.354000000000001
       Delta:
         Logdb:
           TIME       1483627400.2707
           VALUE      0.350000000000001
       Desired:
         Logdb:
           TIME       1483627400.2707
           VALUE      29.1
       Measured:
         Logdb:
           TIME       1483627400.2707
           VALUE      28.75
       P_d:
         Logdb:
           TIME       1483627400.2707
           VALUE      0
       P_i:
         Logdb:
           TIME       1483627400.2707
           VALUE      0.00399999999999928
       P_p:
         Logdb:
           TIME       1483627400.2707
           VALUE      0.350000000000001
       State:
         Logdb:
           TIME       1483627400.29952
           VALUE      processing
   Readings:
     2017-01-05 15:43:20   actuation       0.5
     2017-01-05 15:43:20   actuationCalc   0.354000000000001
     2016-11-13 21:00:54   alt             I: 0.9 P: 28 D: 50
     2017-01-05 15:43:20   delta           0.350000000000001
     2017-01-05 15:43:20   desired         29.1
     2017-01-05 15:43:20   measured        28.75
     2017-01-05 15:43:20   p_d             0
     2017-01-05 15:43:20   p_i             0.00399999999999928
     2017-01-05 15:43:20   p_p             0.350000000000001
     2016-11-13 21:00:54   pidFactor_D     0
     2016-11-13 21:00:54   pidFactor_I     0
     2016-11-13 21:00:54   pidFactor_P     0.99
     2017-01-05 15:43:20   state           processing
   Helper:
     actor      D_MischerPID
     actorCommand
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 1
     actorKeepAlive 1800
     actorLimitLower -5
     actorLimitUpper 5
     actorThreshold 1
     actorTimestamp 2017-01-05 15:36:40
     actorValueDecPlaces 1
     adjust
     calcInterval 60
     deltaGradient 0
     deltaOld   0.350000000000001
     deltaOldTS 2017-01-05 15:43:35
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.01
     factor_P   1
     isWindUP
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     RE_TEMP_VorlaufHK
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   DbLogInclude .*
   pidActorInterval 1
   pidActorLimitLower -5
   pidActorLimitUpper 5
   pidActorValueDecPlaces 1
   pidCalcInterval 60
   pidFactor_D 0
   pidFactor_I 0.01
   pidFactor_P 1
   room       Heizung
   stateFormat {sprintf("A: %.1f AC: %.1f Soll: %.1f°C Ist: %.1f°C", ReadingsVal("PID.FUBO","actuation",0),ReadingsVal("PID.FUBO","actuationCalc",0),ReadingsVal("PID.FUBO","desired",0),ReadingsVal("PID.FUBO","measured",0),)}

2017-01-05 15:42:18.837 PID20 PID.FUBO start
2017-01-05 15:42:20.206 PID20 PID.FUBO desired: 29.1
2017-01-05 15:42:20.206 PID20 PID.FUBO measured: 28.75
2017-01-05 15:42:20.206 PID20 PID.FUBO p_p: 0.350000000000001
2017-01-05 15:42:20.206 PID20 PID.FUBO p_d: 0
2017-01-05 15:42:20.206 PID20 PID.FUBO p_i: 0.000499999999999264
2017-01-05 15:42:20.206 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:42:20.206 PID20 PID.FUBO actuationCalc: 0.350500000000001
2017-01-05 15:42:20.206 PID20 PID.FUBO delta: 0.350000000000001
2017-01-05 15:42:20.226 PID20 PID.FUBO processing
2017-01-05 15:43:20.284 PID20 PID.FUBO desired: 29.1
2017-01-05 15:43:20.284 PID20 PID.FUBO measured: 28.75
2017-01-05 15:43:20.284 PID20 PID.FUBO p_p: 0.350000000000001
2017-01-05 15:43:20.284 PID20 PID.FUBO p_d: 0
2017-01-05 15:43:20.284 PID20 PID.FUBO p_i: 0.00399999999999928
2017-01-05 15:43:20.284 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:43:20.284 PID20 PID.FUBO actuationCalc: 0.354000000000001
2017-01-05 15:43:20.284 PID20 PID.FUBO delta: 0.350000000000001
2017-01-05 15:43:20.304 PID20 PID.FUBO processing
2017-01-05 15:43:57.231 PID20 PID.FUBO desired: 29.1
2017-01-05 15:44:20.362 PID20 PID.FUBO desired: 29.1
2017-01-05 15:44:20.362 PID20 PID.FUBO measured: 28.75
2017-01-05 15:44:20.362 PID20 PID.FUBO p_p: 0.350000000000001
2017-01-05 15:44:20.362 PID20 PID.FUBO p_d: 0
2017-01-05 15:44:20.362 PID20 PID.FUBO p_i: 0.00749999999999929
2017-01-05 15:44:20.362 PID20 PID.FUBO actuation: 0.5
2017-01-05 15:44:20.362 PID20 PID.FUBO actuationCalc: 0.357500000000001
2017-01-05 15:44:20.362 PID20 PID.FUBO delta: 0.350000000000001
2017-01-05 15:44:20.381 PID20 PID.FUBO processing

FHEM nightly auf Intel Atom (lubuntu) mit VDSL  50000 ;-)
CUL868v3 über USB ohne Repeater
Nutze zur Zeit FHT, HMS, FS20, HMW485
(Gateway HMW-LGW-O-DR-GS-EU, 2x HMW-IO-12-SW7-DR, 2x HMW-IO-12-Sw14-DR, 1x HMW-LC-Dim1L-DR) und OneWire
Erweiterung und Umbau auf KNX

Offline mafl2k

  • Newbie
  • Beiträge: 1
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #346 am: 03 Februar 2017, 13:37:36 »
Hallo John,

die D-Anteil Kalkulation darf keinen Bezug zur Desired Temperature haben.
Aktuell beeinflusst eine Änderung der Desired auch den D-Anteil für einen Takt.

Wenn ich deine Code richtig gelesen habe, reicht quickanddirty ein Entfernen der Variable in PID20_Notify.
Dadurch wird nur noch der SensorValue betrachtet. Man könnte noch die Namen anpassen.

258c258
<     my $delta    = $desired - $sensorValue           if ( defined($desired) );
---
>     my $delta    = $sensorValue;

Außerdem muss, glaube ich, noch dass Vorzeichen des D-Anteils gedreht werden.
Aktuell wirkt der Differenzierer verstärkend in Richtung der Änderung.

540c540
<       $dPortion = ($deltaGradient) * $hash->{helper}{calcInterval} * $hash->{helper}{factor_D};
---
>       $dPortion = ($deltaGradient) * $hash->{helper}{calcInterval} * $hash->{helper}{factor_D} * -1;
Oder man dreht den Gradienten vorher.

Gruß
Matthias
« Letzte Änderung: 03 Februar 2017, 18:25:37 von mafl2k »

Offline tyrolean

  • New Member
  • *
  • Beiträge: 16
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #347 am: 03 März 2017, 06:41:59 »
Hallo,

Ich habe seit ca einem Jahr meine gesamte Heizungssteuerung mit 1Wire und PID20 problemlos geregelt. Das Ganze ist via Homebridge in Homekit integriert.

Seit einiger Zeit verlieren die PID20 nach einem FHEM Neustart jedoch den desired Wert, was eher lästig ist da dadurch meine Regelung ausfällt, habt ihr hierzu eine Idee/Lösung?

Gruß aus Tirol

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1040
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #348 am: 03 März 2017, 07:06:11 »
Kann ich bestätigen, meines verliert die auch!
FHEM-Server auf IntelAtom+Debian (12 Watt),
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

Offline frank

  • Hero Member
  • *****
  • Beiträge: 5682
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #349 am: 03 März 2017, 12:02:22 »
ich erhalte 9x perl warning nach restart.

2017.03.01 08:45:23.902 1: PERL WARNING: given is experimental at ./FHEM/98_PID20.pm line 305, <$fh> line 1044.
2017.03.01 08:45:23.902 1: stacktrace:
2017.03.01 08:45:23.902 1:     main::__ANON__                      called by ./FHEM/98_PID20.pm (305)
2017.03.01 08:45:23.902 1:     (eval)                              called by fhem.pl (2333)
2017.03.01 08:45:23.902 1:     (eval)                              called by fhem.pl (2332)
2017.03.01 08:45:23.902 1:     main::CommandReload                 called by fhem.pl (1748)
2017.03.01 08:45:23.903 1:     main::LoadModule                    called by fhem.pl (1810)
2017.03.01 08:45:23.903 1:     main::CommandDefine                 called by fhem.pl (1106)
2017.03.01 08:45:23.903 1:     main::AnalyzeCommand                called by fhem.pl (975)
2017.03.01 08:45:23.903 1:     main::AnalyzeCommandChain           called by fhem.pl (1241)
2017.03.01 08:45:23.903 1:     main::CommandInclude                called by fhem.pl (520)

zusätzlich für die zeilen 307, 339, 341, 345, 356, 363, 370 und 385.


das desired problem muss ich mir mal anschauen. gut zu wissen, dass dort was klemmt.
FHEM: 5.7(SVN) => FB7390(06.04) | Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500

Offline ripperle

  • New Member
  • *
  • Beiträge: 15
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #350 am: 04 März 2017, 18:00:32 »
Ich habe eine kurze Frage und hoffe es ist ok sie hier einfach zu stellen:

Durch die Anti windup Strategie wird ja der i Anteil eingefroren wenn die Differenz kleiner min wert ist.
Wenn meine Heizung morgens eine tiefere soll Temperatur bekommt, springt die regeldifferenz auf z.B. - 5.
Da das kleiner 0 ist wird der i Anteil eingefroren und baut sich über Stunden nicht ab...
Ist dieses Verhalten so gewollt?
Ich würde erwarten das der i Anteil sich bis auf minimum abbaut (hier wäre das 0) bevor die Anti windup Strategie diesen einfriert...?!

Gruß
Andreas

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1040
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #351 am: 20 März 2017, 09:11:54 »
Vorab eine Entwarnung: bei den letzten Neustarts wurde mein desired-temp nicht mehr zurückgesetzt. Vermutlich hatte es etwa smit einem anderen FHEM-Update zu tun, denn ein weiteres Device hat etwas verloren...

Frage zu Fenster-Offen:
Wenn ich im Winter (bei -20°) die Türe etwas länger offen lasse, was beim Beladen des Autos öfter vorkommt, übersteuert meine FB-Heizung danach komplett.
Da der Raumfühler sehr kalt meldet, gehen die Ventile auf und der Boden bekommt zu warm. Hat jemand eine Idee, wie ich das am besten abfedere?
FHEM-Server auf IntelAtom+Debian (12 Watt),
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

Offline ripperle

  • New Member
  • *
  • Beiträge: 15
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #352 am: 21 März 2017, 21:31:10 »
Ich habe ein Fenster kontakt (DIY mit mysensors) und schalte beim öffnen des Fensters den regler auf stopp und die Heizung aus. Nach dem schließen warte ich 10 Minuten und schalte den regler wieder ein...

Kann jemand noch was zu meinem vorigen Post sagen?

Offline Mathea

  • Full Member
  • ***
  • Beiträge: 114
Antw:Neues Modul PID20 - Der PID-Regler
« Antwort #353 am: 10 Juni 2017, 15:55:34 »
Hi, gibt es eine Möglichkeit, dass der Regler seinen Zustand (processing / stop / ...) nach einem Neustart von fhem behält?

Ich steuere mit dem Regler meine Rolläden an, um im Sommer die Raumtemperatur konstant zu halten. Natürlich sollen die Rolläden allerdings nicht herunterfahren wenn meine Balkontür offen ist. Dementsprechend schalte ich den Regler mit "set BalkontuerPID stop" ab wenn die Tür geöffnet ist. Starte ich fhem nun allerdings neu, wird der Regler wieder eingeschaltet und fährt unter Umständen meine Rolläden trotz geöffneter Tür zu. Das möchte ich irgendwie vermeiden.

Vielen Dank im Voraus,
Mathea