Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

Maui

Oh und ich hab immer nur bei PID20 gesucht. Danke. Teste ich ob es geht da bei MAX ja über maxValve gesteuert wird ob der offset dann auch greift.
Schreib dann nochmal ob es geht

predi-ger-many

#406
Hi,

ich würde pidActorLimitLower verwenden. Sobald ich den Wert auf größer 0 setze, wird dieser immer als Minimum gesetzt, d.h.
auch wenn actuationCalc <= 0 ist.

Gibt es eine Möglichkeit, dass pidActorLimitLower nur greift, wenn actuationCalc > 0 ist?

Ich würde gern folgendes Erreichen:

1. Wenn actuationCalc <= 0 ... actuation = 0
2. Wenn actuationCalc > 0 dann actuation = actuationCalc falls größer als pidActorLimitLower sonst actuation = pidActorLimitLower



stefan-dd

Hallo,
kann man das Modul auch für eine Klimaregelung verwenden? Müsste man etwas umstellen?
Ich habe in meinem Kanalsystem Klappen mit Stellmotoren, die ich entsprechend stellen will. Jetzt gibt es nur ein/aus dem zufolge wird ständig geregelt.

VG Stefan

Maui

Also prinzipiell kann man damit "alles" regeln. Zumindest das was sich halbwegs über einen PID abbilden lässt. Dein letzter Satz erschließt sich mir nicht.

Tedious

Ich interpretiere das so dass seine momentane Regelung nur auf und zu kann, also 0 und 100%. Wenn die Klappen beispielsweise über einen Steppermotor o.ä. gesteuert werden und es Zwischenwerte gibt - denn kannst Du die auch hiermit berechnen und denn stellen lassen.

Nix anderes ist das bei der Heizungsregelung - 0 ist zu, 100 ist offen - der Regler berechnet die optimalen Öffnungswerte (also z.B. 11 statt 0 oder 20) und überschreibt die Regelwerte.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

stefan-dd

Ich habe jetzt einen Testaufbau hergestellt.
Der Unterschied bei der Klimatisierung ist, das der Regler öffnen soll wenn die Ist-Temperatur höher als die Soll-Temperatur ist. Also genau umgedreht zum Heizbetrieb.
Kann man da was einstellen?


     2020-07-08 20:30:54   actuation       0
     2020-07-08 20:30:54   actuationCalc   -37.225
     2020-07-08 20:30:54   delta           -3
     2020-07-08 20:30:54   desired         20
     2020-07-08 20:30:54   measured        23.0
     2020-07-08 20:30:54   p_d             0
     2020-07-08 20:30:54   p_i             37.775
     2020-07-08 20:30:54   p_p             -75
     2020-07-08 20:30:54   state           processing

Maui

Ich hab zwar nur in die cref geguckt aber


pidReverseAction 1

Würde ich mal testen

stefan-dd

Ok, das sollte funktionieren.

Ich habe noch etwas, wie kann ich einen Fenster Kontakt einbinden?

Maui

Da gibt es sicherlich 1000 Wege. Ich mache das per DOIF.
defmod diGastUntenFenster DOIF ( [fkGastUnten:state] eq "closed" and [htGastUnten] eq "cold") (set pidGastUnten desired 17)\
DOELSEIF ( [fkGastUnten:state] eq "opened") (set pidGastUnten desired 12, set hkGastUnten maxValveSetting 0)\
DOELSEIF ([fkGastUnten:state] eq "closed" and [htGastUnten] eq "hot") (set pidGastUnten desired 20)

Ich hab noch einen Taster drin zum warm machen und setze bei fenster auf direkt noch das ventil auf 0.
ansonsten würde PID ja bis zum nächsten Durchlauf warten.

Forstling

Hallo

Benutzt jemand dieses Modul noch für etwas anderes als die Raumtemperatur damit zu regeln?

Ich versuche damit die Rücklauftemperatur meines Heizkessels zu Regeln?
Nachdem ich es jetzt endlich einen zuverlässigen Temperatursensor als Sollwertgeber gefunden habe bin ich am Rumspielen was die Regelparameter angeht.

Nach einem diesem Winter bin ich immer noch nicht dort wo ich gern seien wollte. Daher die Frage ob jemand für mich ein paar sinnvolle Vorschläge für die Regelparameter hat.

Mein Ziel ist es die Temperatur auf 73° +- 0,5° zu halten.
Heizkessel ist ein Atmos KC25 (Feststoffkessel mit 25KW)
Als Stellglied nutze ich einen 3 Wege Mischer der über das Stellmotor Modul gesteuert wird. (Geschlossen bis Offen 140s)
Sensor liefert alle 10s einen Temperaturwert
PID Modul berechnet alle 30s einen Stellwert für den Mischer.

Meine aktuellen Probleme:
Beim Hochheizen fängt der Mischer erst ab 80° an zu öffnen
Ab und zu kommt es zum aufschwingen des Mischers

Meine Aktuellen Parameter:
P: 3
I: 0,5
D: 2

Im Anhang ein Chart wo man das Verhalten sehen kann
14:00 Uhr Temperatur geht erst auf 80° bevor effektiv geregelt wird
15:00 Uhr Erstes aufschwingen (Mischer eines Heizkreises Regelt Temperatur nach unten)
15:30 Uhr Schwinngen keine Ahnung Warum
16:30 Uhr 1. Speicher voll umschalten auf 2. Speicher
17:45 Uhr Manuelle Eingriffe kann ignoriert werden



abc2006

Jupp. genau das mache ich.

defmod PID_HV PID20 OW_HV_RLA:temperature none
attr PID_HV comment 90: Nur Vorlaufwasser/nach links drehen\
0: Nur kaltes Wasser/nach rechts drehen
attr PID_HV event-on-change-reading x_.*
attr PID_HV event-on-update-reading actuation,actuationCalc,p_d,p_i,p_p,measured,desired,delta,restarted
attr PID_HV pidActorCallBeforeSetting PID_HV_ActorSet
attr PID_HV pidActorInterval 1
attr PID_HV pidActorLimitLower 0
attr PID_HV pidActorLimitUpper 128
attr PID_HV pidActorTreshold 1
attr PID_HV pidActorValueDecPlaces 0
attr PID_HV pidCalcInterval 15
attr PID_HV pidDeltaTreshold 0.1
attr PID_HV pidFactor_D 0
attr PID_HV pidFactor_I 0.3
attr PID_HV pidFactor_P 0.5
attr PID_HV room HV_Steuerung,PID
attr PID_HV stateFormat {sprintf("%s, A: %.0f D: %.1f %s",ReadingsVal($name,"state",0),ReadingsVal($name,"actuation",0),ReadingsVal($name,"delta",0),ReadingsTimestamp($name,"actuation",0))}
attr PID_HV userReadings x_VL_HV {ReadingsVal("OW_HV_VL","temperature",-1)},\
x_Kessel_HV {ReadingsVal("OW_HV_Kessel","temperature",-1)},\
x_VL_RLA {ReadingsVal("OW_HV_RLA","temperature",-1)},\
x_VL_RL {ReadingsVal("OW_HV_RL","temperature",-1)}


Allerdings glaube ich, dass
a) so ein bisschen schwingen normal ist, grad bei nem Holzvergaser
b) man das nicht zuuu eng sehen darf
c) ein normaler PID damit überfordert ist, weil imho mehrere Messwerte zu berücksichtigen sind
d) ich mir den PID ein bisschen angepasst habe
Bei c) hab ich ein paar mal angesetzt, aber es läuft so "gut", dass mir das die Arbeit bisher nicht wert war.
Bild ist nicht so ganz aktuell, bin grade mit was anderem beschäftigt ...
Man sieht, dass der Abbrand gegen 22:30 gestartet ist, um kurz nach 4 war er fertig.
Grüße,
Stephan

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Maui

Ich würde auf jeden Fall den D-Anteil wegnehmen. Ist ja eher was träges der hilft da nix

stefan-dd

Ich nutze das Modul für die Luftverteilung meiner Klimaanlage. Die Regelung muss sehr direkt sein. Ich habe lange Probiert und in jedem Raum leicht andere Werte. Die Beispiele nutzten mir gar nichts.
Im Betrieb regeln die Klappen meist zwischen 40 und 60%. Was eine sehr gleichmäßige Regelkurve und Zieltemperatur ergibt. Eine Aufzeichnungskurve habe ich erst im Sommer.
defmod PID20_KiZi PID20 Klima_KiZi:Temperature Klappe_KiZi_PWM:dim
attr PID20_KiZi event-min-interval .*:120
attr PID20_KiZi event-on-change-reading desired,state,actuation,delta,p_i,p_p
attr PID20_KiZi pidActorInterval 60
attr PID20_KiZi pidFactor_I 5
attr PID20_KiZi pidFactor_P 50
attr PID20_KiZi pidReverseAction 1
attr PID20_KiZi pidUpdateInterval 60
attr PID20_KiZi room hidden
attr PID20_KiZi stateFormat actuation | state
attr PID20_KiZi userReadings desired {ReadingsNum("Klimaklappe_KiZi","desired",0)}


abc2006

Ah noch was vergessen
Zitat von: Forstling am 16 März 2021, 18:11:11
Mein Ziel ist es die Temperatur auf 73° +- 0,5° zu halten.
imho zu Ehrgeizig, ich erkenne (für mich) keinen Mehrwert. Nichtsdestotrotz ist mir dieser Wunsch aus dem Holzheizer-Forum bestens bekannt. Nicht vergessen: das ist Holz, kein Gas...
Zitat
(Geschlossen bis Offen 140s)
Ich habe 120 sekunden. Alle Experimente mit (deutlich) längeren Zeiten waren für mich Nachteilig
Zitat
Sensor liefert alle 10s einen Temperaturwert
super
Zitat
PID Modul berechnet alle 30s einen Stellwert für den Mischer.
War mir zu langsam, ich rechne alle 15 sekunden. Lieber öfter weniger Bewegung, als seltener viel. Aber nicht übertreiben.
Zitat
Beim Hochheizen fängt der Mischer erst ab 80° an zu öffnen
PID resetten (der I-Anteil macht diese Probleme)
Mein Pid darf rechnen, sobald die VL-Temp >40 ist.


Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Forstling

Danke für die Antworten

@ Maui: Der D anteil sollte ja auf die Steigung reagieren Also den Regler schon auf machen kurz bevor die Solltemperatur erreicht ist und im Rest der Zeit nahe 0 sein. Ich hatte gehofft das er das anfängliche überschwingen wegnimmt.

Zitat von: abc2006 am 16 März 2021, 18:32:25
imho zu Ehrgeizig, ich erkenne (für mich) keinen Mehrwert. Nichtsdestotrotz ist mir dieser Wunsch aus dem Holzheizer-Forum bestens bekannt.
Man sollte halt Ziele haben aber zwichen 71 und 75 ist auch OK

ZitatIch habe 120 sekunden. Alle Experimente mit (deutlich) längeren Zeiten waren für mich Nachteilig
140s Braucht der Mischermotor wenn ich da was ändern will brauch ich neue Hardware
ZitatWar mir zu langsam, ich rechne alle 15 sekunden. Lieber öfter weniger Bewegung, als seltener viel. Aber nicht übertreiben.
Die 30s reichen für 21% Verstellweg vom Mischer 15 würden für ~11% ausreichen. Müsste  man probieren. Ich hatte auch schon alle 10s Rechnen und alle 30s Stellen mein Mischer ist halt recht langsam.
ZitatPID resetten (der I-Anteil macht diese Probleme)
Mein Pid darf rechnen, sobald die VL-Temp >40 ist.
Also am besten 1 Doif das den PID 20 bei sagen wir 60° resetet. Die Berrechnung stoppen würde ich nicht, da bei Ausfall des Sensor der Mischer nicht mehr in seine Notfallstellung fährt. Obwohl das könnte ich noch über einen anderen Sensor abfangen. Falls mal jemand anfängt zu Heizen wenn der Sensor ausgefallen ist.