INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Einfrieren der GUI bei Eventcase



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!

22.06.2020, 16:01
Beitrag #1

ThommyTomTom Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: May 2020

2016
2019
kA



Einfrieren der GUI bei Eventcase
Hallo Labview-Forumsmitglieder,

im Rahmen eines Praktikums programmiere ích die Ansteureung eine Prüftisches mit einem Asynchronmotor. Für die Umsetzung habe ich mit einer Eventstruktur gearbeitet.
Ich habe das Problem, dass ich einen programmierten Dauertest wobei der Motor unterschiedliche Drehzahlen anfährt nicht anhalten kann.

Sobald ein Event ausgeführt wird ist die GUI für die Eingabe eingefroren bis das Event abgearbeitet ist.
Ich verwende keine Queues und bin mir unsicher ob ein Anhalten des Dauertest ohne überhaupt möglich ist.

Über Tipps und Anregungen würde ich mich freuen.

Grüße
Thommy


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.06.2020, 19:27 (Dieser Beitrag wurde zuletzt bearbeitet: 22.06.2020 19:31 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Einfrieren der GUI bei Eventcase
Hallo Thommy,

herzlich willkommen im Forum!

Zitat:Ich habe das Problem, dass ich einen programmierten Dauertest wobei der Motor unterschiedliche Drehzahlen anfährt nicht anhalten kann.
Sobald ein Event ausgeführt wird ist die GUI für die Eingabe eingefroren bis das Event abgearbeitet ist.
Ich verwende keine Queues und bin mir unsicher ob ein Anhalten des Dauertest ohne überhaupt möglich ist.
Über Tipps und Anregungen würde ich mich freuen.
Es gibt eine klare Grundregel für die Nutzung der Event-Struktur: ein Eventcase sollte so schnell wie möglich abgearbeitet sein. Und unter "schnell" sollte man hier "Millisekunden" verstehen!
Deine Bilder zeigen dagegen etwas anderes: viel Code in den Eventcases, inkl. Schleifen und anscheinend Kommunikation mit externer Messtechnik. Alles Dinge, die nicht "schnell" ablaufen…

Nun könnte man auf die "clevere" Idee kommen, in der Eventcase-Definition das Häkchen bei "block GUI" zu entfernen. Das ist aber leider auch nicht sinnvoll, da dank THINK DATAFLOW! andere Events erst dann abgearbeitet werden können, wenn der aktuelle Case beendet wurde. Du verschlimmbessert auf diese Weise nur das Verhalten deines Programms: Events werden registriert, aber stark zeitverzögert abgearbeitet - das hört man den User jetzt schon fluchen…

Lösung:
Programm neu erstellen - und sich vorher Gedanken um eine sinnvolle Programmstruktur machen!
Warum verwendest du denn keine Queues? Oder sinnvoll strukturierte Statemachines oder QMH?

Anmerkungen zu den Bildern:
Generell sehr "komprimierter" Code, da könnte man mal aufräumen und z.B. mehr gerade Drähte verwenden! Lies mal den Styleguide in der LabVIEW-Hilfe!
Was genau sollen FOR-Loops bewirken, die exakt einmal iterieren? Das ist quasi ein NOP! Warum nutzt du nicht den ErrorWire für den DATAFLOW?
Schleifen in Schleifen (Dauertest): das geht mit einer Statemachine schöner…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2020, 14:43
Beitrag #3

ThommyTomTom Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: May 2020

2016
2019
kA



RE: Einfrieren der GUI bei Eventcase
Hallo Gerd, vielen Dank für dein Kommentar.

Das ist mein erstes Labview-Projekt. Ich dachte nach dem Belesen, dass der Event-Case eine geeignete Möglichkeit ist die Aufgabe umzusetzen.
Auf Queues bin ich erst aufmerksam geworden als ich die Probleme im Program bemerkt habe. So ganz verstehe ich auch noch nicht wie ich diese anwenden muss um z.B. einen Dauertest vorzeitig zu beenden bzw. im besten Fall zu pausieren.
Soweit ich die Queues verstanden habe wird die nächste Eingabe erst abgearbeitet, wenn die aktuelle beendet wurde?
Ich weiß das es einen Weg geben wird nur leider fehlt mir bis jetzt noch das Verständniss.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.06.2020, 10:02 (Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2020 10:04 von NoWay.)
Beitrag #4

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Einfrieren der GUI bei Eventcase
Die Eventcases sind eine gute Möglichkeit um Eingaben vom Benutzer abzufangen und zu verarbeiten. Wie Gerd jedoch richtigerweise erwähnte, darf das dein Programm idealerweise nicht blockieren, indem die Abarbeitung eines einzelnen Eventcases zuviel Zeit in Anspruch nimmt.
Die Verwendung von Queues an der Stelle hat durchaus praktische Vorteile. Einfaches Beispiel:

Du erzeugst zwei While Schleifen. Deine obere beinhaltet deine Eventstruktur und jeder Case wiederrum ein Enqueue Element in Kombination mit einem Enum (unbedingt TypeDef!) oder String.
Deine untere While Schleife beinhaltet dann eine Case Struktur. Jeder Case entspricht einem Enum bzw String Eintrag, wie du sie in der oberen Schleifen verwendet hast. Dazu packst du noch einen Case, wenn der Fall Eintritt, dass die Queue leer gelaufen ist (Timeout): Idle
Du prüfst "unten" nun deine Queue auf neue Einträge und gibst sie an deine Casestruktur weiter. Sind keine Vorhanden, wartest du einfach auf neue.

Nun hast du ein Konstrukt, mit dem du beliebig Kommandos aus der Eventstruktur weiterverarbeiten kannst, ohne diese zu blockieren.
Das heißt natürlich nicht, dass das Event auch zwingend bearbeitet wird. Blockiert deine untere Schleife nun, weil ein VI noch läuft, dann wird das Folgeevent nur ausgeführt, wenn das entsprechende VI mit seiner Arbeit fertig ist. Dir steht es natürlich frei, Queues, Notifier und Co. an entsprechende VIs zu übergeben. So lassen sich dann auch Benutzereingaben aus der zuvor erwähnten Eventstruktur in einem laufenden VI behandeln (z.B. die Verwendung eines Stopknopfes in Verbindung mit einem Notifier).

Gerade wenn man mit den Sachen nicht vertraut ist, hilft es enorm, einfach mal wild auf einem leeren Blockdiagramm diverse Dinge auszuprobieren. Was soll schon kaputt gehen? Wenn es dann immer noch hakt, bekommst du hier kompetente Hilfe im Forum.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.07.2020, 14:42
Beitrag #5

ThommyTomTom Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: May 2020

2016
2019
kA



RE: Einfrieren der GUI bei Eventcase
Hallo NoWay,

vielen Dank für deine Tips.
Ich konnte heute gute Vortschritte machen und die Queues sind mir ein nicht mehr ganz so großes Rätzel.
Durch eine geringe Wochenarbeitszeit wird sich die Fertigstellung des Programms aber sicherlich noch etwas hinziehen.

Gruße
Thommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: