Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche Plugin für Differenztemperaturregelung

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Suche Plugin für Differenztemperaturregelung

    wie es der Titel schon sagt suche ich ein Plugin für das WG das in Abhängigkeit zweier Temperaturwerte einen Aktor (GA) ansteuert. Eine (einstellbare?) Hysterese wäre dabei wünschenswert.

    Im Prinzip also genau das was z.B. eine einfache Solarregelung (Vergleich von Kollektor- und Puffertemperatur) zur Ansteuerung einer Pumpe macht.
    Also: Wenn Temp1 um 5°C höher als Temp2 -> GA=1

    Leider konnte ich kein vorhandenes Plugin im SVN finden was etwas ähnliches anbietet. Auch die Forensuche war erfolglos, dabei kann ich mir kaum vorstellen, dass so etwas noch nie zuvor umgesetzt wurde. Oder ist das Problem zu banal?
    ...oder ich zu blind zum Suchen...?
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    #2
    Hallo Marco

    Ich verwende zu diesem Zweck (und für viele andere Aufgaben) Frys Logikprozessor.

    Nachfolgend eine Regel, die ich einsetze, bis der Installateur (endlich) die Steuerung der Solaranlage in Betrieb setzt. Sie ist in der CONF-Datei des Logikprozessor einzutragen:

    Code:
            SolaranlageEinschalten    => { debug=> 1, 
                transmit=>'3/1/65', # GA Schalter
                receive=>[ 
                '7/0/220',     #0: GA Temp Kollektor hinten
                '7/0/219',     #1: GA Temp Speicher unten
                '7/0/216',     #2: GA Temp Solar VL
                '7/0/217',     #3: GA Temp Solar RL
                ], translate =>sub{
                    if (    (($input->[0]) > ($input->[1])) and         #Kollektortemp höher als Speichertemp
                            (($input->[2]) > ($input->[3]))            #Temp VL grösser als Temp RL 
                        )
                         {return 1;}        #einschalten
                    else {return 0;}        #ausschalten 
                }
            },

    Gruss
    Diego

    Kommentar


      #3
      Achso, daran hatte ich jetzt gar nicht gedacht. Das werde ich ausprobieren.
      Leider fehlen mir ein wenig die notwendigen Programmierkenntnisse um mir selbst solche schicken Conf-Einträge zu basteln.

      Ich habe bei meiner Anwendung nur zwei Temperaturfühler zur Verfügung und würde/müsste mit einer Hysterese arbeiten.
      Wie müsste das dann angepasst werden, kannst du mir da ein bisschen Hilfestellung geben?
      Gruß -mfd-
      KNX-UF-IconSet since 2011

      Kommentar


        #4
        Gerne versuche ich Dir zu helfen. Ausgehend von Deiner im Posting #1 formulierten Regel " Wenn Temp1 um 5°C höher als Temp2 -> GA=1" würde ich mein Plugin wie folgt anpassen (ungetestet):

        Code:
        TempAbhaengigEinschalten    => { [URL="http://redaktion.knx-user-forum.de/lexikon/debug/"]debug[/URL]=> 1,
                      transmit=>'3/1/65', # [URL="http://redaktion.knx-user-forum.de/lexikon/GA/"]GA[/URL] Schalter
                      receive=>[   
                      '7/0/220',     #0: [URL="http://redaktion.knx-user-forum.de/lexikon/GA/"]GA[/URL] Temp1
                      '7/0/219',     #1: [URL="http://redaktion.knx-user-forum.de/lexikon/GA/"]GA[/URL] Temp2
                      ], translate =>sub{
                         if (    (($input->[0]) - ($input->[1])) > 5 and       #TempUnterschied grösser 5
                             )
                              {return 1;}        #einschalten                 
                              else {return 0;}        #ausschalten
                      }         },
        Beim Einsatz des Logikprozessors wird vorausgesetzt, dass die verwendeten GA in der Datenbank Eibgaconf eingetragen sind.

        Hoffentlich klappt es so.
        Gruss
        Diego

        Kommentar


          #5
          Gibts auch in "einfach"
          Open Automation / Code / [r2167] /wiregate/plugin/generic/Schwellwert

          Angeraten sei in solchen Fällen aber immer der PI(D)-Regler, gibts auch mehrfach im SVN..

          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            @Fechter65
            werde ich ausprobieren.

            @makki
            das Schwellwert-Plugin hatte ich bereits gefunden, allerdings schaltet man damit ja immer in Abhängigkeit von einer festen Größe (Sollwert) sofern ich das richtig verstanden habe.
            Bei mir sind es ja zwei variable Größen (Temperaturen + Hysterese) wie oben beschrieben...
            Oder habe ich da was übersehen?
            Gruß -mfd-
            KNX-UF-IconSet since 2011

            Kommentar


              #7
              Nun, es gibt auch mehrere PI(D)-Regler-Plugins (in Unterschiedlichen Komplexitäts-Stufen), die sich anpassen lassen sollten bzw. evtl sogar direkt deinen Zweck erfüllen:

              Open Automation / Code / [r2167] /wiregate/plugin/generic/PI-Regler
              Open Automation / Code / [r2167] /wiregate/plugin/generic/PWM_Regler.pl
              Open Automation / Code / [r2167] /wiregate/plugin/generic/Heizungsregler.pl
              (Den PID von ChrisM finde ich gerade nicht, gibts aber auch als Weiterentwicklung von #1)

              Makki
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar


                #8
                Leider sehe ich mich was perl angeht nicht in der Lage aus einem PI(D) Regler ein für mich passendes Plugin zu erstellen.
                Ich bin schon froh wenn ich den Config-Teil jeweils passend eintragen kann .

                Wenn ich das richtig sehe müsste ich aus der 8bit Ausgabe eine 1bit machen. Ich habe ja nur EIN/AUS.
                Allerdings ist mir nicht so ganz klar was ein PID-Regler in meinem Fall für einen Nutzen hat. Es gibt ja nichts vorherzusehen, da sich beide Temperaturen laufend und mehr oder weniger schnell und nicht vorhersehbar ändern können.
                Es könnte aus meiner Sicht höchstens Sinn machen eine Mindestdauer für EIN/AUS für die GA/Pumpe (z.B. 1 Min.) festzulegen.
                Ist aber wohl durch die Trägheit der Temperaturänderung an den Sensoren nicht zwingend notwendig.
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  #9
                  Plugin-Versuch

                  ich habe mal gewagt aus verschiedenen vorhandenen Plugins etwas zusammenzukopieren
                  Vielleicht kann ein "perlkundiger" von euch da mal kurz drübergucken ob das so theoretisch überhaupt funktionieren kann.

                  Code:
                  # Differenztemperatur-Plugin
                  # Steuerung einer Solarpumpe über Kollektor- und Speicherfühler
                  # V0.1 2014-04-25
                  
                  ### Definitionen
                  
                  my $kollektortemp_ga = "15/7/10";  # Gruppenadresse Kollektortemperatur
                  my $speichertemp_ga = "15/7/11";  # Gruppenadresse Speichertemperatur
                  my $dt_e = 6;     # Einschalttemperaturdifferenz (Voreinst. 6 Kelvin)
                  my $dt_a = 4;     # Ausschalttemperaturdifferenz (Voreinst. 4 Kelvin)
                  my $pumpe_ga = "15/7/12";  # Gruppenadresse Pumpe
                  
                  # Eigener Aufruf-Zyklus - Kleinstes Schaltintervall für die Pumpe (Voreinst. 60 Sek.)
                  $plugin_info{$plugname.'_cycle'} = 60;
                  
                  ### Ende Definitionen
                  
                  # Plugin an Gruppenadressen "anmelden"
                  $plugin_subscribe{$kollektortemp_ga}{$plugname} = 1;
                  $plugin_subscribe{$speichertemp_ga}{$plugname} = 1;
                  
                     
                  if (knx_read($kollektortemp_ga,300,9) >= ($dt_e + knx_read($speichertemp_ga,300,9)) and $plugin_info{$plugname.'_merker_dt_e1'} ne 1) {
                     knx_write($pumpe_ga,1,1);
                     $plugin_info{$plugname.'_merker_dt_e1'} = 1;
                  } elsif (knx_read($kollektortemp_ga,300,9) < ($dt_a + knx_read($speichertemp_ga,300,9)) and $plugin_info{$plugname.'_merker_dt_e1'} eq 1) { 
                     knx_write($pumpe_ga,0,1);
                     $plugin_info{$plugname.'_merker_dt_e1'} = 0;
                  }
                  
                  return;
                  Gruß -mfd-
                  KNX-UF-IconSet since 2011

                  Kommentar


                    #10
                    Also beim Regelungstechnik-Studium: da hab ich auch gefehlt

                    Aber zum Perl/Plugin-Teil ein paar Hinweise:

                    - du ruft es zyklisch alle 60s auf, meldest es jedoch an den GA's an, das ist irgendwie doppelt gemoppelt..
                    Der Rest ist soweit sinnig (Syntax ungetestet)

                    Makki
                    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                    -> Bitte KEINE PNs!

                    Kommentar


                      #11
                      Muss diese Sache leider nochmal ausgraben.
                      Wie verhält es sich wenn alle Temperaturwerte für die Regelung aus dem Wiregate (1wire-Sensoren) kommen? Gilt es dabei etwas bestimmtes zu beachten? Ich bilde mir ein irgendwo bzgl. Plugins mal etwas von einer Einschränkung bei "Wiregate-Werten" gelesen zu haben...
                      Gruß -mfd-
                      KNX-UF-IconSet since 2011

                      Kommentar


                        #12
                        Du musst nur aufpassen die Werte aus dem Cache zu lesen (was das , 300 ja macht).

                        Korrektur: Dazu ist ", 0" zu verwenden. Bei ", 300" könnte immernoch der Wert nicht im Cache liegen und per Read angefordert werden
                        Zuletzt geändert von Chris M.; 28.12.2015, 22:59. Grund: Korrektur
                        TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                        Kommentar


                          #13
                          Ok, wußte da war was .

                          Wie sieht das mit der Zykluszeit aus, wenn ich das Plugin bspw. alle 60 Sekunden aufrufe, dann nützt es ja wenig wenn die Temperaturwerte deutlich älter sind. Müßte man dann im WG selbst ein kürzeres Abfrageintervall für die entsprechenden Sensoren einstellen und/oder einfach im Plugin das "300" durch "60" o.ä. ersetzen?
                          Gibt es da eine offizielle Vorgehensweise?

                          P.S: der oben gepostete Code funktioniert so nicht 1:1. Da sind zumindest in der Syntax ein paar Fehler...
                          Gruß -mfd-
                          KNX-UF-IconSet since 2011

                          Kommentar


                            #14
                            Deswegen 300 = 5 Minuten. Wenn es ein neueren Wert gibt, dann kommt der schon aus dem Cache. Nur falls es aus irgend welchen Gründen gerade keinen gibt, dann hast Du 300 Sekunden Zeit bevor der Wert aktiv gelesen wird.
                            TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                            Kommentar


                              #15
                              Da habe ich mich wohl etwas falsch ausgedrückt, das mit den 300 Sekunden / 5min war mir schon soweit klar.
                              Wie stelle ich aber am elegantesten einigermaßen sicher, dass zu jedem Aufruf des Plugins jeweils ein aktueller Wert zur Verfügung steht?

                              Wenn meine Regelung z.B. alle 60 Sek. überprüfen soll brauche ich ja jeweils den "oberen" und "unteren" Wert aktuell, sonst macht das ganze ja keinen Sinn...

                              Reicht dafür dann
                              Code:
                               
                               (knx_read($kollektortemp_ga,60,9)
                              ?
                              Gruß -mfd-
                              KNX-UF-IconSet since 2011

                              Kommentar

                              Lädt...
                              X