LabVIEWForum.de
Ereignisstruktur mit Referenz-Wertänderung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Ereignisstruktur mit Referenz-Wertänderung (/Thread-Ereignisstruktur-mit-Referenz-Wertaenderung)



Ereignisstruktur mit Referenz-Wertänderung - mcbrain - 13.10.2010 15:29

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).

Anbei ein Bild (LV 2010 eval deutsch).

Danke schonmal für Eure Hilfe!


Ereignisstruktur mit Referenz-Wertänderung - Y-P - 13.10.2010 16:35

Hallo,

schau' Dir mal das Bsp. zu dynamischen Events an:
[attachment=29939]
Lv86_img

Dann siehst Du, was Du falsch gemacht hast, bzw. was noch fehlt.

Gruß Markus


Ereignisstruktur mit Referenz-Wertänderung - mcbrain - 14.10.2010 07:53

' 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.

Hier mein HauptVI:


Ereignisstruktur mit Referenz-Wertänderung - jg - 14.10.2010 08:35

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


Ereignisstruktur mit Referenz-Wertänderung - mcbrain - 14.10.2010 09:41

' 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.


Ereignisstruktur mit Referenz-Wertänderung - jg - 14.10.2010 10:09

' 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


Ereignisstruktur mit Referenz-Wertänderung - mcbrain - 14.10.2010 11:31

' 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?



Ereignisstruktur mit Referenz-Wertänderung - jg - 14.10.2010 11:45

' 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


Ereignisstruktur mit Referenz-Wertänderung - mcbrain - 14.10.2010 15:14

' 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.


Ereignisstruktur mit Referenz-Wertänderung - jg - 14.10.2010 18:45

Such mal (z.B. im NI-Examplefinder) nach dem Schlagwort SubPanel. Nicht unbedingt das Einsteiger-Thema, aber du gleich so komplizierte Themen vor hast...Wink

Gruß, Jens