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!
Hallo Forum!
Habe schon einige Themen durchgelesen, aber bin zu keiner zufriedenstellenden Lösung meines Problems gekommen...
Das Problem:
Ich habe ein SubVI, welches parallel zum HauptVI laufen soll.
Das SubVI besteht aus einer Initialisierungs- und einer Ausführungs-Phase (Flache Sequenzstruktur). Die Init-Phase soll nur 1x ausgeführt werden und danach verweilt das SubVI in der Ausführungsphase. Die Ausführungsphase besteht aus eine While-Schleife, die eine Ereignis-Struktur enthält. Die Ereignis-Struktur soll busy-waiting vermeiden.
Im HauptVI wird ein Wert verändert, der über eine Referenz ins SubVI gelangt. Diese Änderung wird jedoch nicht erkannt von der Ereignisstruktur. Auf welche Art muss ich das basteln, damit das funktioniert?
Ich habe bereits einige Varianten versucht, z.b. Wertänderung des Anzeigeelements "Wert" zu nutzen, oder auch direkt von der Referenz (ohne die Ereignisregistrierung).
Dann siehst Du, was Du falsch gemacht hast, bzw. was noch fehlt.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
' schrieb:schau' Dir mal das Bsp. zu dynamischen Events an:
Hey Markus, danke.
Ich denke ich habe das Prinzip verstanden:
Benutzerereignis 1x erstellen, beliebig oft erzeugen und letztendlich löschen.
Für dieses Ereignis irgendwo registrieren und das dann als Trigger für die Eventstruktur benutzen.
Mein Problem ist dadurch nun aber nur einen Schritt weiter verschoben: Das Erzeugen, Erstellen und Löschen muss ja in meinem HauptVI passieren. Wie kann ich mich nun aber im SubVI dafür registrieren? Sprich: Wie leite ich nun dieses Ereignis ans SubVI weiter?
Ich habe versucht aus meiner eingehenden Referenz im SubVI nochmal ein Ereignis zu erzeugen, jedoch brachte das (wie erwartet) keinen Erfolg.
So aus dem Bauch heraus wird hier mit Kanonen auf Spatzen geschossen.
Ist von deinem SubVI das Frontpanel zur Laufzeit sichtbar? Kann da der User überhaupt etwas bedienen?
Wenn nein, dann ist deine Idee, über die Eventstruktur Stati im SubVI zu steuern, viel zu umständlich.
Bau dein SubVI in eine vernünftige State-Machine um, die du dann per Notifer oder Queue aus dem Haupt-VI heraus steuerst.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Ist von deinem SubVI das Frontpanel zur Laufzeit sichtbar? Kann da der User überhaupt etwas bedienen?
Nein, das SubVI soll einfach nur im Hintergrund laufen und auf eine Änderung Im Frontpanel des HauptVIs reagieren. Ich denke in Zukunft brauche ich das noch viel häufiger, da man doch ständig Dinge in SubVIs auslagert und dort (vor allem auch asynchron/nebenläufig) weiterverarbeitet. Mein Ziel insgesamt ist es, ein VI zu bauen, das man (unabhängig von den Ausführungszeiten) mit anderen VIs zusammen ausführt. Beispiel dafür ist diese Relais-Karten-Ansteuerung. Ich will später in einem HauptVI nur noch den Frontpanel davon haben und die restliche Logik in 1 SubVI, sodass das HauptVI-Diagramm möglichst einfach bleibt, da hier wohl noch viele andere Sachen reinkommen.
Hierzu eine neue Frage: Wie schaffe ich es, ein SubVI zu erstellen, sodass wenn man es in ein anderes VI einfügt, auch ein spezifiziertes Frontpanel-Objekt mit übernommen wird? Sprich: Ich hätte gerne, dass ich meine eigenen SubVIs so benutzen kann, wie die nativen LabView-Komponenten, die ja immer (bzw. oft) eine graphische Entsprechung im Frontpanel haben. Geht das?
' schrieb:Bau dein SubVI in eine vernünftige State-Machine um, die du dann per Notifer oder Queue aus dem Haupt-VI heraus steuerst.
Ich will ja nur 2 States im Endeffekt und der eine wird IMMER 1x zu Beginn ausgeführt. Das habe ich mit der Sequenz im SubVI doch schon erschlagen, oder nicht?
Ich versuche es mal mit den Notifiern, das kannte ich bis jetzt noch nicht.
14.10.2010, 10:09 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2010 10:10 von jg.)
' schrieb:Nein, das SubVI soll einfach nur im Hintergrund laufen und auf eine Änderung Im Frontpanel des HauptVIs reagieren.
So, also ist das FP des SubVI nicht notwendigerweise sichtbar. Die Bedienung und Eventsteuerung liegt im HauptVI. Dann ist es doch sinnvoll, das Event im Haupt-VI abzuarbeiten, und dann per Notifier oder Queue eine entsprechende Nachricht an das SubVI zu schicken -> "Tue bitte dies oder das"
Quasi das Konzept Producer-Consumer-Struktur, bloß dass der Consumer in deinem Fall in einem SubVI liegt.
Zwecks Producer-Consumer, als Bsp findest du das unter "File->New..."
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Dann ist es doch sinnvoll, das Event im Haupt-VI abzuarbeiten, und dann per Notifier oder Queue eine entsprechende Nachricht an das SubVI zu schicken
Yeah, cool!:)Das hat funktioniert. Und zwar wesentlich (!) einfacher und performanter als das mit den Referenzen.
Gibt es hierbei auch sowas wie ein Callback? Dass das SubVI wiederum eine Meldung an sein ParentVI zurückgeben kann? Ich würdem z.B. gleich nach meiner Init-Phase eine boolsche Rückmeldung geben, dass die Phase erfolgreich beendet wurde.
€dit: Alternativ würde auch gehen, wenn ich auf dem Frontpanel ein bool-LED des SubVIs integrieren könnte. Das führt wiederum zu der Frage, die ich oben schon zwischenrein geschoben hatte:
' schrieb:Hierzu eine neue Frage: Wie schaffe ich es, ein SubVI zu erstellen, sodass wenn man es in ein anderes VI einfügt, auch ein spezifiziertes Frontpanel-Objekt mit übernommen wird? Sprich: Ich hätte gerne, dass ich meine eigenen SubVIs so benutzen kann, wie die nativen LabView-Komponenten, die ja immer (bzw. oft) eine graphische Entsprechung im Frontpanel haben. Geht das?
' schrieb:Yeah, cool!:)Das hat funktioniert. Und zwar wesentlich (!) einfacher und performanter als das mit den Referenzen.
Gibt es hierbei auch sowas wie ein Callback? Dass das SubVI wiederum eine Meldung an sein ParentVI zurückgeben kann?
Eine zweite Queue/Notifer, der Rückmeldungen macht?!
' schrieb:Ich würdem z.B. gleich nach meiner Init-Phase eine boolsche Rückmeldung geben, dass die Phase erfolgreich beendet wurde.
€dit: Alternativ würde auch gehen, wenn ich auf dem Frontpanel ein bool-LED des SubVIs integrieren könnte. Das führt wiederum zu der Frage, die ich oben schon zwischenrein geschoben hatte:
Referenz eines Controls om Main-VI an das SubVI übergeben, dann kann per PropertyNode eine Eigenschaft (z.B. Value) im SubVI gesetzt werden.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Referenz eines Controls vom Main-VI an das SubVI übergeben, dann kann per PropertyNode eine Eigenschaft (z.B. Value) im SubVI gesetzt werden.
Das hat ebenfalls geklappt, danke.
Jedoch bleibt noch, ob es möglich ist, ein VI mit einem GUI-Objekt für den Frontpanal zu assoziieren, bzw. ein Frontpanel-Element auszuwählen, welches bei Benutzung des VIs innerhalb eines anderen ParentVIs sofort angezeigt wird.
Ich habe nun die Steuerung für meine Relaiskarte fertig, die sieht so aus wie im Bild.
Wenn ich dieses VI nun als SubVI in ein anderes VI lade, will ich genau diese gesamte Steuerung haben.
Such mal (z.B. im NI-Examplefinder) nach dem Schlagwort SubPanel. Nicht unbedingt das Einsteiger-Thema, aber du gleich so komplizierte Themen vor hast...
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!