Ankündigung

Einklappen
Keine Ankündigung bisher.

Tor Status funktioniert nicht mehr nach patch 2.300

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

    Tor Status funktioniert nicht mehr nach patch 2.300

    Hallo zusammen,

    habe folgenden Code für meinen Tor-Status (fährt AUF), indem ich die Taster GA für "auf" ("Garagentor hoch-4/0/1") abfrage. Das hat vor dem update auch einwandfrei funktioniert. Nun geht Tor_fahrt_AUF nie auf EIN?!?!? Kann sich das jemand erklären?

    [highlight=epc]
    if (event ("Garagentor hoch-4/0/1") and ("Garagentor hoch-4/0/1"==EIN) and ("Garagentor Ausgang oben-4/0/5"==AUS)) then {
    if Tor_fahrt==AUS then {
    Tor_fahrt_AUF=EIN;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN
    } else {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif
    } endif
    [/highlight]


    Danke und viele Grüsse
    Jochen

    #2
    Moin Jochen,

    Du kannst den else Zweig umformulieren:
    [highlight=epc]
    if (event ("Garagentor hoch-4/0/1") and ("Garagentor hoch-4/0/1"==EIN) and ("Garagentor Ausgang oben-4/0/5"==AUS)) then {
    if Tor_fahrt==AUS then {
    Tor_fahrt_AUF=EIN;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN
    };
    if Tor_fahrt != AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif
    } endif
    [/highlight]

    Ich denke so wird es klar: wenn Tor_fahrt==AUS wird auch gleich Tor_fahrt=EIN gesetzt. Das erfüllt aber auch Tor_fahrt != AUS ...

    Gruß,
    Bernd

    Kommentar


      #3
      Hi Bernd,

      den Kommentar verstehe ich jetzt nicht. Dein Code erklärt warum Tor_fahrt_AUF nicht auf EIN geht, aber genau darum formuliert man sowas doch mit ELSE statt als zwei getrennt IF Statements.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Ja, aber genau das ist ein Mangel der Programmiersprache im eibPC: das 'else' wird im eibPC intern als negiertes 2. 'if' compiliert.
        'else' ist also verkümmert zu einer Abkürzung und Programmierfalle.

        Zur Ehrenrettung des eibPCs sollte man allerdings bedenken, dass in der obersten Ebene der Verarbeitung eine Event-Auswertung statt findet und dort ein 'gewöhnliches else' wenig Sinn macht.
        -> Wenn Event, dann mach etwas, ansonsten mach ???

        Das 'ansonsten' lässt sich schwer darstellen oder würde zu einer fortwährenden Abarbeitung des else-Zweiges führen.

        In den tieferen Ebenen (eben im Zweig des 'if's) findet überwiegend eine C-ähnliche Auswertung statt und dort würde das else im C-Sinn auch wieder passen.
        BR
        Marc

        Kommentar


          #5
          Danke erstmal für eure super schnellen Antworten!! D.h. beim Validierungsschema hat sich mit dem Patch 2.300 etwas geändert?!

          Gruss
          Jochen

          Kommentar


            #6
            Moin, moin,

            den Kommentar verstehe ich jetzt nicht. Dein Code erklärt warum Tor_fahrt_AUF nicht auf EIN geht, aber genau darum formuliert man sowas doch mit ELSE statt als zwei getrennt IF Statements.
            Schau mal im Handbuch

            Zitat von Version 20 auf Seite 125
            Der else-Zweig einer if-Funktion ist wie eine zweite eigenständige if-Funktion mit negierter Abfragebedingung zu verstehen.
            Gruß,
            Bernd

            Kommentar


              #7
              Da verschachtelte IFs aufgrund des Validierungsschemas des EibPC meistens anderns funktionieren als man es intuitiv erwarten würde, habe ich darauf generell verzichtet. Alles was sich durch verschachtelte IFs machen lässt kann man eigentlich auch mit normalen IFs machen, wenn man den Code entsprechend anders formuliert. In deinem Fall zum Beispiel so:

              Code:
              if event("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1" == EIN and "Garagentor Ausgang oben-4/0/5" == AUS and Tor_fahrt == AUS then {
                 Tor_fahrt_AUF = EIN;
                 Tor_fahrt_AB = AUS;
                 Tor_fahrt = EIN
              }
              if event("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1" == EIN and "Garagentor Ausgang oben-4/0/5" == AUS and Tor_fahrt == EIN then {
                 Tor_fahrt_AUF = AUS;
                 Tor_fahrt_AB = AUS;
                 Tor_fahrt = AUS
              } endif
              Du solltest auch nicht benötigte Klammern weglassen. Macht den Code nur unnötig kompliziert.

              Kommentar


                #8
                Ich brauche nochmals eure Hilfe - komme einfach nicht weiter und bin langsam aber sicher am verzweifeln.

                Ich habe jetzt all eure Vorschläge durchprobiert. Leider ohne Erfolg.

                Bin jetzt auf folgendes gestossen. In der GA "Garagentor hoch-4/0/1" ist der Taster sowie der entsprechende Schaltausgang für das Tor, welcher als Treppenhausimpuls eine Sekunde ein EIN ausgeben soll bzw. gegeben hat. Dies hat für Tor auf/hoch gereicht. Nun habe ich beim debuggen im EIBSTUDIO gesehen, dass diese GA immer auf EIN steht?!?!? Kann das sein? Wenn ich den Taster betätige höre ich wie der Schaltausgang ca. eine Sekunde auf EIN geht und dann wieder klickt und vermutlich dann wieder auf AUS geht. Das Tor fährt auch sauber hoch.

                Frägt sich warum ist die GA immer auf EIN?!?!? Und warum hat das Ganze Monate lang einwandfrei funktioniert bis zum update auf den patch 2.300??? Ich hab gerade keinen Plan an was das noch liegen könnte???

                Grüsse
                Jochen

                Kommentar


                  #9
                  Probier es doch mal so:

                  [highlight=epc]
                  if (event ("Garagentor hoch-4/0/1") and ("Garagentor hoch-4/0/1"==EIN) and ("Garagentor Ausgang oben-4/0/5"==AUS)) then {
                  Tor_fahrt_AUF=!Tor_fahrt;
                  Tor_fahrt_AB=AUS;
                  Tor_fahrt=!Tor_fahrt
                  } endif
                  [/highlight]
                  BR
                  Marc

                  Kommentar


                    #10
                    Zitat von joggele777 Beitrag anzeigen
                    Danke erstmal für eure super schnellen Antworten!! D.h. beim Validierungsschema hat sich mit dem Patch 2.300 etwas geändert?!
                    Das würde mich auch interessieren. Ich habe nämlich auch die ein oder andere verschachtelte if-Abfrage, die nach dem Update nicht mehr funktioniert. Ein Code-Beispiel kann ich demnächst mal posten, aber ich muss das erstmal einkürzen.

                    Grüße,
                    Boris.

                    Kommentar


                      #11
                      Nach längerem Testen muss ich leider feststellen, dass ein Großteil meiner Logik verschachtelte if-Abfragen enthält. Ich rufe in vielen Fällen in if-Abfragen Makros auf, die auch wieder if-Abfragen enthalten. Das scheint im Augenblick nicht mehr zu klappen.

                      Kann ich irgendwo die alten Patches runterladen um auf meinen alten Stand zurückzukommen? ich habe vorher V2.106 eingesetzt und würde gerne zurückpatchen. Geht das, oder funktioniert dann der EIBPc nicht mehr?

                      VG,
                      Boris.

                      Kommentar


                        #12
                        Zitat von kuczerek Beitrag anzeigen
                        Das würde mich auch interessieren. Ich habe nämlich auch die ein oder andere verschachtelte if-Abfrage, die nach dem Update nicht mehr funktioniert. Ein Code-Beispiel kann ich demnächst mal posten, aber ich muss das erstmal einkürzen.
                        Es hat sich tatsächlich geändert, aber eigentlich nur unter der Haube.

                        Hier etwas tiefer reingeschaut:
                        Vorher wurden nur die aktiven Teile einer if-Abfrage unterdrückt, also :
                        if Bedingung then {
                        tuwas();
                        c=2/a;
                        } endif
                        Dies bedeutet
                        tuwas() wurde nur von der if-Bedingung getriggert, genauso wie die Zuweisung c=... . Das erwartet man ja. Hingegen wurde 2/a ggf. durch das Argument a invalid ("getriggert") und daher gab es z.B. bei a=0 trotz Bedingung = 0 ein event "Division durch null".

                        Dies wurde nun komplett überarbeitet, sodass eben kein event mehr auftritt.

                        Grundsätzlich ist Validierung streng und eng mit der Objektverarbeitung und diese mit dem vom Compiler generierten Code verknüpft. Im letzten Compilerschritt optimiert dieser den Code nochmals auf Performance.

                        An sich ist aber die Valdierung bzw. deren Konzept gleich geblieben und wenn das nicht so ist, muss da mal genauer geschaut werden. So hat eben https://knx-user-forum.de/eibpc/2005...t-erkannt.html einen Bug zu Tage gebracht, der darauf zurückzuführen ist. Natürlich muss - wie vorher auch - eine manuelle GA möglich sein, da sind wir am fixen. Dabei tritt der Fehler durch den Compiler-Optimierer nur in einer bestimmten Konstellation auf und blieb bis dato unentdeckt.
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Zitat von kuczerek Beitrag anzeigen
                          Kann ich irgendwo die alten Patches runterladen um auf meinen alten Stand zurückzukommen? ich habe vorher V2.106 eingesetzt und würde gerne zurückpatchen. Geht das, oder funktioniert dann der EIBPc nicht mehr?
                          Das geht nicht. Du kannst aber mit dem alten EibStudio kompilieren und dann sollte der EibPC seinen Dienst tun (wenngleich ich das auch nicht ausführlich getestet habe). Dieser Versuch macht zumindest nichts kaputt...
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Zitat von enertegus Beitrag anzeigen
                            Du kannst aber mit dem alten EibStudio kompilieren und dann sollte der EibPC seinen Dienst tun (wenngleich ich das auch nicht ausführlich getestet habe). Dieser Versuch macht zumindest nichts kaputt...
                            Davon würde ich aus praktischer Erfahrung eher abraten, es sei denn, es geht gar nix mehr. Bei jeder Neuübertragung des Codes werden alle GA's, welche mit einem Button belegt sind, beim Upload eines Programms auf 1 gesetzt. Kommt natürlich auf die Nutzung des Webservers an und darauf wie oft man Änderungen im EIBPC durchführt....

                            Kommentar


                              #15
                              ENTWARNUNG!

                              Nach weiterem Debuggen habe ich festgestellt, dass das Problem ganz wo anders lag. Ich habe einen neuen Thread eröffnet.

                              Verschachtelte if-Anweisungen funktionieren bei mir einwandfrei...

                              VG,
                              Boris.

                              Kommentar

                              Lädt...
                              X