Ankündigung

Einklappen

Nicht vergessen: Das KNX-UF-Symposium by eib-tech in München am 3. November 2017!

Mehr anzeigen
Weniger anzeigen

Lüftersteuerung aus Basis Logikprozessor

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Lüftersteuerung aus Basis Logikprozessor

    Hallo zusammen,

    ich habe aktuell ein kleines Problem mit einer Konfiguration im Logikprozessor bzgl. meiner Lüftersteuerung. Hier erst mal der entsprechende Abschnitt der conf-Datei:
    Lueftersteuerung Logikprozessor_conf.txt

    Grundsätzlich funktioniert die Regelung an sich schon super, ich hänge aber noch an der Speicherung der richtigen Stufe sowie schalten der Buttons in der Cometvisu. Im Prinzip funktioniert die Schaltung so, dass jede "höhere" Stufe die niedrigere übersteuert, also wenn alle 3 Gas "0" sind läuft Stufe 1, wenn die GA für Stufe 2 oder 3 = "1" ist dann entsprechend Stufe 2 bzw 3 geschaltet, die GA für Stufe 0 schaltet bei "1" die komplette Anlage aus.

    Ganz konkret habe ich das Problem in "CWL300_Stufe_GA", dass für die Zeilen 220 bis 229

    Code:
    CWL300_Stufe_GA => { 
            receive => ['3/5/72','3/5/71','3/5/74'], 
            transmit => '1/0/210', 
            translate => sub { 
                if ($input->[0] == 1) {return "0"} 
                if ($input->[0] == 0 and $input->[1] == 0 and $input->[2] == 0) {return "1"} 
                if ($input->[0] == 0 and $input->[1] == 1 and $input->[2] == 0) {return "2"} 
                if ($input->[0] == 0 and $input->[2] == 1) {return "3"} 
                return undef;},
            debug=>1 },
    folgende Fehlermeldung im Log hochkommen

    Code:
     
     2017-08-13 15:02:16.759,Logikprozessor,config error: syntax error at (eval 66395) line 224, near "if {" syntax error at (eval 66395) line 225, near ";     		{" Global symbol "$input" requires explicit package name at (eval 66395) line 225. Global symbol "$input" requires explicit package name at (eval 66395) line 225. Global symbol "$input" requires explicit package name at (eval 66395) line 225. Global symbol "$input" requires explicit package name at (eval 66395) line 226. Global symbol "$input" requires explicit package name at (eval 66395) line 226. Global symbol "$input" requires explicit package name at (eval 66395) line 226. Global symbol "$input" requires explicit package name at (eval 66395) line 227. Global symbol "$input" requires explicit package name at (eval 66395) line 227. Can't use global @_ in "my" at (eval 66395) line 234, near "=@_" (eval 66395) has too many errors. ,0s,
    Weiterhin hab ich gerade keine passende Idee, wie ich das Schreiben der unterschiedlichen Werte in die verschiedenen GA-Stufen bewerkstellige, hier mein aktueller Code:
    Code:
    CWL300_Abschaltung => {
          fetch => ['3/5/202','3/5/203'],                                                                         
          transmit => '3/5/72',                                                                                    
          translate => sub { return 1 if 
              (($input->[0] > $input->[1]) && ($input->[0] > $solltemp)) || ($input->[0] < $ausschalttemp); 
              return undef;}, 
          debug=>1 },           
    
    #    Höhere Stufen einschalten
        #liest Stufe 0 und Zuluft  
        #CWL300 GA für Stufe 2 & 3  
        #Wenn Stufe 0 ausgeschaltet und Zuluft > $runterschalttemp dann Stufe 2 einschalten 
        #Wenn Stufe 0 ausgeschaltet und Zuluft > $runterschalttemp  und Abluft > $solltemp dann Stufe 3 einschalten
    
    CWL300_Stufe_2_schalten => {
          fetch => ['3/5/72', '3/5/202'],                                                                         
          transmit => ['3/5/71'],                                                                                
          translate => sub { return 1 if (($input->[0] == 0) && ($input->[1] > $runterschalttemp));                 
          return 0;}, 
          debug=>1 },    
    
    CWL300_Stufe_3_schalten => {
          fetch => ['3/5/72', '3/5/202', '3/5/203'],                                                                         
          transmit => ['3/5/74'],                                                                                
          translate => sub { return 1 if (($input->[0] == 0) && ($input->[1] > $runterschalttemp) && ($input->[2] > $solltemp));                 
          return 0;}, 
          debug=>1 },                                                                                                           
    
    #    Höhere Stufen ausschalten  
        #horcht auf Stufe 0   
        #CWL300 GA für Stufe 2 & 3 
        #Wenn Stufe 0 eingeschaltet wird dann Stufen 2 & 3 ausschalten
    
    CWL300_Stufe_0 => {
          receive => ['3/5/72'],                                                                                 
          transmit => ['3/5/71','3/5/74'],                                                                        
          translate => sub { return 0 if $input->[0] == 1; return undef;}, debug=>1 },
    Funktional ist das soweit zwar korrekt, aber mit dieser Config sind in der Cometvisu bspw. Stufen 2 & 3 beide aktiv:
    Bildschirmfoto 2017-08-13 um 15.27.53.png
    Letztendlich muß ich ja logischerweise bei bspw. Stufe 3 in die "Stufe3-GA" eine 1 und in alle anderen eine 0 schreiben, das krieg ich aber aktuell gerade nicht hin...

    Wäre super wenn jemand mir nen passenden Tip geben könnte!
    Gruß Hannatz

    #2
    Hmm, keiner eine Idee warum das $input ->[0] in der einen IF-Bedingung den Fehler schmeißt und in den anderen funktioniert?

    Kommentar


      #3
      Zitat von Hannatz Beitrag anzeigen
      Hmm, keiner eine Idee warum das $input ->[0] in der einen IF-Bedingung den Fehler schmeißt und in den anderen funktioniert?
      Der einzige Unterschied der mir auf die Schnelle auffällt wäre das "and" statt "&&" in der fraglichen Logik. Wenn es das nicht ist, dann evtl noch ein Problem mit (unsichtbaren) Sonderzeichen/Formatierung.

      VG
      Micha

      Kommentar

      Lädt...
      X