Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei LBS Entwicklung

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

    Hilfe bei LBS Entwicklung

    Frage an die Profis unter Euch.

    Ich versuche mich gerade an meinem ersten eigenen LBS und bin auf folgendes Problem gestoßen:
    Der LBS soll die unterschiedliche Lamellenverstellzeit für Auf und Ab der Jalousienmotoren ausgleichen, denn nach mehreren Bewegungen lässt sich nicht mehr die korrekte Position anfahren. Die MDT Aktoren können das selbst leider nicht. Ich möchte also nach einer festgelegten Anzahl von Bewegungen (definiert über E2) die Lamellen kurz auf geschlossen fahren und dann nach ca 1 sec. auf den Wert der an E1 anliegt.

    Nach einigen Fehlversuchen und Lesen der Hilfe habe ich endlich kapiert, dass die Ausgänge final erst bei Beendigung des Bausteins geschrieben werden. Das hat eine etwas unkonventionelle Lösung zur Folge mit retriggern des Bausteines.

    Meine Frage nun: Geht sowas auch eleganter und wie macht man es dann?

    Danke für Eure Hilfe und beste Grüße,
    Guido

    mein Code im Anhang

    Angehängte Dateien

    #2
    Schon mal den Rolladen LBS von panzaeron (nicht von Yves ) gesehen? https://service.knx-user-forum.de/?c...ad&id=19001672
    Der hat extra nen Ausgang dafür (A2), der bei jeder 0 oder 255 Positionsfahrt den AUF/AB des z.B. MDT-Aktors befeuern kann und damit die Referenzfahrt auslöst.

    Gruß André
    Zuletzt geändert von eXec; 29.03.2021, 10:12.
    ...and I thought my jokes were bad!

    Kommentar


      #3
      Hoi André

      Zitat von eXec Beitrag anzeigen
      Schon mal den Rolladen LBS von Yves gesehen? https://service.knx-user-forum.de/?c...ad&id=19001672
      Danke für die Blumen aber das ist der Baustein ist von panzaeron. Meine wären 19000145 und 19000707.
      Kind regards,
      Yves

      Kommentar


        #4
        Danke euch für den Vorschlag. Der hilft allerdings nicht, weil die Referenzfahrt den Behang in der Höhe neu justiert. Das kann der Aktor selbst auch durch unterschiedliche Verfahrzeiten ausgleichen. Mir geht es um den Winkel der Lamellen, die sich immer wieder leicht verstellen. Daher habe ich den Baustein gemacht.

        Der tut ja auch was er soll. Meine Frage war, ob man das so programmiert oder es einen eleganteren Weg dafür gibt, damit ich beim nächsten besser machen kann 😉

        Grüße vom Anfänger,
        Guido

        Kommentar


          #5
          Zitat von starwarsfan Beitrag anzeigen
          Hoi André



          Danke für die Blumen aber das ist der Baustein ist von panzaeron. Meine wären 19000145 und 19000707.
          Deinen Baustein 19000145 verwende ich übrigens für die Steuerung. Sehr gut gemacht - da kann man einiges lernen!

          Das mit dem Ausgang A10 auf Eingang E11 ist doch eigentlich auch die Lösung für mein ursprüngliches Problem, oder?

          LG,
          Guido

          Kommentar


            #6
            Irgendwie fehlt mir auch die 1 Sekund Pause.....

            PHP-Code:

            ###[DEF]###
            [name =Lammellen Reseter: ≠[leer] ]
            [titel =Lammellen Reseter ]

            [e#1 TRIGGER=≠[leer&#93 ]
            [e#2 =Zyklen #init=5 ]

            [a#1= ]
            [a#2= ]

            [v#1 remanent = 0]

            ###[/DEF]###


            ###[HELP]###
            Dieser Baustein führt dient zum Zurücksetzen der Lammellenposition nach mehreren Verstellzyklen, um die Toleranz des Motors auszugleichen.

            Getriggert wird der Baustein durch ein Telegramm ≠[leer] an E1.

            E1: jedes Telegramm ≠[leer] triggert den Baustein und führt zur Ausführung der zugewiesenen Befehle
            E2: Anzahl Verstellzyklen, bis Lammelenpos. resetet wird

            A1: Gibt den Eingangswert von E1 aus. Wenn der Zähler den Wert E2 erreicht hat, dann wird die Lammelenpos. auf geschlossen gefahren und nach 1 sec dann auf den Wert von E1 gesetzt
            A2: Zählerstand

            ###[/HELP]###


            ###[LBS]###
            <?
            function LB_LBSID($id) {
              if ($E=getLogicEingangDataAll($id)) {
                if ($E[1]["refresh"]) {
                  logic_callExec(LBSID,$id);
                }
              }
            }
            ?>
            ###[/LBS]###

            ###[EXEC]###
            <?
            require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
            sql_connect();
            if ($E=getLogicEingangDataAll($id)) {
            if($E[1]['refresh']) {
            logic_setVar($id,1,logic_getVar$id,1) +1 ); //Zähler +1
            logic_setOutput($id,1,$E[1]['value']); //E1 an A1 ausgeben
            }
            if(logic_getVar($id,1) > $E[2]['value']){
            logic_setOutput($id,1,255); //Lamelle schliessen
            usleep(1000000); //1Sek warten
            logic_setVar($id,1,0); //Zähler auf 0
            logic_setOutput($id,1,$E[1]['value']); //Lamelle auf  Wert von E1
            }

            logic_setOutput($id,2,logic_getVar($id,1)); //Zählerstand an A2 ausgeben
            }
            sql_disconnect();
            ?>
            ###[/EXEC]###
            Zuletzt geändert von vento66; 31.03.2021, 05:35.

            Kommentar

            Lädt...
            X