LabVIEWForum.de
Richtige Struktur bei Benutzeroberflächen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Richtige Struktur bei Benutzeroberflächen (/Thread-Richtige-Struktur-bei-Benutzeroberflaechen)



Richtige Struktur bei Benutzeroberflächen - Arachnoid - 05.03.2015 19:15

Hallo zusammen,

bisher habe ich VIs ausschließlich für mich selbst erstellt. D.h. außer mir wurden die VIs von niemandem sonst verwendet. Dementsprechend sahen (zugegebenermaßen) auch die Benutzeroberflächen aus. Um so etwas wie das Abfangen von Fehlbedienung durch den User etc. habe ich mich daher nie kümmern müssen.

Nun stehe ich vor dem Problem, dass auch andere meine VIs benutzen wollen.

Die Benutzeroberfläche umfasst nicht all zu viele Möglichkeiten. Es gibt mehrere Prozesse die nacheinander vom User gestartet werden können. Ein Abbruch der Prozesse vor der Beendigung muss möglich sein.

Ich habe in den Anhang mal zwei Strukturen gepackt GUI1 und GUI2. Bei GUI1 habe ich das Problem, dass die Starttaste manchmal nicht reagiert. Bei GUI2 ist die Benutzeroberfläche komplett gesperrt während der Prozess läuft, sodass der Prozess nicht beendet werden kann.

Kann jemand Hilfestellung geben? Sind das Strukturen die man für eine solche Aufgabe verwendet?

Dazu muss ich sagen, dass ich mir vor einiger Zeit LabVIEW selbst beigebracht habe. Ich habe leider keine Ausbildung als Informatiker o.ä..

Viele Grüße,

Arachnoid


RE: Richtige Struktur bei Benutzeroberflächen - Holy - 05.03.2015 22:07

Von deinen beiden Varianten passt die zweite am ehesten. Die Variante 1 würde ich als Polling basierten Ansatz nicht mehr verwenden. An deiner Variante zwei ist das eigentliche Problem die Einstellung "Panel sperren" im Einstellungsdialog des Events.
Je nach eigentlicher Aufgabe solltest du dich ggf. zu solchen Design Pattern wie Queued Message Handler einlesen.

Ich habe dein VI mal ein klein wenig aufgeräumt und geändert. Es ist jetzt beendbar über das Kreuz rechts oben. Die Stop-Buttons sind nur bedienbar wenn der jeweilige "Prozess" läuft.


RE: Richtige Struktur bei Benutzeroberflächen - Trinitatis - 05.03.2015 22:32

Hallo Arachnoid,

es ist grundsätzlich keine gute Idee, lange laufende Prozesse innerhalb eines Events einer Eventstruktur "gefangenzuhalten", da du kein Event derselben Eventstruktur in dieser Zeit ausführen kannst.

Deshalb sollte die Eventstruktur nur die Ereignisse registrieren und eine Nachricht z.B. per Queue an eine Parallelschleife senden, die diese Aufgaben dann abarbeitet.

Die Messdateneinsammelschleife sollte dabei einen Sonderstatus einnehmen, damit sie nichts anderes blockieren kann.

Gruß, Marko


RE: Richtige Struktur bei Benutzeroberflächen - Arachnoid - 06.03.2015 17:34

Hallo zusammen,

vielen Dank für eure schnelle Antwort. Ihr habt mir sehr geholfen. Ich werde mich mal in diese Richtung einlesen.

@Holy: Diese Einstellung hatte ich in den Eigenschaften der Ereignisstruktur übersehen. Dein Beispiel enthält genau die Funktionalitäten die ich benötige!

Viele Grüße,

Arachnoid


RE: Richtige Struktur bei Benutzeroberflächen - Lucki - 06.03.2015 19:22

Es handelt so sich hier um genau zwei gleiche, aber voneinander unabhängige Progrämmchen. Warum die nicht einfach in zwei genau gleichen, voneinander unabhängigen Schleifen laufen lassen? Außerdem: Für mich heißt "Stop" Stop jetzt" und nicht "Stop nach Ablauf von irgendetwas" - von begründeten Ausnahmen natürlich abgesehen.
Anmerkung: NI empfiehlt, pro Schleife nur eine Ereignisstruktur zu verwenden. Das Forum empfiehlt durchweg nur eine Ereignisstruktur pro VI. Ich richte mich hier ausnahmsweise mal nach den Empfehlungen von NI und bitte im Voraus um Gnade. Es wird ganz bestimmt nicht wieder vorkommen. Big Grin
[attachment=52359]


RE: Richtige Struktur bei Benutzeroberflächen - Arachnoid - 08.03.2015 12:46

Hallo zusammen,

ich habe mal die Variante mit der Queue ausprobiert. Ich bin mir nun aber nicht sicher ob diese für meine Anwendung geeignet ist. Wird z.B. Stop mehrfach betätigt so wird dieser Event auch mehrfach abgearbeitet, dies ist eigentlich unerwünscht. Mir ist klar, dass die Queue abgearbeitet wird, aber ist diese Struktur tatsächlich für diesen Anwendungsfall geeignet? Wird diese Struktur in der Regel für so etwas abgewandelt?

Viele Grüße,

Arachnoid

PS: Ich habe nur mal Start1 und Stop1 realisiert