LabVIEWForum.de - Referenzen von TypeDef-Clustern an SubVIs übergeben

LabVIEWForum.de

Normale Version: Referenzen von TypeDef-Clustern an SubVIs übergeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Weil ich von einigen SubVIs den Zustand von Aktionen die gerade ausgeführt werden im HauptVI anzeigen will (es sind auch Bedienelemente dabei) habe ich mir eine TypeDef mit dem Namen UserLights mit z.B. 15 LEDs gemacht.
Aber 15 Referenzen an eine SubVI zu übergeben ist doof, deswegen möchte ich also nur eine Referenz auf den TypeDef Cluster UserLights übergeben, um dann in PropertyNodes (strict) auf die gewünschten Elemente und ihre Eigenschaften zu zugreifen.
Ich weiss aber nicht wie ich direkt eine Referenz in der SubVI erzeuge...
Bisher habe ich es so gemacht:
1. Eine Instanz von UserLights einfügen
2. Referenz auf diese Instanz erzeugen
3. Indicator für diese Referenz
4. Indicator in Control ändern
Die so erhaltene Control-Referenz verbinde ich nun mit dem Eingangsconnector der SubVI.
Soweit so gut.
Mache ich aber eine Änderung in der TypeDef von UserLights so wird der entsprechende Indicator nicht mit geupdatet und das von hand in unzähligen SubVIs zu machen ist unmöglich.....
Wie kann ich also die Schritte 1-4 direkt machen also als Referenztyp direkt meine UserLights verknüpfen?

Andere Möglichkeiten einfach einen unbestimmten Cluster zu übergeben und dann in Userlights zu casten bringt keinen so großen Vorteil, weil man die Elemente des Clusters, deren Referenzen unter "Objects" gespeichert sind, als Array indizieren muss und wenn man dann der UserLights ein neues Element an Position Null hinzufügt verschieben sich alle nachfolgenden Indizes und man müsste wieder alles von Hand ändern.

Was gibt es denn sonst noch für Möglichkeiten so viele Anzeige- und Bedienelemente im HauptVI zu steuern.

Vielen Dank im Voraus für Eure Hilfe
Hi,

mit nem kleineren Workaround gehts:

Du musst dein Originalcluster auch im SubVI platzieren und eine Referenz dieses Clusters im SubVI dazu verwenden, die allgemeine Control-Referenz in das SubVI genauer zu spezifizieren...siehe die angehängten VIs

Gruss
Achim

Lv82_img
[attachment=8168][attachment=8169]
Vielen Dank für deine Antwort lieber Achim.
So wie du es gezeigt hast hab ich es auch schon realisiert, aber wie verändere ich denn jetzt ein bestimmtes (Anzeige-)Element des UserLights Clusters? Es ist ja ziemlich unbequem und fehleranfällig mir AllObjects auszulesen, dann auf Index x des AllObjects Arrays zuzugreifen (z.B. LEDx) und dann einen TypeCast "To more Specific Class" (also z.B. nach Boolean) zu machen und darauf folgend im Eigenschaftsknoten den Value zu setzen.

Ich möchte also auf die UserLights Referenz irgendwie einen BundleByName anwenden (also die Referenz wie einen Cluster behandeln) und mir dann direkt die Eigenschaft Object-->LEDx-->Value rauspicken, wie mach ich denn das?
Also wenn du das jetzt nicht meinst, kann ich dir auch nicht helfen....

Lv82_img
[attachment=8190] [attachment=8191] [attachment=8192]
Jaha super Achim das wars!!!
Aber woran liegt es eigentlich, dass man nicht direkt einen TypeDef Refnum sondern immer nur Generic Cluster an SubVIs übergeben kann?
In jedem Fall vielen Dank nun kann es endlich (in großen Schritten) weitergehen in meinem LabVIEW Projekt!!!
' schrieb:Jaha super Achim das wars!!!
Aber woran liegt es eigentlich, dass man nicht direkt einen TypeDef Refnum sondern immer nur Generic Cluster an SubVIs übergeben kann?
In jedem Fall vielen Dank nun kann es endlich (in großen Schritten) weitergehen in meinem LabVIEW Projekt!!!

Du kannst natürlich ein (Strict)TypeDef übergeben...nur wird halt leider nur das (Strict)TypeDef automatisch aktualisiert, und nicht dessen entsprechende Referenz...weiß nicht, woran das liegt...hat sicher nen triftigen Grund...kannste ja mal bei NI fragen!
' schrieb:Du kannst natürlich ein (Strict)TypeDef übergeben...nur wird halt leider nur das (Strict)TypeDef automatisch aktualisiert, und nicht dessen entsprechende Referenz...weiß nicht, woran das liegt...hat sicher nen triftigen Grund...kannste ja mal bei NI fragen!


Hallo Zusammen,

ein Frage hätte ich zu diesem Problem:
Warum erzeugt Ihr auf der Oberläche nicht ein Control-Refnum, zieht in dieses Control den Strict-Type-Def gebundenen Cluster-Control? Dieses Referenzcontrol wird bei jeder Änderung der Type-Def mit aktualisiert und man kann sich im SubVI das Cluster-Control sparen.

Gruß
23uwe

ANHANG: LV8.5
Zitat:Hallo Zusammen,
ein Frage hätte ich zu diesem Problem:
Nein, du hast ein Lösung!Wink

Zitat:Warum erzeugt Ihr auf der Oberläche nicht ein Control-Refnum, zieht in dieses Control den Strict-Type-Def gebundenen Cluster-Control?
L A T Ü R N I C H !

Ist natürlich viel einfacher...hatte ich überhaupt nicht dran gedacht! Mir ist aber auch irgendwie so, als ob's dabei noch irgend nen Haken gab...evtl. wars auch kein Haken, sondern der rote Stern, der das "Include data type" kennzeichnet...hm...weiß auch nicht mehr...siehe meinen Beitrag oben!
' schrieb:Du kannst natürlich ein (Strict)TypeDef übergeben...nur wird halt leider nur das (Strict)TypeDef automatisch aktualisiert, und nicht dessen entsprechende Referenz...weiß nicht, woran das liegt...hat sicher nen triftigen Grund...kannste ja mal bei NI fragen!


Jedenfalls kannte ich bis jetzt den Trick mit dem reinziehen des Controls in die Refnum noch nicht...super! Wieder was gelernt!Guru2


EDIT:
Zu meiner "Ehrenrettung" sei noch gesagt:
Wenn ich mir die Referenz auf das Cluster dynamisch holen will, z.B. wenn das Cluster auf nem TabControl liegt und ich mit dem "Pages"-Referenzen- und dem "Controls on Page"-Referenzen-Array arbeite, muss ich mir im SubVI doch mit "to more specific class" den Typ der zu ändernden Daten holen...und dafür muss man dann doch das Strict-Originalcontrol im SubVI platzieren
' schrieb:Nein, du hast ein Lösung!Wink
L A T Ü R N I C H !

Ist natürlich viel einfacher...hatte ich überhaupt nicht dran gedacht! Mir ist aber auch irgendwie so, als ob's dabei noch irgend nen Haken gab...evtl. wars auch kein Haken, sondern der rote Stern, der das "Include data type" kennzeichnet...hm...weiß auch nicht mehr...siehe meinen Beitrag oben!
Jedenfalls kannte ich bis jetzt den Trick mit dem reinziehen des Controls in die Refnum noch nicht...super! Wieder was gelernt!Guru2
EDIT:
Zu meiner "Ehrenrettung" sei noch gesagt:
Wenn ich mir die Referenz auf das Cluster dynamisch holen will, z.B. wenn das Cluster auf nem TabControl liegt und ich mit dem "Pages"-Referenzen- und dem "Controls on Page"-Referenzen-Array arbeite, muss ich mir im SubVI doch mit "to more specific class" den Typ der zu ändernden Daten holen...und dafür muss man dann doch das Strict-Originalcontrol im SubVI platzieren
=> o.k., wieder interessehalber => warum über "Controls on Page"? Da muss man ja wissen welches Element ich haben will. Dann übergebe ich einfach neben der Referenz auf das TabControl auch noch aus dem MainVI die Referenz des Clusters, gehe dann aber über "to more specific class" und der übergebenen ClusterReferenz auf das entsprechende Control. Kann mir also auch an dieser Stelle das OriginalControl sparen. Oder habe ich da was falsch verstanden?

Gruß
Uwe

Lv85_img
Referenz-URLs