Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

SibbeH

Ich denke, das da einen Fehler in die PID20 Module anwesend ist.

Ich arbeite mit MAX-thermostaten die ich mit fhem steuere. Ich benutze die MAX Temperatur-scanner von John und das Wochenprofil habe ich angelegt mit das UtilMaxProf von Risiko.
Nun wollte ich das PID20 Programm von John brauchen um die überschwingung bei Änderung von die Temperatur zu minimalisieren. Ich habe dazu das folgende define gemacht:

define PID_Badkamer PID20 MAX_CV_Badkamer:temperature MAX_CV_maxValveSetting

Gebe ich nun hinter "set" PID_Badkamer desired eine Temperur ein, dann arbeitet der PIDregler wie gewünst.

Stelle ich das

attr PID_Badkamer pidDesiredName ein auf MAX_CV_Badkamer, um eine Temperatur aus das Wochen profiel ein zu lesen, geht es falsch. Ich bekomme die Fehlermeldung: alarm – missing desired.

Hinter "set" PID_Badkamer bekomme ich im das Auswahlfenster: MAX_CV_Badkamer und im das Eingabefenster desiredTemperature. Ich hatte erwartet, das im Auswahlfenster MAX_CV_Badkamer:desiredTemperature war erschienen und im Eingabefenster die Temperatur als Zahl aus das Wochen profiel.
Auch hatte ich erwartet das in die Readings desired war geändert im MAX_CV_Badkamer:desiredTemperture und das dabei die Temperatur aus das Wochen Profiel wurde gezeicht, wie bei MAX_Badkamer:temperature für die gemessene Temperatur.

Ich habe längere Zeit gesucht in die Programmlistung van PID20.PM und ich denke das rund die Zeilen beginnend bei Zeihlenummer 300 etwas schief geht. Ich denke, das die Variablen $a[1] und $a[2] nicht richtig umgesetzt werden, aber meine Kenntnisse von Perl ist beinahe nichts.

Vielleicht wollte John noch einmal einen Blick auf das Problem werfen.

Grüss Sibbe
Raspberry Pi, CULV3, 3xCUNO, MAX Thermostat, MAX Wandthermostat, HM, HmIP. UWZ, WeekProfile

juniormajor

Möchte diese Frage nochmals vorholen, da ich vor der gleichen Situation stehe/stand...
Habe es jetzt mal interimistisch via meiner 99_myUtils gelöst, aber schöner wäre es wenn es gleich richtig aus der PID Instanz heraus gemacht werden würde.

Zitat von: hanske am 21 April 2015, 10:51:47
kurze Frage:

wie verwendet man das <actor:cmd > in
define <name> PID20 <sensor[:reading[:regexp]]> <actor:cmd >
wenn man kein set ausführen will, sondern ein setreading auf ein dummy?

stromer-12

In meinen Dummy habe ich die Readings mit readingList definiert, dann geht auch set.

define pid PID20 dummy:pid_mes dummy:pid_state

Gesendet von meinem GT-I9295

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

juniormajor

yupp, danke. An setList habe ich nicht gedacht.

LarsMie

Hi, ich habe das Modul gerade mal für meine Heizungssteuerung mit Selbstgebauten Temperatursensoren (MQTT WLAN) testweise in Betrieb genommen.


Läuft alles auch soweit.

Ich wollte mir jetzt als webcmd ein paar feste Temperaturen anlegen, damit ich die Desired-Temp nicht immer per Hand eintippen muss. Allerdings fehlt ein "setlist" als Attribut und ich weisss nicht, wie ich sonst ein Dropdownmenu als webcmd realisieren kann. Der einzige umweg wäre ein dummy-gerät, aber ich hätte es lieber direkt im device. Vielleicht hat einer von euch eine idee!

stromer-12

Benutze das Attribut widgetOverride und erstelle deine Liste: desired:18,19,20,21,22
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

LarsMie


chunter1

Lässt sich mit dem PID Modul auch ein 3-Wege Mischer der nur Richtung auf/zu oder Stop kennt regeln?

JoeALLb

Zitat von: John am 26 Januar 2015, 09:48:09
Zu den vielfältigen Wünschen der letzten Einträge zum Thema Stellausgabe:

Ich schlage eine Callback-Funktion vor, in der der Anwender seine spezifische Implementierung für
die Wertvorgabe zum Stellwert realisieren kann.

Diese Methode würde immer unmittelbar vor der Ausgabe eines Stellwertes ausgeführt werden.

Damit könnte man alle beliebig exotischen Regeln implementieren ohne das Basis-Modul zu überfrachten.
John

Gibt es dazu schon konkrete Ideen?
Ich habe aktuell 2 Probleme:
1. Bei mir ist der Regelwert invertiert: 100 heißt geschlossen, 0 offen. Habe das im Moment über ein Notify gelöst, wäre aber anders schöner. pidReverseAction invertiert ja nicht actuation, sondern "nur" die Berechnung.
2. Bei mir soll von 78 gleich auf 100 gesprungen werden, weil hier beim Ventilstellung keine Änderung mehr passiert.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

John

Zitat1. Bei mir ist der Regelwert invertiert: 100 heißt geschlossen, 0 offen. Habe das im Moment über ein Notify gelöst, wäre aber anders schöner. pidReverseAction invertiert ja nicht actuation, sondern "nur" die Berechnung.

Aber genau das ist doch die Zielrichtung von pidReverseAction. Das Ergebnis ist ein invertierter Stellausgang.


Zitat2. Bei mir soll von 78 gleich auf 100 gesprungen werden, weil hier beim Ventilstellung keine Änderung mehr passiert.
pidActorLimitUpper ist für solche Fälle vorgesehen, der Stellausgang wird nach oben begrenzt und beeinflusst auch Anti-Windup.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

JoeALLb

Zitat von: John am 07 Januar 2016, 11:10:08
pidActorLimitUpper ist für solche Fälle vorgesehen, der Stellausgang wird nach oben begrenzt und beeinflusst auch Anti-Windup.
Aber ich benötige auch den Wert 100, nur nichts zwischen <78 und <100. 78  ist praktisch der letzte Stellwert. Zwischendrin wird kein Wert akzeptiert, und 100 um ganz zu schließen.
Wenn ich pidActorLimitUpper auf 78 stelle, schließt das Ventil nie ganz (mit 100), oder hab ich das falsch verstanden?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

John

#296
@ JoeALLb
ich hab dein Problem verstanden und die schon angekündigte Callback Funktion eingefügt.

Anbei das überarbeitete Modul.

Hier findet sich das neue Attribut pidActorCallBeforeSetting.

ich habe in 99_Utils.pm folgende Sub definiert:
# 1. Parameter = Name des PID
# 2. Parameter = actuator value
sub PIDActorSet($$)
{
    my ( $name, $actValue ) = @_;
    return $actValue+1;
}

und das Attribut wie folgt gesetzt:

Zitat
attr PID.Test pidActorCallBeforeSetting PIDActorSet

Diese Sub wird immer genau vor dem Setzen des Aktors aufgerufen und Muss den auszugebenden Stellwert zurückliefern.

Bitte um Feedback.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

JoeALLb

Danke vielmals. Kann es aber erst nächste Woche testen, wenn ich wieder vor Ort bin...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

noch eine Frage: Wie berücksichtigt ihr extrem schwankende Vorlauftemperaturen? Meiner ist in einem Heizkreis manchmal nur 25 grad, manchmal aber auch 50. Das beeinflusst den Temperaturanstieg im Raum enorm.  ich stelle mir vor, dass bei 50 grad das Ventil weniger öffnen sollte als bei 25 grad....  Und das bei 25  die Desired Temp von 27 gar nie erreicht werden kann.....
Hat jemanden  dazu eine Theorie?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

John

ich weiß nicht ob dir das hilft:

hier
http://forum.fhem.de/index.php/topic,31586.msg258336.html#msg258336
habe ich beschrieben, wie ich die überhöhte Vorlauftemperatur in ihrer Wirkung kompensire, nämlich über eine pulsierende Pumpe
(5 Minuten EIN 10 Minuten aus , ab R-TempL von 30 Grad)  gesteuert über die LOGO.

Meine MAX-Thermostate nehmen seitdem die Schwankungen der VL-Temperatur nicht mehr übel.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP