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

LE: Universeller RTR

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

LE: Universeller RTR

#1

Beitrag von Robosoc »

Hier teile ich einmal meine Gedanken und Arbeit zu einem universellen RTR ( Raumtemperaturregler), was gleichzeitig meine erste Customer-Logik ist :dance: .

Ich würde mich freuen, wenn der Eine oder Andere hier mitmacht und mitdenkt ... denn es soll ja ein universeller Baustein werden. Ich habe sicher auch nicht alles perfekt gemacht (ist ja mein erster Custom-Versuch). Und vielleicht kann ElabNet das Ergebnis ja später in die Bibliothek aufnehmen.

Hier erstmal meine Gedankenskizze (kann ich hier irgendwo Powerpoint-Dateien hinterlegen, damit man in einer gemeinsamen Datei arbeiten könnte?):
[hsimg]ext/dmzx/imageupload/files/96da7f1957d3 ... 551f28.jpg[/hsimg]
Bild

Soweit mein Code:

Code: Alles auswählen

/**
 *  RTR V1.0
*/
{
  "Level":[
    ["$Switch","bool",false],
    ["$CompSwitch","bool",false],
    ["$Alarm_Temp", "bool",false],
    ["$dummyTrue","bool",true],
    ["$dummyFalse","bool",false],
    ["$VAR<TempIn!>","float",15],
    ["$watchdogTime","integer",360],
    ["$Status","bool",false],
    ["$internStatus","bool",false],
    ["$TempCompInaktiv","float",18],
    ["$Reference","float",20],
    ["$Controlled","float",20],
    ["$Manipulate","float",0],
    ["$Kp","float",0],
    ["$Ki","float",0],
    ["$Kd","float",0],
    ["$Konst50","float",50],
    ["$Konst1","float",1],
    ["$Out","float",0]
  ],
  "Module":[
    ["Comparator","$Reference","$CompSwitch","$TempCompInaktiv"],
    ["And",["$CompSwitch","$Switch"],"$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
    ["Break",["-$Status"]],
    ["Monoflop","$VAR<TempIn!>",0,"$internStatus","$watchdogTime",1],
    ["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
    ["Multiplexer",["$dummyTrue",0],"$Alarm_Temp","$internStatus"],
    ["Break",["-$Status"]],
    ["Statistic",["$VAR<TempIn!>"],0,0,"$Controlled",0],
    ["PID controller","$Reference","$Controlled","$Manipulate","$Kp","$Ki","$Kd"],
    ["Limiter","$Manipulate","$Manipulate",0,["-$Konst50","$Konst50"]],
    ["Polynomial","$Manipulate","$Out",["$Konst50","$Konst1"]],
    ["Comparator","$Out","$internStatus",0],
    ["Multiplexer",["$internStatus","$dummyTrue"],"$Status","$internStatus"]
  ],
  "Input":[
    ["Sw","Schalter","$Switch","c"],
    ["TempIn","Temperatur Messung","$VAR<TempIn!>","a"],
    ["Const_TempInaktiv","Schwellwert ob Regelung notwendig","$TempCompInaktiv","u"],
    ["watchdogTime","Überwachungszeit","$watchdogTime","u"],
    ["Soll","Soll-Wert","$Reference","c"],
    ["Kp","Proportional-Term","$Kp","u"],
    ["Ki","Integral-Term","$Ki","u"],
    ["Kd","Diverential-Term","$Kd","u"]
  ],
  "Output":[
    ["Stell","Stellgröße","$Out","a"],
    ["FuehlerAlarm","bei 1 kein Temperaturwert innerhalb der Überwachungszeit","$Alarm_Temp","c"],
    ["Status","HK aktiv oder inaktiv","$Status","a"]
  ]
}
Erste Tests waren vielversprechend!

Aber sobald ich einen zweiten Temperatureingang wähle, lässt sich die Logik nicht mehr ausführen (Ich habe einige Räume, in denen ich das gerne nutzen würde).

Noch ein Hinweis: Der Ausgang Heizkreis-"Status" soll bewusst nicht einfach nur eine Rückmeldung zum Ausführen des Eingang "Schalter" sein. Der Status soll unterm Strich anzeigen, ob das Ventil offen ist oder nicht. In einer weiteren Logik würde ich dann z.B. über ein OR-Baustein aus allen Heizkreis-Stati ermitteln, ob die Umwälz-Pumpe der Fußbodenheizungen laufen muss oder nicht.

Was mir auch noch fehlt sind gute Initial PID-Werte für eine
  • Luft-Temperatur-Regler
  • Estrich-Temperatur-Regler
Zuletzt geändert von Robosoc am So Sep 15, 2019 7:53 am, insgesamt 4-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

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

#2

Beitrag von StefanW »

Hallo Sven,

eine sehr schöne Arbeit! Super.

==> Wir nehmen das am Ende gerne in die Liste der Bausteine auf, das ist ja auch der Sinn der Sache

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.
Benutzeravatar

773H
Reactions:
Beiträge: 428
Registriert: Mo Okt 15, 2018 9:24 pm
Hat sich bedankt: 103 Mal
Danksagung erhalten: 208 Mal

#3

Beitrag von 773H »

Hallo.
Für Komfortanwendungen braucht man noch eine Möglichkeit zur Sollwertumschaltung (Nachtabsenkung, daheim, unterwegs, Party, ...)
Für einfache Anwendungen (FBH, elektrisch) reicht evtl. ein Zweipunktregler.

Gruss
Stephan
TWS 2500 ID:677, PBM ID:495 & ID:632, TWS 2500 ID:574, TWS 2500 ID:220, PBM ID:1022, VPN offen, Neustart kein Problem

andy_m
Reactions:
Beiträge: 78
Registriert: Mo Aug 13, 2018 1:38 pm
Hat sich bedankt: 36 Mal
Danksagung erhalten: 49 Mal

#4

Beitrag von andy_m »

Hi Sven,
aus gegebenem Anlass (mein Wiregate hat sich verabschiedet, nach 9 Jahren bravem Dienst), möchte ich die RTR Funktion jetzt auf den TW ziehen. Könntest Du mal einen Screenshot von einem fertig 'beschalteten' Baustein zeigen!? Welche Werte hast Du z.B. für den PID Regler benutzt, etc.
Ich muss gestehen, ich kenne mich mit dem LE noch nicht viel aus :(

Gruß Andy

PS: Zum Thema Diagramme online, schau Dir das mal an: https://www.draw.io/
Zuletzt geändert von andy_m am Mi Sep 18, 2019 10:08 pm, insgesamt 1-mal geändert.
Wiregate #187 *RIP*, TWS 2600er #175 + PBM 3x80 Lizenz
Wartungs-VPN auf Nachfrage offen, Reboot nach Rückfrage

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

#5

Beitrag von Robosoc »

Ich bin hier aufgrund fehlender Zeit noch nicht viel weiter.

Die Sensorüberwachung schmeiss ich am Wochenende raus und realisiere Sie separat. Dazu habe ich ja einen eigen Thread laufen. Eine AntiWindUp Funktion habe ich implementiert (ganz simpler Schwellwertschalter).

Und ich habe noch keine Pid Regler Einstellungen, die was taugen.daran bin ich schon vor einigen Monaten gescheitert und in den letzten Tagen nochmal. Also natürlich probiere ich erstmal nur einen PI Regler. Stephan‘s (773H) Meinung oben, bei FBH könnte ein Zweipunktregler reichen kann ich nicht teilen. Ich denke dafür ist meine Temperaturmessung im Estrich viel zu träge. Vielleicht würde es bei Anlegefühlern passen.

S. Klobiger hatte uns ja vor Monaten einen skalierbaren (mit Vorlage 0-100%) PID Regler gebastelt, den ich in meiner RTR Logik auch eingebunden habe. Dabei hat er auch beschrieben, dass der TWS PID Regler im Sekundentakt arbeitet, wir also niedrige Ki werte verwenden müssen, eher bei 0,001 bis 0,0001. Das konnte ich nachvollziehen, dachte ich.

Zuletzt habe ich mal versucht meine RTR-Einstellungen aus dem Wiregate Server umzusetzen (Plugin Multi-RTR, ich glaub geschrieben vom User ChrissM , welches letztlich auch PI Regelung macht), die bei mir ausreichend brauchbare Ergebnisse liefern. Dort verwende ich z.B. für die Estrichregelung ein proportionalGain von 3 und eine IntegralTime von 160. Wenn ich es richtig verstehe skaliert der Multi-RTR aber die Zeit durch Multiplikation mit 60auf Minuten.

Demnach müsste man meines Erachtens im TWS ein Kp von 1/3 und ein Ki von 1/(60x160) nehmen um auf ein gleiches Ergebnis zu kommen. Kd= 0. aber das Ergebis war bei mir ein so krasser Überschwinger, dass ich erstmal die Überhitzungsshwelle programmiert habe :doh:

Lange Rede, wenn jemand mal gute Ideen für erste PI Einstellungen hat, gerne her damit
Zuletzt geändert von Robert_Mini am Mi Sep 18, 2019 11:02 pm, insgesamt 1-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: 635 Mal
Danksagung erhalten: 775 Mal

#6

Beitrag von Robosoc »

andy_m hat geschrieben: Mi Sep 18, 2019 10:06 pm PS: Zum Thema Diagramme online, schau Dir das mal an: https://www.draw.io/
Sehr interessant, danke
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#7

Beitrag von Dragonos2000 »

Robosoc hat geschrieben: So Sep 15, 2019 7:45 am Aber sobald ich einen zweiten Temperatureingang wähle, lässt sich die Logik nicht mehr ausführen (Ich habe einige Räume, in denen ich das gerne nutzen würde).
Hast Du eingrenzene können wo es herkommt? Ich tippe mal auf das Monoflop/Watchdog.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

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 »

Dragonos2000 hat geschrieben: Mi Sep 18, 2019 11:05 pm Hast Du eingrenzene können wo es herkommt? Ich tippe mal auf das Monoflop/Watchdog.
Ja, ist geklärt. Kann nicht gehen. Siehe
https://forum.timberwolf.io/viewtopic.php?f=24&t=1425
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

#9

Beitrag von Robosoc »

andy_m hat geschrieben: Mi Sep 18, 2019 10:06 pm Könntest Du mal einen Screenshot von einem fertig 'beschalteten' Baustein zeigen!?
Fall Dir das jetzt schon hilft (PI Einstellung ist ein reiner Spielwert und funktioniert nicht gut!!!):
Bild
Die binären Ausgänge habe ich noch nicht verschaltet, die schaue ich mir im Moment noch rein im Dok-Modus an.

Der aktuelle Code, den ich aber noch ändern werde (habe die MonoflopZeile, die nicht funktionieren wird, hier einfach auskommentiert) ist Folgender:

Code: Alles auswählen

/**
 *  RTR V1.1
*/
{
  "Level":[
    ["$Switch","bool",false],
    ["$CompSwitch","bool",false],
    ["$Alarm_Sensor", "bool",false],
    ["$Alarm_MaxTemp", "bool",false],
    ["$dummyTrue","bool",true],
    ["$dummyFalse","bool",false],
    ["$VAR<TempIn!>","float",15],
    ["$watchdogTime","integer",360],
    ["$Status","bool",false],
    ["$internStatus","bool",false],
    ["$TempCompInaktiv","float",18],
    ["$TempCompMaxWarm","float",30], 
    ["$Reference","float",20],
    ["$Controlled","float",20],
    ["$Manipulate","float",0],
    ["$Kp","float",0],
    ["$Ki","float",0],
    ["$Kd","float",0],
    ["$Konst50","float",50],
    ["$Konst1","float",1],
    ["$Out","float",0]
  ],
  "Module":[
    ["Comparator","$Reference","$CompSwitch","$TempCompInaktiv"],
    ["And",["$CompSwitch","$Switch"],"$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
    ["Break",["-$internStatus"]],
//["Monoflop","$VAR<TempIn!>",0,"$internStatus","$watchdogTime",1],
    ["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
    ["Multiplexer",["$dummyTrue","$dummyFalse"],"$Alarm_Sensor","$internStatus"],
    ["Break",["-$internStatus"]],
    ["Statistic",["$VAR<TempIn!>"],0,0,"$Controlled",0],
    ["Comparator","$Controlled","-$internStatus","$TempCompMaxWarm"],
    ["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
    ["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
    ["Multiplexer",["$dummyTrue","$dummyFalse"],"$Alarm_MaxTemp","$internStatus"],
    ["Break",["-$internStatus"]],
    ["PID controller","$Reference","$Controlled","$Manipulate","$Kp","$Ki","$Kd"],
    ["Limiter","$Manipulate","$Manipulate",0,["-$Konst50","$Konst50"]],
    ["Polynomial","$Manipulate","$Out",["$Konst50","$Konst1"]],
    ["Comparator","$Out","$internStatus",0],
    ["Multiplexer",["$dummyFalse","$dummyTrue"],"$Status","$internStatus"]
  ],
  "Input":[
    ["Sw","Schalter","$Switch","c"],
    ["TempIn","Temperatur Messung","$VAR<TempIn!>","a"],
    ["Const_TempInaktiv","Schwellwert ob Regelung notwendig","$TempCompInaktiv","u"],
    ["Const_TempMax","Schwellwert, ob Temperatur zu hoch","$TempCompMaxWarm","u"],
    ["watchdogTime","Überwachungszeit","$watchdogTime","u"],
    ["Soll","Soll-Wert","$Reference","c"],
    ["Kp","Proportional-Term","$Kp","u"],
    ["Ki","Integral-Term","$Ki","u"],
    ["Kd","Diverential-Term","$Kd","u"]
  ],
  "Output":[
    ["Stell","Stellgröße","$Out","a"],
    ["FuehlerAlarm","bei 1 kein Temperaturwert innerhalb der Überwachungszeit","$Alarm_Sensor","c"],
    ["HitzeAlarm","bei 1 zu Hohe gemessene Temperatur","$Alarm_MaxTemp","c"],
    ["Status","HK aktiv oder inaktiv","$Status","a"]
  ]
}
Zuletzt geändert von Robosoc am Do Sep 19, 2019 6:29 am, insgesamt 1-mal geändert.
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

#10

Beitrag von Gecks »

@Robosoc im Studium erinnere ich mich daran Mal was von Reglereinstellungen gehört zu haben :geek:
Irgendwas mit Übertragungsfunktion und Sprungantwort. Da gibt es auch ein paar praktische Möglichkeit um näherungsweise die pasenden Werte zu finden. Auf die Schnelle habe ich von Honeywell folgendes PDF gefunden.
https://www.google.com/search?q=honeywe ... metrierung
Da gab es aber noch ne andere Faustformel :?: Vielleicht dämmert es mir noch :idea:
TWS 950 ID: 352, VPN offen, Reboot jederzeit
Antworten

Zurück zu „Logikengine & Logik-Editor“