LabVIEWForum.de - Case vs. Event ...und viele Buttons!

LabVIEWForum.de

Normale Version: Case vs. Event ...und viele Buttons!
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

folgendes Problem: Ich habe eine VI mit vielen Buttons (ca. 30, latch) und möchte beim klicken auf einen dieser Buttons eine (buttonspezifische) Aktion ausführen. Jetzt habe ich diese Buttons alle zu einem Boolarray zusammengeführt und diesen dann in eine Zahl umgewandelt welche dann eine Case Sturktur steuert. Eine schöne Schleife drum und fertig.
Ist es nun besser die Buttons in einer eigenen Schleife laufen zu lassen (wegen latch) und die Aktionen per Event zu starten? Wo liegt denn der Unterschied zwischen einer Schleife, die die Buttons bei jedem Loop überprüft und einem Event Case, welches die Buttons überwacht?

Gruß
Hallo,

Zitat:Ist es nun besser die Buttons in einer eigenen Schleife laufen zu lassen (wegen latch) und die Aktionen per Event zu starten?
Ja. Leichter erweiterbar, besser lesbar durch (benannte) Eventcases...

Zitat:Wo liegt denn der Unterschied zwischen einer Schleife, die die Buttons bei jedem Loop überprüft und einem Event Case, welches die Buttons überwacht?
Im ständig CPU-Last erzeugenden Polling...
Lad doch mal das angefangene VI hoch (es interessiert das FP, weniger der Code auf dem BD) und beschreibe etwas genauer, was Du vorhast.
Es könnte z.B sein, daß sich mit Radio-Buttons (Im deutschen LV "Optionsfelder" genannt) eine überraschend einfache Löung anbietet. Das könnte man prüfen.

Edit: Habe mal 3 verschiedenen Bedien-Behandlungen gegenübergestellt:
E1: Behandlung erfolgt nicht sofort, der Eigenschaftsknoten wird auch ohne Wertänderung dauernd aufgerufen, was in einer zeitkritischen Hauptscheife tödlich sein kann.
E2: Behandlung erfolgt nur bei Wertänderung und sofort, allerdings kommt es zu "irregulären" Zeiten beim Schleifendurchlauf, wie man am Stottern des Signaltons erkennt
E3: Behandlung sofort und nur bei Wertänderung, keine Beeinflussung des Schleifentaktes der Hauptschleife
[attachment=34450]
[attachment=34451]
Hi,

danke erstmal für die Antworten.

Genau um das Polling geht es mir. Ich wollte halt wissen ob das Polling (Version E1) oder die Methode E3 besser ist für eine große Anzahl von bspw. Boolean's. Des Weiteren muss ich doch in E3 bei einem Button mit "latch"-operation diese Buttons ja auslagern in eine unabhängige Schleife oder? Sonst wechseln sie ja nicht mehr von true nach false nach drücken?

Hab mal meine Idee in eine VI gepackt und angehängt. Dieses möchte ich gerne mit einem Eventcase vereinfachen bzw. nur vereinfachen wenn es effektiver (weniger PC Recourcen, schnellere VI etc.) ist.

gruß
z.B. so:
(Die Schalter sind Elemente in einem transparentem Cluster)
[attachment=34473]

[attachment=34474]
Hallo E,

Zitat:nur vereinfachen wenn es effektiver (weniger PC Recourcen, schnellere VI etc.) ist.
Erste Vereinfachung: eine Timing-Funktion in die Schleife packen. Wozu Millionen Male in der Sekunde die Buttons abfragen?
Hatte ich schon erwähnt, das Polling CPU-Resourcen unnötig belegt? Smile

Zweite Vereinfachung:
Statemachine benutzen. Per Eventstruktur die Knöpfe in State-Befehle umsetzen. Sehr sauber, sehr gut lesbarer Code, sehr einfach auf mehrere VIs veteilbar...

Dritte Vereinfachung:
Die Knöpfe für benutzerdefinierte Events definieren. Man kann die Knöpfe über ihren Namen zusammensuchen und wird so unabhängig von der Anzahl der Knöpfe. Und kann wieder eine Eventstruktur benutzen...

@Lucki:
Der Fragesteller hat nur LV7.1...
zu 1) Hab ich vergessen stimmt.

zu 2) Könntest Du das ein wenig genauer erklären? Meinst Du, dass ich eine Eventstruktur mit "Value Change"-Case von jedem Button anlege und dann dort die Ereignisse ausführe und anschließend den Button wieder FALSE stelle?

zu 3) In dem Event über die Referenz des geänderten Wertes eine Casestruktur anlegen? Ist das besser als mehrere Cases anzulegen?

gruß
Hallo E,

zu 2)
Deine Knöpfe sollten Latched sein, dann brauchst du sie nicht selbst zurücksetzen. Im Eventcase gibst du nur ein Enum mit dem zu bearbeitenden State aus - die Statemachine selbst ist außerhalb der Eventstruktur (und evtl. auch außerhalb derer WhileLoop)... (Zu Statemachines gibt es mitgelieferte Beispiele!)

zu 3)
[attachment=34475]
Wobei ich nicht weiß, ob LV7.1 schon dynamische Events unterstützt. Indem man die Referenzen auf alle zu bearbeitenden Controls zusammensammelt und sie alle (als Array) als dyn. Event registriert, kann man unabhängig von der Anzahl der Controls arbeiten. Man muss dann nur eine kleine Fallunterscheidung (anhand Controlname oder -caption) im Event durchführen...
(30.06.2011 19:47 )GerdW schrieb: [ -> ]@Lucki:
Der Fragesteller hat nur LV7.1...
Danke, habs oben editiert, Bild hinzugefügt
Hatte Emittance mit dem anderen Poster verwechselt, der 7.1 als Profil angibt und im Text schreibt, daß er 2010 hat.
Also sollte jeder Button besser als State behandelt werden und nicht direkt einem Case zugeteilt werden? Also nicht so wie bei Lucki Big Grin

Ich hab mal was gebastelt, ich hoffe ich verstehe es jetzt richtig.

...Anmerkung: kann irgendwie nur 2 mal auf irgendeinen Button klicken, danach geht nix mehr.

Gruß
Seiten: 1 2
Referenz-URLs