Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu ready()

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

    Frage zu ready()

    Hallo,

    kurze Frage zu ready(), das ich bisher noch nicht verwendet habe. Verstehe ich es richtig, dass der Unterschied zwischen systemstart() und reday() nur darin besteht, dass ready() dauerhaft auf 1 bleibt wohingegen systemstart nur für einen Zyklus auf 1 und dann wieder auf 0 geht?
    Oder gibt es mehr Unterschiede, da die Beschreibung der beiden Funktionen im Handbuch sehr unterschiedlich definiert ist.

    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    #2
    systemstart() ist während des ersten Zyklusses auf 1, bis die Initialisierung abgeschlossen ist. ready() geht erst danach auf 1 und bleibt da.

    Achtung: sowas wie
    if ready() or ...
    funktioniert demnach nicht, weil ready() auf 1b01 bleibt und sich die Bedingung nicht mehr ändert. also zB immer mit if change(ready()) and ready() ...

    Kommentar


      #3
      Danke!
      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

      Kommentar


        #4
        Zitat von foobar0815 Beitrag anzeigen
        systemstart() ist während des ersten Zyklusses auf 1, bis die Initialisierung abgeschlossen ist. ready() geht erst danach auf 1 und bleibt da.

        Achtung: sowas wie
        if ready() or ...
        funktioniert demnach nicht, weil ready() auf 1b01 bleibt und sich die Bedingung nicht mehr ändert. also zB immer mit if change(ready()) and ready() ...
        Jetzt steh' ich auf dem Schlauch: Wenn ready() sich nicht mehr ändert, sollte auch change(ready()) doch keine Auswirkung mehr haben? Es "changed" ja nix mehr ... oder ??? 🤔

        Kommentar


          #5
          Eben. Die ready-Bedingung ist damit nur beim Beginn der normalen Vererbeitung wahr, also wird der zweite Teil der Bedingung ausgewertet. Anderenfalls bleibt die Bedingung immer wahr und der Rest spielt keine Rolle mehr

          Kommentar


            #6
            Code:
            if ready() then ...
            feuert nur ein Mal, danach nie mehr wieder.

            Genauso macht das
            Code:
            if change(ready()) and ready() then ...
            was somit zum Statement zuvor keinen Unterschied macht.

            Lediglich
            Code:
            if change(ready()) or (ready() and <Bedingung>) then ...
            sorgt dafür, dass einmalig gefeuert wird, wenn das System ready ist, und danach, wenn die Bedingung von 0 auf 1 geht.


            ​
            KNX, openHAB 4.3, EibPC²

            Kommentar


              #7
              Danke für die Ergänzung. Ist offenbar nicht ganz klar geworden, dass ist mir oben im den Fall
              "Beim Start und danach wenn eine andere Bedingung erfüllt ist" ging

              Kommentar


                #8
                und was genau, detailliert, passiert alles während systemstart() 1 ist, bevor es auf 0 geht und ready() auf 1 geht?
                (NTP, GA init, ….)

                Kommentar


                  #9
                  Ist ready() eigentlich (und simpel gedacht) nichts anderes, als !systemstart() und damit die Komplementärfunktion?

                  Kommentar


                    #10
                    Zitat von Tokamak Beitrag anzeigen
                    Code:
                    if ready() then ...
                    feuert nur ein Mal, danach nie mehr wieder.

                    Genauso macht das
                    Code:
                    if change(ready()) and ready() then ...
                    was somit zum Statement zuvor keinen Unterschied macht.

                    Lediglich
                    Code:
                    if change(ready()) or (ready() and <Bedingung>) then ...
                    sorgt dafür, dass einmalig gefeuert wird, wenn das System ready ist, und danach, wenn die Bedingung von 0 auf 1 geht.​
                    Warum aber das "change(ready())"?

                    Code:
                    if (ready() or <Bedingung>) then ...
                    sollte doch genauso funzen. Feuert entsprechend der Bedingung einmal beim Wechsel des ready() von 0 auf 1 und anschließend nur noch abhängig von der Bedingung. Oder lieg' ich falsch?

                    Kommentar


                      #11
                      Nein, weil ready() 1 bleibt und sich der Wahrheitswert des Oders nie mehr ändert
                      KNX, openHAB 4.3, EibPC²

                      Kommentar


                        #12
                        Zitat von Tokamak Beitrag anzeigen
                        Nein, weil ready() 1 bleibt und sich der Wahrheitswert des Oders nie mehr ändert
                        Wieso? <Bedingung> kann sich doch ändern und da es mit ready() and-verknüpft ist, ändert sich auch der ganze boolesche Term.

                        Kommentar


                          #13
                          Du hattest "or" geschrieben.

                          Bei "and" würde es nicht feuern, wenn ready() 1 wird, aber die Bedingung 0 ist.
                          KNX, openHAB 4.3, EibPC²

                          Kommentar


                            #14
                            Zitat von Tokamak Beitrag anzeigen
                            Du hattest "or" geschrieben.

                            Bei "and" würde es nicht feuern, wenn ready() 1 wird, aber die Bedingung 0 ist.
                            Ooops - Du hast natürlich recht!

                            Kommentar


                              #15
                              foobar0815: Neben ready() habe ich gerade im Manual noch blackout() gefunden. Das wird nach unerwartetem Neustart zu 1b01. Stellt sich ein klein wenig die Frage, was genau ein "unerwarteter" Neustart ist. Wahrscheinlich führt nur flashen zu einem ​​​erwarteten Neustart? Alles andere unerwartet?

                              Kommentar

                              Lädt...
                              X