Ankündigung

Einklappen
Keine Ankündigung bisher.

Regler-Plugin für Heizung ohne PWM-Ausgabe?

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

    [wiregate] Regler-Plugin für Heizung ohne PWM-Ausgabe?

    ich suche nach einem Regler-Plugin, das statt einem PWM-Wert einfach nur jeweils an oder aus an den Aktor sendet.
    Hintergrund ist, dass ich einen "einfachen" Aktor verwenden möchte (elektronische Relais), der keine PWM-Regelung erlaubt.

    Gibt es da schon etwas Fertiges? Bisher konnte ich nur Regler finden, die PWM-Ausgabe machen...
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    #2
    Um bei der Suche zu helfen:

    Dich stört, dass die Regler den Stellwert in Prozent ausgeben. Was Du suchst ist ein PI-Regler, der diesen Wert dann als PWM ausgibt.

    Dazu kannst Du ein einfaches Plugin schreiben, dass den prozentualen Stellwert in ein PWM verwandelt (also den Part übernimmt, den sonst das bisschen Intelligenz im Heizungsaktor macht).

    Oder Du nimmst einen Zweipunkt-Regler.

    (Der ist halt nicht so hipp wie ein PI-Regler, aber deutlich besser als sein Ruf)
    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


      #3
      Zitat von Chris M. Beitrag anzeigen
      Was Du suchst ist ein PI-Regler, der diesen Wert dann als PWM ausgibt.
      Heißt das, dass der dann trotzdem 1 und 0 im Sekundentakt schickt (so schnell öffnen und schließen ja die Ventile gar nicht), oder in handlichen Zeiträumen von x Minuten ?
      Wenn letzteres der Fall ist dann suche ich sowas

      Gibt es den besagten Zweipunkt-Regler schon irgendwo als Plugin?
      Gruß -mfd-
      KNX-UF-IconSet since 2011

      Kommentar


        #4
        Zitat von mfd Beitrag anzeigen
        Gibt es den besagten Zweipunkt-Regler schon irgendwo als Plugin?
        Hi,

        schau mal >hier< zumindest gibt es da einen PI-Regler

        lg Werner
        KNX, DMX, 1Wire, WireGate, CometVisu

        Kommentar


          #5
          es gibt auch irgendwo im SVN ein Plugin für meine Zirkulationspumpe. Da ist ein PWM Teil integriert, Zykluszeit und Prozentwert eingeben und ein paar Zeilen löschen. Fertig.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            @ Chris M.
            Würdest du den beschriebenen "PWM-Teil" evtl. mit in dein Multi-RTR Plugin übernehmen? Das wäre ganz große Klasse.
            Bestimmt könnte ich das (irgendwann) auch selber schaffen, aber im Moment sind einfach zu viele neue Baustellen offen um mich mit Perl auseinanderzusetzen.
            OT:
            Als da wären XML/JS/CSS bezügl. CV
            Und die Kleinigkeit mit den "Icons" muss noch nebenbei erledigt werden...
            Von den Baustellen im restlichen Leben ganz zu schweigen
            -OT Ende-

            Aber ich verstehe auch wenn es nicht klappt, dann bleibt die Heizung erstmal auf manuell/off oder ich muss mir irgendwann einen anderen Aktor kaufen.
            Gruß -mfd-
            KNX-UF-IconSet since 2011

            Kommentar


              #7
              Irgendwo hatten wir das schonmal, dacht ich mir gerade..
              Hats aber wohl nicht ins SVN geschafft, nach ein bisschen Suche fand ich folgendes:

              PWM-Ausgabe
              Code:
              # Demo-Plugin PWM->1Bit
              # V0.1 2011-07-02
              
              ### Definitionen 
              ### Hier werden die Werte/Gruppenadressen definiert
              my $pwm_value = "14/7/63";       # Gruppenadresse für Stellantrieb 8bit/1Byte DPT5.001
              my $ventil_ga_1bit = "14/5/65";  # Gruppenadresse für Stellantrieb 1bit
              my $taktzeit = 5;               # Taktzeit in Minuten für schaltenden Stellantrieb-Regler
              my $resolution = 5;             # Basis-Aufloesung in %
              ### Ende Definitionen
              
              # Eigenen Aufruf-Zyklus setzen
              $plugin_info{$plugname.'_cycle'} = $taktzeit*60/(100/$resolution); # 5% resolution
              
              if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $pwm_value) {
                  #sollwert vom bus
                   if (!defined $msg{'value'}) { 
                      # falls GA/DPT nicht importiert
                      $msg{'value'} = decode_dpt5($msg{'data'}); 
                   } 
                   $plugin_info{$plugname.'_pwm_value'} = $msg{'value'};
              } else {
                  #zyklischer aufruf
                  $plugin_subscribe{$pwm_value}{$plugname} = 1;
              }
              
              my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(time);
              
              my $calc = $minute % $taktzeit;
              #my $wakeup; # wakeup intelligent
              if ($calc/$taktzeit*100<$plugin_info{$plugname.'_pwm_value'}) {
                  knx_write($ventil_ga_1bit,1,1); # Ventilstellung auf den Bus schreiben
                  return; # "An $calc";
              } else {
                  knx_write($ventil_ga_1bit,0,1); # Ventilstellung auf den Bus schreiben
                  return; # "Aus $calc";
              }
              Völlig ungetestet, liest sich aber schlüssig
              Mach ich, wenns geht dann mal ins SVN

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

              Kommentar


                #8
                @makki

                Es scheint auf Anhieb auch schonmal was zu funktionieren.
                Zumindest bekomme ich bei PWM <50% schon ein AUS und >50% EIN.

                Allerdings fällt mir im Gruppenmonitor auf, dass relativ viel Traffic anfällt.
                Alle 15 Sekunden werden unmittelbar hintereinander 2 Telegramme gesendet. Da scheint was noch nicht zu passen.

                Ich mache mich mal auf die Suche aber bisher fehlt mir bei Perl noch

                Edit: Jetzt kommt das Telegramm alle 7,5 Sekunden (was an der Anzahl ja nichts ändert...)
                Edit Edit: Mein Fehler - ich hatte da was doppelt gemoppelt drin...
                Trotzdem kommt das Telegramm im Schnitt alle 15 Sekunden
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  #9
                  Zwischenstand:
                  Ich habe jetzt mal eine Zeit lang mitgeloggt, die Regelung an sich scheint zu funktionieren, es werden die Ein- und Ausschaltperioden passend zur PWM länger und kürzer. Allerdings sind die Intervalle an sich zu kurz - sollte ja 5min Zeitbasis sein - diese liegen aber so zwischen 1-3 Minuten.
                  Und es wird eben mindestens alle 15 Sekunden ein Telegramm ausgegeben.
                  Gruß -mfd-
                  KNX-UF-IconSet since 2011

                  Kommentar


                    #10
                    Zitat von mfd Beitrag anzeigen
                    Heißt das, dass der dann trotzdem 1 und 0 im Sekundentakt schickt (so schnell öffnen und schließen ja die Ventile gar nicht), oder in handlichen Zeiträumen von x Minuten ?
                    Sowohl als auch.

                    Ein PWM wird dadurch definiert, dass man eine Frequenz festlegt und dann per Prozent-Wert nur noch das Tastverhältnis moduliert.
                    Die Frequenz kann durchaus auch bei 100 Kiloherz liegen (z.B. bei einem DC/DC-Wandler, den ich kenne...) oder bei 1x alle 15 Minuten (typisch für thermische Stelltriebe bei einer Heizung).
                    Zitat von mfd Beitrag anzeigen
                    Wenn letzteres der Fall ist dann suche ich sowas
                    Sag ich doch
                    Zitat von mfd Beitrag anzeigen
                    Gibt es den besagten Zweipunkt-Regler schon irgendwo als Plugin?
                    Keine Ahnung.
                    Aber wenn ich mich recht erinnere, war das erste Plugin überhaupt, die Demo von Makki, ein Schwellwertschalter. Das ist eigentlich nichts anderes.

                    Schwellwertschalter mit Hysterese als Zweipunkt-Regler heißt:
                    Fällt die Raumtemperatur unter Soll minus Hysterese-Wert => Heizung an
                    Steigt die Raumtemperatur über Soll plus Hysterese-Wert => Heizung aus

                    Vorteil des Zweipunkt-Reglers: auch ohne Parametrier-Aufwand (man muss nur einen Hysterese-Wert festlegen, je kleiner um so besser, zu klein wirkt sich höchstens schlecht auf die Buslast aus) kommt man zu einem schnellen Regler.
                    Nachteil: er schwingt um den Soll-Wert in der Höhe des Hysterese-Wertes...
                    Zitat von mfd Beitrag anzeigen
                    @ Chris M.
                    Würdest du den beschriebenen "PWM-Teil" evtl. mit in dein Multi-RTR Plugin übernehmen?
                    Nein, leider nicht. Ich kann weder testen (da ich einen Heizungsaktor habe und der die PWM selber intern erzeugt) noch habe ich gerade die Zeit dafür.
                    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


                      #11
                      Probiere mal das hier. Du musst in Zeile 19 noch den richtigen DPT eintragen, den hab ich jetzt nicht rausgesucht. Ich hab das auch nicht getestet sondern nur mal kurz so zusammengefasst.

                      Code:
                      ###PWM-Regler
                      #v0.1 2012-11-10
                      #JuMi2006 - > https://knx-user-forum.de
                      
                      ### MAIN ### 
                      # Variablen definieren
                      
                      my $base_time = 15 ; 		#in Minuten
                      my $regler_ga = "0/0/0"; 	#Stellwert vom Regler -> Achtung in Zeile 19 "DPT" durch den richtigen DPT ersetzen
                      my $send_ga = "0/0/0";		#GA vom Schaltaktor
                      
                      
                      ### MAIN / VERARBEITUNG
                      ### PWM ###
                      
                      $plugin_subscribe{$regler_ga}{$plugname} = 1;
                      $plugin_info{$plugname.'_cycle'} = 60;
                      my $time = time();
                      my $on_perc = knx_read($regler_ga,DPT); #hier wird der Stellwert in % gelesen;
                      
                      my $on_time = (($base_time/100)*$on_perc);
                      my $off_time = ($base_time - $on_time);
                          
                      $on_time *= 60;     #Minuten in Sekunden umrechnen
                      $off_time *= 60;    #Minuten in Sekunden umrechnen
                      
                      
                      if ($plugin_info{$plugname.'_state'} eq 'pwm-off')                #status = aus
                      {
                          if  (($plugin_info{$plugname.'_stat-time'} + $off_time) <= $time) #zyklus aus ist vorbei
                          {
                          #ANSCHALTEN
                          knx_write($send_ga,1,1.001);
                          #STATUS = EIN setzen
                          $plugin_info{$plugname.'_state'} = 'pwm-on';
                          #ANZEIT = jetzt
                          $plugin_info{$plugname.'_stat-time'} = $time;
                          } else {
                      	#Senden wiederholen#
                      	#knx_write($send_ga,0,1.001);
                      	}
                      } else {}
                      
                      
                      if ($plugin_info{$plugname.'_state'} eq 'pwm-on')                #status = an
                      {
                          if  (($plugin_info{$plugname.'_stat-time'} + $on_time) <= $time) #zyklus an ist vorbei
                          {
                          #AUSCHALTEN
                          knx_write($send_ga,0,1.001);
                          #STATUS = AUS setzen
                          $plugin_info{$plugname.'_state'} = 'pwm-off';
                          #AUSZEIT = JETZT
                          $plugin_info{$plugname.'_stat-time'} = $time; 
                          } else {
                      	#Senden wiederholen#
                      	#knx_write($send_ga,1,1.001);
                      	}
                      } else {}
                      
                      if (($plugin_info{$plugname.'_stat-time'} + $on_time + $off_time) <= $time)	#initialisierung
                      {
                          #ANSCHALTEN
                          knx_write($send_ga,1,1.001);
                          #STATUS = EIN setzen
                          $plugin_info{$plugname.'_state'} = 'pwm-on';
                          #ANZEIT = jetzt
                          $plugin_info{$plugname.'_stat-time'} = $time;
                          plugin_log($plugname, "INITIALISIERUNG nach Abwesenheit");
                      } else {}
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        Zitat von JuMi2006 Beitrag anzeigen
                        Probiere mal das hier. Du musst in Zeile 19 noch den richtigen DPT eintragen, den hab ich jetzt nicht rausgesucht.
                        Ich habe als DPT 5 eingeragen. (Sollte laut anderen Plugins so passen).
                        Allerdings bekomme ich keine Ausgabe auf die Schaltaktor-GA.
                        Gruß -mfd-
                        KNX-UF-IconSet since 2011

                        Kommentar


                          #13
                          Ich habe jetzt auch noch ein anderes Beispiel gefunden:
                          https://knx-user-forum.de/forum/supp...wiregate/17197

                          Aber Problem hier ist identisch wie bei dem Code von makki - der Bus ist voller Heizungsaktor-Spam. Mindestens alle 25 Sekunden wird hier auf die entsprechende(n) GA geschrieben.

                          Das MultiRTR Plugin dagegen verhält sich von den Zeiten einwandfrei.

                          Würde es nicht reichen pro Mindest-Schaltperiode (z.B. 7,5 oder 15 Min) oder überhaupt erst bei Zustandswechsel auf die GA zu schreiben?

                          Edit:
                          Wenn ich das ohne Vorkenntnisse richtig gerechnet habe kommen hier:
                          Code:
                              $min_cycle = ceil( min( $min_cycle, $this_controller{'CycleMinutes'}*60/100*$this_controller{'ResolutionPercent'} ) );
                          die 22,5 bzw. 23 Sekunden zustande mit denen sich die Ausführungszeit berechnet (ResolutionPercent ist 5 und CycleMinutes 7.5)
                          Gruß -mfd-
                          KNX-UF-IconSet since 2011

                          Kommentar


                            #14
                            Jow, ist so, das könnte man optimieren aber jetzt mal ehrlich: wenn einem nicht gerade langweilig ist, wir haben für den KNX bezahlt, der kann mind. 25-30 tps (praktisch, nicht theoretisch)
                            Wenn da alle 22sek ein überflüssiges Telegramm drüberhuscht ist das zwar nicht ausgetunded, würde aber erst ab 500 RTR das nachdenken anfangen

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

                            Kommentar


                              #15
                              Zitat von mfd Beitrag anzeigen
                              Ich habe als DPT 5 eingeragen. (Sollte laut anderen Plugins so passen).
                              Allerdings bekomme ich keine Ausgabe auf die Schaltaktor-GA.
                              Ich hab das knx_read bei mir zum Test einfach mal durch nen festen Wert ersetzt da ich im Moment nix habe was 0-100 sendet. Hier tut es genau das was es soll. Ein Telegramm zum Statuswechsel.
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X