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

  • JuMi2006
    antwortet
    Ja ist klar, ich hab dem knx_read kein Alter mitgegeben...das sollte es sein:
    0 = Alter egal
    Code:
    my $on_perc = knx_read($regler_ga,0,DPT);

    Einen Kommentar schreiben:


  • mfd
    antwortet
    @JuMi2006
    Also laufen tut dein Plugin jetzt. Werte für den Schaltaktor kommen auch nur bei Zustandswechsel.
    Aber dafür macht die 8bit-Ausgabe jede Menge Traffic.

    Es steht beim 8bit-Wert immer 2x "Lesen" und darauf 2x "Antwort" (innerhalb von ca. 5 Sekunden)?
    Und von sich aus "Schreiben" tut der 8bit Wert noch dazu alle 1 Minuten...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Bei kleiner basetime zum testen kommt es durch Sekundenbruchteile evtl. zu einem leichten Fehlverhalten, das sollte sich aber im Bereich der Heizunggssteuerung (basetime > 15) relativieren. Durch plugin_cycle = 60 ist das ganze eben auf einen Aufruf pro Minute begrenzt, sollte aber bei einer (trägen) Heizungssteuerung keine Rolle spielen ob dann mal 14,15 oder 16 Minuten ein Stellventil offen bleibt.

    Einen Kommentar schreiben:


  • mfd
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    Hier tut es genau das was es soll. Ein Telegramm zum Statuswechsel.
    Ich werde das gleich nochmal testen. Es gab wohl auch noch ein Problem bei mir dass die DPT nicht (richtig) verarbeitet wurde.
    Siehe:
    https://knx-user-forum.de/forum/supp...wiregate/19059

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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.

    Einen Kommentar schreiben:


  • makki
    antwortet
    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

    Einen Kommentar schreiben:


  • mfd
    antwortet
    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)

    Einen Kommentar schreiben:


  • mfd
    antwortet
    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.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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 {}

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    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.

    Einen Kommentar schreiben:


  • mfd
    antwortet
    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.

    Einen Kommentar schreiben:


  • mfd
    antwortet
    @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

    Einen Kommentar schreiben:


  • makki
    antwortet
    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

    Einen Kommentar schreiben:


  • mfd
    antwortet
    @ 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.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X