Ankündigung

Einklappen
Keine Ankündigung bisher.

[BUG] ? then und else-zweig werden beide durchlaufen...?

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

    [BUG] ? then und else-zweig werden beide durchlaufen...?

    ich weiß nicht ob ich hier einen Wurm im Kopf habe...

    hier ein Auszug aus meinem Code, bei dem der then- und else-zweig gleichzeitig durchlaufen werden:

    Code:
    if event("EGF_TAS86T_T2Lang-5/3/7") then {
        if "EGK_SRV_SperrenAutomatik-2/0/3" == 0b01 then {
            write("EGK_SRV_SperrenAutomatik-2/0/3", 1b01)
        } else {
            write("EGK_SRV_SperrenAutomatik-2/0/3", 0b01)
        } endif;
        if save == 0u08 then {
            if "EGF_TAS86T_T2Status-5/3/6" < 5 then {
                save = 4u08;
                write("EGF_TAS86T_T2Status-5/3/6", 5u08);
            } else {
                save = "EGF_TAS86T_T2Status-5/3/6"
            } endif;
            write("EGK_SRV_SzeneLernenModus-2/0/5", 1b01)
        } else {
            write("EGK_SRV_SzeneLernenModus-2/0/5", 0b01);
            write("EGK_SRV_SzeneLernen-2/0/4", 64 + "EGF_TAS86T_T2Status-5/3/6" - 2);
            save = 0u08
        } endif
    } endif
    und das Telegramm-Protokoll dazu:
    image.png

    1. Taste T2 lang wird ausgelöst, der then-Zweig in der ersten Zeile des Codes wird durchlaufen
    2. SperrenAutomatik wird korrekt getoggled
    3. save==0, daher wird der then-Zweig durchlaufen, man erkannt das daran dass T2Status gesendet wird UND
    4. ein "Ein"-Telegram mit GA SzeneLernenModus

    "gleichzeitig" wird aber auch ein
    5. "Aus"-Telegram mit GA SzeneLernenModus gesendet, das kann nur im else-Zweig (save !=0) passieren, es gibt im code keine andere stelle wo das passiert...
    6. auch das SzeneLernen-Telegram gibt's nur im else-zweig


    ich verstehe das nicht. Warum wird der then-zweig (save==0) UND der else-zweig (save!=0) "gleichzeitig" durchlaufen?

    Danke
    Tab

    #2
    Hi,

    Zitat von TabSel Beitrag anzeigen
    ch verstehe das nicht. Warum wird der then-zweig (save==0) UND der else-zweig (save!=0) "gleichzeitig" durchlaufen?
    weil der EibPC nicht sequentiell arbeitet sondern ereignisgesteuert., und if/else einzeln in if (Bedingung) und if (!Bedingung) übersetzt werden.

    Wenn nun der If die Beningung ändert so dass !Bedingung stimmt, werden in einem Zyklus beide Pfade durchlaufen. Siehe dazu Handbuch S. 35

    Kommentar

    Lädt...
    X