Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

alpine310

Hallo tobby

Angelegt habe ich das ganze wie oben von John beschrieben und die
sub PIDIPortionSet folgendermaßen ergänzt:


sub PIDIPortionSet ($$)
{
   my ( $name, $iPortion ) =@_;

   Log 1, 'PIDPortion Eingangswert: '.$iPortion; #zum debuggen ins Log schreiben

   if ( $iPortion > 250 ) { $iPortion = 250};  #auf 250 nach oben begrenzen
   if ( $iPortion < -250 ) { $iPortion = -250}; #auf -250 nach unten begrenzen

   Log 1, 'PIDPortion Ausgangswert: '.$iPortion; #geänderter Wert zum debuggen ins Log schreiben

   return $iPortion;
}


Martin

P.S.: Ich habe bis jetzt auch noch nie in Perl programmiert. Irgendwann muß
        man halt mal mit anfangen  :) ... hab extra deswegen ein Perl-Buch gekauft ;D
RasPi3, HM Heizkörperthermosate, HM Fensterkontakte, HM Rolladenaktoren, HM-LED Dimmer, HM-Funktaster mit Display, Keymatic, Anbindung an Heizungsregelung SolvisControl2 mit SolvisSmartHomeServer, Anbindung an TA-UVR16x2 (für Luftkollektoren und Lüftung)

UweH

Moin Moin,

ich habe auch bei mir einen PID mit folgenden Einstellungen definiert:
   CFGFN
   CHANGED
   DEF        Temp.AZ:temperature Poti:value
   NAME       Heizg_AZ
   NR         138
   NTFY_ORDER 50-Heizg_AZ
   STATE      idle
   TYPE       PID20
   VERSION    1.0.0.9
   Readings:
     2016-02-11 19:48:28   delta           2.4375
     2016-02-11 19:48:28   desired         25
     2016-02-11 19:48:28   measured        22.5625
     2016-02-11 19:48:28   p_i             0
     2016-02-11 19:48:28   state           idle
   Helper:
     actor      Poti
     actorCommand value
     actorErrorAction freeze
     actorErrorPos 0
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 100
     actorThreshold 4
     actorValueDecPlaces 1
     adjust     25
     calcInterval 60
     deltaGradient 0
     deltaOld   2.4375
     deltaOldTS 2016-02-11 19:49:04
     deltaTreshold 5
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.2
     factor_P   50
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     Temp.AZ
     sensorTimeout 3600
     stopped    0
     updateInterval 600
Attributes:
   event-min-interval .*: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
   pidActorErrorPos 0
   pidActorInterval 180
   pidActorKeepAlive 1800
   pidActorLimitLower 0
   pidActorLimitUpper 100
   pidActorTreshold 4
   pidActorValueDecPlaces 1
   pidDeltaTreshold 5
   pidFactor_I 0.2
   pidFactor_P 50
   room       Heizung
   verbose    5


Die Einstellungen habe ich mir erstmal aus Thread und commandref zusammenkopiert, um starten zu können. Ich hatte keine Fehlermeldungen, schien alles ok zu sein. Aber nun komme ich über einen entscheidenden Punkt nicht hinaus, der STATE ist "idle" und ändert sich nicht. Ich habe offenbar was Grundlegendes übersehen...kann mir jemand auf die Sprünge helfen?

Danke und Gruß
Uwe

frank

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
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
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Joachim

Der Pid Regler geht erst in prozessing, wenn diff zwischen desired und measured größer 5 ist,weil Du das so eingestellt hast:
ZitatdeltaTreshold 5

Gruß Joachim

Mist, Frank war schneller >:(
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

UweH

Ich sach ja, was Grundlegendes übersehen *verschämtindieeckeduck*

Vielen Dank und einen schönen Abend (meiner ist gerettet...)  ;)

Gruß
Uwe

bernd_zwo

#320
Hallo zusammen,
nachdem meine Installation mittlerweile ganz zufriedenstellend läuft, bin ich beim Feintuning.
Die PID20 regeln sehr schön, ich möchte lediglich, daß sie bei einer Änderung der Solltemperatur sofort reagieren, also stellen.

Um nicht vom "Sägen" der fht8v genervt zu werden, habe ich

pidActorInterval=1800
pidActorTreshold=5

eingestellt. Im Regelbertrieb funktioniert das auch gut. Lediglich der Start morgens reagiert etwas verzögert auf die geänderte Wunschtemperatur, wie man im SVG-Plot ganz gut erkennt.
Wenn ich alles richtig verstanden habe, kann ich das mit den div. T(h)reshold-Werten nicht verändern - oder? Was müßte ich tun, damit der Stellantrieb sofort bewegt wird, wenn ich "desired" anpasse?

Anbei SVG und list PID20

Gruß, Bernd
Meine Installation: fhem 5.8, Raspi 2 / Raspbian, Busware CUL 868, HM-MOD-UART, HM-CFG-USB-2 (aCulfw V 1.26.04 a-culfw Build: 306), JeeLink V3, fht8v, TX29DTH-IT, HM- (diverse)

frank

pidActorInterval uint 180 minimale Wartezeit in Sekunden, bis eine neue Ausgabe an das Stellglied erfolgen kann
ich arbeite bei mir mit 0s. somit wird nach jeder berechnung (60s), wenn zusätzlich auch pidActorTreshold erreicht ist, ein neuer wert zum aktor gesendet. du hast mindestens eine halbe stunde wartezeit zwischen 2 stellbefehlen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
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
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Joachim

@ frank,
Veto!
Zitatich arbeite bei mir mit 0s
das ist so z.B. bei MAX und weiteren Geräten, die der 1% Regel unterliegen fatal.
Sinnvoller ist, das Zusammenspiel aller möglichen Parameter, die im Wiki beschrieben sind.
pidActorInterval für eine "Zwangspause" nach einem erfolgten Stellbefehl. MAX kann nur 36 Stellbefehle in der Stunde, und andere Aktoren wollen auch noch bedient werden.
pidCalcInterval für die schnelle Reaktion, wenn die "Zwangspause" abgelaufen ist.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

frank

ZitatVeto!
doppel-veto!  ;)

bei der load (1%) kommt es ja noch auf weitere faktoren an.
mit 6 homematic-ventilen über pid20 angesteuert, komme ich lediglich auf knapp 10% (siehe grafik heute und am anfang), obwohl ich sogar noch pidActorTreshold=1 gesetzt habe. zusätzlich benötigen die ventile (hm-cc-vd) auch noch streicheleinheiten (mindestens alle 7,5 min bekommen sie ein keepalive), damit sie nicht einschlafen. der grundtakt wird bei mir quasi durch die measured-temp gegeben, die sich aber höchstens alle 2,5 min ändern kann. durch die trägheit der heizung eher weniger.

(http://forum.fhem.de/index.php?action=dlattach;topic=17067.0;attach=47220;image)

hier sieht man sehr schön, was es bedeutet, wenn ich pidActorTreshold=0 setze. dann wird jedes ventil alle 2,5 min angefunkt. in diesem fall wurde die load auf ca 20% verdoppelt. das hatte ich zufällig die letzten tage mal probiert.

du hast aber völlig recht, dass man die load immer im auge behalten sollte.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
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
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Joachim

Frank,
Du solltest den load des Rechners, auf dem FHEM läuft nicht mit der 1% Regel gleichsetzen.
Bei HM weiß ich nicht wieviele Befehle von der Zentrale an die Teilnehmer abgesetzt werden können, bei MAX sind es nach meinem Kenntnissstand 36.
Gehen wir von 6 ventilen aus, bedeutet das, dass pro Ventil maximal alle 10 Minuten ein Stellbefehl abgesetzt werden darf, damit MAX die 1% Regel nicht überschreitet (1 Stunde = 60 Minuten --> 6 Befehle pro Thermostat * 6 Thermostate = 36 ! )
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

frank

ZitatDu solltest den load des Rechners, auf dem FHEM läuft nicht mit der 1% Regel gleichsetzen.
joachim, das hat nichts mit der load des rechners zu tun.

hierbei handelt es sich um die aktuelle load (auslastung des erlaubten funkkontingentes), die der hmlan (ein interface-funk-modul von homematic) ca. alle 25 sekunden an fhem meldet. bei einer gemeldeten load von 10% stehen also noch 90% des erlaubten funkkontingentes zur verfügung. die 1%-regel erlaubt pro stunde 36 sekunden sendezeit. bei der ermittlung kommt es nicht nur auf die anzahl der messages an, sondern vor allem auch auf die länge der messages, da die sendedauer einer message entscheidend ist.

wie gesagt, werden im fall meiner load von 20% ca alle 2,5 minuten an alle 6 ventile folgende messages gefunkt:
2016.02.22 17:07:08.002 0: HMLAN_Send:  hmlan1 S:S09BBFD33 stat:  00 t:00000000 d:01 r:09BBFD33 m:7C A258 B4B4B4 1CE9F5 0302

hier werden also ca 6 x 25 = 150 messages gesendet, die die 1%-regel zu 20% ausnutzen. demnach müsste eine dieser 11 byte langen message ca 36s x 0,2 / 150 sekunden lang sein. => 48 millisekunden.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
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
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

p72alrur

Hi everyone!

I am trying to create a PID to manage a valve (Smartdrive mx EEP A5-20-04).

Anybody could explain me the correct attributes I have to use for the correct performance of this device. Also I would like to make a plot with this device and PID.

Thank you very much.


frank

hi,

i think your pid works fine.
desired=10, measured=14.2 => actuation=0.00000 and state=processing.

but needs your valve all the blue zero's? i do not think so. you can adjust the places with the attribute pidActorValueDecPlaces.
your valve model i have never seen, so i can not say anything of correct function.
is the valve realy closed?

for fine adjustment of the pid-factors, you need the plots first. in the wiki is a brief explanation to plot some values.

http://www.fhemwiki.de/wiki/PID20_-_Der_PID-Regler
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
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
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Shadow3561

Hallo,
Ich habe folgende Situation


Ich habe im Wohnzimmer 3 Heizkörper.
Diese haben alle ein max thermostat. Ist es möglich alle 3 gleichzeitigmit pid20 zu steuern?
Wenn ich jeden einzelnen mit pid20 regele wird die funklast zu hoch und die Credits reichen nicht aus.

Mfg

Fritz Muster

Hallo Shadow3561,

schau mal hier. Da wird von einer "Raumlösung" gesprochen in der nur ein Thermostat die Regelgröße per Signal bekommt und dann alle weiteren Themrostaten im Raum über die Änderung "informiert".

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus