LabVIEWForum.de
Tastatursteuerung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Tastatursteuerung (/Thread-Tastatursteuerung)

Seiten: 1 2 3


Tastatursteuerung - Meinhart_E.Steil - 31.01.2011 15:41

Hallo LV-User!

Ich bin neu hier, arbeite seit 3-4 Monaten mit LabView und bleibe immer wieder an "kleinen" Sachen hängen, deren Problemlösung mir Kopfzerbrechen bereiten. So, dann stelle ich gleich mal meine erste Frage (Vorher habe ich hier im Forum gestöbert, aber nichts in der Art dazu gefunden). Ob diese hier richtig plaziert ist, ähhh ... weiß ich nicht so richtig.

Problemstellung:

Im Anhang seht Ihr fogendes vereinfachtes VI (8.6.1). Mit diesem steuere ich meinen x-y-Tisch mithilfe der Pfeiltasten (im vi: Tastatursteuerung xy-Tisch), was auch super funktioniert. Wenn ich aber die Ereignisstruktur beende, kann ich keine weiteren Tasten bzw. Schalter (im vi: Anwendung) in meinem vi betätigen, das System hängt einfach und nichts geht mehr.

Wieso? Wäre schön, wenn mir jemand eine Antwort geben könnte.


Viele Grüße Marcel


Tastatursteuerung - NWOmason - 31.01.2011 16:28

Hallo Marcel,

hier fallen mir mehrere Sachen auf:

1) Zu deinem Problem: Die Eventstruktur wird "beendet". Du beendest die innere Schleife direkt. Das kann erst passieren, wenn wieder ein Event kommt.
Viel besser: Stop.Button für die innere Schleife als Event registrieren.

2) Warum ist die Schaltbedingung des "Tastatursteuerungs"-Buttons auf "Bis zum loslassen schalten"?

3) die kleinen Case-Strukturen sind unsinnig. Du kannst die Abfragen der Vergleicher gleich direkt an die Elemente verdrahten.

3) Das Event für Taste gedrückt ist richtig. Aber du kannst dir gleich direkt aus der "VTaste" die up down left right auslesen.


Ich habe mal n kurzes VI zusammengeklickert, wobei das bestimmt nicht Weisheits letzter Schluss ist.

Lv85_img

Beste Grüße,NWO


Tastatursteuerung - Meinhart_E.Steil - 31.01.2011 17:15

Vielen Dank für die Antwort, das geht ja superfix hier:

zu 1. Die Eventstruktur mittels eines Stop-Buttons zu beenden scheint der richtige Weg zu sein. Ich habe aber festgestellt, dass ich nur Software-Buttons benutzen kann. Sobald ich die Tastatur betätige hängt dier Software. Habe es mal nach deinem Vorschlag umgestrickt (s. Anhang).

zu 2. Ich möchte nicht, dass der Tastatursteuerungs-Button dauerhaft geschaltet bleibt, da nach Beenden durch den Stop-Button die Schleife sofort wieder starten würde (Diese befindet sich ja in einer While-Schleife).

zu 3. Du hast völlig recht, das is Quark.

zu 4. Das wusste ich nicht, is ja viel einfacher zu handhaben.Smile

Lv86_img

Viele Grüße
Marcel


Tastatursteuerung - Meinhart_E.Steil - 31.01.2011 22:21

zu 1. Des Rätsels Lösung: Einfach das Häkchen rausnehmen.

Vielen Dank für die Hilfe!

Freue mich schon auf den nächsten Beitrag, dass die Fragen immer schwieriger werden.Smile

Gruß Marcel

Lv86_img


Tastatursteuerung - Martin Heller - 02.02.2011 13:14

' schrieb:Lv86_img
Tastatursteuerung_2.vi

Normaler Weise wird eine Eventstrucktur NICHT in eine while-Schleife gepappt. Deine Anwendung ist kann schlecht ausgeführt werden. Denn der Zustand (in welcher Schleife steht das Programm) ist nicht klar!!


Tastatursteuerung - Richard - 02.02.2011 20:12

Bei mir hängt sich dein Programm total auf, die Eventstruktur in den Case packen ist ne echt schlechte idee.

Ausserdem bleiben die Tasten hängen, fährt da der Tisch keinen Crash?

Gruß Richard

Vorschlag:

Lv85_img
[attachment=32099]


Tastatursteuerung - Meinhart_E.Steil - 03.02.2011 11:09

Hallo Gemeinde!

' schrieb:Normaler Weise wird eine Eventstrucktur NICHT in eine while-Schleife gepappt. Deine Anwendung ist kann schlecht ausgeführt werden. Denn der Zustand (in welcher Schleife steht das Programm) ist nicht klar!!

Wie soll das Event dann aber dauerhaft abgefragt werden?


' schrieb:Bei mir hängt sich dein Programm total auf, die Eventstruktur in den Case packen ist ne echt schlechte idee.
Ausserdem bleiben die Tasten hängen, fährt da der Tisch keinen Crash?

s. Beitrag 4 (Bild) ==> geänderte Version s. Anhang
k. A. ob das optimal programmiert ist, kriege es aber nicht besser hin. Der Case ist dafür da, damit die Eventstruktur nicht ständig läuft. Wenn du 30 Abfragen hast, geht dein System schnell in die Knie, oder ist das eher egal?

Lv86_img

Vielen Dank für die Hinweise.
VG Marcel


Tastatursteuerung - NWOmason - 03.02.2011 11:49

' schrieb:Wie soll das Event dann aber dauerhaft abgefragt werden?

Die Eventstruktur in eine eigene While-Schleife packen => Producer/Consumer (mit Events). Die Eventstrukur selbst muss man ja nicht abragen, da sie aktiv wird, wenn ein Event auftritt (Also ein Interrupt und nicht Polling).

' schrieb:Der Case ist dafür da, damit die Eventstruktur nicht ständig läuft. Wenn du 30 Abfragen hast, geht dein System schnell in die Knie, oder ist das eher egal?

Es sind ja keine Abfragen, sondern Events. Ich habe immer gut 100 Events in meiner Eventstrukur (Menüsteuerung über Mausklicks hauptsächlich). Wenn du im Producer/Consumer Konzept die Evenstruktur laufen lässt, wird die Eventschleife erst ausgelöst, wenn ein eingestelltes Event auftritt. Ansonsten wird sie nicht ausgeführt und verursacht dann auch keine CPU-Last.

Beste Grüße,
NWO


Tastatursteuerung - Meinhart_E.Steil - 03.02.2011 15:39

Also könnte ich alle Events, die existieren, in eine Eventstruktur packen (die sich in einer while-Schleife befindet). Und wenn hier ein Event gestartet wird, startet mein Code, der sich z. B. außerhalb in einem Case befindet?!

Ok!

Vielen Dank für die Hilfe.


Tastatursteuerung - IchSelbst - 03.02.2011 16:41

' schrieb:Also könnte ich alle Events, die existieren, in eine Eventstruktur packen (die sich in einer while-Schleife befindet).
Genau: Alle Events kommen in eine Eventstruktur, die alleine in einer eigenen While-Schleife sitzt.

Zitat:Und wenn hier ein Event gestartet wird, startet mein Code, der sich z. B. außerhalb in einem Case befindet?!
Eigentlich: Nein.

Ein Event wird außerhalb der Eventstruktur "gestartet", z.B. durch einen Tastendruck, durch ein ValueSignalisierend oder durch ein Benutzerevent. "Bearbeitet" wird der Event in der Eventstruktur. Soll der Tastendruck per Event einen Ablauf ("mein Code") starten, so muss im Event-Case ein Befehl stehen, der den Ablauf startet.

Oft ist ein Ablauf eine Statemachine - die wiederum wird durch eine Case-Struktur wieder in eigener While-Schleife realisiert.

Da die Event-Whileschleife und die Statemachine-Whileschleife programmtechnisch getrennt sind, kann man Daten nicht direkt vom Event zum Case verdrahten - hierfür gibt es dann z.B. eine Queue.

Die Abarbeitung eines Events sollte so schnell wie möglich sein. Damit nämlich andere Events auch bearbeitet werden können. Es ist daher nicht ratsam, langdauernde Abläufe in einen Event-Case zu setzen. Solch einen Ablauf in die Event-Whileschleife neben die Event-Struktur zu setzen, ist natürlich genauso nachteilig.