Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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.
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).
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
11.03.2013, 10:08 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2013 10:09 von GerdW.)
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!
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...
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).
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...
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
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).
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)...
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
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)...