NEWS
Anwendung von PID Adapter mit Blockly
-
Hallo an die Gemeinschaft
Ich habe bei meiner LED-Panel Deckenlampe einen Shelly Dimmer 2 eingebaut und möchte nun die Helligkeit im Raum (PC-Arbeitsplatz Home Office) bedarfsgerecht regeln. Mein Enocean PIR von Eltako liefert mir regelmässig LUX-Werte in die Datenpunkte.
Jetzt habe ich mir gedacht, da könnte ich den PID-Adapter verwenden und der errechnet mir die nötige Dimmung für den Shelly. Soweit so gut, nur habe ich keine Beschreibung oder ein Beispiel gefunden wie ich die Daten per Blockly einfüllen und an den Shelly weiterleiten kann.
Kennt jemand eine deutsche Beschreibung, oder gar ein entsprechendes Beispiel?
Gruss Andi
-
@andibr
Der PID Adapter erhält seine Inputdaten über States. Diese kannst du in Blockly über "steuere" befüllen (ACK=false). NICHT mit aktualisiseren befüllen, da dies ACK=true setzt.Die Ausgangswerte des PID Adapters kannst du dann in Blockly weiter verarbeiten.
Spezielle Blocky Blöcke für den PID Adapter gibt es nicht.
-
Ich versuche es gerade, aber zwischendurch hängt sich das ganze irgendwie auf und dann geschieht gar nichts mehr.
Mit diesem Blockly ist es gerade mal so, dass wenn der Lux-Wert höher wird auch die Lampe heller wird. Ich habe gedacht dafür gibt es dann den Datenpunkt "inv", aber wenn ich dort ein "true" setze geht gar nichts mehr, egal was der Lux-Wert macht.
Wenn ich den "Use States..." entferne, geht auch gar nichts.
Leider bin ich in diesem Bereich absoluter Laie.
Andi
-
@fu_zhou
Hast du ev Zeit / Lust hier was zu sagen?
Ich hab im Moment leider zu wenig Zeit mich da wirklich einzudenken - und von Blockly hab ich außerdem keine AhnungDanke
-
@andibr Hallo Andi, kaum ist ein halbes Jahr rum... Ist das Thema noch aktuell? Dann können wir die Tage gemeinsam mal reinschauen...
-
Danke der Nachfrage, aktuell wäre es schon noch, aber der PIR mt Luxmeter drin hat den Betrieb quitiert. Aus welchen Gründen auch immer bekomme ich von dem trotz extrener Stromversorgung keine Funkprotokolle mehr. Somit muss ich mir zuerst ein neues Luxmeter besorgen.
Aktuell ist aber zuerst der Bau der PV-Anlage prioritär, damit ich endlich Geldsparen kann. -
@andibr Hallo Andi, deine Konfiguration in der PID-Instanz passt erst einmal, d.h. du musst die Parameter unter para in den Objekten als Wert eingeben oder kannst sie aus einem Skript beschreiben, diese Variante lassen wir jetzt hier aber mal weg. Ich würde noch den Haken bei "Sollwert ... ignorieren" setzen.
Eine Regler vergleicht einen Sollwert mit einem Istwert und verändert bei einer Abweichung das zugehörige Stellglied. In deinem Fall hast du einen Helligkeitssollwert in Lux, sagen wir mal 800. Diesen Wert gibst du als pid.0.Helligkeitsregler.in.set dem Regler vor. Entweder direkt ins Objekt schreiben oder z.B. über vis als Schieberegler oder als Ein-/Ausschalter mit Ein = 800 Lux und Aus = 0 Lux.
Die Einheit vom Sollwert muss natürlich zum Messwert (Helligkeit) passen, d.h. dein Luxmeter muss irgendwie 0-2000 Lux oder so in einem Objekt liefern. Diesen Wert übergibst du bei Änderung oder zyklisch dann als Istwert an den Regler pid.0.Helligkeitsregler.in.act. Hast du ja genauso in deinem Blockly schon gemacht. Warum du in dem Blockly aber den set point jedes mal auf "1" steuerst, wenn sich die Helligkeit ändert, verstehe ich nicht.Jetzt zum Stellglied = dein Dimmer.
Dein Blockly-Script dazu passt auch, dein Regler min/max unter para musst du entsprechend parametrieren. Wird der Dimmer mit 0-100% angesteuert, ist min 0, max 100. Wird der Dimmer als Beispiel mit 0=0% und 254=100% angesteuert, musst du 0 und 254 als min und max eintragen.Wenn jetzt im Zimmer 1100 Lux sind, weil die Sonne reinknallt, schiebt der Regler den Dimmer nach 0%, kommt jetzt eine Wolke und der Istwert fällt unter 800, schiebt der Regler den Dimmer Richtung 100%, um die Regelabweichung auszugleichen.
Fang mal mit einem Kp von 1 und einer Tn von 20 s an, Tv solltest du nicht brauchen und stellst erst mal auf 0. Wenn du von außen sehr starke Helligkeitsschwankungen erwartest, kann das Parametrieren einer Tv sinnvoll sein. Suche mal nach Ziegler-Nichols, wenn du da einsteigen möchtest.
Sup kann ich auch empfehlen mal auf 50 zu stellen, d.h. der Regler steuert den Dimmer nicht an, wenn der Istwert +- 50 vom Sollwert weg ist, also 750 - 850. In diesem Fall zeigt dann pid.0.Helligkeitsregler.out.supr "true". Sonst wird ständig der Dimmer angesteuert und er geht vielleicht kaputt.
Off kannst du bei 0 lassen.
Zum inv: hiermit wird der Reglerausgang invertiert, d.h. wenn der Regler mehr will, wird y kleiner. Wann braucht man das? Ein Wärmerückgewinnung kann z.B. im Sommer kühlen und im Winter heizen und über inv = false oder true sagt man dem Regler, ob er kühlen oder heizen kann => bleibt beim Helligkeitsregler auf "false".
-
@fu_zhou Vielen Dank für die Erklärungen. Ich habe es mal versucht, mit folgenden Werten:
Ab Blockly habe ich nur den obersten mal deaktiviert, damit da keine merkwürdigen Dinge geschenen würden, aber leider geschehenen sie doch. (Der Shelly will den Sollwert als 0-100%) erhalten).
Wenn ich nun beim "act" den Wert 2000 eingeben, geht der Shelly gleich auf die eingestellten 2% was auch korrekt ist. Wenn ich den Wert 749 eintrage, beginnt der Regler vom errechneten Wert an hoch zuzählen bis er bei 100% ist (kann ich auch auf dem Shelly nachvollziehen). Wenn ich hingegen den Wert 850 eintrage, springt der out auf 49 und verbleibt dort.
Ich gehe davon aus, dass ich da noch irgendwo was falsch gemacht habe, denn aus meiner Sicht sollte der PID doch bei nicht verändertem Wert "act" sich auch nicht verändern? Oder macht er das desshalb, weil sich der Wert nicht verändert und er "nachregeln" will?
Wie oben bereits geschrieben, für mich ist das alles irgendwie sehr Suspekt.
Vielen Dank für die Geduld -
@andibr Aktuell hast du supr = 50 parametriert. Act steht auf 750, set auf 800 => der Regler verändert den Ausgang y nicht. Bei einem Kp von 1 entspricht die Sprungantwort des P-Anteils 1:1, d.h. wenn sich der Istwert um 49 ändert, springt der Regler als Antwort um 49, dann setzt der I-Anteil (Nachstellzeit Tn) ein um die bleibende Regelabweichung eines reinen P-Reglers auszugleichen.
850 ist auch im sup - Bereich von 50, d.h. der Regler macht da nichts, weil sich der Wert ja nicht verändert. Wenn act gleich bleibt aber nicht dem Sollwert entspricht, erhöht oder verringert der Regler seinen Ausgang y weiter bis zu min/ max.Du bist mit deinem Testen aber auf dem richtigen Weg, um die Funktion nachzuvollziehen. Ich schlage Folgendes vor: Lass sup mal weg (auf 0 stellen). Da du den Istwert ja vorgibst, wird der nicht schwanken und der Shelly wird nicht alle paar Sekunden nachgesteuert. Aber du kannst Blockly ja deaktivieren, dann geht auch nix an den Shelly raus.
Stelle Kp mal auf 0.1 => die Sprungantwort ist bei einer Änderung von 50 nur noch 5%, lasse Tn bei 20 (s)
set auf 800, act auf 1000 => Regler schiebt nach unten bis auf die 2%
act auf 800, Regler ist auf 2% (min) => Es sollte eine Sprungantwort kommen von 200 * 0,1 = 20 => Regler springt auf 20% und bleibt da stehen, weil act und set = 800
Wenn du act auf 810 setzt, springt der Regler (y) auf 19 und läuft dann Richtung 2%
Wenn du act auf 790 setzt, springt der Regler (y) auf 21 und läuft dann Richtung 100%
Wenn du act auf 800 = set setzt bleibt der Regler (y) beim aktuellen Wert stehen.Probiere mal, ich habe das jetzt aus dem Kopf so runter geschrieben. Meine PID-Instanz lässt mich aktuell keinen neuen Regler hinzufügen, sonst hätte ich das mal genau so vorgetestet. Github Issue dazu gibt es schon... hängt am Admin 7.4.8
-
@fu_zhou
Ich habe mein Gedankenfehler begriffen: da ich ja kein echter Fühler mehr habe, muss ich ja den Istwert am "act" simulieren, und so lange der neben dem Zielwert "set" liegt korrigiert der PID aufwärts oder abwärts bis der Wert wieder erreicht wird.Sobald ich nämlich den act-Wert wieder auf 800 setze bleibt er stehen und macht nach verändern wieder weiter. Da ich ja den Istwert nicht mehr als "erreicht" eingetragen habe, ist der natürlich weitergelaufen abwärts oder aufwärts. Darum habe ich das irgendwie überhaupt nicht begriffen, jetzt muss ich dann, sobald ein neuer Lux-Meter da ist, mit den Parameter übrigen Parameter mal etwas herumspielen.
Vielen Dank