Ankündigung

Einklappen
Keine Ankündigung bisher.

Logic Queued läuft voll

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

    Logic Queued läuft voll

    Hallo, ich habe folgendes Problem. Mein Logic Queued läuft voll.

    hatte erst eine Schleife in Verdacht, aber das war es nicht. Es ist eine Logik mit der ich meine 1-Wire Senoren vom Esera-Controller auslese.

    Die Daten bekomme ich über den UDP-Listener 0.7

    Mein Baustein zerlegt ihn dann und teilt ihn Internenvariablen zu. In Summe sind es ca. 30 Sensoren.

    Hier mal der Code von dem Baustein der den String zerlegt.

    ###[DEF]###
    [name = Esera-Auswertung ]

    [e#1 =String ≠[leer] ]
    [e#2 =Suchstring 1 ]
    [e#3 =Suchstring 2 ]
    [e#4 =Suchstring 3 ]
    [e#5 =Suchstring 4 ]
    [e#6 =Suchstring 5 ]
    [e#7 =Suchstring 6 ]
    [e#8 =Suchstring 7 ]
    [e#9 =Suchstring 8 ]
    [e#10 =Suchstring 9 ]
    [e#11 =Suchstring 10 ]
    [e#12 =Suchstring 11 ]
    [e#13 =Suchstring 12 ]
    [e#14 =Suchstring 13 ]
    [e#15 =Suchstring 14 ]
    [e#16 =Suchstring 15 ]
    [e#17 =Suchstring 16 ]
    [e#18 =Suchstring 17 ]
    [e#19 =Suchstring 18 ]
    [e#20 =Suchstring 19 ]
    [e#21 =Suchstring 20 ]
    [e#22 =Suchstring 21 ]
    [e#23 =Suchstring 22 ]
    [e#24 =Suchstring 23 ]
    [e#25 =Suchstring 24 ]
    [e#26 =Suchstring 25 ]
    [e#27 =Suchstring 26 ]
    [e#28 =Suchstring 27 ]
    [e#29 =Suchstring 28 ]
    [e#30 =Suchstring 29 ]
    [e#31 =Suchstring 30 ]


    [a#1 =Ausgang 1 ]
    [a#2 =Ausgang 2 ]
    [a#3 =Ausgang 3 ]
    [a#4 =Ausgang 4 ]
    [a#5 =Ausgang 5 ]
    [a#6 =Ausgang 6 ]
    [a#7 =Ausgang 7 ]
    [a#8 =Ausgang 8 ]
    [a#9 =Ausgang 9 ]
    [a#10 =Ausgang 10 ]
    [a#11 =Ausgang 11 ]
    [a#12 =Ausgang 12 ]
    [a#13 =Ausgang 13 ]
    [a#14 =Ausgang 14 ]
    [a#15 =Ausgang 15 ]
    [a#16 =Ausgang 16 ]
    [a#17 =Ausgang 17 ]
    [a#18 =Ausgang 18 ]
    [a#19 =Ausgang 19 ]
    [a#20 =Ausgang 20 ]
    [a#21 =Ausgang 21 ]
    [a#22 =Ausgang 22 ]
    [a#23 =Ausgang 23 ]
    [a#24 =Ausgang 24 ]
    [a#25 =Ausgang 25 ]
    [a#26 =Ausgang 26 ]
    [a#27 =Ausgang 27 ]
    [a#28 =Ausgang 28 ]
    [a#29 =Ausgang 29 ]
    [a#30 =Ausgang 30 ]
    [a#31 =Ausgang 31 ]
    [a#32 =Ausgang 32 ]
    [a#33 =Ausgang 33 ]
    [a#34 =Ausgang 34 ]
    [a#35 =Ausgang 35 ]
    [a#36 =Ausgang 36 ]
    [a#37 =Ausgang 37 ]
    [a#38 =Ausgang 38 ]
    [a#39 =Ausgang 39 ]
    [a#40 =Ausgang 40 ]
    [a#41 =unbekannt ]
    [a#42 =KAL ]
    [a#43 =ControllerZeit ]
    [a#44 =ControllerEing_Dez ]
    [a#45 =ControllerEing_Bin ]
    [a#46 =ControllerAusg_Dez ]
    [a#47 =ControllerAusg_Bin ]
    [a#48 =ControllerAusg_Analog ]
    [a#49 =Error OWD1 ]
    [a#50 =Error OWD2 ]
    [a#51 =Error OWD3 ]
    [a#52 =Error OWD4 ]
    [a#53 =Error OWD5 ]
    [a#54 =Error OWD6 ]
    [a#55 =Error OWD7 ]
    [a#56 =Error OWD8 ]
    [a#57 =Error OWD9 ]
    [a#58 =Error OWD10 ]
    [a#59 =Error OWD11 ]
    [a#60 =Error OWD12 ]
    [a#61 =Error OWD13 ]
    [a#62 =Error OWD14 ]
    [a#63 =Error OWD15 ]
    [a#64 =Error OWD16 ]
    [a#65 =Error OWD17 ]
    [a#66 =Error OWD18 ]
    [a#67 =Error OWD19 ]
    [a#68 =Error OWD20 ]
    [a#69 =Error OWD21 ]
    [a#70 =Error OWD22 ]
    [a#71 =Error OWD23 ]
    [a#72 =Error OWD24 ]
    [a#73 =Error OWD25 ]
    [a#74 =Error OWD26 ]
    [a#75 =Error OWD27 ]
    [a#76 =Error OWD28 ]
    [a#77 =Error OWD29 ]
    [a#78 =Error OWD30 ]
    [a#79 =Error Time ]


    ###[/DEF]###


    ###[HELP]###
    Dieser Baustein trennt den String auf und vergleicht den ersten Teil mit dem Suchstring

    Verwendung fuer Daten ueber 1-Wire Controller 1 von esera
    Datenempfang ueber UDP (Vorgeschaltet)

    Datenwerte werden durch 100 dividiert (Einstellung auf 2 Kommastellen in esera config tool)

    Version 0.1 vom 17.10.2017: Initialversion
    Version 02. vom 20.10.2017: mehrere Eingänge

    Pruefen: Zahl durch 100 Teilen geht ja nicht immer, z.b. bei Kontroll-Flag!
    Pruefen: Mehrere Filter-Eingaenge um alle Telegramme in einem LBS abzutischen!

    ACHTUNG, der Aufbau ist fuer die Controller-Nummer ein (erstes Zeichen in String)
    Falls dies nicht mehr so ist, muss der Baustein angepasst werden.

    if (($n[0]=='1_ERROWD1')OR($n[0]=='1_ERROWD2')OR($n[0]=='1_ERROWD3')OR($n[0]=='1_ERROWD4')OR($n[0]=='1_ERROWD5')OR($n[0]=='1_ERROWD6')OR($n[0]=='1_ERROWD7')OR($n[0]=='1_ERROWD8')OR($n[0]=='1_ERROWD9')OR($n[0]=='1_ERROWD10')OR($n[0]=='1_ERROWD11')OR($n[0]=='1_ERROWD12')OR($n[0]=='1_ERROWD13')OR($n[0]=='1_ERROWD14')OR($n[0]=='1_ERROWD15')OR($n[0]=='1_ERROWD16')OR($n[0]=='1_ERROWD17')OR($n[0]=='1_ERROWD18')OR($n[0]=='1_ERROWD19')OR($n[0]=='1_ERROWD20')OR($n[0]=='1_ERROWD21')OR($n[0]=='1_ERROWD22')OR($n[0]=='1_ERROWD23')OR($n[0]=='1_ERROWD24')OR($n[0]=='1_ERROWD25')OR($n[0]=='1_ERROWD26')OR($n[0]=='1_ERROWD27')OR($n[0]=='1_ERROWD28')OR($n[0]=='1_ERROWD29')OR($n[0]=='1_ERROWD30')) {
    $find = 1;
    }


    ###[/HELP]###


    ###[LBS]###

    <?
    function LB_LBSID($id) {
    if ($E=logic_getInputs($id)) {
    if (!isEmpty($E[1]['value']) && $E[1]['refresh']==1 ) {
    $n=explode("|",$E[1]['value']);
    $find = 0;
    $n[1] = trim ($n[1]);
    for ($t=1;$t<31;$t++) {
    if ($n[0]==$E[$t+1]['value']) {
    $find = 1;
    if (is_numeric($n[1])) {
    $n[1] = $n[1]/100;
    }
    logic_setOutput($id,$t,$n[1]);
    }
    else {
    logic_setOutput($id,$t,0);
    }
    }

    if ($n[0]=='1_SYS1_1') {
    logic_setOutput($id,44,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_SYS1_2') {
    logic_setOutput($id,45,$n[1]);
    $find = 1;
    }


    if ($n[0]=='1_SYS2_1') {
    logic_setOutput($id,46,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_SYS2_2') {
    logic_setOutput($id,47,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_SYS3') {
    logic_setOutput($id,48,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_KAL') {
    logic_setOutput($id,42,1);
    $find = 1;
    }

    if ($n[0]=='1_EVT') {
    logic_setOutput($id,43,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD1') {
    logic_setOutput($id,49,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD2') {
    logic_setOutput($id,50,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD3') {
    logic_setOutput($id,51,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD4') {
    logic_setOutput($id,52,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD5') {
    logic_setOutput($id,53,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD6') {
    logic_setOutput($id,54,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD7') {
    logic_setOutput($id,55,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD8') {
    logic_setOutput($id,56,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD9') {
    logic_setOutput($id,57,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD10') {
    logic_setOutput($id,58,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD11') {
    logic_setOutput($id,59,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD12') {
    logic_setOutput($id,60,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD13') {
    logic_setOutput($id,61,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD14') {
    logic_setOutput($id,62,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD15') {
    logic_setOutput($id,63,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD16') {
    logic_setOutput($id,64,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD17') {
    logic_setOutput($id,65,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD18') {
    logic_setOutput($id,66,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD19') {
    logic_setOutput($id,67,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD20') {
    logic_setOutput($id,68,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD21') {
    logic_setOutput($id,69,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD22') {
    logic_setOutput($id,70,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD23') {
    logic_setOutput($id,71,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD24') {
    logic_setOutput($id,72,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD25') {
    logic_setOutput($id,73,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD26') {
    logic_setOutput($id,74,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD27') {
    logic_setOutput($id,75,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD28') {
    logic_setOutput($id,76,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD29') {
    logic_setOutput($id,77,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERROWD30') {
    logic_setOutput($id,78,$n[1]);
    $find = 1;
    }

    if ($n[0]=='1_ERR') {
    logic_setOutput($id,79,$n[1]);
    $find = 1;
    }


    if ($find == 0) {
    logic_setOutput($id,41,$E[1]['value']);
    }
    else {
    logic_setOutput($id,$t,'');
    }

    }
    }
    }
    ?>
    ###[/LBS]###


    ###[EXEC]###
    <?

    ?>
    ###[/EXEC]###




    Ich bin jetzt nicht gut in PHP-Programmierung, aber kann man vielleicht ne Verzögerung einbauen das er nicht alle Variablen auf einmal setzt?

    SBC an den Ausgängen habe ich schon dran.

    Ich hoffe ich habe es verständlich erklärt.

    Gruß Michael


    #2
    Zunächst würde ich mal Schleifen verwenden - ließt sich "etwas" sperrig sonst...
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      #3
      Genau da geht mein Problem schon los. Kleinere Baustein anpassungen habe ich mit Copy and Paste hinbekommen. Allerdings weiß ich nicht wie ich die Schleife hinbekomme damit er das 1_ERROWD hoch zählt mit 30.

      Kommentar


        #4
        so in etwa:
        PHP-Code:
        for ($i 1$i <= 30$i++) {
            echo 
        "1_ERROWD$i";

        Kommentar


          #5
          Schon mal danke! Werde das gleich mal einpflegen. Aber damit habe ich mein Problem nicht gelöst oder?

          Kommentar


            #6
            Wie oft wird der LBS denn getriggert?
            Du setzt bei jedem Durchlauf ja schon ne ganze Menge Ausgänge. Das löst natürlich immer einige DB Zugriffe aus.
            Wie hoch ist denn die CPU Last?

            Kommentar


              #7
              CPU Last liegt so bei ca. 35%. Den Baustein habe ich von danik als Vorlage bekommen und etwas angepasst.
              Getriggert wird er wohl nicht.

              Kommentar


                #8
                Zitat von vento66 Beitrag anzeigen
                so in etwa:
                PHP-Code:
                for ($i 1$i <= 30$i++) {
                echo 
                "1_ERROWD$i";

                Wäre das so richtig?

                for ($i = 1; $i <= 30; $i++) {
                if ($n[0]=='1_ERROWD$i') {
                logic_setOutput($id,48+$i,$n[1]);
                $find = 1;
                }

                so habe ich es ja jetzt...

                if ($n[0]=='1_ERROWD1') {
                logic_setOutput($id,49,$n[1]);
                $find = 1;
                }

                if ($n[0]=='1_ERROWD2') {
                logic_setOutput($id,50,$n[1]);
                $find = 1;
                }

                if ($n[0]=='1_ERROWD3') {
                logic_setOutput($id,51,$n[1]);
                $find = 1;
                }

                Kommentar


                  #9
                  Zitat von Michael85 Beitrag anzeigen
                  Getriggert wird er wohl nicht.
                  Wenn er nicht getriggert wird, dann macht der LBS auch nichts.
                  Getriggert wird er über E1. Frage ist, wie oft kommen Daten an E1 an?

                  Kommentar


                    #10
                    Da hattest du natürlich recht. Hatte noch einen neuen Controller dazu bekommen. So hatten beide alle 10sek. Einen Datensatz geschickt.

                    Habe es jetzt mal auf 30sek. hoch gesetzt. Jetzt laufe ich zumindest nicht mehr in den kritischen Bereich rein.

                    Allerdings glaube ich das mein Fehler irgendwo in der Logik liegt, findet die Logik nicht die Übereinstimmung wird der Ausgang auf 0 gesetzt. Dieses ist auch der Grund warum ich auf ungleich Null die Ausgangsboxen setze.

                    function LB_LBSID($id) {
                    if ($E=logic_getInputs($id)) {
                    if (!isEmpty($E[1]['value']) && $E[1]['refresh']==1 ) {
                    $n=explode("|",$E[1]['value']);
                    $find = 0;
                    $n[1] = trim ($n[1]);
                    for ($t=1;$t<31;$t++) {
                    if ($n[0]==$E[$t+1]['value']) {
                    $find = 1;
                    if (is_numeric($n[1])) {
                    $n[1] = $n[1]/100;
                    }
                    logic_setOutput($id,$t,$n[1]);
                    }
                    else {
                    logic_setOutput($id,$t,0);
                    }
                    }

                    Wie müsste ich das ändern dass nur bei einer Überstimmung der der Wert übernommen wird. Eine Datenzeile sieht so aus:
                    2018-10-03 12:56:37 170509 4238 1 2_0A00000751C27028|2312[CR][LF]
                    2018-10-03 12:56:37 171164 4238 1 gelesen: 192.168.1.40 - 2_0A00000751C27028|2312[CR][LF] - Ausgang:0
                    2018-10-03 12:56:37 202164 4238 1 956 wartet
                    2018-10-03 12:56:37 202444 4238 1 2_13000006DD7E5828|2293[CR][LF]
                    2018-10-03 12:56:37 203098 4238 1 gelesen: 192.168.1.40 - 2_13000006DD7E5828|2293[CR][LF] - Ausgang:0
                    2018-10-03 12:56:37 234091 4238 1 956 wartet

                    Schon mal vielen Dank für eure Hilfe.

                    Kommentar

                    Lädt...
                    X