Ankündigung

Einklappen
Keine Ankündigung bisher.

Hysterese Zähler 19001152

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

    Hysterese Zähler 19001152

    Hallo zusammen,

    ich brauche mal eure Hilfe bei der Umstellung meines oben genannten Bausteins auf remanente Ausgänge. Aktuell werden die Ausgänge bei einem Projektstart zurückgesetzt. Dies möchte ich gerne verhindern. Dazu müssen alle Ausgänge entsprechend umgestellt werden.

    Wie funktioniert die Umstellung auf remanente Ausgänge?

    Kann mich hier jemand unterstützen oder den LBS entsprechend anpassen und hochladen? Wäre sehr dankbar dafür.

    Freue mich auf eure Unterstützung.

    Viele Grüße
    Thorsten

    Edit: Die remanenten Ausgänge sollen bei Bedarf gelöscht werden können, damit man z.B. am Anfang des Jahres die Werte zurücksetzen kann.
    Zuletzt geändert von Thorsten1970; 07.10.2021, 16:59.

    #2
    Zitat von Thorsten1970 Beitrag anzeigen
    oder den LBS entsprechend anpassen und hochladen
    Das steht nur dem Ersteller des LBS zu....

    Kommentar


      #3
      Der Ersteller bin ich selber...
      Ich bin aber kein Softwerker --> daher benötige ich die Hilfe. Ich würde den LBS klonen und dann als geänderte remanente Version hochladen.

      Kommentar


        #4
        so in etwa?

        völlig ungetestet

        edit: code entfernt
        Zuletzt geändert von vento66; 08.10.2021, 07:59.

        Kommentar


          #5
          Mercie - das werde ich mir mal genuer ansehen und versuche das mal nachzuvollziehen.

          Kommentar


            #6
            In Wirklichkeit nichts wildes. Die Variablen V1 und V2 sind remanent, und eine 1 auf E7 löst die reset Funktion aus, wo alle Ausgänge und Varablen auf 0 gesetzt werden.

            Kommentar


              #7
              Bin noch nicht ganz durchgestiegen. Den Reset am Anfang habe ich verstanden. Müsste es aber nicht für jeden Ausgang eine Variable geben?

              Kommentar


                #8
                Du liest doch bei jeder Berechnung die Variable aus, addierst / summierst und schreibst das auf den Ausgang. Zugleich speicherst Du den neuen Wert in der Variable. Die einzelnen Ausgänge müssen ja nicht remanent sein, für die Anzeige reicht es ja das das angeschlossene iko remanent ist.

                Kommentar


                  #9
                  OK, jetzt habe ich es verstanden. Danke.

                  Kommentar


                    #10
                    Ich habe den LBS entsprechend erweitert und angepasst. Nun bekomme ich folgende Fehlermeldung:





                    Hier noch der Code dazu:

                    PHP-Code:
                    ###[DEF]###
                    [name =Hysterese Zähler remanent ]

                    [e#1 TRIGGER=Addition #init=0 ]
                    [e#2 TRIGGER=Subtraktion #init=0 ]
                    [e#3 =Additionswert für A1 #init=1 ]
                    [e#4 =Subtraktionswert für A1 #init=1 ]
                    [e#5 =Grenzwert oben #init=10 ]
                    [e#6 =Grenzwert unten #init=0 ]
                    [e#7 =Reset Baustein #init=0 ]


                    [a#1 =Zähler Hysterese ]
                    [a#2 =Hysterese 0/1 ]
                    [a#3 =Hysterese negiert 1/0 ]
                    [a#4 =Zähler unbegrenzt ]
                    [a#5 =Zähler Summe Addition ]
                    [a#6 =Zähler Summe Subtraktion ]



                    [v#1 remanent= ]
                    [v#2 remanent= ]
                    [v#3 remanent= ]
                    [v#4 remanent= ]



                    ###[/DEF]###


                    ###[HELP]###
                    Dieser Baustein zählt mit jedem neuen Telegramm an E1 vorwärts und an E2 rückwärts.
                    Die Schrittweite wird durch die Multiplikatoren an E3 und E4 für den Ausgang A1 bestimmt,
                    d.h. der Wert an E3 wird addiert und der Wert an E4 wird subtrahiert.
                    Damit kann eine Gewichtung der Zählrichtung für die Hysterese definiert werden.
                    An A4 wird stets 1 addiert oder 1 subtrahiert.
                    An A5 und A6 wird stehts 1 addiert und gibt daher die Anzahl Subtraktionen und Additionen aus.

                    Hinweis:
                    Auch negative Zählerstände sind an A4 möglich!


                    E1: Triggereingang Addition
                    E2: Triggereingang Subtraktion
                    E3: Wert für Addition (nur für A1)
                    E4: Wert für Subtraktion (nur für A1)
                    E5: Hysteresegrenzwert oben --> A1 <= E5
                    E6: Hysteresegrenzwert unten --> A1 >= E6
                    E7: Reset
                    E8: Trigger Ausgänge

                    A1: E5 >= A1 >= E6
                    A2: A1 = E5 --> A2=1, Rücknahme bei A1 = E6 --> A2=0
                    A3: A1 = E5 --> A3=0, Rücknahme bei A1 = E6 --> A3=1
                    A4: Zähler ohne Grenzwerte
                    A5: Zähler Summe Additionen
                    A6: Zähler Summe Subtraktionen


                    ###[/HELP]###


                    ###[LBS]###
                    <?
                    function LB_LBSID($id) {

                    if ($E=logic_getInputs($id)) {

                    if($E[7]['refresh']==1 && $E['value'] == 1){

                    reset($id);
                    }


                    if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                    $v1=logic_getVar($id,1)+$E[3]['value'];
                    $v2=logic_getVar($id,2)+1;
                    $v3=logic_getVar($id,3)+1;
                    if ($v1>=$E[5]['value']){
                    $v1=$E[5]['value'];
                    $hyst = 1;
                    $hystneg = 0;
                    setLogicLinkAusgang($id,2,$hyst);
                    setLogicLinkAusgang($id,3,$hystneg);
                    }
                    logic_setVar($id,1,$v1);
                    logic_setOutput($id,1,$v1);
                    logic_setVar($id,2,$v2);
                    logic_setOutput($id,4,$v2);

                    logic_setVar($id,3,$v3);
                    logic_setOutput($id,5,$v3);
                    }

                    if ($E[2]['value']!=0 && $E[2]['refresh']==1) {
                    $v1=logic_getVar($id,1)-$E[4]['value'];
                    $v2=logic_getVar($id,2)-1;
                    $v4=logic_getVar($id,4)+1;
                    if ($v1<=$E[6]['value']){
                    $v1=$E[6]['value'];
                    $hyst = 0;
                    $hystneg = 1;
                    setLogicLinkAusgang($id,2,$hyst);
                    setLogicLinkAusgang($id,3,$hystneg);
                    }
                    logic_setVar($id,1,$v1);
                    logic_setOutput($id,1,$v1);
                    logic_setVar($id,2,$v2);
                    logic_setOutput($id,4,$v2);

                    logic_setVar($id,4,$v4);
                    logic_setOutput($id,6,$v4);
                    }
                    }


                    function reset($id){
                    logic_setVar($id,1,0);
                    logic_setVar($id,2,0);
                    logic_setVar($id,3,0);
                    logic_setVar($id,4,0);
                    logic_setOutput($id,1,0);
                    logic_setOutput($id,2,0);
                    logic_setOutput($id,3,0);
                    logic_setOutput($id,4,0);
                    logic_setOutput($id,5,0);
                    logic_setOutput($id,6,0);
                    }

                    }




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


                    ###[EXEC]###
                    <?

                    ?>
                    ###[/EXEC]###
                    Bin etwas ratlos. Habe schon mehrere Dinge probiert - Trial and Error. Bräuchte hier nochmal Hilfe. Danke schon mal im Voraus.

                    Kommentar


                      #11
                      Keine Ahnung, was für eine Fehlermeldung, wird aber damit zusammenhängen, das die Variablen leer initialisiert werden. Wenn Du dann addieren / subtrahieren willst kommt eine Fehlermeldung. Initialisier die mal mit 0.

                      Kommentar


                        #12
                        Das Problem ist noch da. Initialisierung mit 0 bringt nichts...
                        Zeitstempel ms Prozess PID Meldung Status
                        2021-10-08 08:02:48 414464 ? 25823 Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19001154.php | Fehlercode: 8 | Zeile: 11 | Undefined index: value ERROR
                        2021-10-08 08:02:48 415678 ? 25823 Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19001154.php | Fehlercode: 1 | Zeile: 62 | Cannot redeclare reset() FATALERROR
                        2021-10-08 08:02:48 449459 MAIN 25550 Prozess LOGIC läuft nicht mehr! FATALERROR
                        2021-10-08 08:03:07 874344 MAIN 25865 ACHTUNG: EDOMI wurde unerwartet beendet! ERROR

                        Kommentar


                          #13
                          Gut kopiert, aber meinen fehler gleich mit

                          PHP-Code:
                          if($E[7]['refresh']==&& $E['value'] == 1){ 
                          muss zu dem werden:

                          PHP-Code:
                          if($E[7]['refresh']==&& $E[7]['value'] == 1){ 

                          Für die reset Funktion brauchts einen neuen Namen, da Du ja nicht im exec Teil arbeitest (hab ich übersehen)

                          ersetze das mal mit
                          PHP-Code:
                          LB_LBSID_reset 

                          kann ich dir aber gerade nicht genau sagen, aber functionen mussten iMho immer mit LB_LBSID beginnen

                          Kommentar


                            #14
                            Funktionen im LBS Bereich müssen immer mit

                            Code:
                            LB_LBSID_
                            beginnen. D.h. statt

                            Code:
                            function reset()
                            muss es

                            Code:
                            function LB_LBSID_reset()
                            heißen. Die Aufrufe müssen dann natürlich auch angepasst werden.
                            Außerdem hast du, wenn ich das richtig sehe, die Funktion reset() innerhalb der Funktion LB_LBSID() definiert. Das geht nicht. Entweder davor oder danach.

                            Kommentar


                              #15
                              Vielen Dank für die Hilfe. Werde die Änderungen gleich mal einpflegen und dann schauen. Rückmeldung folgt.

                              Kommentar

                              Lädt...
                              X