LabVIEWForum.de
Button entweder drücken oder gedrückt halten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Button entweder drücken oder gedrückt halten (/Thread-Button-entweder-druecken-oder-gedrueckt-halten)

Seiten: 1 2


Button entweder drücken oder gedrückt halten - Golan - 11.03.2013 09:01

Hallo,

ich habe letzte Woche ein Projekt zugeteilt bekommen. Bei diesem Projekt wird ein Motor angesteuert und Sensoren eingelesen (was ich noch hinbekomme).
Mein Problem liegt jetzt bei der Vorgabe, dass dies mittels eines Button passieren soll.

Sollte der Button kurz gedrückt werden soll der Motor losfahren bis ein Sensorsignal anliegt was anzeigt dass der Motor seine Position erreicht hat. Wenn man nun den Button gedrückt hält soll der Motor solang weiterfahren (auch über die vorgegebenen Sensorpositionen hinaus) bis der Button wieder losgelassen wird.

Ich bin mir nun hierbei nicht ganz sicher wie ich das realiseren soll bzw. ob das Möglich ist. Bei den Beispielen mit den Eventstrukturen (mit denen ich noch so gut wie keine Erfahrung habe) finde ich immer nur Programme bei denen zwar die Möglichkeit des "Button gedrückt" halten gibt jedoch nicht ersteres (mich fuchst vor allem der Gedanke dass der Button ja im Grunde zwei Funktionen haben soll).

Grüße
Christian

PS: Sorry wegen dem komischen Betreff, mir viel grad nichts besseres ein.


RE: Button entweder drücken oder gedrückt halten - GerdW - 11.03.2013 09:09

Hallo Golan,

du brauchst hier wohl zwei Funktionalitäten:
1. Button gedrückt: Motorfahrt starten
2. Button losgelassen: je nach Zeit zwischen 1. und 2. die weitere Funktion "Sensorsignal abfragen" aktivieren

Für 1. und 2. gibt es eigene Events, in deren Cases du die jeweilige Zeit abfragen und in einem Schieberegister speichern müsstest (damit du in 2. die Zeitdifferenz bestimmen kannst).


RE: Button entweder drücken oder gedrückt halten - Golan - 11.03.2013 09:58

Hallo GerdW,

danke für die rasche Antwort.
Leider hab ich noch ein paar Fragen.

Zu aller erst, im Programm (siehe Screen) kann ich derzeit drücken was ich will, es passiert nichts. Scheinbar bleibt der derzeit bei der Event-Struktur hängen und nicht eimal der Stop-Button wird ausgeführt.

Zudem hätte ich eine Frage bezüglich der Event-Struktur (mangels Erfahrung). Button wird gedrückt und bleibt länger als 700 ms gedrückt, dadurch wird die Sensorabfrage abgeschalten. Wie ist der Ablauf, wird die Event-Struktur immer wieder abgefragt oder wird auf das loslassen des Buttons gedrückt gewartet? (wahrscheinlich ist dann mein derzeitiger Aufbau falsch)

Grüße
Christian


RE: Button entweder drücken oder gedrückt halten - GerdW - 11.03.2013 10:08

Hallo Christian,

Zitat:Zu aller erst, im Programm (siehe Screen) kann ich derzeit drücken was ich will, es passiert nichts. Scheinbar bleibt der derzeit bei der Event-Struktur hängen und nicht eimal der Stop-Button wird ausgeführt.
Aus einem Bild kann man schwer den Fehler herauslesen. Vielleicht doch mal das VI anhängen?
Anmerkung dazu: dein Profil ist unvollständig. Da stecken wichtige Informationen für alle Forumsteilnehmer drin, trage diese bitte nach! Post-880-1250020144

Zitat:Zudem hätte ich eine Frage bezüglich der Event-Struktur (mangels Erfahrung). Button wird gedrückt und bleibt länger als 700 ms gedrückt, dadurch wird die Sensorabfrage abgeschalten. Wie ist der Ablauf, wird die Event-Struktur immer wieder abgefragt oder wird auf das loslassen des Buttons gedrückt gewartet? (wahrscheinlich ist dann mein derzeitiger Aufbau falsch)
Eine Eventstruktur wartet auf die konfigurierten Events - damit willst du doch Polling vermeiden...


RE: Button entweder drücken oder gedrückt halten - Golan - 11.03.2013 12:43

Hallo,
so Profil ist hoffentlich vollständiger Anniemacht_2

Vi ist auch angefügt (ich musste zum speichern zusätzlich eine *.ctl Datei speichern)

Wenn die Event-Struktur wartet bis der Button losgelassen wird muss ich also das abschalten des Sensors und das anfahren des Motors im Event selbst machen?(wobei das dürfte ja nicht sein, da er sonst nicht entscheiden kann ob der Knopf nur kurz oder länger gedrückt wurde).

Grüße
Christian


RE: Button entweder drücken oder gedrückt halten - GerdW - 11.03.2013 12:57

Hallo Christian,

Zitat:ich musste zum speichern zusätzlich eine *.ctl Datei speichern
Das kommt davon, dass du den Button "Rechts" in eine Typdefinition umgewandlet hattest. Warum auch immer...

Ich habe dein VI leicht geändert.
- Andere Events für den Button verwendet: Das Event "Taste gedrückt" bezieht sich auf Tastatureingaben und nicht auf Mausklicks. Stattdessen habe ich "Maustaste gedrückt" und "Maustaste losgelassen" eingestellt...
- Dem Button habe ich ein anderes Schaltverhalten verpasst, er schaltet nun mit der Einstellung "solange gedrückt". Das bisherige Latching ist hier eher störend...


RE: Button entweder drücken oder gedrückt halten - Golan - 11.03.2013 13:13

(11.03.2013 12:57 )GerdW schrieb:  Hallo Christian,

Zitat:ich musste zum speichern zusätzlich eine *.ctl Datei speichern
Das kommt davon, dass du den Button "Rechts" in eine Typdefinition umgewandlet hattest. Warum auch immer...

Ich habe dein VI leicht geändert.
- Andere Events für den Button verwendet: Das Event "Taste gedrückt" bezieht sich auf Tastatureingaben und nicht auf Mausklicks. Stattdessen habe ich "Maustaste gedrückt" und "Maustaste losgelassen" eingestellt...
- Dem Button habe ich ein anderes Schaltverhalten verpasst, er schaltet nun mit der Einstellung "solange gedrückt". Das bisherige Latching ist hier eher störend...

Hallo GerdW,

danke das hilft mir weiter Smile
Bei "Taste gedrückt" bin ich irgendwie davon ausgegangen dass damit der Button gemeint war.

Die Umwanldung des Buttons in eine Typdefinition hab ich nicht gewollt gemacht, der Button war einfach verändert nachdem ich beim Event "Taste losgelassen" hinzugefügt habe.

Ich muss nur noch überprüfen inwieweit das Event keine Problem im restlichen Programm verursacht (dadurch dass es ja immer auf eine Eingabe der Taster wartet).

Danke nochmals für die Hilfe.

Grüße
Christian


RE: Button entweder drücken oder gedrückt halten - GerdW - 11.03.2013 13:17

Hallo Christian,

Zitat:Die Umwanldung des Buttons in eine Typdefinition hab ich nicht gewollt gemacht, der Button war einfach verändert nachdem ich beim Event "Taste losgelassen" hinzugefügt habe.
Nein, bestimmt nicht...

Zitat:Ich muss nur noch überprüfen inwieweit das Event keine Problem im restlichen Programm verursacht (dadurch dass es ja immer auf eine Eingabe der Taster wartet).
Dafür gibt es ja das Event "TimeOut". Wenn man hier einen vernünftigen Wert vorgibt, blockiert die Schleife auch nicht (völlig)...


RE: Button entweder drücken oder gedrückt halten - Golan - 12.03.2013 16:04

Hallo,

bisher klappt alles ziemlich gut, ich hänge nur gerade an einem kleinen Problem. Der Motor soll an einen bestimmten Punkt angefahren werden und mittels eines weiteren Button wird eine Messung vorgenommen. Diese Messung wollte ich nun über eine While-Schleife in der Event-Struktur realisieren (klappt ansich auch) nur ist die Sache, dass wenn während der Messung jemand die anderen Buttons drückt diese danach ausgeführt werden (d.h. jemand drückt auf Motor anfahren Button, fährt der Motor sofort nach der Messung weiter).
Ich habe nun versucht über Eigenschaftsknoten die Buttons zu deaktivieren während die Messung läuft, jedoch kann ich selbst auf einen ausgegrauten und deaktivierten Button drücken und es wird danach ausgeführt. Gibts ne Möglichkeit das anders zu beheben oder soll der Anwender später einfach die Finger von den Buttons lassen, während die Messung läuft Wink

Grüße
Christian

PS: VI ohne die Eigenschaftsknoten


RE: Button entweder drücken oder gedrückt halten - GerdW - 12.03.2013 16:07

Hallo Golan,

Zitat:Diese Messung wollte ich nun über eine While-Schleife in der Event-Struktur realisieren
Das Hauptübel liegt hier begraben...
Grundregel für Eventstrukturen: Events immer so schnell wie möglich abarbeiten!
Durch deine Whileloop wird diese Grundregel gebrochen. Du könntest zwar Workarounds schaffen, aber das ist (mMn) sehr unsauber.

Besser wäre eine Consumer-Producer-Struktur mit parallelen Schleifen. Eine Schleife für die Messung und eine für das UI-Handling (mittels Eventstruktur)...