Ankündigung

Einklappen
Keine Ankündigung bisher.

Reihenfolge Delay - Auswirkungen auf Variablen?

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

    Reihenfolge Delay - Auswirkungen auf Variablen?

    Hallo zusammen

    Ich bin im Augenblick total verwirrt. Bisher leuchtete mir die Logik des EibPC's ein - nun verstehe ich nur noch Bahnhof.

    Konkret geht es darum, dass ich zwei Delay Anweisungen - nennen wir sie Delay(a) und Delay(b) im Programm habe.

    Ist die Reihenfolge Delay(a) und direkt darunter im Programm Delay(b), dann liefert die Abfrage der Variablen für alle involvierten die erwarteten Werte. Kopiere ich dann Delay(b) vor Delay(a), dann bleibt einer der Variablen plötzlich leer... Bahnhof.... (Übrigens, das Programm habe ich jedesmal frisch kompliziert und auf den EibPC übertragen...

    Konkret heisst das im Fall 1
    DampfbadVerzoegerung 90000
    DampfbadTimerMS 60000
    DampfbadTimerMin 1

    Im Fall 2
    DampfbadVerzoegerung 0
    DampfbadTimerMS 60000
    DampfbadTimerMin 1

    Hier das konkrete Programm - bitte um Hilfe!

    [highlight=epc]
    // Dampfbadtimer von Controlpanel übernehmen für Licht EIN nach Timerende
    DampfbadTimerMin=1s64
    DampfbadVerzoegerung=DampfbadTimerMS+30000s64
    if (event("Bad - Timer Dampfbad-15/7/120")) then \\
    DampfbadTimerMin=convert("Bad - Timer Dampfbad-15/7/120",DampfbadTimerMin) \\
    endif
    DampfbadTimerMS=DampfbadTimerMin*60000s64

    if delay("Bad (unten) - Taste 1, Links-15/0/121"==EIN, DampfbadTimerMS) then \\
    write("Bad - Decke (Wert)-4/3/11",100%) \\
    endif
    if delay("Bad (unten) - Taste 1, Links-15/0/121"==EIN, DampfbadVerzoegerung) then \\
    write("Bad (unten) - Taste 1, Links-15/0/121",AUS) \\
    endif
    [/highlight]

    #2
    Damit es überhaupt geht, musst Du u64 (nicht s64) nehmen:
    [highlight=epc]
    // Dampfbadtimer von Controlpanel übernehmen für Licht EIN nach Timerende
    DampfbadTimerMin=1u64
    DampfbadTimerMS=DampfbadTimerMin*60000u64
    DampfbadVerzoegerung=DampfbadTimerMS+30000u64
    if (event("Bad - Timer Dampfbad-15/7/120")) then {
    DampfbadTimerMin=convert("Bad - Timer Dampfbad-15/7/120",DampfbadTimerMin)
    } endif

    if delay("Bad (unten) - Taste 1, Links-15/0/121"==EIN, DampfbadTimerMS) then {
    write("Bad - Decke (Wert)-4/3/11",100%)
    } endif

    if delay("Bad (unten) - Taste 1, Links-15/0/121"==EIN, DampfbadVerzoegerung) then {
    write("Bad (unten) - Taste 1, Links-15/0/121",AUS)
    }endif
    [/highlight]
    Mir ist nicht ganz klar, was nicht gehen soll. Kannst Du das noch etwas erläutern?
    EDIT: Wenn ich dich recht verstehe, meinst Du, die Variablen wären nicht richtig ausgewertet?
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hm, eigentlich funktioniert "S" richtig gut... Solange ich nur delay(a) habe... Nur wenn ich zwei von diesen delay angebe, wird nur das zweite ausgeführt.... Ich hatte vermutet, dass es an den Variablen liegt... das einzige was ich tue ist delay(a) und delay(b) im Code mit Copy&Paste umdrehen.... Und je nachdem werden die Variablen unterschiedlich ausgewertet - und ich verstehe nicht warum (muss aber wohl an mir liegen, das "Teil" ist super ansonsten!

      Kommentar


        #4
        Zitat von kaempfen Beitrag anzeigen
        Hm, eigentlich funktioniert "S" richtig gut... Solange ich nur delay(a) habe... Nur wenn ich zwei von diesen delay angebe, wird nur das zweite ausgeführt.... Ich hatte vermutet, dass es an den Variablen liegt... das einzige was ich tue ist delay(a) und delay(b) im Code mit Copy&Paste umdrehen.... Und je nachdem werden die Variablen unterschiedlich ausgewertet - und ich verstehe nicht warum (muss aber wohl an mir liegen, das "Teil" ist super ansonsten!
        Ok, ich habe das eben gecheckt. Der Compiler macht tatsächlich keine Fehlermeldung bei dem s64, was aber sicher der Fall sein müsste - schau mal im Ereignisspeicher nach, da müsste was drinnen stehen.
        Also bitte mal auf u64 umstellen und noch mal testen. Die nächste Version wird das scicher richtig machen.

        Die Reihenfolge an sich ist egal und ich denke, es ist einfach in der Firmware ein Problem, wenn da ein s64 Datentyp steht. In solchen Fällen sollte ein Ereignis im Log stehen und die Verarbeitung nicht mehr sauber erfolgen - es wird da einfach abgebrochen, nicht dass der EibPC in schlimmeren Programmier - oder Compilerfehlern () hängt. Das Abbrechen hängt dann seinerseits vom Code ab, so dass sich dies Verhalten damit erklären liese.
        Ach ja, was gibt denn der Info-Button aus (Firmware, patches) ...
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Wow, das war's

          Umstellung auf "U" hat es gebracht. Jetzt verhält es sich so, wie man erwartet. Danke für die Unterstützung! Wenn ich noch was liefern soll, einfach melden

          Nochmals Danke

          Einen Hinweis noch (habe ich bisher als nicht schlimm taxiert: wenn man ein neues Makro hinzufügt und die Erstellung dann abbricht, dann werden die bisherigen bereits eingegebenen Makros verschoben - funktionieren tun sie aber weiterhin)

          Kommentar


            #6
            Zitat von kaempfen Beitrag anzeigen
            Wenn ich noch was liefern soll, einfach melden
            Wenn Du noch Fehler hast, dann immer gerne (auch hier in offener Kommunikation).
            Nochmals Danke
            Keine Ursache.
            wenn man ein neues Makro hinzufügt und die Erstellung dann abbricht, dann werden die bisherigen bereits eingegebenen Makros verschoben - funktionieren tun sie aber weiterhin)
            Ich werds mal weitergeben.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar

            Lädt...
            X