Ankündigung

Einklappen
Keine Ankündigung bisher.

Grammatik / Syntax

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

    Grammatik / Syntax

    Hallo,
    ich versuche eine kleine StateMachine zu tippen:

    Zeit von Ga ermitteln (passiert zwischdurch irgendwann immer wieder, dann soll jeweils die entsprechende Abfrage der If-Liste unten ausgeführt werden)

    1) State = 0
    3) if State == 0 and Zeit < xxx then State = 1
    4) if State == 1 and Zeit < yyy then State = 2
    5) usw.

    Problem: Unter Punkt 3) wird der State ordnungsgemäss geändert. Dann soll aber bevor 4) abgearbeitet wir auf eine neu ermittelte "Zeit" gewartet werden. Das ist aber leider nicht so. Alle folgenden If Abfragen "rutschen" mit ein und der selben "Zeit" durch.
    Wie muss ich das formulieren, damit sowas geht?

    Die eigentliche Frage lautet dann wohl auch, wie werden die If-Anweisungen mit "and" oder "or" abgearbeitet. Müssen bei AND beide Argumente sich zuvor geändert haben, oder nur eins von beiden um zu triggern?
    Und bei OR?

    #2
    Das liegt vermutlich an Deinen Zeitabfragen. Wenn ich Dich richtig verstehe, willst Du die Statusänderungen im Zeitablauf verändern.

    Mit diesen Zeitwerten wäre klar, warum hier alles nach der ersten if-Abfrage durchrutscht:

    1) State = 0
    3) if State == 0 and Zeit < 5s then State = 1
    4) if State == 1 and Zeit < 10s then State = 2
    5) usw.

    So würde es step-by-step ablaufen:

    1) State = 0
    3) if State == 0 and Zeit < 5s then State = 1
    4) if State == 1 and Zeit > 5s and Zeit < 10s then State = 2
    5) usw.

    Viele Grüße

    Michael

    Kommentar


      #3
      ja, nee, so meinte ich das nicht.
      Zwischen den Abfragen soll jeweils eine neue Zeit ermittelt werden, so da auch wieder alle der If-Abfragen in Frage kämen.
      Und danach liegen sie brach bis die nächste Zeit ermittelt wird.

      Kommentar


        #4
        Dann beschreibe das doch einmal mit konkreten Werten und Aktionen.

        So verstehe ich nicht was Dein Ziel ist.

        Kommentar


          #5
          Ich hab was gefunden wie's geht. In jeder if-Abfrage wird nun zusätzlich SMC (StateMayChange) abgefragt.
          Damit werden die if-Abfragen nur zur Bearbeitung frei gegeben, wenn zuvor eine neue Zeit ermittelt wurde und dabei SMC auf EIN geht.
          Das ist zwar ne Krücke und viel Tippaufwand, tut's aber erstmal. Vielleicht hat noch jemand ne bessere Idee das zu lösen.......

          @Jambala: Danke für dein Bemühen.
          [highlight=epc]
          if delayc(DimmerGA, MaximalTastenZeit, DimmTimerRestZeit) then TasteGedrueckt = EIN endif /* Taste gedrückt, Timer starten */
          if (DimmerGA == AUS) and !systemstart() then { /* Taste wieder losgelassen */
          TasteGedrueckt = AUS;
          DimmerZeit = MaximalTastenZeit - DimmTimerRestZeit; /* Timer auslesen, zwischenspeichern */
          SMC = EIN
          } endif
          /* DimmerLevel ermitteln und im Slider anzeigen */
          // Dimmer ist aus
          if (DimmerStatus == 0) and (DimmerZeit =< 300u64) and (SMC == EIN) then { /* Dimmer wurde gerade eingeschaltet */
          SMC = AUS;
          DimmerStatus = 10u08;
          setpeslider(SliderID, convert(DimmerLevel,0f32), LIGHT, ACTIVE, PageID)
          } endif
          // Dimmer ist an
          if (DimmerStatus == 10u08) and (DimmerZeit <= 300u64) and (SMC == EIN) then { /* Dimmer wurde gerade ausgeschaltet */
          SMC = AUS;
          DimmerStatus = 0u08;
          setpeslider(SliderID, 0f32, LIGHT, INACTIVE, PageID)
          } endif
          [/highlight]

          Kommentar

          Lädt...
          X