UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[Gelöst] Erste Versuche mit LE - PID-Regler

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

Erste Versuche mit LE - PID-Regler

#1

Beitrag von Robosoc »

Moin,

ich versuche mich gerade testweise am experimentellen LE und habe mir dazu den PID-Regler vorgenommen. Drei Dinge sind mir aufgefallen (eventuell noch Hinweise auf Bugs oder Verbesserungsmöglichkeiten?):

Bild

1.
Mein als Ausgang gewähltes Objekt K-270 ist in der ETS und durch den Import folglich auch im TWS mit DPT 5.001 (0...100%) hinterlegt, das habe ich mehrfach überprüft. Der LE zeigt die Werte im Diagnosemodus (Doktormodus) aber dennoch scheinbar in absoluten Zahlen an. Ich hätte erwartet, dass da dann Prozentwerte angezeigt werden. Siehe Screenshot roter Kreis. Ist das noch ein Bug oder mache ich einen Gedankenfehler?
Auch Grafana zeigt mir hier nur absolute Werte an, wenn ich den Grafanabutton im LE Diagnosemodus klicke.

Der KNX Busmonitor liefert jedoch Prozentwerte -> in dem aktuellen Fall erwartete 100%, weil die 25°C Solltemperatur ja deutlich über der aktuellen Raumtemperatur liegen.


2.
Die mit blau eingekreiste Zahl irritiert mich dazu. Die Regel habe ich heute gegen grob 8:00 Uhr erstellt. Seit dem ist von keiner PA ein Wert auf den Bus geschrieben worden. Ich habe im Doktormodus mal manuell 25°C eingegeben um zu sehen, was denn so passiert. Das hat soweit funktioniert. Anschließend habe ich ausversehen das Taskfenster geschlossen. Ich bin mir recht sicher, dass ich die Logik vorher nicht gespeichert habe.
Als ich dann in einem neuen Taskfenster wieder in den LE gegangen bin, standen die 25°C noch immer in der Logik. Das heißt mein zu Testzwecken manuell eingegebene Wert bleibt auch dauerhaft anliegen obwohl er nicht auf den Bus geschrieben wird? Das verhalten war für mich erst überraschend, ist aber für mich jetzt nachvollziehbar.

Woran erkenne ich denn nun aber, dass die Logik grundsätzlich wieder auf Bussignale reagiert und der manuell eingegebene Wert nicht die Logik einfriert. Ich nehme an, dass erzeuge ich grundsätzlich per Klick auf das orange hinterlegt X, in dem Popoup, zur Eingabe manueller Werte. Aber es gibt kein optisches Feedback, dass jetzt wieder der nächste vom Bus gesendete Werte übernommen wird. In meinem Fall wird der Sollwert leider nicht zyklisch gesendet, weil die Zeitschaltuhr im Inzennio Z41 diese Möglichkeit m.E. nicht bietet.

3.
Deaktiviert man den Doktor-/Diagnosemodus, so bleibt die Logik dennoch vollständig aufgeklappt mit allen letzten Werten und der kleinen Grafik unterhalb der Logik sichtbar. Lediglich das grüne Stetoskopzeichen neben der Logic-ID verschwindet und der Diagnosebutton wechselt von grün auf grau. Die Werte sind nicht mehr anklickbar. Ich hätte erwartet, dass aber auch alle Anzeigewerte wieder verschwinden, so dass ein optischer Zustand hergestellt wird, wie wenn man eine Logik nach dem öffnen des LE oder nach dem Anlegen sieht. Das wäre dann aus meiner Sicht konsequenter und aufgeräumter.

VG,
Sven
Zuletzt geändert von Robert_Mini am Fr Mai 31, 2019 11:00 am, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#2

Beitrag von S. Kolbinger »

Hallo Sven,
Robosoc hat geschrieben: Do Mai 23, 2019 9:11 am 1.
Mein als Ausgang gewähltes Objekt K-270 ist in der ETS und durch den Import folglich auch im TWS mit DPT 5.001 (0...100%) hinterlegt, das habe ich mehrfach überprüft. Der LE zeigt die Werte im Diagnosemodus (Doktormodus) aber dennoch scheinbar in absoluten Zahlen an. Ich hätte erwartet, dass da dann Prozentwerte angezeigt werden. Siehe Screenshot roter Kreis. Ist das noch ein Bug oder mache ich einen Gedankenfehler?
Auch Grafana zeigt mir hier nur absolute Werte an, wenn ich den Grafanabutton im LE Diagnosemodus klicke.
Die Logik-Engine (LE) kennt nur reine Zahlen (ohne Einheit). Der Grafana-Link im Debug-Modus spiegelt die Sichtweise des LE wider.
Die Umwandlung in die DPT-spezifische Darstellung, mit der impliziten physikalischen Einheit, erfolgt ausschließlich im KNX-Daemon/-Logger.
Wenn du also, zusätzlich zum KNX-Objekt K-270, noch eine Zeitserie als Ziel hinzufügen würdest, würde in dieser Zeitserie tatsächlich der Wert "92911,75" abgespeichert. Mit anderen Worten: Der Wert "92911,75" wird einmal an den KNX-Daemon/-Logger geschickt, wo er an den Wertebereich des DPTs (255 <=> 100%) angepasst wird, und zum anderen an die Zeitserie gesendet, die diesen Wert in seiner ursprünglichen abspeichern kann und auch macht.
Robosoc hat geschrieben: Do Mai 23, 2019 9:11 am 2.
...
Woran erkenne ich denn nun aber, dass die Logik grundsätzlich wieder auf Bussignale reagiert und der manuell eingegebene Wert nicht die Logik einfriert. Ich nehme an, dass erzeuge ich grundsätzlich per Klick auf das orange hinterlegt X, in dem Popoup, zur Eingabe manueller Werte. Aber es gibt kein optisches Feedback, dass jetzt wieder der nächste vom Bus gesendete Werte übernommen wird. In meinem Fall wird der Sollwert leider nicht zyklisch gesendet, weil die Zeitschaltuhr im Inzennio Z41 diese Möglichkeit m.E. nicht bietet.
Die Logik reagiert, parallel zu den manuell eingegebenen Werten, auch immer auf die Objekt-Werte (hier: "Bussignale") solange der Eingang nicht abgekoppelt wurde:
Gekoppelt: Bild / Abgekoppelt: Bild (Zum Wechseln der Zustände auf das Symbol klicken)
Ein automatisches Wiederherstellen der Werte nach beenden des Debug-Modus wird nicht gemacht. Es kann ja durchaus beabsichtigt sein, dass der manuell eingegebene Wert erhalten bleiben soll. Es gibt Überlegungen, dieses Verhalten in Zukunft zu verändern.
Aktuell muss man, will man den ursprünglichen Wert restaurieren, den alten Wert vor dem Beenden des Debug-Modus manuell schreiben.
Robosoc hat geschrieben: Do Mai 23, 2019 9:11 am 3.
Deaktiviert man den Doktor-/Diagnosemodus, so bleibt die Logik dennoch vollständig aufgeklappt mit allen letzten Werten und der kleinen Grafik unterhalb der Logik sichtbar. Lediglich das grüne Stetoskopzeichen neben der Logic-ID verschwindet und der Diagnosebutton wechselt von grün auf grau. Die Werte sind nicht mehr anklickbar. Ich hätte erwartet, dass aber auch alle Anzeigewerte wieder verschwinden, so dass ein optischer Zustand hergestellt wird, wie wenn man eine Logik nach dem öffnen des LE oder nach dem Anlegen sieht. Das wäre dann aus meiner Sicht konsequenter und aufgeräumter.
Das sehe ich auch so, und steht auch so auf der Liste, aber weit hinten in der Prio. :roll:

Trotzdem viel Spaß beim Ausprobieren.
Gruß,
Stefan K.

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#3

Beitrag von Robosoc »

Alles klar, danke. Jetzt habe ich auch den Grund für die Stecker (gekoppelt und abgekoppelt) verstanden. Das ist eine gute Lösung!
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#4

Beitrag von Robosoc »

S. Kolbinger hat geschrieben: Do Mai 23, 2019 1:50 pm Der Wert "92911,75" wird einmal an den KNX-Daemon/-Logger geschickt, wo er an den Wertebereich des DPTs (255 <=> 100%) angepasst wird
Hallo Stefan,

Bist Du Dir sicher, dass Der Wert im KNX-Daemon umgewandelt wird, bzw. Dass das korrekt geschieht? Mein PID Regler regelt im gesamten Wertebereich, dass kann ich in Grafana sehen. Aber bisher bleibt der absolute Wert immer im hohe negativen Bereich. skaliert auf 0-100% hätte ich jetzt dann aber erwartet, dass 10 bis 15% in der Knx Adresse ankommen sollte. Tut es aber nicht.

Vg, Sven
Zuletzt geändert von Robosoc am Mi Mai 29, 2019 5:09 am, insgesamt 2-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#5

Beitrag von S. Kolbinger »

Hallo Sven,
Robosoc hat geschrieben: Di Mai 28, 2019 9:48 pm ...
Bist Du Dir sicher, dass Der Wert im KNX-Daemon umgewandelt wird, bzw. Dass das korrekt geschieht? Mein PID Regler regelt im gesamten Wertebereich, dass kann ich in Grafana sehen. Aber bisher bleibt der absolute Wert immer im hohe negativen Bereich. skaliert auf 0-100% hätte ich jetzt dann aber erwartet, dass 10 bis 15% in der Knx Adresse ankommen sollte. Tut es aber nicht.
...
Klar bin ich mir sicher, ich hab's doch programmiert ;)

Aber ich glaube zu wissen, wo hier das Missverständnis liegt.
Es wird nicht der maximale Wertebereich von "float" (-3.4E+38 ... 3.4E+38) auf 0-100% abgebildet, sondern die Zahl am Ausgang (Stellwert) ist bereits der Zielwert (nur ohne die Einheit; hier: [%]) und wird, je nachdem welcher DPT das Ziel hat, bestmöglichst angepasst.

Wenn also das Zielobjekt den DPT 5.001 (0% ... 100%) hat, geschieht die Anpassung folgendermaßen:
Float-WertDPT 5.001
X < 0.0->0 (0%)
0.0 <= X <= 100.0->0 .. 255 (0% .. 100%)
X > 100.0->255 (100%)
Ziel sollte es in deinem Fall sein, den Stellwert im Bereich von 0 bis 100 zu halten.
Die Werte für die Parameter Ki und Kd sind auf die Zeiteinheit von einer Sekunde normiert, d.h. Ki wird mit Einheit [1/s] und Kd mit [1s] angenommen.
Da sich die Temperaturen bei einer Heizungssteuerung eher langsam ändern (mehrere Minuten bis Stunden), würde ich für einen guten Startwert von Ki einen Wert von 0.0001 ... 0.001 nehmen.
Den Kd-Wert würde ich zu Anfang auf 0 setzen und erst mal als reinen PI-Regler betreiben. Erst wenn man gute Werte für Kp und Ki gefunden hat und der Stellwert sicher im Bereich 0..100% liegt, würde ich, falls noch nötig, vorsichtig an der Kd-Schraube drehen.
Gruß,
Stefan K.

jockel
Reactions:
Beiträge: 424
Registriert: Mo Aug 13, 2018 6:31 pm
Hat sich bedankt: 192 Mal
Danksagung erhalten: 147 Mal

#6

Beitrag von jockel »

Sehr schön dargestellt, wäre vielleicht auch etwas für die Knowledgebase!

Und es gilt wie immer: Regler parametrisieren ist häufig eher Kunst als Wissenschaft... Der D-Anteil des Reglers soll ja die Reaktion auf schnelle Änderungen ermöglichen, daher denke ich auch nicht, dass er bei einer Regelung der Raumtemperatur benötigt wird!
TWS 2500 ID: 145 + 1x TP-UART + 2x DS9490R, VPN geschlossen, Reboot nach Absprache / wiregate198 (im Ruhestand)

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#7

Beitrag von Robert_Mini »

jockel hat geschrieben: Mi Mai 29, 2019 11:25 pm Sehr schön dargestellt, wäre vielleicht auch etwas für die Knowledgebase!
Gerade notiert.
(Falls jemand Lust/Zeit hat: Mithilfe in der Logik Doku für die KB gerne erwünscht ;) ).

In jedem Fall helfen Rückmeldungen und kurze Beschreibungen zu Logiken als Basis für die KB.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#8

Beitrag von Robosoc »

Danke auch von meiner Seite. Habe es verstanden und spiele jetzt mit den Einstellungen und kann das von Dir beschriebene Float zu DPT5.001 jetzt bestätigen. Das hatte ich weiter oben missverstanden!

VG, Sven
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#9

Beitrag von Robert_Mini »

Setze das mal auf gelöst.

@S. Kolbinger:
Heißt das, dass am Ausgang der Logik der gesamte Float bereicht dargestellt wird und erst bei der Konvertierung in den DPT auf 0 -100% beschränkt wird und dann auf 0-255 bei DPT 5.001 umgerechnet wird?

Oder ist das nur im Doctormodus so?

Ich finde das ein wenig verwirrend (und ungewöhnlich), schöner wäre es, wenn der Reglerausgang schon auf 0-100% gekappt wird, da ein Reglerausgang > 100 und <0 ja keinen Sinn macht.

Robert
Zuletzt geändert von Robert_Mini am Fr Mai 31, 2019 11:04 am, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#10

Beitrag von S. Kolbinger »

Hi Robert,
Robert_Mini hat geschrieben: Fr Mai 31, 2019 11:00 am Heißt das, dass am Ausgang der Logik der gesamte Float bereicht dargestellt wird und erst bei der Konvertierung in den DPT auf 0 -100% beschränkt wird und dann auf 0-255 bei DPT 5.001 umgerechnet wird?
Das ist korrekt. Die Logik-Engine -- genau wie auch der Dispatcher -- berücksichtigen nicht die eventuellen Einschränkung des Zielobjektes, z.B. durch den DPT.
Robert_Mini hat geschrieben: Fr Mai 31, 2019 11:00 am Ich finde das ein wenig verwirrend (und ungewöhnlich), schöner wäre es, wenn der Reglerausgang schon auf 0-100% gekappt wird, da ein Reglerausgang > 100 und <0 ja keinen Sinn macht.
Da gebe ich dir vollkommen Recht. Umso mehr es in dem beschriebenen Fall zu einem wegdriften des Stellwertes durch den Integral-Anteil kommen kann, falls diese Einschränkung dem Regler nicht bekannt sind.

Um es ganz klar zu sagen:
Der PID-Regler wie er aktuell auswählbar ist, ist ein universeller Regler und möglichst allgemein gehalten.
Will man damit eine brauchbare Heizungsregelung realisieren, sind noch weitere Bausteine notwendig.
Wie du bereits erwähnt hast, muss man in der Logik eine Bereichseinschränkung des Stellwerts entsprechend des verwendeten Stellglieds vornehmen. Eventuell auch eine Offsetanpassung auf eine mittlere Einstellung (am besten nahe dem Wert für den eingeschwungenen Zustand der Regelung).

Ich werde mal eine erste Heizungsregel-Logik zusammenstellen. Könnte aber ein bis zwei Tage dauern, bin gerade noch anderweitig ( :angry-argument: ) beschäftigt ;)

Hinzugefügt nach 50 Minuten 29 Sekunden:
Noch nicht der Weisheit letzter Schluss, aber damit sollte es schon mal besser gehen:

Code: Alles auswählen

{
	"Level": [
		["$Reference","float",20.0],
		["$Controlled","float",20.0],
		["$Manipulate","float",0.0],
		["$Kp","float",0],
		["$Ki","float",0],
		["$Kd","float",0],
		["$Konst50","float",50.0],
		["$Konst1","float",1.0],
		["$Out","float",0.0],
		["$VAR<Inhibit?>", "bool", false]
	],
	"Module": [
		["Break", ["$VAR<Inhibit?>"]  ],
		["PID controller","$Reference","$Controlled","$Manipulate","$Kp","$Ki","$Kd"],
		["Limiter","$Manipulate","$Manipulate",0,["-$Konst50","$Konst50"]],
		["Polynomial","$Manipulate","$Out",["$Konst50","$Konst1"]]		
	],
	"Input": [
		["Soll","Soll-Wert","$Reference","c"],
		["Ist","Ist-Wert","$Controlled","a"],
		["Kp","Proportional-Term","$Kp","u"],
		["Ki","Integral-Term","$Ki","u"],
		["Kd","Diverential-Term","$Kd","u"],
		["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ]
	],
	"Output": [
		["Stell","Stellgröße","$Out","a"]
	]
}
Gruß,
Stefan K.
Antworten

Zurück zu „Logikengine & Logik-Editor“