Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

cwagner

#120
Hallo John,

PID20 als Mischersteuerung habe ich jetzt ziemlich gut am Laufen - nun kommt der Schlusspunkt, das Ganze auch noch vom Heizbedarf abhängig zu machen. Und da habe ich ein Problem mit set desired. Wenn ich dem nämlich den Sollwert über eine Variable übergebe, gibt's eine Fehlermeldung
set PID_Mischer_FBH desired Unknown command my, try help.
value $desire is not a number

Dies hatte ich auch schon bei THRESHOLD und Damian hat dann eine Änderung eingebaut, die dazu führte, dass ich mit einer Variable Sollwerte übergeben kann.

Hast Du da eine Idee oder Lösung?

Herzliche Grüße

Christian

P.S: Hier mal ein Screenshot vom Tagesverlauf - Nachtabsenkung realisiere ich über ein Stoppen von PID über Heating-Control, ein THRESHOLD sorgt für die Überwachung der Raumtemperatur und Dein PID20 steuert den Vorlauf (hier 38 Grad). Das Absinken zwischen 9 und 10 ist verursacht durch ein Absinken des Hauptvorlaufes, weil durch Sonneneinstrahlung im restlichen Haus überhaupt kein Wärmebedarf mehr bestand. Calcinterval 1, Actorintervall 30, alle 30 Sekunden gibt es einen Meßwert für den Vorlauf
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

John

Hallo Christian,
kannst du mir mal deinen Beispielcode schicken, der NICHT funktioniert.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

cwagner

Hallo John,

gerne:

my $desire = 34+(21-(ReadingsVal("TF_Galerie","temperature",21))*2;
set PID_Mischer_FBH desired $desire;

Es kommt dann bei Abschicken die genannte Fehlermeldung.
Die Idee: Nach der nächtlichen Abkühlungsphase hat der von der Fußbodenheizung wieder aufzuheizende Raum in Abhängigkeit von Wind/Außentemperatur eine bestimmte Zahl von Grad auf die Solltemperatur von 21 verloren. Durch Experimente habe ich den Ansatz, dass die Vorlauftemperatur nach obiger Formel gesetzt werden muss. Heute Morgen hätte das also einen Vorlauf von 36,4° bedeutet. Die Formel wird nur gezogen, wenn Ist-Temperatur < Solltemperatur (THRESHOLD).
Ich möchte die Solltemperatur manipulieren, weil eine zu Hohe Vorlauftemperatur zwei Nachteile hat: Der Fußboden wird zu schnell aufgeheizt und ehe der Raumfühler "zuschlagen" kann aufgeladen. Er überschwingt dann durchaus auch mal um 2 Grad. Außerdem besteht die Gefahr, dass der Fußboden überhitzt und die für das Laminat förderliche Grenze von 28 Grad nicht eingehalten wird (Aktuell habe ich da einen zweiten Threshold der da als Aufpasser dient).


Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

John


probier doch folgendes:

my $desire = 34+(21-(ReadingsVal("TF_Galerie","temperature",21))*2;
my $cmd="set PID_Mischer_FBH desired $desire";
fhem($cmd);


John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

cwagner

da muss ich Dich enttäuschen. Alle Varianten, in denen ich dem set <PID20> desired den Zahlenwert aus einer Variablen mitgebe, gibt es die Fehlermeldung "is not a number".

Ich hab' die Zeile jetzt soweit eingegrenzt, dass ich es darauf festmachen kann: Es funktioniert mit einer Zahl (z.B. 37.1), nicht aber mit derselben Zahl in einer Variablen.

Ich werde mal Damian anfragen, wie er damals in Threshold das Problem gelöst hat. Vielleicht hilft das weiter.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Hallo Christian,

im THRESHOLD-Modul filtere ich lediglich nach Zahlen, die Variable muss vorher aufgelöst sein.

Die Lösung deines Problems dürfte sein:


{my $desire = 34+(21-(ReadingsVal("TF_Galerie","temperature",21))*2;;fhem "set set PID_Mischer_FBH desired ".$desire}


Gruß

Damian



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

John

@Christian.

define testme.event notify testme {my $desi=30.6;;my $cmd="set PID.Test desired $desi";;fhem($cmd);;}

Das funktioniert bei mir völlig problemlo.
Der Sollwert wird gesetzt.

Den Notify hab ich an einen Dummy gehängt.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

cwagner

Lieber John, lieber Damian,

danke für Eure Hilfsbereitschaft.

@John: Vom Notify komm ich auch her - das funktioniert wie von Dir beschrieben. Dein Einwand hat mich zum Ergebnis gebracht, dass nicht von "Deinem" PID20 sondern vom THRESHOLD die Fehlermeldung kommt, was mir

@Damian im Prinzip auch bestätigt hat.

{{my $desire=34+(21-ReadingsVal("TF_Galerie","temperature",20))*2;;fhem ("set PID_Mischer_FBH desired ".$desire)} als cmd im THRESHOLD
funktioniert genau wie gedacht, desired steht auf: 33.8 weil TF_Galerie auf 21.1 steht.

Das ist geil, nun werden vom Thermostaten dynamisch Regelparameter vom PID20 angepasst.

@Damian: Jetzt werde ich verwegen: Ist im CMD eines THRESHOLD der Steuerungsparameter sensor_value (nämlich obige 21.1)  als Variable verfügbar (_sv1 aus dem Stateformat habe ich vergeblich oder falsch versucht)? Dann bräuchte ich da gar nicht mehr ein ReadingVal()! Wie geil wäre das denn. Meine Mails verschickenden Grenzwert-Thresholds wären noch einmal einfacher formuliert...


Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Marcus Naumann

Hallo John,

bin gerade fleißig und rüste alles auf den neuen Regler um. Ich möchte dieses mal den Regler in den Floorplan integrieren bzw. den Sollwert und das Stellsignal des Reglers anzeigen lassen. Allerdings klappt das noch nicht so richtig? Ist das dementsprechend die gleiche Vorgehensweise wie im WIKI beschrieben ist oder hat sich da noch was geändert? http://www.fhemwiki.de/wiki/FHT_8v_direkt_ansprechen

gruß
manavu01

John

Hallo manavu01

das angegebene Wiki bezieht sich auf PID nicht auf PID20.

Zu PID20 gibts ein eigenes Wiki
http://www.fhemwiki.de/wiki/PID20_-_Der_PID-Regler

Am besten stellst du dein Define rein.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcus Naumann

#130
Hallo John,

eine Frage hätte ich allerdings noch. Ich wollte den PID20 gerne mal mit dem MAX! eq3 ausprobieren. Allerdings bekomme ich das nicht zum laufen. Ich kann zwar das maxValveSettings beschreiben (siehe) allerdings bewegt der Stellantrieb einfach nicht. Habe ich das irgendwas vergessen? Anbei der Quellcode:

define cm CUL_MAX 123456

define MAX_0b1578 MAX HeatingThermostatPlus 0b1578
attr MAX_0b1578 room Badezimmer
define FileLog_MAX_0b1578 FileLog ./log/MAX_0b1578-%Y.log MAX_0b1578
attr FileLog_MAX_0b1578 logtype text
attr FileLog_MAX_0b1578 room Badezimmer
set MAX_0b1578 desiredTemperature On

define PID_BZ PID20 Temp_Hum_Badezimmer:temperature MAX_0b1578:maxValveSetting
attr PID_BZ pidActorInterval 1
attr PID_BZ pidCalcInterval 1
attr PID_BZ pidFactor_I 0.0833
attr PID_BZ pidFactor_P 25
attr PID_BZ room Badezimmer


Log Datei

2014-02-10_20:05:29 MAX_0b1578 desiredTemperature on
2014-02-10_20:09:03 MAX_0b1578 maxValveSetting 0
2014-02-10_20:10:05 MAX_0b1578 maxValveSetting 0
2014-02-10_20:12:58 MAX_0b1578 maxValveSetting 0
2014-02-10_20:14:12 MAX_0b1578 maxValveSetting 100
2014-02-10_20:16:27 MAX_0b1578 maxValveSetting 0
2014-02-10_20:18:29 MAX_0b1578 maxValveSetting 100
2014-02-10_20:27:58 MAX_0b1578 maxValveSetting 0

Vielen Dank im Voraus!

gruß
manavu

John

Hi manavu01,


Zitatattr PID_BZ pidActorInterval 1
attr PID_BZ pidCalcInterval 1
attr PID_BZ pidFactor_I 0.0833
attr PID_BZ pidFactor_P 25

pidCalcInterval ist viel zu klein auf default-wert 60 belassen.
Wäre nur für ganz schnelle Regelvorgänge sinnvoll.

pidActorInterval 1 ist destruktiv.
Der raubt dir alle Credits.
Ich verwende bei meiner FUBO den Wert 900.

pidFactor ist ziemlich klein , würde auch hier default wert  belassen.

Das Setzen der 31.5 Grad für den Sollwert würde ich über das Max-Wochenprogramm realisieren.

Wirklich Sinn macht es nicht, den Istwert vom Thermostat zu holen und nur den Regler extern zu realisieren.
Dann kannst du gleich MAX selbst regeln lassen.

Man kann PID20 natürlich auch so einsetzen, dass man FHEM an seine Grenzen bringt.
Quasi als Stress-Test-Tool. Dann wären die Einstellungen OK.

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcus Naumann

#132
Hi John,

ja da hast du recht. Den PIDActorInterval sollte ich aufjedenfall noch hochstellen.
Ich habe ein hms100TF als Temperaturgeber und das MAX! Thermostat als Stellglied. Nur ich habe das Gefühl der Regler steuert den Antrieb nicht an, obwohl das MaxValveSetting verändert wird und desiredTemperatur ist auf ON gestellt. Habe ich sonst irgendetwas dabei vergessen=?

Hinsichtlich des PIDCalcIntervall möchte ich das mein I-Anteil sekündlich ermittelt wird. Da der Default auf 60 steht bedeutet dies, dass ich mein Ki-Wert in %/Minute einsetzen muss. So kann ich ich den in %/s einsetzten und dementsprechend nach gängigen Einstellregeln einstellen. Ich denke das hängt halt von der Abtastzeit Ta ab. Es wird möglicherweise aufs Gleiche rauskommen. oder irr ich mich da?

y = Kp * e + Ki * Ta * esum

Gruß
Manavu

John

Hast du das schon einmal manuell probiert, also ohne PID20 ?

Sollwert auf ON
warten bis das Thermostat komplett aufgefahren

nun maxValveSetting auf 50 setzten
nach spätestens 2 Minuten sollte sich was bewegen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcus Naumann

#134
Hallo John,

vielen Dank für deine Hilfe. Kann es vielleicht auch sein, dass es Probleme gibt wenn ich über das Gleiche COC Modul einen FHT8V ansteuere? Und muss das DesiredTemperatur auf ON stehen bleiben? Weil bei mir steht in der Sollwert vom MAX! immernoch auf 20°C. Siehe Anhang.
Ich werde das dann mal mit dem PID ausprobieren und mich dann bei dir melden, ob es geklappt hat.

Gruß
manavu