Hallo LV-Gemeinde,
ich hab ein Programm, bei denen die Events manchmal länger dauern, je nach dem wie schnell mein
Gerät mir die Antworten zurückgibt. Wenn man jetzt einen Schalter öfters schnell drückt, werden die Events
gespeichert und dann ist der Zugriff auf andere Sachen gesperrt (Applikation beenden, usw.)
Kann man verhindern, dass Events gespeichert werden?!
Freu mich über jede Antwort, Gruß Simon
' schrieb:Hallo LV-Gemeinde,
ich hab ein Programm, bei denen die Events manchmal länger dauern, je nach dem wie schnell mein
Gerät mir die Antworten zurückgibt. Wenn man jetzt einen Schalter öfters schnell drückt, werden die Events
gespeichert und dann ist der Zugriff auf andere Sachen gesperrt (Applikation beenden, usw.)
Kann man verhindern, dass Events gespeichert werden?!
Freu mich über jede Antwort, Gruß Simon
Du kannst das Frontpanel für die Zeit in der das Event ausgeführt wird sperren. Dann kann in dieser Zeit niemand ein Steuerelement bedienen. Wenn du ein Event erstellst kann du unten ein Häckchen bei "Lock front panel until the event case for this event completes" setzen.
Hi,
du hast ganz offensichtlich in den jeweiligen Event-Cases While-Schleifen untergebracht, die auf irgendwas warten, gelle?
Das ist nicht gut! Ein Event ist "was kurzes", damit sollte man nur was antriggern...z.B. kann man damit in einen neuen Status eines Zustandsautomaten springen, der dann so oft wiederholt wird, bis dein Ergebnis da ist. Das Programm bleibt aber bis dahin in Bereitschaft für neue Events, z.B. "Abbruch". Sieh dir zu diesem Thema mal die diversen Foreneinträge an!
Zu deinem Problem: Ich weiß nicht, wie man Events "nicht speichern" kann. Aber du kannst ja für jedes Event "Lock frontpanel until event completes" definieren...damit kann dann niemand den Button nochmal drücken...allerdings auch keine anderen. Du könntest aber bei Event-Start diverse Sachen deaktivieren...dann wartetst du bis "fertig" und dann aktivierst du die nötigen Bedienelemente wieder...naja, das ist nicht die feine englische Art, aber es dürft funktionieren.
Du solltest dir aber wirklich mal das Konzept Zustandautomat/State Machine anschauen, damit kann man 99,99% aller Anwendungen in LV ganz bequem erschlagen!
Gruß
Achim
Das Problem ist, dass ich ungefährt 20 Schalter auf dem GUI habe. Mit jedem Schalter schicke ich ein anderes Kommando über RS232 und lese es dann anschließend ein. Solange der ließt, werden alle anderen Events nur gespeichert und danach abgearbeitet. Hier wäre eine Statemachine glaube ich sehr unübersichtlich...
Der Menüpunkt "Lock front panel until the event case for this event completes" ist bei mir schon aktiviert, die Events werden trotzdem gespeichert!
Na dann pack doch alle Schalter in ein Cluster...wenn du einen betätigst, deaktivierst du das komplette Cluster inkl. dem gerade betätigten Button...und dann werden garantiert keine Events gespeichert, weil keine erzeugt werden können! Wenn das Event fertig ist, aktivierst du wieder.
Du musst dazu noch nicht mal für jeden Button einen eigenes Event machen, da reicht ein ValueChange des kompletten Cluster...und im Cluster ermittelst du mit "new Value", welcher Button grad gedrückt wurde...
[
attachment=10400] Hier fehlt noch die De-/aktivierung...
A.
' schrieb:und dann werden garantiert keine Events gespeichert, weil keine erzeugt werden können!
Das ist ohne Zusatz aber nur bedingt richtig - zumindest bei mir und in LV8.5. Siehe Anhang.
Wenn das Bedienelement disabled ist und im Event "Frontpanel sperren" aktiviert ist, dann kann man auf das deaktivierte Element 10mal klicken - und diese 10 Klicks werden der Reihe nach abgearbeitet. Selbst unsichtbare Bedienelemente kann mal so betätigen.
Nur ein Deaktivieren des Bedienelementes und das Wegklicken von "Frontpanel sperren" (also darf das Frontpanel bearbeitet werden) funktioniert.
Ganz klar: Bei "Frontpanel sperren" wird der Klick gespeichert, nicht das Event. Ist der Eventcase fertig und das Bedienelement wieder enabled, erst dann wird der Klick ausgeführt - auf einem enableden Bedienelement. Bei nicht gesperrtem Frontpanel wird der Klick ausgewertet: Das Bedienelement ist aber disabled => kein Event.
' schrieb:Das ist ohne Zusatz aber nur bedingt richtig - zumindest bei mir und in LV8.5. Siehe Anhang.
Wenn das Bedienelement disabled ist und im Event "Frontpanel sperren" aktiviert ist, dann kann man auf das deaktivierte Element 10mal klicken - und diese 10 Klicks werden der Reihe nach abgearbeitet. Selbst unsichtbare Bedienelemente kann mal so betätigen.
Nur ein Deaktivieren des Bedienelementes und das Wegklicken von "Frontpanel sperren" (also darf das Frontpanel bearbeitet werden) funktioniert.
Ganz klar: Bei "Frontpanel sperren" wird der Klick gespeichert, nicht das Event. Ist der Eventcase fertig und das Bedienelement wieder enabled, erst dann wird der Klick ausgeführt - auf einem enableden Bedienelement. Bei nicht gesperrtem Frontpanel wird der Klick ausgewertet: Das Bedienelement ist aber disabled => kein Event.
Ok, ich hab mir das so gedacht:
[
attachment=10419]
Allerdings hab ich nicht weit genug gedacht...es sollte ja innerhalb des gleichen Events zuerst deaktiviert und dann wieder aktiviert werden...
Ich nehm' alles zurück und behaupte das Gegenteil...