Neues Modul PID20 - Der PID-Regler

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

Vorheriges Thema - Nächstes Thema

Forstling

#435
Zitat von: cwagner am 02 April 2021, 09:16:50
Bitte aber auch https://wiki.fhem.de/wiki/PID20_-_Der_PID-Regler beachten, da ist weiter unten die Strategie gegen den Windup-Effekt beschrieben, vielleicht "spuckt Dir der in die Suppe".

Meine zuvor beschriebene Strategie ist die des Ran-Tasten vom agilsten Regelanteil (P) über die Rückschau (I) hin zur Vorschau (D).

Schöne Feiertage

Christian
Gegen den Windup-Effekt hatt hat das Modul seine eigene Strategie. Die kann man ja nutzen. Einfach pidActorLimitLower und pidActorLimitUpper setzen und schon ist der Wind-up effekt Geschichte.
Bei mir friert das den I-Anteil bei ca. 10 ein.
Somit sollte es keine Probleme geben.

Das mit dem Rantasten habe ich von Anfang an so gemacht mein Problem ist halt das der D-Anteil nicht den gewünchten Erfolg hat. Und nach mienem Verständnis eher das Gegenteil bewirkt. Daher das rumspielen am Code.

Zitat von: Maui am 02 April 2021, 09:49:34
Gefühlt ist eines deiner gedanklichen Probleme dass du denkst ein PID würde sich unabhängig der Faktoren schon mit der Zeit selbst richtig einstellen.

Die Faktoren sind das was die den Regler so flexibel macht und das dies kein selbstlernender Regler ist habe ich begriffen.

Ich werde Berichten wie es gelaufen ist meine Heizung vordert mich gerade zum heizen auf.

Edit:

So das erste mal Heizen mit Der Änderung im Code des Mischers.
Jetzt scheint er richtig zu rechnen.

Info an den Verantwortlichen für dieses Modul:
Ich glaube ich habe einen Fehler entdeckt.
Wenn pidReverseAction Aktiviert ist wird der D-Anteil des Mischer mit dem verkerten Vorzeichen berechnet.

Ich werde Versuchen meinen Mischer umzustellen damit ich das pidReverseAction nicht benötige. Und einen erenuten Test starten. 

Edit2:

Ja der Fehler hat sich bestätigt. p_d wird bei pidReverseAction 1 und 0 mit dem gleichen Vorzeichen berechnet.
Daher bei
pidReverseAction = 0
Mischer in geschlossen = 100%
Bei steigender Temperatur: D-Anteil ist negativ --> Mischer wird eher geöffnet --> Verhalten Korrekt

pidReverseAction = 1
Mischer in geschlossen = 0%
Bei steigender Temperatur: D-Anteil ist negativ --> Mischer wird später geöffnet --> Verhalten in diesem Fall falsch 

auf der linken Seite im Bild PID20 mit pidReverseAction = 1 auf der rechten Seite PID20 mit pidReverseAction = 0

Mischer haben gleiche Werte bei P, I, und D

Edit3:
Ich habe mich jetzt doch dazu entschlossen den D-Anteil zu deaktivieren.
Dieser errechnet die Steigung nur anhand der letzten Temperaturänderung. Daher führt es dazu das der Regler bei schnellen Temperaturänderungen ziemlich schnell aufschwingt. Dieser Anteil soll zwar schnell reagieren allerdings ist das bei dem Anwendungsbereich und meinem langsamen Mischer ziemlich ungünstig.

Vorschlag für eine Verbesserung:
Ich würde es als günstig empfinden wenn man den Integrationszeitraum des D-Anteils einstellen könnte.
Wenn man die Steigung der letzen 10 Werte berücksichtigen könnte würde dies zumindest in meinem Fall den D-Anteil stabilisieren und ich könnte ihn dazu nutzen das anfängliche Überschwingen zu eliminieren.

lawern

#436
Hallo,

ich habe hier eine für mich recht verständliche Anleitung gefunden einen PID einzustellen:
  https://kalka-automation.de/index.php/blogmenu-inbetriebnahme/37-einstellung-eines-pid-reglers-in-der-praxis

Jetzt habe ich aber eine Verständnisfrage zur Übersetzung der dort beschriebenen Werte Kp, Tn und Tv auf die Attribute pidFactor_P, pidFactor_I und pidFactor_D des PID20.

In meine Fall (Nulleinspeisung Solar-Wechselrichter) funktioniert es wie folgt ganz ok, wenn ich als Zeitbasis für Tu und Tg Minuten verwende:

pidFactor_P = Kp/60
pidFactor_I = Tn
pidFactor_D = Tv

Aber ist das so richtig oder eher Zufall?

Danke für eure Hilfe!
Lars

Aurel_B

Hallo Lars,

puuuh, schwierig zu sagen, ich taste mich da jeweils ein wenig durch Experimentieren an die Werte heran bis es passt. Hast du denn die Werte mal aufgezeichnet und graphisch dargestellt? Siehe weiter oben im Thread zum Thema Logging etc.

betateilchen

Moin,
vielleicht wäre es besser, für konkrete aktuelle Fragen jeweils einen neuen Thread zu beginnen, anstatt diesen über 10 Jahre alten Thread immer wieder auszugraben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!