Effekt bei Doppelklick - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Effekt bei Doppelklick (/Thread-Effekt-bei-Doppelklick) Seiten: 1 2 |
Effekt bei Doppelklick - geist07 - 17.08.2010 06:52 Hallo, ich habe in folgendem VI einen Effekt den ich mir nichr erklären kann wo der herkommt. Vieleicht sieht es jemand von euch. Was soll das VI machen? Solange T0 betätigt ist soll die Whilschlife ausgeführt werden, T0 nur True während Maustaste gedrückt - funktioniert Bei einfachem Druck auf eine andere Taste soll die entsprechende Meldung ausgelöst werden (da kommen noch Melder hin) - funktioniert Jetzt der Effekt: Bei Doppelklick auf T0 rastet diese. Wieso? Ich weiß nur das es etwas mit der Wartezeit von 100ms zu tun hat. LV2009: [attachment=28790] geist Effekt bei Doppelklick - GerdW - 17.08.2010 07:48 Hallo geist, schon etwas kompliziert, deine Logik... Hast einen Cluster auf dem UI, welches der Benutzer bedienen soll und wo du munter vom Programm aus Werte reinschreibst... 1) Du erzeugst einen Melder-Eintrag bei jeder Wertänderung von T0, also auch, wenn der Benutzer den Knopf loslässt. Vielleicht nur dann Meldungen erzeugen, wenn T0=TRUE?! 2) Du vergleichst ein boolsches Element mit TRUE auf Gleichheit. Was soll das? (Das ist unnötig, google mal nach Rube-Goldberg! IF TRUE=TRUE THEN TRUE ELSE FALSE ) 3) Unbundle by Name trägt ungemein zur Lesbarkeit von Code bei... 4) Wieso schreibst du nach deiner While-Schleife nochmal ein FALSE in den Cluster? T0 ist doch schon FALSE - sonst wäre die Schleife nicht beendet worden... (Der komplette Frame2 ist unnötig - RubeGoldberg!) Effekt bei Doppelklick - geist07 - 17.08.2010 08:59 Hallo Gerd, wie soll ich sonst ein Bedienelement anpassen wenn sich deren Zustand programmbedingt ändern muss? 1) wie fragst du T0=TRUE ab? ich habe jetzt in der Ereignisstruktur über Wertänderung den neuen Wert abgefragt und gesagt wenn True dann schreibe in Melder, sonst nix 2) stimmt ist sinnlos 3) nehm ich normalerweise auch aus diesem Grund. Nur hier eben nicht. Warum weiß der Geier - vielleicht auch nicht. 4) Den 2. Frame benötige ich um beim verlassen von der Whileschleife den vorhergehenden Status wieder herzustellen. Setzte ich dabei nicht auf False so wird dieser wieder TRUE geist Effekt bei Doppelklick - GerdW - 17.08.2010 10:06 Hallo geist, "4) Den 2. Frame benötige ich um beim verlassen von der Whileschleife den vorhergehenden Status wieder herzustellen. Setzte ich dabei nicht auf False so wird dieser wieder TRUE" Dein T0-Schalter ist so konfiguriert, dass er TRUE bleibt, solange der Benutzer ihn gedrückt hält. Lässt der Benutzer los, geht er auf FALSE zurück. Deine While-Loop läuft, bis der Schalter auf FALSE geht. Im nächsten Frame setzt du den Schalter dann (zur Sicherheit?!) nochmal auf FALSE? Effekt bei Doppelklick - geist07 - 17.08.2010 10:21 Hallo Gerd Ziel ist, wenn zuvor beispielsweise T6 gedrückt war, dass nach dem loslassen von T0 auch T6 wieder gesetzt wird. Da ich aber das Cluster mit den Werten vom drücken der Taste T0 initalisiere, muss ich T0 erneut auf False setzten. Ich will letzlich nur dass ich wieder die vorherige Ausgangsstellung erreiche. geist Effekt bei Doppelklick - GerdW - 17.08.2010 10:52 Hallo geist, da sieht man mal wieder schön, warum (Un)BundleByName hier Vorteile hat: man muss nur das setzen, was wirklich nötig ist und muss nicht alle Eingänge betrachten... Effekt bei Doppelklick - geist07 - 17.08.2010 11:41 Hallo Gerd, das ich nur das Element betrachten brauch was ich ändern will ist bei (Un)BundleByName soweit klar. Benötige dabei aber jedesmal ein Eingangscluster. Und bei diesem steht in meinem Programm T0 nuneinmal auf True. Ich habe aber irgendwo das Gefühl dass wir aneinander vorbeireden, oder ich dich nicht ganz verstehe. Somal ich das gleiche Ergebnis erziele wenn ich BundleByName nehme, oder eben das andere nehme. Vieleicht hast du ein Beispiel für jede Variante. Auf das mir ein Licht aufgeht. geist Effekt bei Doppelklick - GerdW - 17.08.2010 12:17 Hallo geist, siehe Anhang. Zu deinem eigentlichen Problem: Bei einem Doppelklick unter 100ms bekommt deine While-Loop den Schaltvorgang nicht mit und läuft ungestört weiter - der zwischenzeitliche Umschaltvorgang H->L->H wurde ja "übersehen". Entweder machst du die While-Loop schneller (z.B. 10ms, wobei nur jede 10 Iteration gezählt wird) oder du verwendest in der Loop auch ein Event (z.B. per Melder von deinem Event-Producer-Loop)... Effekt bei Doppelklick - geist07 - 17.08.2010 12:38 Hallo Gerd, da sieht man wieder wer mehr Programmiererfahrung hat. Dein Programm macht nix anderes ist aber deutlich sinnvoller aufgebaut. Jedenfalls weiß ich jetzt vorauf du vorhin hinaus wolltest. Ich denke ich werde mich für die schnellere Whileloop entscheiden. Mit mehreren Event-Producer-Loop in einem VI habe ich noch keine guten Erfahrungen gemacht. Jedenfalls dank ich dir geist07 Effekt bei Doppelklick - GerdW - 17.08.2010 12:41 Hallo geist, ich meinte nicht, dass du mehrere Event-Strukturen verwenden sollst. Eine reicht... Du müsstest nur in der While-Loop ebenfalls auf deinen Melder reagieren, dem kann man ja auch einen TimeOut ("Wait on Notification") vorgeben. Der TimeOut ersetzt dann den bisherigen "Wait"-Aufruf... |