Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe erbeten - Codeänderung eines LBS

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

    Hilfe erbeten - Codeänderung eines LBS

    Hi,

    habe einen Baustein aus dem Forum hier und würde diesen gerne ändern für meine Bedürfnisse. Bevor ich diesen Baustein starte setze ich in der Visu jedesmal eine neue Zeit an E2. Hier würde ich gerne die Änderung haben das sollte sich der Wert an E2 ändern oder ich Edomi neustarten der Wert schon einmal an A2 ausgegeben wird aber die Zeit noch nicht runterläuft solanger der Baustein nicht gestartet wurde.
    Was müsste hier wo geändert werden.

    Grüße

    Code:
    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if (($E=logic_getInputs($id)) && ($V=logic_getVars($id))) {
    
            if (logic_getState($id)==0) {
    
                if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                    logic_setVar($id,1,(getMicrotime()+$E[2]['value']));
                    logic_setVar($id,2,getMicrotime());        //Zeitpunkt der letzten Restzeitausgabe merken
                    logic_setOutput($id,1,1);                 //Neustart: A1=1
                    logic_setOutput($id,2,$E[2]['value']);     //Neustart: A2=Restzeit
                    logic_setOutput($id,3,"");                 //A3=leer
                    logic_setState($id,1,1000,true);        //1-Sekunden-Takt als kleinsten gemeinsamen Nenner (Timer und Restzeit)
                }
    
            } else {
    
                //Abbruch
                if ($E[1]['value']==0 && $E[1]['refresh']==1) {
                            
                            logic_setOutput($id,1,0);             //A1=0
                            logic_setOutput($id,2,0);            //A2=0 (keine Restzeit mehr vorhanden)
                            logic_setOutput($id,3,1);             //A3=1
                            logic_setState($id,0);
                            
                } else {
                    
                    //Retriggern
                    if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                    
                        logic_setVar($id,1,(getMicrotime()+$E[2]['value']));
                        logic_setVar($id,2,getMicrotime());    //Zeitpunkt der letzten Restzeitausgabe merken
                        logic_setOutput($id,1,1);                 //A1=1
                        logic_setOutput($id,2,$E[2]['value']);     //A2=Restzeit
                        logic_setOutput($id,3,2);                 //A3=2
    
                    } else {
    
                        if (getMicrotime()>=$V[1]) { //Zeit abgelaufen?
                        
                            logic_setOutput($id,1,0);             //A1=0
                            logic_setOutput($id,2,0);            //A2=0 (keine Restzeit mehr vorhanden)
                            logic_setOutput($id,3,0);             //A3=0
                            logic_setState($id,0);
    
                        } else {    //Restzeit im Sekundentakt ausgeben
                        
                            $tmp=getMicrotime();
                            if (($tmp-$V[2])>=1) {
                                logic_setVar($id,2,getMicrotime());                //Zeitpunkt der letzten Restzeitausgabe merken
                                logic_setOutput($id,2,intval($V[1]-$tmp));         //A2=Restzeit
                            }
                            
                        }
    
                    }
                
                }
                
            }
    
        }
    
    }
    ?>
    ###[/LBS]###
    Zuletzt geändert von skyacer; 02.05.2019, 13:42.

    #2
    Ein LBS etwas ausgeben zu lassen ohne es zu triggern ist nicht möglich. Aber die Werte kommen ja bestimmt auch irgendwoher, so dass man sie an dem LBS "vorbei" im Ziel setzen kann.

    Kommentar


      #3
      Sag uns doch erstmal welcher LBS das ist, dann kann man auch verstehen was der ursprünglich macht.

      Kommentar


        #4
        Zitat von skyacer Beitrag anzeigen
        Hier würde ich gerne die Änderung haben das sollte der Wert geändert werden oder ich Edomi neustarten der Wert schon einmal an A2 ausgegeben wird aber die Zeit noch nicht runterläuft solanger der Baustein nicht gestartet wurde.
        Ohne zusätzliche Satzzeichen lässt sich die Anforderung sehr schlecht verstehen. Ich deute das so, dass du die verstrichene Zeit zwischen zwei Impulsen haben möchtest.

        Die Logikbausteine sind auch so gedacht, dass man mit der Kombination mehrer LBS eine gewünschte Funktion erreicht. Es muss nicht immer ein dedizierter LBS für eine bestimme Funktion sein. Vielleicht lässt sich dein Ziel ja auch so erreichen. Aber ohne die genaue Fragestellung zu kennen ist eine "Beratung" schwierig.
        Gruß
        Stefan

        Kommentar


          #5
          Zitat von MrIcemanLE Beitrag anzeigen
          Die Logikbausteine sind auch so gedacht, dass man mit der Kombination mehrer LBS eine gewünschte Funktion erreicht.
          z.B du nimmst du einen LBS Binärauslöser, der bei jeder Änderung des Eingangswerts eine 1 senden würde in Verbindung mit dem System-KO Systemstart (Nr.2) welches eine 1 bei jeden Reboot sendet....das Verknüpft mit einem ODER ergäbe deinen gewünschten Trigger wenn ich deine Anforderung recht verstehe.
          2.png
          ...and I thought my jokes were bad!

          Kommentar


            #6
            Hi,

            ja also es ist der 19001117 - Restzeit-Timer retriggerbar+abbrechbar
            Ich glaub ich hab mich ein wenig ungenau ausgedrückt. Also ich nutze den Baustein so:
            Ich lege über ein iko an E2 eine Zahl X an ohne den Baustein über E1 zu starten. Hier würde ich gerne den Trigger haben das wenn ich E2 über das iko setze oder ich Edomi neustarte er mir an A2 den Wert ausgibt der an E2 anliegt.

            Hoffe das kommt ein wenig klarer an.

            Grüße

            Kommentar


              #7
              Mach doch vor den Trigger einen "Klemme" LBS und Trigger mit dem SystemKO "Systemstart" und E2.
              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

              Kommentar


                #8
                Zitat von Brick Beitrag anzeigen
                Mach doch vor den Trigger einen "Klemme" LBS und Trigger mit dem SystemKO "Systemstart" und E2.
                Das würde dann als Trigger für den Neustart sein aber dennoch hab ich dafür keine Ausgabe an A2. Dafür bräuchte ich auch noch eine Lösung.

                Kommentar


                  #9
                  Warum brauchst du den Wert an A2? Wenn du den Wert doch hast, macht es doch keinen Unterschied, ob er auch an A2 anliegt, oder? Vielleicht kannst du ja mal erklären, was der Use-Case dahinter ist. Auch an den Ausgang kannst du eine Klemme machen, z.B. so:

                  Screenshot from 2019-05-02 16-03-51.png

                  Kommentar


                    #10
                    Einfach den sender von E2 mit dem Empfänger von A2 verbinden? Das könnte man noch mit einer Sperre, die von A1 gesteuert wird, kombinieren.

                    Kommentar


                      #11
                      okay danke. Dann probier ich das darüber. Mich würde trotzdem interessieren was im Baustein geändert werden müsste. Wäre das einfach zu machen?

                      Grüße

                      Kommentar


                        #12
                        Ungetestet:

                        PHP-Code:
                        if ($E[2]['refresh']==1logic_setOutput($id,2,$E[2]['value']); 
                        hinter der Zeile

                        PHP-Code:
                        if (logic_getState($id)==0) { 
                        einfügen.

                        Damit sollte dann immer, wenn an E2 was gesendet wird und der Timer nicht aktiv ist, der Wert von E2 auf A2 ausgegeben. Falls es das ist, was du willst.
                        Damit ist nocht nicht geklärt, was passiert, wenn man während der Timer aktiv ist, den Wert an E2 ändert und dann der Timer abläuft. Dann wird A2 nicht geupdated.

                        Kommentar

                        Lädt...
                        X