Hi,
habe heute mal wieder etwas am Regler herumgespielt.
Dabei ging es primär darum, in verschiedenen Regelbereichen verschiedene P/I/D-Faktoren zu nutzen.
Dabei ist mir aufgefallen, dass wenn ich den pid_Factor_I auf "0" setze, der Regler immernoch einen PID-Anteil berechnet.
Logisch schiene mir, dass sich der I-Anteil nicht mehr verändert (weil 0* delta =0; plus I_alt = I_alt) oder dass der I-Anteil vom Modul auf 0 gesetzt wird.
Leider kann ich einen Bedienfehler nicht ausschließen, deshalb die Bitte, ob ihr euch meinen Regler mal anschaut.
Grüße,
Stephan
Internals:
DEF OW_HV_RLA:temperature D_PID_HV
NAME PID_HV
NR 27
NTFY_ORDER 50-PID_HV
STATE stopped, A: -7500ms 2017-10-30 14:53:02
TYPE PID20
VERSION 1.0.0.9
READINGS:
2017-10-30 14:53:02 actuation -7500
2017-10-30 14:53:02 actuationCalc -8838.96578764913
2017-10-30 14:53:02 delta 0.313000000000002
2017-10-30 14:53:02 desired 62
2017-10-30 14:53:02 measured 61.687
2017-10-30 14:53:02 p_d -16526.7657876491
2017-10-30 14:53:02 p_i 7500
2017-10-30 14:53:02 p_p 187.800000000001
2017-10-30 14:53:01 restarted 7912.19388158604
2017-10-30 14:53:31 state stopped
helper:
actor D_PID_HV
actorCommand
actorErrorAction freeze
actorErrorPos 0
actorInterval 1
actorKeepAlive 1800
actorLimitLower -7500
actorLimitUpper 7500
actorThreshold 1
actorTimestamp 2017-10-30 14:53:02
actorValueDecPlaces 0
adjust
calcInterval 30
deltaGradient -0.110178438584328
deltaOld 0.313000000000002
deltaOldTS 2017-10-30 14:53:01
deltaTreshold 0
desiredName desired
disable 0
factor_D 5000
factor_I 0
factor_P 600
isWindUP
measuredName measured
reading temperature
regexp ^([\+,\-]?\d+\.?\d*$)
reverseAction 0
sensor OW_HV_RLA
sensorTimeout 3600
stopped 1
updateInterval 600
Attributes:
comment positive Werte: mehr Vorlaufwasser/Temperatur muss höher/nach links drehen
negative Werte: mehr kaltes Wasser/Temperatur soll niedriger/nach rechts drehen
event-on-change-reading state
event-on-update-reading actuation,actuationCalc,p_d,p_i,p_p,measured,desired,delta
pidActorInterval 1
pidActorLimitLower -7500
pidActorLimitUpper 7500
pidActorValueDecPlaces 0
pidCalcInterval 30
pidFactor_D 5000
pidFactor_I 0
pidFactor_P 600
room PID
stateFormat {sprintf("%s, A: %.0fms %s",ReadingsVal($name,"state",0),ReadingsVal($name,"actuation",0),ReadingsTimestamp($name,"actuation",0))}
Hi, ich habe leider immernoch massiv das Problem, dass aufgrund langer Totzeiten der I-Wert zwischendurch massiv wächst, und ich das nicht in den Griff bekomme. Niemand einen Vorschlag, wie ich das lösen könnte?
Wenn (falls) keiner antwortet, weil die Lösung zuu trivial ist: Bitte helft mir doch kurz vom Schlauch runter.. ich kapier es nicht...
Danke,
Stephan
gerade ist mir auch aufgefallen, dass "restart" den I-Wert nicht auf 0 setzt... also .. nicht immer...
2017.11.03 23:22:51.746 3: PID20_DF PI: 113.486805758458
2017.11.03 23:22:51.747 3: PID20_DF PD: 90.8753739265242
2017.11.03 23:22:51.747 3: PID20_DF PP: 469.000000000001
2017.11.03 23:22:51.748 3: PID20_DF PP+PD: 469.000000000001 + 90.8753739265242 = 559.875373926525
2017.11.03 23:22:51.763 3: PID20 PID_HV: Set.383 set PID_HV restart 559.875373926525
2017.11.03 23:22:51.765 3: PID20_DF PI: 113.486805758458