Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei WOL

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

    #16
    Zitat von saft6luck Beitrag anzeigen
    Was ist denn der Unterschied zwischen:
    event(GA) kümmert sich nicht, ob das GA-Telegramm ein
    • Lese-Telegramm
    • Schreib-Telegramm
    • Antwort-Telegramm

    ist. eventwrite() wird nur beim Schreibtelegramm aktiv.

    Danke für den Hinweis an die Doku, werden wir uns anschauen.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #17
      Cool, nach über 3 Jahren stellt sich raus, dass all mein Code auch auf Lese- und Antworttelegramme reagiert. OK, die Funktion gibt es noch nicht soo lang, aber trotzdem ... [EDIT: Doch, Funktion gibt es seit 3 Jahren https://knx-user-forum.de/144403-post6.html ]

      -> Generell also alle event()s von GAs gegen eventwrite() tauschen ...

      Und was machen da die ganzen anderen Varianten eine GA auszulesen?

      [highlight=epc]
      x=GA
      if GA then ...
      if change(GA) then ...
      [/highlight]

      Reagieren die auch auf jeden Telegrammtyp?

      Panik ...

      [EDIT: Thema war zwar bekann, wurde aber völlig verdrängt ]
      BR
      Marc

      Kommentar


        #18
        Zitat von saft6luck Beitrag anzeigen
        Und was machen da die ganzen anderen Varianten eine GA auszulesen?
        x=GA

        Dieses Kommando setzt den Wert für die Variable x auf den Wert von GA. x ändert sich also immer dann, wenn sich auch der Wert von GA ändert. Generell macht es im Code dann keinen Unterschied, ob du x oder GA verwendest, da beide den gleichen Wert haben. Die GA einer Variablen zuweisen macht eigentlich nur dann Sinn, wenn du mit der Variable weiterrechnen willst oder wenn die Variable im Code oft vorkommt und du das ganze übersichtlicher gestalten willst bzw. flexibler bist, falls sich die Definition von GA mal ändern sollte.

        if GA then ...

        Diese IF-Abfrage geht immer dann auf, wenn sich der Wert von AUS auf EIN ändert. Ist GA bereits ein und kommt noch ein EIN-Telegramm, tut sich nichts.

        if change(GA) then ...

        Diese IF-Abfrage geht dann auf, wenn sich der Wert von GA ändert, also immer dann wenn ein Telegramm empfangen wird, das einen anderen Wert übermittelt als jenen der aktuell für GA gespeichert ist.

        Kommentar


          #19
          Zitat von saft6luck Beitrag anzeigen
          Und was machen da die ganzen anderen Varianten eine GA auszulesen?]
          in dem Zusammenhang nichts! "event()" reagiert auf Telegramme am Bus zur entsprechenden GA, nicht darauf, dass die GA im Programm verwendet wird.

          Aus meiner Sicht eigentlich von Anfang an klar!
          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

          Kommentar


            #20
            Zitat von Uwe! Beitrag anzeigen
            in dem Zusammenhang nichts! "event()" reagiert auf Telegramme am Bus zur entsprechenden GA, nicht darauf, dass die GA im Programm verwendet wird.
            Hä?

            Worum es geht, ist die darauf folgende Frage (ich weiß, stand versteckt, erst nach dem Beispiel):

            Wie reagieren die anderen Varianten auf andere Telegramm-Typen?

            Beispiel aus dem Handbuch:

            [highlight=epc]
            [EibPC]
            // Der Szenenaktor
            scene('1/2/3'u08, "Lampe-1/1/1", "Dimmer-1/2/2"u08)
            // Variablen
            Tastendruck=0
            Szene =1
            // Zählen des Tastendrucks
            if (("Schalter-1/0/0") and event("Schalter-1/0/0")) then Tastendruck= Tastendruck+1 endif
            // Rücksetzten des Zählers
            if after(event("Schalter-1/0/0"),1000u64) then Tastendruck=0 endif
            // Speichern oder Aufrufen
            if after(event('1/0/0'b01),1000u64) and (Tastendruck ==1) then callscene('1/2/3'u08,Szene) endif
            if after(event('1/0/0'b01),1000u64) and (Tastendruck ==2) then storescene('1/2/3'u08,Szene) endif
            [/highlight]

            Sowohl das Zählen, als auch das Auswerten eines langen/kurzen Tastendrucks könnte betroffen sein. Die Frage ist, was macht if GA then? Reagiert es auch auf beliebige Telegramm-Typen?

            anderes Beispiel:

            [highlight=epc]
            // positive Impulse Zählen
            Katzenklappe = Katzenklappe + convert(GA,0u64)
            [/highlight]

            Wer so Events zählen will, wird evtl. auch die Leseabfragen mitzählen.

            Grundsätzlich verwendet KEIN Beispiel in der Anleitung eventwrite(). Auch wenn dies meist keine wirklichen Auswirkungen haben wird: Es ist weder robust, noch die richtige Vorgehensweise in einer Anleitung, oder?

            Ps. Welchen Wert für die GA liefert denn eine Leseanforderung eigentlich im eibPC?
            BR
            Marc

            Kommentar


              #21
              hmm... jetzt hab ich das "Hä?" ;-)

              Meinst Du, ob ein "if change(GA)" auch dann ein true liefert, wenn für GA eine Leseanforderung auf den Bus gegangen ist?

              Die Antwort wäre natürlich "nein".

              Oder was genau meinst Du, hab's wohl noch nicht verstanden....
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar


                #22
                Zitat von Uwe! Beitrag anzeigen
                Oder was genau meinst Du, hab's wohl noch nicht verstanden....
                Es steht doch da:

                z.B.
                [highlight=epc]
                if (("Schalter-1/0/0") and event("Schalter-1/0/0")) then Tastendruck= Tastendruck+1 endif
                [/highlight]

                Was macht das bei Lese-Telegrammen und dann beim Antwort-Telegramm? Und? Will ich das? Und welchen Wert hat dann "Schalter-1/0/0"?
                BR
                Marc

                Kommentar


                  #23
                  naja, doch klar.

                  wenn 1/0/0 auf EIN steht wird der then-Zweig auch durch ein Lese-Tegramm getriggert und ausgeführt. Antwort-Telgramm ebenso.

                  Ob Du das so willst, musst Du selbst wissen, wenn nicht dann hilft vermutlich eventwrite()

                  Und 1/0/0 hat logischerweise den Wert, der zuletzt auf dem Bus gesendet wurde, egal ob write oder response. Jedenfalls würde alles andere keinen Sinn machen, gezielt getestet hab ich's noch nicht.
                  ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                  Kommentar


                    #24
                    Zitat von Uwe! Beitrag anzeigen
                    naja, doch klar.


                    wenn 1/0/0 auf EIN steht wird der then-Zweig auch durch ein Lese-Tegramm getriggert und ausgeführt. Antwort-Telgramm ebenso.
                    Na, so weit war ich auch schon, sonst würde ich das ja nicht schreiben.

                    Ob Du das so willst, musst Du selbst wissen, wenn nicht dann hilft vermutlich eventwrite()
                    Ob ich das so will ist wohl in der Anleitung nicht die Fragen, oder?

                    Und 1/0/0 hat logischerweise den Wert, der zuletzt auf dem Bus gesendet wurde, egal ob write oder response.

                    Jedenfalls würde alles andere keinen Sinn machen, gezielt getestet hab ich's noch nicht.
                    Sinn würde es zwar auch machen, wenn der eibPC generell nur auf normale Telegramme reagiert und nur im "Sonderfall" auch auf Lese- und Antworttelegramme, aber soweit ist es auch klar.

                    Nun kommt die Frage aber auf die Lese-Telegramme. Wenn die auch auslösen, wird es schon komplexer.

                    Ob der Wert der GA bei einem Lese-Telegramm tatsächlich unverändert bleibt ist auch nicht selbstverständlich, aber wenn auch noch getriggert wird ist es schon eher unverständlich.

                    Und dazu steht in der Anleitung nichts, zumal ja schon das eventwrite() überhaupt nicht besprochen/verwendet wird.
                    BR
                    Marc

                    Kommentar


                      #25
                      Zitat von saft6luck Beitrag anzeigen
                      Ob ich das so will ist wohl in der Anleitung nicht die Fragen, oder?
                      Nicht in der Anleitung, aber oben hast Du die Frage selbst gestellt....
                      Zitat von saft6luck Beitrag anzeigen
                      Nun kommt die Frage aber auf die Lese-Telegramme. Wenn die auch auslösen, wird es schon komplexer.
                      DAS sie das tun, sind wir uns doch schon einig, doer?

                      Zitat von saft6luck Beitrag anzeigen
                      Ob der Wert der GA bei einem Lese-Telegramm tatsächlich unverändert bleibt ist auch nicht selbstverständlich, aber wenn auch noch getriggert wird ist es schon eher unverständlich.
                      natürlich bleibt er unverändert! Welche Wert sollte er denn annehmen? Das Lesetelegramm enthält selbst ja gar keinen Wert, also wo sollte ein neuer Wert herkommen?
                      Oder sprichst Du jetzt wieder vom Wert im then-Zweig? Der bleibt natürlich NICHT unverändert.
                      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                      Kommentar


                        #26
                        Zitat von Uwe! Beitrag anzeigen
                        Nicht in der Anleitung, aber oben hast Du die Frage selbst gestellt....
                        Haha.

                        Wenn ein Beispiel in der Anleitung steht, ist die Erwartungshaltung, dass explizit solche Nebeneffekte berücksichtigt sind, oder gar nicht auftreten.

                        Erst recht wenn es ein Kommando für die robuste Implementierung gibt.

                        DAS sie das tun, sind wir uns doch schon einig, doer?
                        Bei mir ist die Erkenntnis schon länger gereift, ja. Die Konsequenz daraus ist entscheiden.

                        natürlich bleibt er unverändert! Welche Wert sollte er denn annehmen? Das Lesetelegramm enthält selbst ja gar keinen Wert, also wo sollte ein neuer Wert herkommen?
                        Das war nur eine beiläufige Frage. Trotzdem bleibt bei der Analyse des Codes die Frage, welchen Zustand die GA hat. Annahmen oder Wahrscheinlichkeiten sind nun wirklich keine Hilfe bei der eibPC-Programmierung. Da sind schon viele drauf reingefallen.

                        Oder sprichst Du jetzt wieder vom Wert im then-Zweig? Der bleibt natürlich NICHT unverändert.
                        Ich spreche nicht "jetzt wieder" davon, sondern das ist das Thema, der Code reagiert auf den "falschen" Event und das steht auch noch so in der Anleitung. Keines der Beispiele in der Anleitung ist robust einer Leseanforderung gegenüber (wobei auch andere Effekte falsche Aktionen verhindern). Und wie ist es bei den Makro-Libs???

                        Wenn ich nur den eibPC in der Verteilung habe, mag das genug sein, schon ein 2. eibPC oder eine VISU kann aber alles zerhageln.

                        Weiter gedacht: Was passiert bei [InitGA] mit dem "generierten Event"? Sollte ich den aktuellen Status des Tasters bzw. Aktors benötigen (und der ist EIN), ist das auch ein Auslöser? Komm jetzt bitte nicht mit "Wahrscheinlich ja"
                        BR
                        Marc

                        Kommentar


                          #27
                          Zitat von saft6luck Beitrag anzeigen
                          Ich spreche nicht "jetzt wieder" davon, sondern das ist das Thema, der Code reagiert auf den "falschen" Event und das steht auch noch so in der Anleitung.
                          Das erklärt, warum wir die ganze Zeit aneinander vorbei reden....
                          Du hast oben aber explizit von
                          Ob der Wert der GA bei einem Lese-Telegramm tatsächlich unverändert
                          gesprochen und das in Zusammenhang mit diesem Code
                          if (("Schalter-1/0/0") and event("Schalter-1/0/0")) then Tastendruck= Tastendruck+1 endif
                          Eine GA steht da nur im if- Teil.

                          Zitat von saft6luck Beitrag anzeigen
                          Keines der Beispiele in der Anleitung ist robust einer Leseanforderung gegenüber
                          Da hast Du wohl leider Recht.

                          Zitat von saft6luck Beitrag anzeigen
                          Weiter gedacht: Was passiert bei [InitGA]
                          Gar nichts, weil das eigentliche Programm erst nach Abarbeitung der InitGA Sektion startet.
                          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                          Kommentar


                            #28
                            Zitat von Uwe! Beitrag anzeigen
                            Gar nichts, weil das eigentliche Programm erst nach Abarbeitung der InitGA Sektion startet.
                            Schön, dass du so davon überzeugt bist.

                            Die Anleitung sagt etwas anderes:

                            "Alle Anweisungen die als Bestandteil einer der in der Sektion [InitGA] aufgeführten Gruppenadressen
                            beinhalten, werden ungültig und die Verarbeitung im ersten Durchlauf ausgeführt."
                            S.155 "HandbuchEibPC-27.odt, 2014-06-18"
                            BR
                            Marc

                            Kommentar


                              #29
                              Zitat von saft6luck Beitrag anzeigen
                              Schön, dass du so davon überzeugt bist.

                              Die Anleitung sagt etwas anderes:
                              Nein, tut sie nicht. Im Handbuch steht explizit "Gruppenadressen". Hier wird also kein Event ausgelöst und darauf hat deine Frage ja abgezielt.

                              Ein genereller Tipp noch: bevor du hier immer wieder kritisierst was im Handbuch nicht alles unvollständig oder mißverständlich dokumentiert ist, im Zweifel einfach mal ausprobieren, was eine Funktion unter bestimmten Situationen macht. Das dauert nicht lange und man hat Gewißheit dass der Code auch so funktioniert wie man es vermutet. Eine Anleitung kann nur selten restlos alle Fragen klären (auch in anderen Programmierumgebungen nicht). Ab und zu muss man halt einfach testen was Sache ist.

                              Kommentar


                                #30
                                Zitat von klaus Beitrag anzeigen
                                Nein, tut sie nicht. Im Handbuch steht explizit "Gruppenadressen". Hier wird also kein Event ausgelöst und darauf hat deine Frage ja abgezielt.
                                Tut es doch! Steht auch da, genau im von mir zitierten Text.

                                Ein genereller Tipp noch: bevor du hier immer wieder kritisierst was im Handbuch nicht alles unvollständig oder mißverständlich dokumentiert ist, im Zweifel einfach mal ausprobieren, was eine Funktion unter bestimmten Situationen macht. Das dauert nicht lange und man hat Gewißheit dass der Code auch so funktioniert wie man es vermutet. Eine Anleitung kann nur selten restlos alle Fragen klären (auch in anderen Programmierumgebungen nicht). Ab und zu muss man halt einfach testen was Sache ist.
                                Du schreibst dir also deine Anleitung dann selbst? Das hilft ungemein!

                                Anstatt hier kluge Reden zu schwingen, solltest du es mal lieber selber testen.

                                Ich gebe dir dann auch noch den Tipp, dass das Beispielprogramm aus der Anleitung einen Bug hat. Den darfst du dann gleich auch noch finden.
                                BR
                                Marc

                                Kommentar

                                Lädt...
                                X