Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter pid (pid-Regler) V1.0.x

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Test Adapter pid (pid-Regler) V1.0.x

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @mcm1957 last edited by paul53

      @mcm57 sagte: Die Begrenzung des Ausgangswertes auf Max bzw. Min erspart das jedenfalls nicht.

      Das ist die Begrenzung des Ausgangswertes. Stellglieder haben einen begrenzten Stellbereich, meist 0 ... 100 %. Darauf bezieht sich das Proportionalband Xp.
      Beispiel für P-Anteil: Xp = 4; Offset = 50 = (Max + Min) / 2; e = -1 --> y = 25 %

      @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

      Und Invertierung wäre ja einfache Invertieren des Ausgangswerte ( y = -y).

      Invertierung von Kp oder e.

      fu_zhou mcm1957 2 Replies Last reply Reply Quote 0
      • fu_zhou
        fu_zhou @paul53 last edited by

        Boah, jetzt geht's ja ganz schön ab hier, sehr schön! Hier mal mein Input:

        @paul53 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

        @mcm57
        Du berechnest nach der theoretischen Methode (auf die Regelabweichung bezogen)

        this.y = this.data.off + this.k_p * this.err + this.k_i * this.sumErr + this.k_d * this.diffErr;
        

        Das wird in der Praxis selten angewendet. Man arbeitet mit Xp (Proportionalband), Tn (Nachstellzeit) und Tv (Vorhaltezeit).

        y = diff * (max - min) / Xp * (1 + Summe(dt / Tn) + Tv/dt) + offset
        

        Habe ich es nur nicht gefunden oder ist eine Umkehr der Regelrichtung (Stichwort: Heizen/Kühlen) nicht vorgesehen?

        Den selten gebrauchten D-Anteil sollte man nur auf den Istwert anwenden, da der Sollwert meist große Sprünge macht.

        Ich gebe paul53 da Recht, auch wenn ich nur Regler-Anwender, nicht Regler-Programmierer bin. Bei der Optimierung eines Regelkreises, z.B. nach Ziegler-Nichols, berechnet man über die Formel tatsächlich die Nachstellzeit Tn und (wo notwendig) die Vorhaltezeit Tv in Sekunden, was ich auch irgendwie greifbarer finde - weil ich das halt kenne.

        Zum Heizen/Kühlen: Das ist eine Split-Range-Regelung, lässt sich über MIN MAX out (LL, LH) realisieren, z.B. MIN = -100%, MAX = 100%. Der Regler startet bei 0% (=kein Energieverbrauch), bei positiver Regelabweichung (w-x > 0) schiebt der Regler den Ausgang Richtung 100%, also wird mit 0-100% ein Heizventil angesteuert und bei negativer Regelabweichung schiebt der Regler Richtung -100% und damit wird dann ein Kühlventil angesteuert. Habe ich nur ein Stellglied, in meinem Fall wieder die Wallbox, die 1,4 - 11 kW kann, ist MIN 0 und MAX 11, wobei ich MAX mit Blockly bestimme: Nachts, wenn die Hausbatterie leer ist, darf die Wallbox mit 11 kW laden, tagsüber max. mit dem PV-Überschuss. Das hilft, den Regler entsprechend schnell zu begrenzen, wenn eine Wolke drüber zieht, der Regler muss dann nicht mit den eingestellten Parametern zurückregeln.

        mcm1957 1 Reply Last reply Reply Quote 0
        • mcm1957
          mcm1957 @fu_zhou last edited by

          OK, das es n unmehr 3:0 steht treffe ich die Entscheidung

          Es wird auf Tn/Tv umgestellt

          (aber nicht mehr heute :-))

          1 Reply Last reply Reply Quote 0
          • mcm1957
            mcm1957 @paul53 last edited by mcm1957

            @paul53 said in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

            @mcm57 sagte: Die Begrenzung des Ausgangswertes auf Max bzw. Min erspart das jedenfalls nicht.

            Das ist die Begrenzung des Ausgangswertes. Stellglieder haben einen begrenzten Stellbereich, meist 0 ... 100 %. Darauf bezieht sich das Proportionalband Xp.
            Beispiel für P-Anteil: Xp = 4; Offset = 50 = (Max + Min) / 2; e = -1 --> y = 25 %

            @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

            Und Invertierung wäre ja einfache Invertieren des Ausgangswerte ( y = -y).

            Invertierung von Kp oder e.

            OK nur die Formal an sich begrenzt da noch nicht.
            act=0
            soll=500
            min=0
            max=100
            Xp=50

            Kp = (Max-Min)/Xp = (100-0)/50 = 2
            e=act-soll = 500-0 = 500
            u=Kp * e (bei I und D Anteil disabled) + offset = 500*2 + 50 = 1050.
            Ergo muss da der Code noch auf 100 limitieren.

            Oder versteh ich das falsch?

            Bei Xp 50 wäre eine maximale Differenz
            von 25 im Regelbereich
            u = Kp * e + offset = 25*2 +50 = 100

            Zusatzfrage(n):
            Eine explizite Invertierungsmöglichkeit braucht man dann ja doch nicht. ein negativer Xp würde das ja dann auch tun wie du schreibst.

            Braucht dann noch wer den expliziten Parameter Offset? Ich meine ja, da ansonsten bei Abweichung 0 fix (Max-Min)/2 am Ausgang anstünde. Aber ev. will man da ja auch Min (z.B. 0) anliegen haben. Beispiel: Temperaturregler - bei passender Temperatur soll nicht geheizt werden.)

            fu_zhou paul53 3 Replies Last reply Reply Quote 0
            • fu_zhou
              fu_zhou @mcm1957 last edited by fu_zhou

              @mcm57 Ich bräuchte den Offset - wieder bei der Wallbox. Die legt erst ab 1.4 kW los (230V, 6A) und der Regler steuert direkt die Leistung der Wallbox über Stromstärke und Anzahl Phasen an. Bei mir ist also der Offset 1.3 kW, weil der Regler soll nicht erst mal von 0 hochlaufen bis 1.4 kW erreicht sind, das lässt sich über den Offset machen. Ich könnte natürlich den Regler auch 0-100% ausgeben lassen, ohne Offset, müsste dann aber an anderer Stelle (z.B. Blockly) über eine Kennlinie normieren; 0% =1.3 kW, 100%=11 kW.
              Und wenn man den Offset am Reglerausgang nicht braucht, lässt man den halt bei 0.

              1 Reply Last reply Reply Quote 0
              • fu_zhou
                fu_zhou @mcm1957 last edited by

                Vielleicht an der Stelle nochmal der Hinweis auf den OSCAT-Regler (steht ja schon im Github):

                Es gibt eine freie SPS-Bibliothek "OSCAT". Hier ist auch ein PID-Regler dabei, der eigentlich alles kann, was man so braucht und ein bisschen mehr 😉
                Hier der Link zu Dokumentation der gesamten Bibliothek (ist ein PDF), der PID Regler ist auf S. 395 - 397 beschrieben (23.8. CTRL_PID)
                http://www.oscat.de/de/component/jdownloads/summary/2-oscat-basic/7-oscat-basic333-de.html

                Wind-Up ist hier auf S. 387/388 gut beschrieben.

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @mcm1957 last edited by paul53

                  @mcm57 sagte: ein negativer Xp würde das ja dann auch tun

                  Richtig, ist aber unüblich. Ebenso kann man Ist- und Sollwert vertauschen (außer, wenn der D-Anteil nur auf den Istwert wirken soll). Aber das soll sicherlich für Leute handhabbar sein, die sich nicht oder kaum mit Regelungstechnik auskennen?

                  @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

                  Bei Xp 50 wäre eine maximale Differenz von 25 im Regelbereich

                  Ja, +/- 25.

                  @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

                  Braucht dann noch wer den expliziten Parameter Offset?

                  In praktischen Reglern gibt es ihn nicht.

                  fu_zhou 1 Reply Last reply Reply Quote 0
                  • fu_zhou
                    fu_zhou @paul53 last edited by

                    @paul53 ich würde eher zu einem negativen Xp greifen, als Ist- und Sollwert zu vertauschen, das macht man aus dem von dir angeführten Grund ja lieber nicht. Ich kenne die Möglichkeit des Offsets auf den Reglerausgang eigentlich durchgängig aus der SPS-Welt - s. z.B. auch die OSCAT-PID Beschreibung oben im Link.

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @fu_zhou last edited by

                      @fu_zhou sagte: aus der SPS-Welt

                      Ich komme aus der DDC-Welt.

                      mcm1957 1 Reply Last reply Reply Quote 0
                      • mcm1957
                        mcm1957 @paul53 last edited by

                        @paul53 @fu_zhou

                        OK, dann mach ich Folgendes:
                        -) expliziter Schalter "invert" (und Limit Xp > 0)
                        -) expliziter Offset (muss ja nicht benutzt werden)

                        P.S. Ich hab zwar Regelungstechnik studiert - aber einerseits ist das 40 Jahre her (wobei der PID Regler damals auch schon erfunden war) und andrerseits wisst ihr Eh dass Praxis ein Studium schlägt. Und die Praxis hatte ich von Anfang an im Programmieren (Assembler Intel 8080/8087 für Messgeräte über Pascal auf VMS (Digital Equipment, dann Compaq und HP) bis zuletzt C, Perl, Linux für online Transaktionssysteme)

                        DANKE euch allen für euren wertvollen Input.

                        fu_zhou 2 Replies Last reply Reply Quote 0
                        • fu_zhou
                          fu_zhou @mcm1957 last edited by

                          @mcm57 eine Vorbelegung sämtlicher Werte wäre sinnvoll, so dass kein "Null" im Objekt steht, z.B.:
                          Kp= 1
                          Tn= 60 (Sekunden)
                          Tv= 0 (D-Anteil deaktiviert => zunächst nur PI-Regler)
                          LL: 0
                          LH: 100
                          ...

                          1 Reply Last reply Reply Quote 0
                          • fu_zhou
                            fu_zhou @mcm1957 last edited by

                            @mcm57

                            @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

                            -) expliziter Schalter "invert" (und Limit Xp > 0)

                            Das ist eine gute Lösung finde ich, vielleicht auch als Bool Objekt? Dann könnte man z.B. ein Stellglied, das heizen und kühlen kann, in die entsprechende Betriebsart bringen (z.B. über Temperaturdifferenz innen - außen) - auch wenn das wahrscheinlich eher wenig genutzt werden wird, weil das die Geräte selbständig tun, z.B. Lüftung Sommer- vs. Winter-Betrieb: Im Winter möchte ich die Wärmerückgewinnung nutzen, um die kalte Außenluft mit der warmen Abluft vorzuwärmen und im Sommer möchte ich die warme Außenluft mit der kühleren Abluft vorkühlen.

                            fu_zhou 1 Reply Last reply Reply Quote 0
                            • fu_zhou
                              fu_zhou @fu_zhou last edited by fu_zhou

                              @paul53 @mcm57
                              Zum Thema Begrenzung nochmal ein Gedanke:

                              @mcm57 sagte in Test neuer Adapter pid (pid-Regler) V0.0.1-alpha.x:

                              Kp = (Max-Min)/Xp = (100-0)/50 = 2
                              e=act-soll = 500-0 = 500
                              u=Kp * e (bei I und D Anteil disabled) + offset = 500*2 + 50 = 1050.

                              Heißt dass, dass sich der Reglerausgang (Stellwert) halbiert, wenn ich Max halbiere, z.B. durch ein Skript, auch ohne dass sich Soll oder Ist verändert? Wenn ich mir die Formeln anschaue, dann schon, weil der Regler ja zyklisch läuft. Das wäre aber kontraproduktiv, weil ich will ja nicht den Reglerausgang verändern, nur weil ich Max verändere. Daher sollte aus meiner Sicht neben Tn und Tv auch Kp angegeben werden und Kp nicht wie oben zyklisch berechnet werden. Habe das grade mal mit der S7 und dem CTRL_PID ausprobiert - da ist es so: Der Reglerausgang verändert sich nur bei Regelabweichung, nicht bei Veränderung von Min oder Max (LL und LH beim CTRL_PID). Außer Max < aktueller Reglerausgang, dann wird der Reglerausgang auf Max gesetzt.

                              Das ist aktuell auch mein Problem mit dem npm pi-controller: hier muss Xp angegeben werden und Kp wird wie oben berechnet. D.h. Wenn ich hier MaxOut verändere (mit pi.setOutputMax(m);) verändert sich der Reglerausgang y, selbst wenn aktuell ein stabiler Zustand erreicht ist und sich weder Soll noch Ist verändert.

                              mcm1957 paul53 2 Replies Last reply Reply Quote 0
                              • mcm1957
                                mcm1957 @fu_zhou last edited by mcm1957

                                @fu_zhou
                                Ja damit stell ich die Frage an Runde was denn nun als Parameter "üblich(er)" ist?

                                Xp oder Kp ?

                                xp = (max - min) * xp

                                xp geht in die Regelfunktion ein. D.h. gibt man xp an, dann Ändert min/max nichts am Ausgangssignal. Gibt man xp an, dann hat max/min direkten Einfluß auf das Ausgangssignal.

                                Im Prinzip würde ich eigentlich auch kp als logioscher betrachten. Aber ich bin kein Praktiker in Regelungstechnik.

                                Und im Prinzip bin ich wertfrei - nur beides gleichzeitig wird schwer 🙂
                                Bitte daher um eure Meinungen, insbesondere @paul53

                                fu_zhou 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @fu_zhou last edited by

                                  @fu_zhou sagte: Heißt dass, dass sich der Reglerausgang (Stellwert) halbiert, wenn ich Max halbiere, z.B. durch ein Skript

                                  Ja, Min und Max sollten konstante Parameter sein wie auch Tn und Tv. Soll eine variable Max-Begrenzung erfolgen, sollte dies im Anschluss mit dem Stellsignal passieren.

                                  mcm1957 fu_zhou 2 Replies Last reply Reply Quote 0
                                  • fu_zhou
                                    fu_zhou @mcm1957 last edited by

                                    @mcm57 für mich ganz klar Kp - aus oben angeführtem Grund.

                                    1 Reply Last reply Reply Quote 0
                                    • mcm1957
                                      mcm1957 @paul53 last edited by

                                      @paul53

                                      Welchen Vorteil bringt es min / max hier zwingend als fixen Regelparameter zu sehen?
                                      Wenn ich nachher nochmals begrenze hab ich doch nur zusätzlichen Aufwand. Und da xp in kp leicht umrechenbar ist und min / max sonst keinen Einfluß auf die Regelung haben, seh ich da wenig Vorteile.

                                      mcm1957 paul53 Ben1983 3 Replies Last reply Reply Quote 0
                                      • mcm1957
                                        mcm1957 @mcm1957 last edited by

                                        @mcm57

                                        https://de.wikipedia.org/wiki/Regler#PID-Regler

                                        und auch deine Formel hier (https://forum.iobroker.net/topic/64250/test-neuer-adapter-pid-pid-regler-v0-0-1-alpha-x/28) verwenden nur kp und sind damit unabhängig von min/max Werten.

                                        Wo kommt das xp her?
                                        Und welchen Vorteil bringt es via xp statt via kp einzustellen?

                                        1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @mcm1957 last edited by

                                          @mcm57 sagte Wenn ich nachher nochmals begrenze hab ich doch nur zusätzlichen Aufwand.

                                          Eine variable Maximalbegrenzung ist keine typische Funktion eines PID-Reglers. Als Bestandteil des Reglers dürfte sie sehr selten verwendet werden. Bei Xp gibt es viele Erfahrungswerte zur Voreinstellung bevor man optimiert.

                                          1 Reply Last reply Reply Quote 0
                                          • fu_zhou
                                            fu_zhou @paul53 last edited by

                                            @paul53 Mhm... das ist jetzt eine Frage der Philosophie... Selbst Tn und Tv sind in manchen Fällen dynamisch zu beschalten, weil sich die Regelstrecke im Heizfall anders verhält als im Kühlfall - gut, die Frage ist, wie relevant das im Smarthome-Umfeld ist, aber die Möglichkeit zu haben, schadet ja nicht.

                                            paul53 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            521
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            15
                                            303
                                            34507
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo