[Modul] PID Controller - Beta, try out

Wie meinst du das? Welche Erfahrungen hast du gemacht? Auf Einstellungen via Webfront haben meine bisher immer sauber reagiert.

Grüße
Rolf

Naja, es passiert immer mal wieder das die den Stellwertmodus von selbst verlassen und zurück in den Thermostatmodus wechseln.
Reproduzieren kann ichs indem ich eine Dezimalzahl anstatt einer Ganzzahl sende. Vermute (??) das dies ab und an unabsichtlich wegen Übertragungsproblemen passiert.
Hab dafür inzwischen eine Abfrage drin ob der Modus korrekt ist und setze ihn dann bei Bedarf zurück.
Ab und an hängen die sich auch überhaupt auf. So zb. war heute wieder einer komplett offen (Heizkörper heiß) obwohl Ventilstellung 0 gesetzt und angezeigt wurde.
Befriedigend ist das nicht.
In weiters latentes Problem ist auch das die nun nicht mehr autark arbeiten sondern von IPS abhängen. Steht IPS ist die Bude kalt doer heiß. Hmmm die Heizung sollte schon halbwegs autark funktionieren oder zumindest eine akzeptable Rückfallebene haben.

Im Gegensatz dazu bin ich mit den Spirits wenns im Thermostatmodus sind sehr zufrieden. Arbeiten hier schon einige Jahre sehr brav.
Muß mal schauen wo der interne Temperatursensor sitzt und ob man den evtl. mit ein Kabel rausverlängern könnte.

gruß
bb

Hallo Bernhard,

ich habe das gerade nochmals in der LConSMC von Siemens gefunden:

D-Anteil = (error_n - error_n-1) x ( diffTime / scanTime)
I-Anteil = I-Anteil_n-1 + (scanTime / intergralTime) x error

Und jetzt noch die Philosophie:

Einige nehmen als „error“ den bereits gebildeten „P-Anteil“!

Ich denke von der Mathematik her geht es nicht einfacher.
Du musst den I-Anteil natürlich anhalten wenn der Ausgang bereits Max oder Min hat.
Ich meine aber das du das schon so hattest.

LG

Martin

Danke Martin,
langsam gehts voran :slight_smile:
In Real-Live austesten dauert halt immer seine Zeit weil jede Änderung gleich 1-3 Tage beobachten ergibt um zu sehen ob es so tut wie erwartet.

gruß
bb

Ich würde es auch gern testen für meine Heizpatrone mit PV-Überschuss. Nur finde ich es im Modul-Store unter PID_Controller und auch mit diversen anderen Schreibversuchen nicht.

Habs noch nicht im Store. Git Link findest im ersten Post.
Aber Vorsicht ! It noch 100% play as will. Ich bastel da noch rum.
Doku, Übersetzung usw. gibts erst wenn alles fertig ist.

gruß
bb

Das Thema PID-Regelung interessiert mich sehr und ich habe versucht mich einzulesen, aber irgendwie fehlt mir da der Zugang. Hätte ich nur im Studium in dem Fach besser aufgepasst.
Das Modul habe ich installiert und Parameter eingetragen, aber es läuft nicht los. Der Reihe nach:
Mein Anwendungsfall wäre eine Warmwasserheizpatrone, die mit PV-Überschuss gespeist werden soll. Somit habe ich eine Soll-Temperatur, eine Ist-Temperatur, ich habe den überschüssigen Strom den ich dafür verwenden will und die Stellgröße ist ein PWM-Signal (0…100%), welches 0…10V auf einen Thyristor gibt. Die Heizpatrone hat max 3kW, soll aber über den Thyristor nur den überschüssigen Strom (ggf. mit geringem Offset als Reserve) dafür bekommen.

Im Modul habe ich jetzt folgende Einstellungen gemacht:
Setpoint - Soll-Temperatur (z.B. 60°C)
measured input value - Ist-Temperatur
actuator input variable - Das verstehe ich leider nicht. Das PWN-Signal als Stellgröße wird es nicht sein, das wäre ja ein output. Außerdem nimmt es diese Variable an der Stelle auch nicht an (nach Speichern bleibt das Feld wieder leer).
Skript - Wäre hier ein Skript für die Stellgröße gemeint?
Bei den weiteren Parametern bin ich noch nicht weit. Obwohl ich das aus den vorhergehenden Beiträgen hier schon nachvollziehen kann.
Was ist ganz unten mit Zielwert und aktueller Wert gemeint? Was muss da eingetragen werden? Ich hatte angenommen, wenn ich das Modul aktiv setze, dass in den Feldern durch das Modul etwas eingetragen wird.

Tut mir leid für die vielen dummen Fragen.
Derzeit regele ich den Boiler mit einem Skript. Die Hauptlogik ist da:

$Boiler=$Boiler+$Ueberschuss-$Offset;

Nur kurz weil ich schnell weg muß:
Du mischt hier zwei Dinge:
-Einerseits eine Temperaturregelung (kann Temperatur einstellen aber nimmt keinen Rücksicht auf PV Überschuß)
-Andererseits eine Überschußregelung (kann Überschuß verwerten nimmt aber keine Rücksicht auf die Temperatur)
Was soll den die primäre Funktion sein ?

Das die Output Variable nicht gespeichert wird muß ich mir ansehen. Die Stellgröße findest du aber in der „OutputValue 0-100“ Variable welche automatisch vom Modul angelegt wird.

Den Rest erkläre ich wenn ich zurück bin. - Werde heute wahrscheinlich eh and er Doku arbeiten.-

gruß
bb

Die Frage ist, wozu man einen PID Regler überhaupt braucht, um PV Überschuss zu verwerten?
Da nimmt man den Überschuss und leitet ihn zum Verbraucher, ggf. mit einem kleinen Offset um häufiges schalten zu vermeiden.
Ich denke das macht wohl jeder so, der eine PV und Heizstäbe hat?
Auch ich … :wink:

VG,
Doc

Ich denke es soll genau so nur viel geheizt werden wie Überschuß vorhanden ist.
Dazu braucht es zwei hintereinandergeschaltet Regler:
Einmal um die Heizung überhaupt freizugeben. Das ist ein simpler ON/OFF, und ein zweiter welcher dann je nach verfügbarere Energie die PWM für den Thyrsitorsteller macht. Dazu ist aber wohl ein reiner P, evtl. sogar PD besser weil er soll ja eher schnell regeln.

bb

Ja, ich denke, ich hab mich hier verrannt. Für den Heizstab ist die Überschussregelung völlig ausreichend. Da sich ja die Einspeiseleistung auch im Sekundentakt ändert, da sie von mehreren Verbrauchern im Haus abhängig ist, wäre da eine PID-Regelung auch zu komplex.
Danke trotzdem und viel Erfolg weiterhin bei dem Projekt! Schade, dass ich meine elektr. Heizkörper nicht stufenlos schalten kann sondern nur ein oder aus. Sonst hätte ich das gern damit gemacht.

Vielleicht denke ich auch zu einfach, aber meine Regler zur Überschusseinspeisung brauchen weder PI,PD noch PID.
Da wird einfach nur verglichen und das Ergebnis dann als Regelgröße genommen.
Da muss doch nichts mit der Zeit verrechnet werden.

VG,
Doc

Zurück zum Topic.
Ich habe da nun einiges überarbeitet und umgebaut. Bei meinen Tests sah es nun recht gut aus.

Neu:
Konfigurationsforumular ist nun in Deutsch.
Für den Integralwert gibt es nun zwei Berechnungsmethoden.

  • es wird über fixe Intervalle ohne Gewichtung der verstrichenen Zeit integriert
    oder
  • der Integralwertes wird bezogen auf die Ausregelzeit gewichtet (die Ausregelzeit wäre vorab vom User empirisch zu ermitteln)

Weiters hab ich noch eine optionale Mittelwertbildung über x Messwerte des Eingangswertes eingebaut.

Schaut mal bitte drauf ob die Beschreibung der Parameter konsistent ist. Selbst ist man da ja gerne etwas blind. Feedback welcome.

Die ganzen Felder im Debug Bereich kommen wieder weg, das ist nur temporär.
Alte PreView Version bitte unbedingt deinstallieren.
Dokumentation ist noch in Arbeit, kommt in den nächsten Tagen.

Das Modul sollte nun auch im Module Store im Beta Kanal verfügbar sein. Suche nach „PID_Controller“ (hoffe hab das alles richtig gemacht, den Beta Kanal hab ich noch nie verwendet)

schöne Grüße
Bernhard

Ein Gutes Neues Jahr wünsche ich allen!

Bernhard, mit der neuen Version komme ich nun gar nicht mehr klar. Vielleicht verstehe ich es nur falsch - für Debugzwecke zeigst du Target Value und Actual Value an, werden diese Werte dort (und auch daraus errechnete Werte) laufend aus den Eingangsvariablen für Ist- und Sollwert aktualisiert oder nicht?

Edit nach einigen Tests mit PI-Anteilen: Es scheint als ob die berechneten Werte sinnvoll sind und auch im Debug Output aktualisiert werden auf der Basis der verlinkten Istwert-Variablen, aber die Anzeige des Istwert ebendort nicht aktualisiert wird.

In meinen Screenshot unten ist er verlinkte Istwert 21, der verlinkte Sollwert ebenfalls 21. Der P-Anteil ist richtigerweise auf 0 weil Istwert=Sollwert. Der im Debug angezeigte Istwert wurde nicht aktualisiert, das hatte mich verwirrt.

Servus
Ja, die Werte hatte ich nur mal fürs schnelle rumprobieren und ändern reingenommen.
Ohne Anspruch das sie auch immer korrekt behandelt werden.
Sorry wenn es für Verwirrung sorgte.

Unterm Strich bin ich jetzt durchaus zufrieden mit dem Verhalten.
Hier ein aktuelles Bsp.

bb

Hi Bernhard,

soweit muss ich erstmal kommen. Am Verständnis der Regelungstechnik scheitert es nicht, nur am GUI des Moduls. Entweder sind da noch einige grobe Bugs oder ich verstehe das GUI-Konzept nicht.

Ich hatte „oben“ einen Link auf den Sollwert gesetzt (aktuell 20°) aber anscheinend rechnet das Modul stattdessen mit dem Wert unten im Debugfenster (21°) und ignoriert den Sollwert-Link!?
Oder ist der Debug-Output nochmal ein anderer Wert als der vom Modul berechnete Output??

Ratlose Grüße
Volker

Hmm.
Grundsätzlich wird erstmal jener Wert genommen welcher im Bereich „Eingangs/Ausgangs Variablen“ als Sollwert verlinkt ist.

Man kann ihn aber auch mittels
„PID_SetTargetValue(integer InstanceID, float Value);“
aus einem Script oder Ablaufplan von extern setzen oder überschreiben.
Es ändert sich dabei nur der intern für die Berechnung verwendete Wert. Die verlinkte Variable wird nicht verändert.

Das gleiche geschieht im Debebugfenster. Setzt man dort einen Wert, so wird dieser für die Berechnung verwendet. Dieser gilt dann solange bis sich der Wert in der verlinkten Variable wieder ändert. Auch hier wird die verlinkte Variable nicht verändert.

Es gibt sozusagen 3 Möglichkeiten den intern für die Berechnung verwendeten Sollwert zu ändern. Gültig ist immer der zuletzt eingelesene oder gesetzte Wert.

Ich könnte natürlich als moduleigene Statusvariable anlegen und auch dort den aktuell verwendeten Sollwert ausgeben. Dachte aber ich laß es weg, weil im Normalfall kommt der Sollwert ja eh aus einer vorgelagerten Instanz. Da braucht man ihn nicht mehrfach darstellen.

Danke für den Hinweis das das verhalten verwirrend ist. Ich werds in die Doku mit aufnehmen. tippe eh grad dran.

gruß
bb
bb

So hatte ich es erwartet, aber als ich vorhin umstellte von Testwerten aus dem Debugfenster auf „echte“ Werte über die Links wurde weiterhin mit dem Debugwert gerechnet. Erkennbar war das am P-Anteil, der hätte bei den „echten“ Werten auf 0 springen müssen weil die Soll-Temperatur bereits überschritten war.

Allerdings hatte sich die Variable mit dem Sollwert schon lange nicht mehr geändert, deshalb war sie für deine Berechnung offenbar noch unwirksam obwohl ich sie gewählt hatte.

Vielleicht kannst du im Debugfenster sowohl Ist- als auch Sollwert anzeigen lassen, dann ist es vielleicht etwas transparenter welche Eingabewerte verwendet werden.

Oh ja, das ist eine gute Idee. Einfach nochmal als nicht editierbaren Wert anzeigen.
Bau es gleich ein.

bb

So hab das jetzt verbessert. - übrigens war noch mehr schräg - :nauseated_face:
Zu beachten ist, das wenn man Target oder Actual Value im Debug Bereich ändert, so muß die Mittelwertberechnung und fixes Berechnungsinterval abgeschaltet sein. Sonst sonst spukt das mit rein und bringt Verwirrung.
Da ich die debug Ausgabe eh weider rausmachen will hab ich jetzt keinen großen Aufwand das Verhalten zu umgehen.

Weiters wird die Ausgabe des Proportional ,Integral, Differential Anteils wird jetzt gleich auf 0-100 skaliert.