PID20 Regler funktioniert nicht

Begonnen von Burny4600, 12 November 2016, 21:03:05

Vorheriges Thema - Nächstes Thema

Burny4600

Benötige einige Regler für die Schichtspeicher Beheizung und bin über den PID20 Regler gestoßen.
Nur bekomme ich diesen einfach nicht zum Laufen.
Habe unter den Readings immer den Eintrag alarm - missing desired.

Irgendwie dürfte ich bei der Konfiguration etwas falsch verstanden haben.
Istwert ist die Temperatur des SSP.
Aktor ist derzeit wegen des Tests noch ein Dummy der später durch einen Aktor abgelöst wird.
Der Aktor soll zwischen 30 und 100% arbeiten.

Die Config des PID Regler
define R5 dummy
attr R5 group SSP
attr R5 room Heizung

define PID.R5 PID20 DL2_T03:state R5
attr PID.R5 event-min-interval actuation:1800,actuationCalc:1800,delta:1800,desired:1800,measured:1800,p_d:1800,p_i:1800,p_p:1800
attr PID.R5 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
attr PID.R5 group SSP
attr PID.R5 pidActorErrorAction freeze
attr PID.R5 pidActorErrorPos 0
attr PID.R5 pidActorInterval 180
attr PID.R5 pidActorKeepAlive 1800
attr PID.R5 pidActorLimitLower 30
attr PID.R5 pidActorLimitUpper 100
attr PID.R5 pidActorTreshold 1
attr PID.R5 pidActorValueDecPlaces 0
attr PID.R5 pidCalcInterval 60
attr PID.R5 pidDebugActuation 0
attr PID.R5 pidDebugCalc 0
attr PID.R5 pidDebugDelta 0
attr PID.R5 pidDebugNotify 0
attr PID.R5 pidDebugSensor 0
attr PID.R5 pidDebugUpdate 0
attr PID.R5 pidDeltaTreshold 0
attr PID.R5 pidDesiredName Sollwert
attr PID.R5 pidFactor_D 0
attr PID.R5 pidFactor_I 0.25
attr PID.R5 pidFactor_P 25
attr PID.R5 pidMeasuredName Istwert
attr PID.R5 pidReverseAction 0
attr PID.R5 pidSensorTimeout 3600
attr PID.R5 pidUpdateInterval 300


Was habe ich hier falsch gemacht?
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

sumsum

Was ist denn der Sollwert (desired)?

Burny4600

Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

sumsum

Wenn du damit startest und dann nach und nach deine anderen attr einfügst...

Internals:
   CHANGED
   DEF        DL2_T03:state R5
   NAME       PID.R5
   NR         28
   NTFY_ORDER 50-PID.R5
   STATE      processing
   TYPE       PID20
   VERSION    1.0.0.9
   Readings:
     2016-11-13 20:16:37   Istwert         43
     2016-11-13 20:16:37   actuation       30
     2016-11-13 20:16:37   actuationCalc   -22
     2016-11-13 20:16:37   delta           -1
     2016-11-13 20:16:37   desired         42
     2016-11-13 20:16:37   p_d             0
     2016-11-13 20:16:37   p_i             3
     2016-11-13 20:16:37   p_p             -25
     2016-11-13 16:52:53   sollwert        50
     2016-11-13 20:16:37   state           processing
   Helper:
     actor      R5
     actorCommand
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 30
     actorLimitUpper 100
     actorThreshold 1
     actorTimestamp 2016-11-13 20:13:37
     actorValueDecPlaces 0
     adjust
     calcInterval 60
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.25
     factor_P   25
     isWindUP   1
     measuredName Istwert
     reading    state
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     DL2_T03
     sensorTimeout 3600
     stopped    0
     updateInterval 300
Attributes:
   event-min-interval actuation:1800,actuationCalc:1800,delta:1800,desired:1800,measured:1800,p_d:1800,p_i:1800,p_p:1800
   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
   pidActorErrorAction freeze
   pidActorInterval 180
   pidActorKeepAlive 1800
   pidActorLimitLower 30
   pidActorLimitUpper 100
   pidActorTreshold 1
   pidActorValueDecPlaces 0
   pidCalcInterval 60
   pidDeltaTreshold 0
   pidFactor_D 0
   pidFactor_I 0.25
   pidFactor_P 25
   pidMeasuredName Istwert
   pidReverseAction 0
   pidSensorTimeout 3600
   pidUpdateInterval 300
   room       Heizung

Burny4600

#4
Wie ist das gemeint.

Habe den Fehler im PID20 gefunden.
Hier wird der Name für pidDesiredName nicht richtig übernommen.
pidDesiredName ist bei mir mit Sollwert definiert. Nur wird der Name Sollwert als sollwert für die Readings übernommen.
Beim pidMeasuredName wird die Definition in meinem Fall Istwert richtig übernommen. Da ist im PID20 ein Umsatzungsfehler beim Sollwert der zwangsweise eine Kleinschreibung durchführt.

Belasse ich den Sollwert Namen bei desired funktioniert der Regler.
Sowie ich pidDesiredName und bei alle anderen desired Parameter auf Sollwert ändere, streikt das Modul und kommt mit der Meldung alarm - missing desired.


Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Frank-Synology-DS215J

Ich hatte dasselbe Problem und habe es wie folgt gelöst:
pidDesiredName gelöscht und ein userReadings eingefügt
das so aussehen könnte: desired { ReadingsVal ("Heizung.DG.VorlaufSoll", "state",30);;}

Etwas späte Antwort aber vielleicht hilft es jemand anderem :)


memed

#6
für alle die noch den Fehler haben: TLDR: PID20 Zieltemperatur (desired)  einmal ändern warten

Um - nach noch mehr Zeit - etwas Licht ins Dunkel zu bringen:
Der PID20 Regler wartet auf ein event das den Wert von desired updated und das event update feuert, daher kann ein Dummy das nicht so einfach machen.
Ein Userreading sollte aber auch nicht nötig sein, sondern prüfen ob das Device das den desired wert liefert, entweder warten bis event-min-interval das macht, oder den Slider/set Befehl einmal selber aufrüfen.