Ankündigung

Einklappen
Keine Ankündigung bisher.

comobject(): notwendig oder ersetzbar?

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

    comobject(): notwendig oder ersetzbar?

    Result = comobject(Variable1, Variable2, Variable3, Variable4, Variable5)

    liefert den Wert der Variablen, der sich als letzter verändert hat.
    aber könnte ich statt dessen nicht auch schreiben:

    Result = Variable1
    Result = Variable2
    Result = Variable3
    Result = Variable4
    Result = Variable5

    und hätte auch hier in Result immer den Wert derjenigen VariableX, die als letztes verändert wurde?

    Was habe ich jetzt übersehen, denn comobject() war meines Wissens nach nicht von Anfang an verfügbar und normalerweise wurden doch neue Funktionen nur dann geschaffen, wenn sich die Anforderung nur schlecht oder gar nicht mit schon vorhandenen Mitteln umsetzen ließ...
    Tessi

    #2
    Hast Du das mal compiliert?

    Kommentar


      #3
      Nein, bislang habe ich das nicht benötigt und seit sich mir die Frage gestellt hat habe bin ich noch nicht an meinem PC gewesen.

      Wenn es denn aber so nicht akzeptiert wird, stellt sich mir gleich wieder die Frage, warum den nicht...
      Tessi

      Kommentar


        #4
        Die Deklaration einer Variable muss eindeutig sein, deshalb wird das so nicht gehen.
        Enertex Bayern GmbH - www.eibpc.com

        Kommentar


          #5
          aber

          [highlight=epc]

          if change(Variable1) then Result = Variable1 endif
          if change(Variable2) then Result = Variable2 endif
          usw..

          [/highlight]

          müsste gehen ...

          da is comobject schneller getippt...
          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

          Kommentar


            #6
            Also wenn wir mal annehmen,

            Result = Variable1
            Result = Variable2
            Result = Variable3
            Result = Variable4
            Result = Variable5

            sei nicht eindeutig weil sich theoretisch mehrere Variablen in einem Zyklus ändern könnten, wie ist es dann mit der Eindeutigkeit von

            Result = comobject(Variable1, Variable2, Variable3, Variable4, Variable5)

            ?

            Immerhin könnten sich auch hier mehrere Variablen in einem Zyklus ändern und so stünde diese Funktion vor dem gleichen Dilemma wie obige Anweisungsfolge. Wenn obige Anweisungsfolge ein Problem ist, das so schwerwiegend ist, das der Compiler es nur durch Weigerung es anzunehmen lösen kann, wieso ist es dann bei comobject() kein Problem?

            Und warum ist

            if change(Variable1) then Result = Variable1 endif
            if change(Variable2) then Result = Variable2 endif
            if change(Variable3) then Result = Variable3 endif
            if change(Variable4) then Result = Variable4 endif
            if change(Variable5) then Result = Variable5 endif

            dann OK, den auch hier kann genau das selbe Problem auftreten.

            Überhaupt stellt sich mir jetzt die Frage, wie kann ich vorhersagen, wenn in einem Zyklus mehrere Zuweisungen an die selbe Variable auftreten (weil diese in then-Zweigen stehen, deren Bedingungen "zufällig" im selben Zyklus wahr werden), welchen Wert die Variable dann am Ende haben wird?
            Werden die Anweisungen, die im jeweiligen Zyklus überhaupt verarbeitet werden, wenigstens in der Reihenfolge ihres Auftretens abgearbeitet oder sortiert der Compiler das auch noch irgendwie um?
            Tessi

            Kommentar


              #7
              Also folgende Überlegungen:

              if change() ist IMHO nicht ganz korrekt, es müßte event() sein und sich auf eine GA, nicht auf eine Variable beziehen.

              Pro Zyklus wird im EibPC IMHO genau 1 event abgearbeitet. Daher sollte die Abarbeitungsreihenfolge auch genau dem Inhalt der KNX Warteschlange entsprechen.

              [highlight=epc]
              Result = comobject( GA1, GA2, ..., GAn)
              [/highlight]

              Müßte äquivalent sein zu

              [highlight=epc]
              if event(GA1) then Result = GA1 endif
              if event(GA2) then Result = GA2 endif
              ...
              if event(GAn) then Result = GAn endif
              [/highlight]

              wobei man hier mit event oder eventwrite noch die Unterscheidung machen kann, ob man auch auf Lesetelegramme als Wert setzend reagieren will.

              Gruß,
              Bernd

              Kommentar


                #8
                Wenn die Angelegenheit auf KNX-Telegramme beschränkt wäre, dann gäbe es das Problem tatsächlich nicht, nur kann comobject() laut Handbuch*) beliebige Variablen verarbeiten (so wie auch change(), das genau deswegen hier wohl auch gewählt wurde) - und da können sich nun einmal mehrere in einem Zyklus ändern.

                *) Ich gehe jetzt einfach mal davon aus, dass das Handbuch hier korrekte Angaben enthält.
                Tessi

                Kommentar


                  #9
                  Zitat von Tessi Beitrag anzeigen
                  Wenn die Angelegenheit auf KNX-Telegramme beschränkt wäre, dann gäbe es das Problem tatsächlich
                  Ich versteh hier die Diskussion nicht. Comobject und change funktionieren wie beschrieben. Comobject dient zur Realisierung einer StatusGA. So einfach ist das ....
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Zitat von enertegus Beitrag anzeigen
                    Comobject dient zur Realisierung einer StatusGA. So einfach ist das ....
                    Das mag so gedacht sein, aber im Handbuch steht nicht GA sondern Variable! Und da können sich mehrere in einem Zyklus ändern und dann weiß ich nicht, welchen Wert comobject() dann liefern wird, da ich nicht weiß, in welcher Reihenfolge voneinander unabhängige Ausdrücke abgearbeitet werden.

                    Angenommen ich habe folgenden (Pseudo)Code:

                    a=x+1
                    b=x+2
                    c=x+3
                    d=x+4
                    e=x+5

                    Result=comobject(a,b,c,d,e)

                    Jetzt wird irgendwann x ein neuer Wert zugewiesen und alle Variablen a-e werden gleichzeitig invalid und bekommen neue Werte zugewiesen. Damit wird auch comobject() aktiv und liefert einen neuen Wert an Result, nur welchen von den 5?

                    Wird jetzt deutlich, was ich meine?

                    Falls die Argumente aber nur "echte" GAs sein dürfen, dann sollte das auch so im Handbuch stehen.
                    Tessi

                    Kommentar

                    Lädt...
                    X