Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

Nick666

Nein, ist ein Auszug bei normalem Betrieb. Ich dachte, es geht um die Einstellungen.

Wie auch immer, spätestens nach pidActorKeepAlive aktualisiert er die Werte und damit auch die errorPos. Für meine Anwendung ist mir der Standardwert aber zu groß und ich habe diesen entsprechend angepasst.

Grüße
Nick

MadCat

Hallo,
eigentlich ist das PID20 Modul ja für die Regelung von Stellantrieben gedacht und das Funktionsprinzip ist mir auch soweit klar, ich würde aber gerne eine Pumpe darüber schalten, ich weiß aber nicht was ich für den actor als cmd angeben muss, damit nicht ein Regelwert zwischen 0 und 100 ausgegeben wird, sondern on/off.

Im Wiki, Forum oder Commandreff konnte ich dazu nix finden.

LG

John

Hi MadCat

für digitale Stellglieder  ist eventuell das Threshold Modul besser geeignet.

Ansonsten solltest du die Problemstellung genauer spezifizieren.
Konkret: was hast du vor.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

MadCat

Hallo John,

ich würde gerne mit dem Pid Regler meine Heizkreispumpe steuern. Mit dem Threshold habe ich das schon versucht, aber  da das ganze zu träge ist kommt es zu Temperaturschwankungen von ca 5 bis 10°C, das hoffe ich mit dem PID zu minimieren.

Lg

John

Hi MadCat

es ist nicht klar was du regeln willst. (Regler Führungsgröße)

Vorlauftemperatur, Rücklauftemperatur, Raumtemperatur im Führungsraum,... ?

Hast du Kurven vom bisherigen Regelverhalten und beschreibe was dir daran nicht gefällt.

Wie sieht die Stellausgabe aus ?
Der PID gibt als Stellgroesse 0..100% aus.

Willst du das Puls/Pausenverhältnis über den Stellausgang des PIDs ändern ? (Regler Stellgröße)

Wie hoch soll die Periodendauer eines Schaltzyklus (Pumpe EIN - Pumpe AUS)  sein ?

Wieviele Ein/Aus-Takte sind laut Hersteller für die HK-Pumpe pro Tag zulässig ?

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

jlp2097

Hallo,

ich habe zwei Fragen / Probleme beim PID20-Regler. Vielleicht könnt ihr mir ja helfen :-)

Zunächst etwas Information: ich steuere mit dem PID-Regler den Vorlauf meiner Fußbodenheizung. Die Ist-Temperatur ändert sich bei Änderungen am Actor (aktuell ein MAX-Thermostat) sehr, sehr schnell (<1 Min), zudem gibt es immer wieder starke Ausschläge  (z.B. wenn einer der angeschlossenen FBH-Heizkreise zu macht). Diese starken Ausschläge versuche ich über eine entsprechende Einstellung des D-Anteiles schnell entgegenzuregeln. Nun zu meinen Fragen / Problemen:

1. Der D-Anteil kann verloren gehen, wenn pidcalcinterval kleiner pidactorlimit ist.
Mein pidcalcinterval ist auf 60, mein pidactorlimit ist auf 180. Unter der Annahme, dass in Sekunde 0 eine Änderung des Actors erfolgte, passiert folgendes: wenn die schnelle Änderung der zu regelnden Größe in den Sekunden 1-120 erfolgt, und in den Sekunden 121-180 die Größe sich normal schnell ändert, geht nach meinem Verständnis (und wenn ich meine Plots richtig lese) der D-Anteil bei der Berechnung des actuationCalc verloren. Meine nächste Idee war also, pidcalcinterval gleich pidactorlimit zu setzen. Aber neben dem Nachteil, dass der I-Anteil dann nicht weiter integriert würde, hätte man nach meinem Verständnis auch das Problem, dass eine Neuberechnung immer erst nach 180 Sekunden erfolgt, selbst wenn vorher zum Beispiel 360 Sekunden der Actor nicht verändert wurde. Ist ja auch Mist :-(
Ist mein Verständnis hierzu richtig und habt ihr Vorschläge?

2. Sensor immer bei Neuberechnung auslesen
Dies ist nicht unbedingt direkt PID20-bezogen, aber vielleicht könnt ihr mir ja trotzdem helfen: wie kann ich sicherstellen, dass der PID-Regler, immer direkt vor der Berechnung den Sensor ausliest? Ich habe einen DS18B20 Temperatursensor, bei dem das PollingInterval aktuell auf 30 Sek. gesetzt ist. Das macht aber die Log-Files ganz schön zu und außerdem gibt es immer etwas Versatz zwischen Auslesen und Berechnung des PID20.

Ich wäre für Hilfe sehr dankbar!
-Michael
Raspi mit CUL V3
Max:Thermostat+, Wandthermostat+, Fensterkontakte
Homematic: HM-LGW-O-TW-W-EU-2, HM-Sec-RHS, Funkschaltaktor mit Sirene, Fensterkontakte
Sonstiges: Viessmann via VControld und Optolink, Sensoren DS18B20, DHT11, Reedkontakte, BME680, viele diverse Shellys, diverse sonstige

John

Hallo Michael,
das sind eine Menge Themen, die du ansprichst.

1. Signatur
Es ist sehr hilfreich, wenn du deine FHEM Konstellation in der Signatur deines Profils vermerkst, da man dann schon viele grundlegend Informationen hat.

2. Schnelle Regelvorgänge
Ein Max-Thermostat ist für schnelle Regelvorgänge unbrauchbar. Eine Stellbefehlsausgabe verbrät ca. 150 Credits.
Wenn du alle 2.5 Minuten einen Stellbefehl loslässt, bleibt für alle anderen Max-Devices nichts mehr übrig.
Ein pidcalcinterval mit 60 und der Wunsch Änderungen binnen einer Minute zu regeln widersprechen sich, da kommt es zu den
Effekten, wie du sie beschreibst.

3. Unklarheiten
Zitatzudem gibt es immer wieder starke Ausschläge  (z.B. wenn einer der angeschlossenen FBH-Heizkreise zu macht).
Wieso hat das Schliessen eines Verbrauchers unmittelbar eine Rückwirkung auf den Vorlauf ?

Kannst du die Elemente deines Heizsystem genauer erklären (Mischer, wie wird die Temperatur in den einzelnen Räumen geregelt ...)

4. Antworten
Zitat2. Sensor immer bei Neuberechnung auslesen
Dies ist nicht unbedingt direkt PID20-bezogen, aber vielleicht könnt ihr mir ja trotzdem helfen: wie kann ich sicherstellen, dass der PID-Regler, immer direkt vor der Berechnung den Sensor ausliest? Ich habe einen DS18B20 Temperatursensor, bei dem das PollingInterval aktuell auf 30 Sek. gesetzt ist. Das macht aber die Log-Files ganz schön zu und außerdem gibt es immer etwas Versatz zwischen Auslesen und Berechnung des PID20.
Du kannst das PollingInterval verkürzen und die Attribute event-on-change-reading (nur Änderungen > xy Grad werden aufgezeichnet)
und event-min-interval (spätestens nach dieser Zeit erfogt eine Zwangsaufzeichnung) verwenden.
Damit hast du stets aktuelle Werte ohne die Logfiles zu überfrachten.



John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

jlp2097

Hallo John,

danke für die schnelle Antwort - eine Signatur habe ich direkt angelegt. Man möge mir das Fehlen nachsehen, das war mein erstes Posting hier  ;)

Zu deinen Punkten: das mit den Credits war mir bewusst, ich habe aber aktuell keine größeren Pläne auf dem 886-Band. Letztendlich hat sich aber sowohl dieser als auch die anderen Punkte erledigt. Ich habe nämlich durch weiteres Experimentieren festgestellt, dass der Vorlauf doch träger reagiert, als ich aufgrund der Plots gedacht hatte. Ich bin daher komplett auf einen PI-Regler umgestiegen, den D-Anteil habe ich auf 0 gesetzt. Nur interessant, dass ich vorher trotzdem ein relativ stabiles Regelverhalten hinbekommen hatte :-)

Zu deinen Fragen: ich habe vier Heizkreise und die Steuerung der Vorlauftemperatur dieser Heizkreise (d.h. Beimischung des heißen Kesselwassers zum kalten Rücklaufwasser der FBH) wird bisher gesteuert über eine normalen (nicht-digitalen) Thermostatkopf mit Tauchfühler im Vorlauf. Anders ausgedrückt: es wird quasi das ganz (Heiz-)Jahr ca. 38° Vorlauf gefahren, da man jedesmal in den Keller und am Thermostatkopf drehen müsste, um die Vorlauftemperatur anzupassen. Das habe ich umgebaut, in dem der Tauchfühler durch einen DS18B20-Sensor ersetzt und das MAX-Thermostat den alten Thermostatkopf ersetzt. Ferne messe ich die Außentemperatur und kann so das Ganze auf eine außentemperaturgesteuerte Vorlauftemperatur umbauen. Größere Ausschläge gibt es hierbei immer, wenn der Kessel heizt (Temperatur des Kesselwasser steigt erheblich) oder wenn einer der Heizkreise auf-/zumacht (mehr/weniger warmes Wasser aus Kesselvorlauf benötigt).

Viele Grüße,
Michael
Raspi mit CUL V3
Max:Thermostat+, Wandthermostat+, Fensterkontakte
Homematic: HM-LGW-O-TW-W-EU-2, HM-Sec-RHS, Funkschaltaktor mit Sirene, Fensterkontakte
Sonstiges: Viessmann via VControld und Optolink, Sensoren DS18B20, DHT11, Reedkontakte, BME680, viele diverse Shellys, diverse sonstige

Joachim

Moin Micael,

Ich habe hier einen ähnlichen Aufbau (hänge allerdings an der Fernwärme mit 60° - 80° Vorlauf).
Kann Dir aber trotzdem einige Erfahrungswerte mitteilen (bin allerdings noch beim Justieren).

- geringster pidActorInterval bei dem MAX noch zuverlässig arbeitet sind 84 Sekunden
- maximale Stellbefehle die MAX in der Stunde vekraftet sind 34
- p_D ist richtig eingestellt nötig, da der Kreis sonst im unteren Bereich das Schwingen bekommt
- der Vorlaufregler muss einen eigenen CUL/Cube bekommen, wenn man legal bleiben will
- pidActorInterval, pidCalcInterval und pidUpdateInterval sollten identisch sein, sonst kommt es zu den von Dir beschriebenen Problem mit dem p_d Anteil
- 1Wire Abfrage, wie von John geschrieben event-min-intervall, event-on-update mit Schwellwert , ggf. das attr onkick, dann sind sehr kurze Abfragezyklen möglich
in der Anlage mal der Plot von heute.

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

hanske

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?
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

Paul

Ich habe ein Problem mit pidDesiredName

Nach der Definition sollte doch durch ein Reading die dort eingestellte Temperatur in PID übernommen werden. Ich wollte die Measured und Desired Temperatur von einem HM- Wandtermostat nehmen.

bei der Definition klappt es auch mit BadThermostat:measured-temp, wenn ich aber
bei Attr pidDesiredName Bad Thermostat:desired-temp eingebe bekomme ich ein Alarm missing desired


Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

stromer-12

Zitat von: Paul am 21 April 2015, 17:35:13
Ich habe ein Problem mit pidDesiredName

Nach der Definition sollte doch durch ein Reading die dort eingestellte Temperatur in PID übernommen werden. Ich wollte die Measured und Desired Temperatur von einem HM- Wandtermostat nehmen.

bei der Definition klappt es auch mit BadThermostat:measured-temp, wenn ich aber
bei Attr pidDesiredName Bad Thermostat:desired-temp eingebe bekomme ich ein Alarm missing desired

Mit pidDesiredName legt man den Namen des Readings "desired" fest, wenn man es anders nennen möchte.
Du kannst um die Temperatur vom Thermostaten zu benutzen mit einen Notify die desired-temp nach desired schreiben.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

stromer-12

Ich habe heute Nacht einen kleinen Fehler gehabt.

Der Wert von "actuationCalc" wurde falsch gesetzt. Es wurde das "e" im Rechenwert entfernt.
Dadurch kommt es zu Fehlermeldungen in Fhem und später im SVG.

fhemlog
2015.04.27 04:28:56 1: PERL WARNING: Argument "-7.82398290858424-05" isn't numeric in subtraction (-) at fhem.pl line 3769.
2015.04.27 04:28:56 1: PERL WARNING: Argument "-7.82398290858424-05" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 1034.


SVG Aufruf
2015.04.27 17:45:32 1: PERL WARNING: Argument "-7.82398290858424-05" isn't numeric in multiplication (*) at (eval 380184) line 1.


DBLOG Auszug
2015-04-27 04:28:57: HZ_PI_TH_VL, PID20, actuationCalc: -7.82398290858424-05, actuationCalc, -7.82398290858424-05,

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

John

Bitte folgendes zu weiteren Fehleranalyse:

pidDebugCalc auf 1 setzen.
verbose mindestens auf 2 setzen.

Wenn der Fehler nochmals passiert, brauche ich die entsprechenden log-Auszüge.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

stromer-12

Es liegt nicht am PID20 es ist ein event-on-change Problem.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL