Ankündigung

Einklappen
Keine Ankündigung bisher.

pbutton bleibt länger als 1 Verarbeitungszyklus auf 1

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

    pbutton bleibt länger als 1 Verarbeitungszyklus auf 1

    Seit dem Patch 2.300 kämpfe ich mit allerhand Problemen.

    Eines davon ist, dass folgendes Macro nicht mehr funktioniert, welches ich erstellt habe um eine einfache Variable (über "address" übergeben) umzuschalten per webserver button

    Code:
    :begin mButton(idButton, idPage, address)
      if (pbutton(idButton, idPage) == 1) and (address == EIN) then {
        write('8/8/8'u64, 1u64);
        address = AUS;
        pdisplay(idButton,$AUS$c14,SWITCH,ACTIVE,GREEN, idPage)
      } endif;
      
     if (pbutton(idButton, idPage) == 1) and (address == AUS) then {
       write('8/8/8'u64, 0u64);
       address = EIN;
       pdisplay(idButton,$EIN$c14,SWITCH,INACTIVE,GREEN, idPage)  
     } endif;
    :end
    [URL="https://knx-user-forum.de/misc.php?do=bbcode#code"][/URL]


    Immer werden beide if-Abfragen durchlaufen. Möchte ich also ausschalten, dann sehe ich in dem Meldungsfenster des EIBStudio (v2.301), dass erst eine "1" gesendet wird und dann eine "0" (über die write-Funktionen, die ich zur Debug-Zwecken eingefügt habe.

    Habt ihr ähnliche Effekte oder Ideen, wie ich dies jetzt umgehen kann?

    // Michael

    #2
    Hi Michael,

    if (pbutton(idButton, idPage) == 1) and (address == EIN) then {
    write('8/8/8'u64, 1u64);
    address = AUS;
    pdisplay(idButton,$AUS$c14,SWITCH,ACTIVE,GREEN, idPage)
    } endif;

    if (pbutton(idButton, idPage) == 1) and (address == AUS) then {
    write('8/8/8'u64, 0u64);
    address = EIN;
    pdisplay(idButton,$EIN$c14,SWITCH,INACTIVE,GREEN, idPage)
    } endif;

    Ich habe die kritischen Stellen mal fett gemacht. Wenn Du auf den Button drückst, und address eben ein ist, dann wird's ausgeschaltet und führt dazu, das die nächste Abfrage eben auch "zuschlägt".

    Probier's mal so:

    [highlight=epc]
    :begin mButton(idButton, idPage, address)

    if (pbutton(idButton, idPage) == 1) then {
    address = !address;
    write('8/8/8'u64, address);
    if address then pdisplay(idButton,$AUS$c14,SWITCH,ACTIVE,GREEN, idPage) \\
    else pdisplay(idButton,$EIN$c14,SWITCH,INACTIVE,GREEN, idPage) \\
    endif
    } endif
    :end
    [/highlight]

    Gruß,
    Bernd

    Kommentar


      #3
      Wie Bernd schreibt, ist also nicht das Problem, dass die Verarbeitung länger auf 1 bleibt, sondern der Code an sich fehleranfällig ist. Die neue Verarbeitung macht das sichtbar. GGf. würde sich der Code auch in der alten Version oder der aktuellen anders verhalten, wenn Du die Codezeilen im Programm anders anordnest. Die Lösung wurde aufgezeigt.
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar

      Lädt...
      X