PID-Modul: Vorschläge (gelöst)

Begonnen von John, 01 Oktober 2013, 23:22:35

Vorheriges Thema - Nächstes Thema

John

Hi Udo
delta kann positiv u. negativ werden.

ZitatHallo,
auch mit der neuen Version Logeinträge nur bei negativem Delta und keine Befehle an Stellantriebe.

Hans

if($delta >= AttrVal($name,'pidDeltaTreshold','0')) {

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

betateilchen

ja, das ist aber im Moment nicht das Problem.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Hans Franz

Zitat von: betateilchen schrieb am Mo, 07 Oktober 2013 23:46lösche mal das Attribut pidActorTreshold
Tata,
2013.10.07 23:50:46 3: aDiff:0 pAT:0  tDiff:4.38690185546875e-05 pAI:0
2013.10.07 23:50:46 3: PID heizung.04: set stellantrieb.04 valve 98


Das sieht doch schon besser aus.
Aber wieso ist $aDIFF immer 0?
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

betateilchen

Weil der Stellantrieb noch nie gestellt wurde. Eigentlich sollte das JETZT nicht mehr 0 sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

John

Nochmal,
wenn der Istwert goesser als der Sollwert ist, dann geht der Regler in Pause, da Delta negativ wird.
Das ist nun wirklich ein Problem oder ?


Wie wärs mit
if(abs($delta) >= AttrVal($name,'pidDeltaTreshold','0')) {

Dann sind wohl auch die anderen Probleme mit der Stellausgabe gelöst.
John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Hans Franz

Zitat von: betateilchen schrieb am Mo, 07 Oktober 2013 23:54Weil der Stellantrieb noch nie gestellt wurde. Eigentlich sollte das JETZT nicht mehr 0 sein.
Leider doch:
2013.10.07 23:53:48 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:53:48 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:53:48 3: get stellantrieb.04 valve : 97
2013.10.07 23:53:48 3: PID heizung.04: set heizung.04 desired 21
2013.10.07 23:53:49 3: aDiff:0 pAT:0  tDiff:60.8145229816437 pAI:0
2013.10.07 23:53:49 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:53:49 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:54:49 3: aDiff:0 pAT:0  tDiff:60.3309800624847 pAI:0
2013.10.07 23:54:49 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:54:49 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:54:49 3: get stellantrieb.04 valve : 97
2013.10.07 23:54:49 3: PID heizung.04: set heizung.04 desired 21
2013.10.07 23:54:50 3: aDiff:0 pAT:0  tDiff:60.8117101192474 pAI:0
2013.10.07 23:54:50 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:54:50 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:55:50 3: aDiff:0 pAT:0  tDiff:60.3267669677734 pAI:0
2013.10.07 23:55:50 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:55:50 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:55:50 3: get stellantrieb.04 valve : 97
2013.10.07 23:55:50 3: PID heizung.04: set heizung.04 desired 21
2013.10.07 23:55:51 3: aDiff:0 pAT:0  tDiff:60.8101971149445 pAI:0
2013.10.07 23:55:51 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:55:51 3: FHT8V set stellantrieb.04 valve 98
2013.10.07 23:56:51 3: aDiff:0 pAT:0  tDiff:60.3250930309296 pAI:0
2013.10.07 23:56:51 3: PID heizung.04: set stellantrieb.04 valve 98
2013.10.07 23:56:51 3: FHT8V set stellantrieb.04 valve 98



Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

betateilchen

Wenn schon, dann bitte so: if(abs($delta) >= abs(AttrVal($name,'pidDeltaTreshold','0'))) {

Aber um dieses Thema geht es gerade überhaupt nicht!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Hans Franz schrieb am Di, 08 Oktober 2013 00:06Leider doch:

Mach nochmal bitte ein "list <pidName>"

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Hans Franz

Internals:
   DEF        CUL_WS_5 stellantrieb.04
   NAME       heizung.04
   NR         360
   STATE      18.8 (delta 1.2)
   TYPE       PID
   Readings:
     2013-10-08 00:15:51   actuation       0
     2013-10-08 00:15:51   delta           0
     2013-10-08 00:16:45   desired         20
     2013-10-08 00:15:51   integrator      0
     2013-10-08 00:21:47   measured        18.8
     2013-10-07 22:57:21   p_d             16.4705882352941
     2013-10-07 22:57:21   p_i             3.13725490196076
     2013-10-07 22:57:21   p_p             96.8627450980392
     2013-10-08 00:21:46   sensorState     alive
     2013-10-08 00:21:47   state           paused
   Helper:
     actor      stellantrieb.04
     command    valve
     dFactor    5.88235294117647
     errorState
     iFactor    3.05882352941176
     pFactor    25.4901960784314
     pausedSince 1381184151.72795
     reading    temperature
     regexp     ([\d\.]*)
     satMax     100
     satMin     0
     sensor     CUL_WS_5
Attributes:
   alias      Heizungen_4
   room       Heizungen

Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

John

setActor wird niemals aufgerufen solange {lastActVal} nicht definiert ist.


my $aDiff = 0;
$aDiff = abs($a - $hash->{helper}{lastActVal}) if($hash->{helper}{lastActVal});
.....
if($aDiff >= $pAT && $tDiff >= $pAI) {
# send command to actor
setActor($hash,$a);
}



damit bleibt aDiff dauerhaft auf 0.

lastActVal wird aber nur in setActor aktualisiert.
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Hans Franz

if(abs($delta) >= AttrVal($name,'pidDeltaTreshold','0')) {
führt zu
Use of uninitialized value $i in numeric gt (>) at ./FHEM/98_PID.pm line 305.
Use of uninitialized value $i in numeric lt (<) at ./FHEM/98_PID.pm line 306.
Use of uninitialized value $i in addition (+) at ./FHEM/98_PID.pm line 309.
Use of uninitialized value $a in int at ./FHEM/98_PID.pm line 310.
Use of uninitialized value $i in int at ./FHEM/98_PID.pm line 310.
Use of uninitialized value $i in sprintf at ./FHEM/98_PID.pm line 312.


also wieder rausgeschmissen.

dennoch jetzt:
Use of uninitialized value $a in int at ./FHEM/98_PID.pm line 310.
Use of uninitialized value $a in sprintf at ./FHEM/98_PID.pm line 312.
Use of uninitialized value $a in int at ./FHEM/98_PID.pm line 316.


Ich blick' den Code leider überhaupt noch nicht:(.

(heizung.04 ist mein Schlafzimmer. Ich geh' erst mal lüften :).)
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

betateilchen

Moin. Ich hab grad keine Lust mehr.
Lasst mich doch einfach mal in Ruhe einen Fehler suchen, anstatt hier durch sinnlose Code-Basteleien, die scheitern müssen den Thread noch unübersichtlicher zu machen, als er sowieso schon ist.

Zitat von: John schrieb am Di, 08 Oktober 2013 00:27setActor wird niemals aufgerufen solange {lastActVal} nicht definiert ist.

Diese Aussage ist so schlichtweg falsch.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Hans Franz

Moin,
lastActVal ist nun intialisiert, wieso auch immer.
Wenn desired grösser ist als measured wird das Ventil auch geöffnet. Alles OK.
Aber wenn desired kleiner als measured (negatives Delta) bleiben actuation und Delta in den Readings auf den alten Werten.
Das Ventil wird nicht geschlossen.
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

betateilchen

Zitat von: Hans Franz schrieb am Di, 08 Oktober 2013 09:51Aber wenn desired kleiner als measured (negatives Delta) bleiben actuation und Delta in den Readings auf den alten Werten.
Das Ventil wird nicht geschlossen.

Ja, ich weiß...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fhainz

Bis auf den negatives Delta Fehler funktioniert's jetzt bei mir. :)