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 aktuell in Programm in Überarbeitung welches im Kern wie folgt aufgebaut ist:
* While Loop
* Darin Event-Structure
Das UI soll nun um eine zusätzliche Hilfe in Form eines Popups realisiert werden.
Erster Ansatz:
--
* Help-Button -> neuen Event -> SubVI aufrufen
hat folgenden Nachteil:
--
* Solange das SubVI offen ist ist mein Hauptprogramm blockiert.
Frage:
--
Wie kann ich dieses Problem besser angehen um letzlich den Event-Ansatz im Hauptprogramm beizubehalten und trotzdem ein unabhängiges Popup Fenster zu erhalten, welches beliebig geöffnet & geschlossen werden kann, ohne auf die Grundfunktion des Hauptprogrammes einfluss zu nehmen ?
Also wenn es dir nur um ein PopUp geht, das einen Helptext öffnen soll, sollte eine parallel zur Hauptschleife laufende Schleife doch die Funktion erfüllen.
In die zweite Schleife packst du dann den Help-Button. Eventuell sogar mit Hilfe einer zweiten Eventstruktur, obwohl nach Möglichkeit ja mehrere Eventstrukturen vermieden werden sollten.
Schwieriger wird es natürlich, wenn du Daten aus deinem Popup in das Hauptprogramm übertragen willst. Ich denke aber, dass auch hier eine zweite Schleife - dann halt mit Queues o.ä. - eine gute Lösung wäre.
Grüße
A few weeks of developement and testing can save a WHOLE afternoon in the library!
in den Eigenschaften für das SubVI sollte die Funktion MODAL deaktiviert sein, dann kannst du beliebig zwischen den beiden Frontpanels hin und herschalten.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
die Struktur von meinem Hauptprogramm baut auf einer "queued Statemachine mit Consumer und Producer Loop" auf. Die Producer Loop ist die mit der Event-Struktur. In der Event-Stuktur aktiviere ich die User-Events.
Wenn nun ein MODALER Dialog aufpoppen soll, dann mache ich das in der Event-Struktur (per User-Event). Begründung: so lange ein modaler Dialog aktiv ist, kann kein Event auf dem Frontpanel auftreten. Darum kann ich bedenkenlos die Proucer Loop "locken", während die Consumer-Loop unbekümmert weiterläuft ...
Ok ich sehe, ich sollte besser ausführen:
--
Mainprogramm:
* While-Loop
** Event-Structure
Ein Button innerhalb dem MainVI ist der Event "Getting Started" der, sofenr getriggert im Rahmen seines Event-Cases nur ein SubVI beinhaltet.
Daten müssen zwischen Main-VI und SubVI nicht hin-und-hergeschoben werden.
SubVI:
* While Loop
** Event Structure
Ein Quit button um das SubVI zu beenden, sowie sonstiger Info-Content auf dem Frontpanel des SubVI's.
Bzgl den Ideen:
############
@TSchAC:
Diese Einstellung alleine kann nicht die Lösung sein, da schon probiert. Muss wohl mit irgendwas anderem kollidieren.
@Kvasir:
warum sind mehrere Eventstrukturen problematisch ? Habe mich da (LabVIEW & EventS) selber reingearbeit, es bis dato nicht mit mehreren Eventstrukturen probiert. Der Ansatz war für mich nur naheliegend, weshalb ich ihn jetzt probiert habe.
>> parallel zur Hauptschleife laufende Schleife doch die Funktion erfüllen
den Part verstehe ich nicht um ehrlich zu sein.
Ja im Kern soll ne while loop innerhalb des SubVIS parallel zur While im Haupt-VI laufen. Bei mir sehst es bis dato jedoch so aus, als ob das Signal des SubVI'S erst nach schließen zurück ans HauptVI übergeben wird - why ever.
@i2dx:
Danke für den Input hilft mir so leider nicht, mangels Verständniss und Buzzwords die mir umbekannt sind. Trotzdem danke.
Es geht in diesem Fall auch nicht um einen Dialog der impliziert dass im Main-Frontpanel nichts passieren kann, da das SubVI nur informationen darstellen soll.
' schrieb:@i2dx:
Danke für den Input hilft mir so leider nicht, mangels Verständniss und Buzzwords die mir umbekannt sind. Trotzdem danke.
Es geht in diesem Fall auch nicht um einen Dialog der impliziert dass im Main-Frontpanel nichts passieren kann, da das SubVI nur informationen darstellen soll.
hmpf ...
ich hab halt die englische Version von LV ... ok, nochmal von vorne:
klickst du (in LV) auf "neu" und dann auf:
dann hast du ein Beispiel für eine "queued Statemachine mit Consumer/Producer Loop" ...
der Dialog (das SubVI), der dir die Werte anzeigen soll, liegt dann in der Event-Struktur, wird geöffnet wenn das User-Event eintrifft und blockt nicht die "Hauptschleife" ...
@ichselbst: Danke für das Muster - Leider kann ich 8.5 Beispiele nicht in 8.2.x laden.
@i2dx:
Vielen Dank - deutlich klarer. Werde den Ansatz mal versuchen, wobei er wohl einige Änderungen am bestehden Programm erfordern würde.
Mal sehn ob das wirklich Sinn macht.
' schrieb:@Kvasir:
warum sind mehrere Eventstrukturen problematisch ? Habe mich da (LabVIEW & EventS) selber reingearbeit, es bis dato nicht mit mehreren Eventstrukturen probiert. Der Ansatz war für mich nur naheliegend, weshalb ich ihn jetzt probiert habe.
>> parallel zur Hauptschleife laufende Schleife doch die Funktion erfüllen
den Part verstehe ich nicht um ehrlich zu sein.
Ja im Kern soll ne while loop innerhalb des SubVIS parallel zur While im Haupt-VI laufen. Bei mir sehst es bis dato jedoch so aus, als ob das Signal des SubVI'S erst nach schließen zurück ans HauptVI übergeben wird - why ever.
Ok entschuldige. Vermutlich habe ich mich ein wenig zu kryptisch ausgedrückt.
Im Prinzip gleicht mein Vorschlag dem von I2dx. Ich würde sagen es ist die vereinfachte Version davon.
Du erstellst einfach in deinem HauptVi eine zweite Schleife, in die du dein PopUp - SubVi legst. Alles was in dieser Schleife passiert läuft dann unabhängig vom Rest (in der anderen Schleife). Solltest du zwischen den zwei Schleifen Daten übertragen müssen, dann nütze eine Queue.
I2dx Vorschlag ist im Prinzip die komplexere, aber elegantere und leistungsstärkere Variante derselben Idee.
Grüße
A few weeks of developement and testing can save a WHOLE afternoon in the library!