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 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
Anzeige
31.01.2011, 16:28 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2011 16:29 von NWOmason.)
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.
Beste Grüße,NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
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.
Viele Grüße
Marcel
31.01.2011, 22:21 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2011 22:22 von Meinhart_E.Steil.)
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!!
' 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?
' 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
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
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?!
' 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.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).