LabVIEWForum.de - Case abhängig Cluster gestalten

LabVIEWForum.de

Normale Version: Case abhängig Cluster gestalten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Stehe vor dem Problem dass ich gerne einen Cluster sortieren würde. Er enthält 14 Elemente, teils unterschiedlicher Struktur (Cluster in den einzelne Elemente abgelegt sind, Cluster mit Arrays, Cluster mit Strings etc.)
Jeder Typ ist doppelt vorhanden, einmal für Strom, einmal für Spannung. Also insg. 7 unterschiedlichte Typen.

Ich würde gerne jetzt "Case" Abhängig in einem "Output Cluster" entweder den "Strom-Cluster" oder den "Spannungs-cluster" einfügen. Also 1 Eintrag im "Output Cluster" soll je nach Bedinung mit dem "Strom-Cluster" oder "Spannungscluster" gefüllt werden. Der Output hat dann 7 Einträge.

Leider kann ich einem Eintrag im "Output-Cluster" keine 2 unterschiedlichen Typen einfach zuweisen Sad

Gibts dafür irgend eine Lösung ?

Spannungs-Cluster : String, Enum, Enum
Strom Cluster : String, Enum, Enum, Enum

+ unterschiedliche Labels

Gruß Roman
Hallo Roman,

du kannst unterschiedliche Cluster nicht in einem Draht zusammenführen - LabVIEW arbeitet strikt typisiert...

Du kannst aber einen "großen" Cluster erstellen, der alle Elemente enthält, die du für alle deine "Cases" brauchst. In den Cases füllst du dann nur die entsprechenden Einträge im "großen" Cluster ein. Hilfreich ist dann ein weiteres Element im Cluster (am besten ein typdefiniertes Enum), welches signalisiert, welche Werte im Cluster gerade verwendet werden (sollen)...

Anders ausgedrückt:
- Im aktuellen Fall: Überlege dir eine bessere Datenstruktur.
- Zukünftig: Überlege dir erst eine (bessere) Datenstruktur, und fange dann zu programmieren an... Wink
Die Lösung ist die von Gerd angesprochene 'Super-Cluster-Lösung'.

Gegenfrage: Warum willst du das machen? Wie wird der Cluster weiterverarbeitet? Oder ist er nur zur Anzeige?

Beste Grüße,
NWO
Hallo Gerd, NWO,

Um einzelne Blöcke eines Treibers anzusprechen. Da zum Beispiel eine Konstant Quelle sowohl als Strom, wie auch als Spannungsquelle funktionieren kann, müssen beide Datensätze am Baustein bereit stehen.

Vielen Dank für den Vorschlag, im Endeffekt hab ichs auch so gelöst. Die Daten werden im Cluster übergeben und zusätzlich ein Boolean Array, welches je nach Funktion das entsprechende Bit setzt und dann die richtige Spalte ausgelesen wird.

Die gesamte Datenstruktur ist so organisiert, dass alle Funktionen in einem 16 Bit Array, einem Bit entsprechen. Also Bit1=Sweep Quelle, Bit 2=Step Quelle, Bit 3= Sync Quelle, Bit 4-8 Konst Quellen usw.
Wenn der Benutzer für eine SMU jetzt eine Sweep Quelle auswählt, werden alle Daten für die Quelle in den Arrays in Bit 1 abgelegt. Also Channel der SMU, Name der Quelle, Messgrößen, Messspezifikationen + Boolean funktions-Array, OuputCluster + Boolean funktions-Array usw. Ausgelesen muss dann bei allen 16 Bit Arrays immer das erste Bit.

So kann ich im Treiber, die Sweep Quelle dann statisch an das erste Bit aller Arrays anschließen.

Wär cool gewesen, wenn dann im Cluster an Stelle 1 auch Strom- oder Spannungseinstellungen stehen würden, so erfolgts mit einer unter-Instanz über ein Boolean Array Smile

Greetz
Das wäre denke ich eine gute Stelle zu erwähnen, dass das einer der Fälle ist in den LVOOP vermutlich auch weiterhilft. Eine Elternklasse die die Schnittstellen definiert und dann auf zwei Kindklassen per dynamic dispatch die die konkrete Handhabung / Ansprache der Hardware regeln ;-)
Referenz-URLs