PID , Minimalwert für FHT8V setzen

Begonnen von PeterN, 03 Februar 2013, 14:40:59

Vorheriges Thema - Nächstes Thema

PeterN

Hallo,

folgendes Problem, ich wollte meine funktionierende PID Definition "define heizung.04 pid Arbeitszimmer stellantrieb.04"
um den Minimallwert für den FHT8V erweitern >> "define heizung.04 pid Arbeitszimmer stellantrieb.04:valve:25:100"
Seit der Änderung wird aber der FHT8V nicht mehr angesteuert und verharrt bei 25%.

Danke,

Peter
RasPi4, Homematic, 1WIRE, Fritz!Box7590, LOGO8

rudolfkoenig

Ich fuerchte das Problem musst Du selbst finden mit Debug-Ausgaben im PID-Modul und nachrechnen.

PeterN

Hallo,

anscheinend wird der "valve" Wert mit Nachkommastelle ausgegeben, was kann man dagegen tun?

2013.02.24 13:25:31 3: PID heizung.04: p:0.60 i:100.00 d:0.00
2013.02.24 13:25:31 3: FHT8V set stellantrieb.04 valve 100

2013.02.24 13:41:34 3: PID heizung.04: p:0.00 i:100.00 d:-0.15
2013.02.24 13:41:34 3: set stellantrieb.04 valve 99.85 : Set valve needs a numeric parameter between 0 and 100
2013.02.24 13:41:34 3: output of heizung.04 command: Set valve needs a numeric parameter between 0 and 100

2013.02.24 13:46:55 3: PID heizung.04: p:0.00 i:100.00 d:0.00
2013.02.24 13:46:55 3: FHT8V set stellantrieb.04 valve 100

2013.02.24 13:52:16 3: PID heizung.04: p:-0.60 i:99.75 d:-0.15
2013.02.24 13:52:16 3: FHT8V set stellantrieb.04 valve 99

2013.02.24 13:57:37 3: PID heizung.04: p:-1.20 i:99.25 d:-0.15
2013.02.24 13:57:37 3: set stellantrieb.04 valve 97.9 : Set valve needs a numeric parameter between 0 and 100
2013.02.24 13:57:37 3: output of heizung.04 command: Set valve needs a numeric parameter between 0 and 100

Peter
RasPi4, Homematic, 1WIRE, Fritz!Box7590, LOGO8

fgerhardt

Hallo Peter,

ändere in 98_PID.pm in der Zeile
my $ret = fhem sprintf("set %s %s %g", $pid->{actor}, $pid->{command}, $a);

a$ in int(a$).

Gruß
Friedhelm

PeterN

Hallo Friedhelm,
Das ist die Lösung, jetzt arbeitet der PID Regler so wie er soll,
Vielen Dank
Peter
RasPi4, Homematic, 1WIRE, Fritz!Box7590, LOGO8

Bernhard

Zitat von: fgerhardt schrieb am Mi, 13 März 2013 22:35ändere in 98_PID.pm in der Zeile
my $ret = fhem sprintf("set %s %s %g", $pid->{actor}, $pid->{command}, $a);

a$ in int(a$).


Kann diese Änderung jemand einchecken?

Danke

rudolfkoenig

>  Kann diese Änderung jemand einchecken?

Na so billig geht es nicht, schliesslich wuerde man damit die zwei Zeilen weiter oben getroffene (und kommentierte) Heuristik aushebeln, die rundet, falls das Unterschied zw. min und max >= 100 ist.

Ich habe jetzt ein Attribut roundValveValue eingefuehrt, dies ist in diesem Fall auf 1 zu setzen.

fgerhardt

stimmt schon, nur arbeiten die FHT8V nicht mehr sobald kein ganzzahliger Wert gesendet wird.

Bernhard

ganz konkret:
PID gibt berechnete Werte - auch nicht ganzzahlige - Werte an FHT8V.
FHT8V lehnt diese Werte mit Fehlermeldung ab.
In Folge davon kommt es vor, daß die Ventile über lange Zeit keine neuen (korrekten) Werte mehr erhalten.
Alternativ müsste eben in FHT8V Zeile 70
eingefügt/geändert werden:
    return "Set valve needs a numeric parameter between 0 and 100 ==> $a[2] <=="
        if(@a != 3 || $a[2] !~ m/^\d+([.]\d+)?$/ || $a[2] < 0 || $a[2] > 100);

PeterN

Hallo Rudolf,
danke für die Änderung im "offiziellen" PID Modul.
für mich ist der Minimalwert des FHT8V sehr wichtig um den "Kuhschwanzheizung" Effekt zu minimieren.
Übrigens, falls jemand Infos zur Heizungsproblemen braucht ist der "Haustechnikdialog" nur zu empfehlen.

Peter
RasPi4, Homematic, 1WIRE, Fritz!Box7590, LOGO8