NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[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

StefanW
Elaborated Networks
Reactions:
Beiträge: 9750
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4867 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#11

Beitrag von StefanW »

Um das Missverständnis hier aufzuklären:

==> Unsere Logik ist nicht (alleine) für ein KNX System gerbaut.

- Der PID-Regler arbeitet also im vollen Wertebereich in der die LogikEngine arbeitet.

- Der Ausgang kann gleichzeitig auf vieles gamappt werden, wie KNX, Modbus, Zeitserie.

- Die Umrechnung erfolgt dann auf den Wertebereich der Variable, also bei KNX nach den Möglichkeiten des DPT, in Modbus nach dem Wertebereich der dortigen Varianbe (der ein anderer sein kann). Gerade bei Modbus könnte ja dort dann ein 0..20mA oder 4...20 mA Wert draus werden, also ganz andere Umrechnung aus der gleichen Berechnung.

- Mithin kann man damit Daten einmal berechnen und an ganz verschiedene Systeme schicken und in der jetzigen Form ist das so umgesetzt. Es ist klar, dass der Programmierer wissen muss, dass es hier noch eine Wandelung gibt

==> Wir werden daher die Anzeige auch abändern, sodass der Float-Wert - wie hier - im Doktormodus am Ausgang der Logik erscheint und nicht bei den Zielen, weil die bekommen das ja umgerechnet.

==> Wir werden diskutieren, ob man über einen Regler nachdenkt, der in festgelegten Wertebereichen arbeitet bzw. diese so umrechnet, dass man einen Ausgangswert hat, mit dem man als Mensch "mehr anfangen" kann.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

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

#12

Beitrag von Robosoc »

Danke Stefan, ich teste das gerade mal...

Drei Dinge sind mir dabei gerade aufgefallen (alle betreffen die Nutzbarkeit des LE auf einem IPad im Standard Safari
Browser)

1. Wenn man bei einer Custom Logik nachträglich den Namen oder die Beschreibung ändern will, muss man die Logik erneut eingeben.
2. In dem Editor Feld, in dem man Custom Logik eingibt, erscheinen bei einem langen Klick die Standardfunktionen wie auswählen, alles auswählen , kopieren etc. nicht. Das ist für Pad Nutzer sehr unbequem.
3. Ein wirklich häufiges Ansichtsproblem im TWS (einschließlich Grafana aber auch LE) ist, das man beim Aktivieren von indem Eingabefeld das eigentliche Eingabefeld oder den wichtigen Teil im DOS nicht mehr sehen kann, weil dann die Tastatur davor ist und man kann es häufig dann auch nicht während der Eingabe erscrollen.

Ja, ich weiß, ein iPad ist jetzt das ideale Gerät für Browserbasiertes Tools, aber ich denke dennoch sehr verbreitet und ich persönlich nutze es dennoch wirklich viel.

Vg, Sven

Hinzugefügt nach 13 Minuten :
StefanW hat geschrieben: Fr Mai 31, 2019 5:31 pm - Der PID-Regler arbeitet also im vollen Wertebereich in der die LogikEngine arbeitet.
Ich habe das jetzt nicht vollständig durchdacht, aber wäre es eventuell möglich und sinnvoll bei den Ausgangsfunktionen (Mapping, ausschaltverzögerung, einschaltverzögerung...) eine Skalierungsfunktion (Float Wertebereich wird auf eine eingebaute obere und untere Grenze skaliert) oder Ausgangrenze (Float Wertebereich wird auf eine eingebaute obere und untere Grenze begrenzt, also z.b. bei werten kleiner 0 die aus der Logik errechnet werden wird durch die Funktion am Ende immer 0 überschrieben)

Sowas könnte doch dann vermutlich allen interfaces helfen. :think: wie gesagt... ist nur eine Idee. Als ich festgestellt habe, dass der Regler im gesamten float Bereich arbeitet, dies aber aber nicht auf die dpt5 mit 0..100% skaliert wird , habe ich als erstes intuitiv bei den Ausgangsfunktionen geschaut und hatte es dann fast bei Mapping erwartet.

Was genau macht Mapping? Mit den True und False Einstellungen konnte ich mir bei meinem Floatausagang noch keine Reim bilden.

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

Gecks
Reactions:
Beiträge: 106
Registriert: Mi Okt 31, 2018 12:53 am
Hat sich bedankt: 116 Mal
Danksagung erhalten: 77 Mal

#13

Beitrag von Gecks »

Vielleicht ist es ja möglich die Werte an den Zielobjekten automatisch im richtigen Wertebereich anzuzeigen, je nach dem was für ein DPT dahinter steckt.

Oder, um es individueller zu gestalten, kann der Benutzer den Wertebereich auswählen. Bei Siemens Step7 oder TIA habe ich im Onlinemedus über einen Rechtsklick die Möglichkeit mir den Wert als REAL, INT, oder BIN anzeigen zu lassen. So könnte man doch selbst festlegen ob man das jetzt als 0...255, 0...100, 4...20, 0...10 oder sonst wie skaliert anzeigen lassen möchte. Wenn man Min- und Max-Wert frei wählen kann ist man maximal flexibel.

Das ganze natürlich ohne Auswirkung auf den echten Wert für's Objekt, nur zur Anzeige.
TWS 950 ID: 352, VPN offen, Reboot jederzeit

StefanW
Elaborated Networks
Reactions:
Beiträge: 9750
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4867 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#14

Beitrag von StefanW »

Danke für Euren guten und wertvollen Input, die Vorschläge sind durchaus denkbar und auch sinnvoll.

Ich muss das mit dem Team besprechen, ob wir das vor oder nach dem Release (also als 2.0) umsetzen. Ersteres hat weitere Verzögerungen in der Freigabe zur Folge.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#15

Beitrag von Robert_Mini »

Natürlich nach 1.0!
Ein paar Hinweise in die KB - fertig.

Ich finde der Logik Editor ist längst reif! Raus in die Beta, eine Runde Bug-Fixing => Release 1.0.

Für PID 2.0 dann parametrierbar den Bereich der Stellgröße bei dem angeschnitten wird (unten + oben) + Anti Wind-up, dann taugt dieser auch noch besser für Heizungen.

Lg
Robert
Zuletzt geändert von Robert_Mini am Sa Jun 01, 2019 1:47 pm, insgesamt 2-mal geändert.
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: 637 Mal
Danksagung erhalten: 775 Mal

#16

Beitrag von Robosoc »

Problem ist in Beta 25 gelöst:
Robosoc hat geschrieben: Sa Jun 01, 2019 8:15 am 1. Wenn man bei einer Custom Logik nachträglich den Namen oder die Beschreibung ändern will, muss man die Logik erneut eingeben.
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: 637 Mal
Danksagung erhalten: 775 Mal

#17

Beitrag von Robosoc »

Da ich mit dem PID-Regler so überhaupt nicht klar gekommen bin, habe ich mich mal ein wenig damit beschäftigt und mir zusammen mit dem Tiefpassfilter einen Simulations-Regelkreis aufgebaut. Dieser hat meinen Verdacht meines Erachtens auch bestätigt:
Der Code den Stefan K. oben gepostet hat, führt zwar schlussendlich zu einem Begrenzen zwischen 0% und 100%, aber er nutzt den Wertebereich -50 - +50 aus dem PID-Regler und verschiebt diesen auf auf 0%-100%.

Das bedeutet m.E. aber im Umkehrschluss, dass der Regler wenn es keine Regelabweichung gibt und der PID-Regler daher auf den Ausgangswert Wert 0 kommt, dass dann die Logik das Stellventil auf 50% fährt. Das konnte ich so auch nachstellen.

Ich würde jetzt mal als Laie behaupten das negative PID-Werte bei eine Heizungsregelung nur Sinn machen, wenn man auch aktiv Kühlen könnte. :think:

Meines Erachtens muss man daher den Wertebereich nicht verschieben und einfach nur mit den PID-Wertebereich 0 - 100 arbeiten (also Limiter ohne Polynom). Also etwa so. Zumindest komme ich so in meinem Tiefpasstest auf nachvollziehbare Ergebnisse.

Code: Alles auswählen

/**
 *  PID für Heizungssteuerung mit 0-100% Stellbereich
*/
{
	"Level": [
		["$Reference","float",20.0],
		["$Controlled","float",20.0],
		["$Manipulate","float",0.0],
		["$Kp","float",0],
		["$Ki","float",0],
		["$Kd","float",0],
		["$Konst100","float",100.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,[0,"$Konst100"]],		
	],
	"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"]
	]
}
Zuletzt geändert von Robosoc am Fr Sep 27, 2019 5:58 am, insgesamt 3-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: 559 Mal

#18

Beitrag von S. Kolbinger »

Hallo Sven,

erst mal vielen Dank, dass du dich an die - nicht ganz einfachen - Tests mit dem PID-Regler gewagt hast.
Robosoc hat geschrieben: Fr Sep 27, 2019 5:55 am Meines Erachtens muss man daher den Wertebereich nicht verschieben und einfach nur mit den PID-Wertebereich 0 - 100 arbeiten (also Limiter ohne Polynom). Also etwa so. Zumindest komme ich so in meinem Tiefpasstest auf nachvollziehbare Ergebnisse.
Das Thema Regelungstechnik ist komplex und ich muss zugeben, dass ich mich nach dem Studium nicht mehr oft damit beschäftigt habe.
Und so sind meine Erfahrungen damit auch meist theoretischer Natur.
So, genug des Vorwortes, jetzt zum eigentlichen Thema.

Der PID-Regler ist ein Standardbaustein in der Regelungstechnik der genau definiert ist: PID-Regler.
Nach diesen Vorgaben, habe ich den PID-Regler damals designed.

In einem stabilen, eingeschwungenem System, d.h. Soll- und Ist-Wert sind dauerhaft gleich, bestimmt lediglich der I-Anteil den Wert für die Stellgröße. So braucht man sich, zumindest in der Theorie, keine Gedanken über den Wertebereich der Stellgröße machen, da der I-Anteil über kurz oder lang schon dafür sorgt, dass der passende Stellgrößenwert erreicht wird, der genau den gewünschten Sollwert am Ende ergibt.
Damit man nach dem Start aber nicht so lange auf diesen eingeschwungenen Zustand warten muss, kann man den Wertebereich der Stellgröße auf einen für den jeweils spezifischen Fall angepassten Wertebereich abbilden. (Das war mein Ansatz in dem von dir erwähnten Beispiel)

Aber der Unterschied zwischen Theorie und Praxis ist ja bekanntlich in der Praxis größer als in der Theorie. ;-)
Und so gibt es im realen Betrieb ein noch viel gravierenderes Problem: Den Wind-Up-Effekt
Wenn die Stellgröße über längere Zeit in den Anschlag fährt, läuft der I-Anteil viel zuweit davon und es dauert dementsprechend lange, dass sich die Regelung anschließend wieder stabilisiert.

Lange Rede, kurzer Sinn:
Ab der nächsten Release wird es einen zweiten PID-Regler mit Anti-Wind-Up geben. Dort lassen sich auch die Unter- und Obergrenze der Stellgröße einstellen. Vielleicht wartest du lieber noch bis nächste Woche mit weiteren Tests, denn der neue PID-Regler ist deutlich stabiler.
Zuletzt geändert von S. Kolbinger am Fr Sep 27, 2019 9:13 am, insgesamt 1-mal geändert.
Gruß,
Stefan K.

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

#19

Beitrag von Robosoc »

S. Kolbinger hat geschrieben: Fr Sep 27, 2019 9:12 am Damit man nach dem Start aber nicht so lange auf diesen eingeschwungenen Zustand warten muss, kann man den Wertebereich der Stellgröße auf einen für den jeweils spezifischen Fall angepassten Wertebereich abbilden. (Das war mein Ansatz in dem von dir erwähnten Beispiel)
Ah, jetzt weiss ich was Du damit damals meintest. Alles klar.
S. Kolbinger hat geschrieben: Fr Sep 27, 2019 9:12 am Ab der nächsten Release wird es einen zweiten PID-Regler mit Anti-Wind-Up geben. Dort lassen sich auch die Unter- und Obergrenze der Stellgröße einstellen. Vielleicht wartest du lieber noch bis nächste Woche mit weiteren Tests, denn der neue PID-Regler ist deutlich stabiler.
Da freue ich mich sehr drauf, super.
Zuletzt geändert von Robosoc am Fr Sep 27, 2019 9:29 am, insgesamt 2-mal geändert.
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: 637 Mal
Danksagung erhalten: 775 Mal

#20

Beitrag von Robosoc »

Falls Jemand Lust und Zeit hat hier mitzudenken (ich habe mich vorher noch nicht mit Regelungstechnik beschäftigt, mache also ganz sicher noch einige Fehler):

Um ein wenig klarer mit dem Verhalten vom PID-Regler zu werden habe ich mir einen Test Regelkreis gebaut. Das hilft mir natürlich auch dann, wenn der neue PID-Regler mit Anti-WindUp kommt, weil dann schon ein wenig Grundverständnis habe. Ich versuche eine Regelstrecke so nachzubilden, dass Sie das gleiche Verhältnis hat, wie auf der Internetseite Simulation eines Regelkreises und Regelkreis PID Regler einstellen mittels Sprungantwort.

Meine Regelstrecke besteht aus zwei hintereinander geschalteten PT1-Elementen mit K1=1, K2=1, T1=20 und T2=100. (im TWS also zwei Tiefpassfiilter hintereinander). Für den PID-Regler verwende ich die Einstellungen nach Chien/Hrones/Reswick: Kp=14, Ki=0.09, Kd=75
Begrenzung U min = 0 und U max = 1

Die doppelte PT1-Regelstrecke im TWS verhält sich exakt wie auf der Internetseite. Das konnte ich in Grafana perfekt nachstellen.

Das Verhalten des Kreises ist aber noch nicht ganz identisch (nur sehr ähnlich) und im Moment habe ich noch keinen Ansatz, warum. :think:

Dies ist das erwartete Verhalten, welches ich von der Internetseite entnehme:
Bild

Und so verhält sich meine Logik im TWS:
Bild

Zunächst scheint alles ganz normal, beide Regler (Internetseite und TWS) liegen etwas über 8, sind aber ja begrenzt auf 1. Der Ausgangswert des PID-Reglers (U) reduziert sich ähnlich stetig, aber beim TWS langsamer und folglich schwingt er da auch nicht bis auf 0 runter. Dass der TWS ein langsameres Verhalten hat, als die Simualtion auf der Internetseite habe ich noch nicht ganz verstanden. Es wird bestimmt irgendeinen Grund haben (eventuell ist es ein Ergebnis der Abtastung von nur 1x pro Sekunde, die ich durch den Trigger eingestellt habe).

Code: Alles auswählen

/**
 *  PID  Test mit 2x Tiefpass  V0.1
*/
{
  "Level":[
    ["$P_Filtertime1","float",20],
    ["$P_Filtertime2","float",100],
    ["$Period","float",1],
    ["$W","float",0],
    ["$Y","float",0],
    ["$dummy1","float",0],
    ["$dummy2","float",0],
    ["$dummy3","float",0],
    ["$Manipulate","float",0],
    ["$Kp","float",0],
    ["$Ki","float",0],
    ["$Kd","float",0],
    ["$Konst100","float",100],
    ["$Konst1","float",1],
    ["$ConstTRUE","bool",true],
    ["$Stopwatch_Start","bool",false],
    ["$Stopwatch_Zeit","integer",0],
    ["$U","float",0]
  ],
  "Module":[
    ["Clocksignal","$ConstTRUE",0,"$Period"],
    ["Comparator" , "$W" , "$Stopwatch_Start" , 0],
    ["Stopwatch","$Stopwatch_Start", "$Stopwatch_Zeit"],
    ["PID controller","$W","$Y","$Manipulate","$Kp","$Ki","$Kd"],
    ["Limiter","$Manipulate","$U",0,[0,"$Konst1"]],
    ["Lowpass","$U","$dummy2","$P_Filtertime1"],
    ["Lowpass","$dummy2","$Y","$P_Filtertime2"]
  ],
  "Input":[
    ["Soll","Soll-Wert","$W","c"],
    ["Kp","Proportional-Term","$Kp","u"],
    ["Ki","Integral-Term","$Ki","u"],
    ["Kd","Diverential-Term","$Kd","u"]
  ],
  "Output":[
    ["IST","Ist-Wert / Ergebnis","$Y","a"],
    ["U","PID-Ausgang / Stellgröße / Regler-Wert","$Manipulate","a"],
    ["ULimit","PID-Ausgang / Stellgröße / Regler-Wert","$U","a"],
    ["Laufzeit","Laufzeit seit Soll > 0","$Stopwatch_Zeit","a"]
  ]
}
Bild
Zuletzt geändert von Robosoc am Fr Sep 27, 2019 10:51 am, insgesamt 6-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Logikengine & Logik-Editor“