LabVIEWForum.de - Werte (nach Namen) bündeln. Auch zu ext. VI

LabVIEWForum.de

Normale Version: Werte (nach Namen) bündeln. Auch zu ext. VI
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Heyho!

Ich muß leider schon wieder ein paar Fragen los werden, die ich mit der LV-Hilfe und sogar der Tutorial-CD leider nicht lösen konnte:

Ich möchte mit einem FT2232D und LabVIEW Daten erfassen. Dafür habe ich mir vom Hersteller die Beispiel-VIs geholt, die jeweils eine Funktion der .dll abarbeiten können. Die werden dann als "Eigene VI..." in mein Programm eingefügt, was so wie ich es mitbekommen habe auch die sinnvollste Vorgehensweise sein sollte.

Nun bin ich beim VI "SPI schreiben" leider über eine gelbe Leitung gestolpert, die sich als Cluster von 9 Werten darstellt. Was ein Cluster ist habe ich inzwischen begriffen und auch wo und warum man sie nutzen sollte. Sogar die Sache mit "Nach Namen bündeln" ist mir nun klar, bloß nützt es bisher nichts, weil ich es einfach nicht hin bekomme selbst einen Cluster zu erstellenSad

Hier mal die Vorgehensweise zur Erstellung eines Signalbündels, wie ich sie verstanden habe:
- Man fügt auf den Blockdiagramm eine "Cluster-Konstante" ein und füttert diese mit den korrekt benannten (Grund-?)Werten passenden Typs. Bloß wo finde ich die Variablen zum hineinziehen? Der einzige Datentyp, den LV bei mir im Cluster akzeptiert ist eine ganz simple numerische Konstante, bloß ist die blau umrandet und nicht gelb, wie in allen Beispielen, die ich auftun konnte.
- Als nächstes benötige ich das VI "Nach Namen bündeln", welchem ich als Eingang den Cluster anhänge - dann sollten die Namen darin auftauchen.
- Der Ausgang vom "Nach namen bündeln" transportiert nun jeweils eine benannte Variable mit ihrem Inhalt. Dabei ist die Reihenfolge unwichtig, da nach Namen identifiziert wird.
- Wenn ich Inhalte ändern möchte, schiebt man diese einfach vorn in die entsprechende Variable von "Nach Namen bündeln", richtig?

Im gleichen Zusammenhang ist noch eine weitere Frage aufgetaucht:

Wenn ich in Beispielprogrammen irgendwo an ein Bündel die passende Gegenfunktion (aufspalten bzw. bündeln) anhänge, taucht sofort ein Objekt mit korrekt benannten und definierten Signalen auf. In meinem Fall geht das Bündel aber in ein eingefügtes VI und dies ist nicht der Fall (sonst hätte ich o.g. Sorgen ja nichtWink). Andererseits meldet die Kontexthilfe alle Namen richtig zurück, wenn man mit der Maus über den Bündeleingang fährt. Mache ich da etwas falsch oder ist das bei externen VIs so, daß nicht automatisch übernommen wird? So müßte ich ja, sofern ich weiß wie es geht, das ganze Bündel händisch neu eingeben und penibel drauf achten, daß alle Namen auch zu denen passen, die der Eingang erwartet...

Liebe Grüße,
Dennis
' schrieb:- Man fügt auf den Blockdiagramm eine "Cluster-Konstante" ein und füttert diese mit den korrekt benannten (Grund-?)Werten passenden Typs. Bloß wo finde ich die Variablen zum hineinziehen? Der einzige Datentyp, den LV bei mir im Cluster akzeptiert ist eine ganz simple numerische Konstante, bloß ist die blau umrandet und nicht gelb, wie in allen Beispielen, die ich auftun konnte.
Man kann doch alle Datentypen in ein Cluster "ziehen". Und was meinst du eigentlich mit dem gelb umrandeten? Welcher Datentyp soll das sein?

' schrieb:- Als nächstes benötige ich das VI "Nach Namen bündeln", welchem ich als Eingang den Cluster anhänge - dann sollten die Namen darin auftauchen.
Gehst ins FP und klickst in der Funktionspalette auf Suchen und gibst bündeln ein...schon findest es.
(Programmierung->Cluster, Klasse, Variant->Nach Namen bündeln)


' schrieb:- Der Ausgang vom "Nach namen bündeln" transportiert nun jeweils eine benannte Variable mit ihrem Inhalt. Dabei ist die Reihenfolge unwichtig, da nach Namen identifiziert wird.
- Wenn ich Inhalte ändern möchte, schiebt man diese einfach vorn in die entsprechende Variable von "Nach Namen bündeln", richtig?
Keine Ahnung was du meinst.

' schrieb:Wenn ich in Beispielprogrammen irgendwo an ein Bündel die passende Gegenfunktion (aufspalten bzw. bündeln) anhänge, taucht sofort ein Objekt mit korrekt benannten und definierten Signalen auf. In meinem Fall geht das Bündel aber in ein eingefügtes VI und dies ist nicht der Fall (sonst hätte ich o.g. Sorgen ja nichtWink). Andererseits meldet die Kontexthilfe alle Namen richtig zurück, wenn man mit der Maus über den Bündeleingang fährt. Mache ich da etwas falsch oder ist das bei externen VIs so, daß nicht automatisch übernommen wird? So müßte ich ja, sofern ich weiß wie es geht, das ganze Bündel händisch neu eingeben und penibel drauf achten, daß alle Namen auch zu denen passen, die der Eingang erwartet...
Die "Gegenfunktion" heißt Unbundle oder Aufschlüsseln. Wenn dein Cluster in ein SubVI geht, ist doch klar, dass das Unbundle.vi nicht erscheint. Füge doch das Unbundle.vi ein und verbinde den Eingang mit deinem Cluster. Fertig
Ich mach auch mal einen Versuch.


' schrieb:Nun bin ich beim VI "SPI schreiben" leider über eine gelbe Leitung gestolpert,
Gelb impliziert einen Double-Wert - im Gegensatz zu Blau, das ist ein I32-Wert (oder U32...).

Zitat:die sich als Cluster von 9 Werten darstellt.
Hier unterscheiden sich die Farben nicht. Die Farbe bzw. die Form des Wires eines Clusters hängt vom Inhalt des Clusters ab. Da hier gelb, besteht der Cluster also auf 9 Double-Werten (Hinweis: Meine Vermutung, so genau geht das aus deinem Posting nicht hervor).

Zitat:Was ein Cluster ist habe ich inzwischen begriffen und auch wo und warum man sie nutzen sollte. Sogar die Sache mit "Nach Namen bündeln" ist mir nun klar, bloß nützt es bisher nichts, weil ich es einfach nicht hin bekomme selbst einen Cluster zu erstellen
Gut. DAs hab ich bis hierher alles verstanden.

Zitat:Hier mal die Vorgehensweise zur Erstellung eines Signalbündels, wie ich sie verstanden habe:
- Man fügt auf den Blockdiagramm eine "Cluster-Konstante" ein
Jawohl.

Zitat:und füttert diese mit den korrekt benannten (Grund-?)Werten passenden Typs.
Das ist so gesehen falsch ausgedrückt.
Du "fütterst" den Cluster zuerst einmal nicht mit Werten, sondern mit Typen. Du stellt praktisch eine Variable vom Typ Double ein. Diese Variable bekommt einen sinnvollen Namen (z.B. Mittelwert). Dass man dieser Variablen auch einen Wert zuweisen kann ist ein Feature, das man aber nicht nutzen muss. Beachte hier also die Sinn von Wert.

Zitat:Bloß wo finde ich die Variablen zum hineinziehen? Der einzige Datentyp, den LV bei mir im Cluster akzeptiert ist eine ganz simple numerische Konstante, bloß ist die blau umrandet und nicht gelb, wie in allen Beispielen, die ich auftun konnte.
1. Gelb statt blau: Blau heißt Integer (I32 ...), gelb heißt double (siehe auch oben). Eingefügt wird immer ein Integertyp. Den kann man aber anpassen: Typ anklicken, Eigenschaften öffnen, "Eigenschaften" suchen, dort den Typ double auswählen - und schon ist aus blau gelb geworden (geht alles intiutiv, wie das bei LV üblich ist).
2. Andere Typen: Einfach z.B. das Menü für String-Elemente öffnen und vor dort ein String-Element in den Cluster ziehen. Dann ist da auch ein String-Typ. Mit allen anderen Typen geht es genau so.

Zitat:Als nächstes benötige ich das VI "Nach Namen bündeln",
Bezeichne dieses teil nicht als VI, sondern als Element.
Zitat:welchem ich als Eingang den Cluster anhänge - dann sollten die Namen darin auftauchen.
Jawohl.

Zitat:Der Ausgang vom "Nach namen bündeln" transportiert nun jeweils eine benannte Variable mit ihrem Inhalt. Dabei ist die Reihenfolge unwichtig, da nach Namen identifiziert wird.
Das ist prinzipiell richtig.

Zitat:Wenn ich Inhalte ändern möchte, schiebt man diese einfach vorn in die entsprechende Variable von "Nach Namen bündeln", richtig?
Richtig.

[ quote ]
Im gleichen Zusammenhang ist noch eine weitere Frage aufgetaucht:
Wenn ich in Beispielprogrammen irgendwo an ein Bündel die passende Gegenfunktion (aufspalten bzw. bündeln) anhänge, taucht sofort ein Objekt mit korrekt benannten und definierten Signalen auf. In meinem Fall geht das Bündel aber in ein eingefügtes VI und dies ist nicht der Fall (sonst hätte ich o.g. Sorgen ja nichtWink). [ quote ]
Viele, viele Information. Und dann noch zwischen den Zeilen versteckt?
Soll das jetzt eine Frage sein: Wie bekomme ich einen Cluster in eine SubVI hinein?
So: Erstelle (im Blockdiagramm) am Ausgang von "Bündeln" ein Bedienelement. Klicke auf das erstellte Element. Führe die Funktion "SubVI erstellen" aus. Jetzt wird ein SubVI erstellt mit einen Eingang des gewünschten Clusters. Fazit: Der Cluster geht in das SubVI. Zweite Möglichkeit: Kopieren das erstellt Bedienelement. Wechse in ein SubVI und füge das gerade kopierte Element (z.B. mit Ctrl-V) ein. Nach als Eingang vom SubVI gedinieren und fertig.

Hinweis:
Möglicherweise fehlt dier hier der Basiskurs LavView.


Man beachte die Besonderheit an diesem Positing: Irgendwer verbietet mehr als 10 Zitate.
@Skywalker: Naja - auf gelb kam ich, da in allen von mir getesteten Beispielen die Variablen im Cluster gelb umrandet waren. Wenn ich hingegen die numerische Konstante vom Frontpanel ins Cluster ziehe ist diese nicht gelb, sondern blau umrandet also recht wahrscheinlich ein anderer Typ. Auch würde es kaum Sinn machen, nur Objekte bündeln zu können, die auch auf dem Frontpanel auftauchen, allerdings konnte ich zum Fragezeitpunkt auch kein Objekt im Blockdiagramm finden, welches man in den Cluster ziehen konnte.

Die anderen Sachen waren so weit schon klar und sollten eigentlich nur zeigen, daß ich mir selbst schon nen Kopf gemacht habe und die Grenze des leider noch recht mageren Wissens aufzeigen.

@IchSelbst:
Zitat:Du "fütterst" den Cluster zuerst einmal nicht mit Werten, sondern mit Typen. Du stellt praktisch eine Variable vom Typ Double ein. Diese Variable bekommt einen sinnvollen Namen (z.B. Mittelwert). Dass man dieser Variablen auch einen Wert zuweisen kann ist ein Feature, das man aber nicht nutzen muss. Beachte hier also die Sinn von Wert.
Das war's - danke!!!Hopper. Nun habe ich nur noch das Problem, daß ich die Variable nicht einfach über Rechtsklick->Eigenschaften benennen kann, sondern sie auf jeden Fall über ->Objekt wählen an ein Frontpanelobjekt knüpfen müß. Geht das auch einfacher? Was wäre, wenn ich eine Variable XYZ aus z.B. einer Rechenoperation an eine andere übergeben möchte - dann hätte sie ja auch nie direkten Bezug zum Frontpanel... Denknach

Zitat:Soll das jetzt eine Frage sein: Wie bekomme ich einen Cluster in eine SubVI hinein?
Nicht direkt. Trotzdem war die Antwort lehrreich für michSmile. Die Frage war so gemeint: Wenn ich in einem VI ein Bündel habe und dieses an ein Element "Aufspalten" anknüpfe, übernimmt letzteres die Namen der Clusterinhalte automatisch - klappt auch umgekehrt. Wenn ich allerdings ein SubVI einfüge, welches per Bündel Ein- oder Ausgaben macht, klappt dies nicht so einfach, obwohl die evtl. Fehlermeldung alle Namen richtig auflisten kann. Jetzt frage ich mich, ob ich da was falsch mache oder ob man hier wirklich alle Namen selbst eintippen muß.

Zitat:Möglicherweise fehlt die hier der Basiskurs LavView.
ja, Ja, JA!!! Das stimmt! Wenn du mir jetzt sagst, wo es diesen Basiskurs gibt wäre ich dir sehr dankbar. Mein Problem ist nämlich, daß wir LV "nur" als Campuslizenz incl. zweier mäßiger Schulungs-CDs haben und mein Prof. ein Verfechter von Testpoint ist, sprich eine externe/kostenpflichtige Schulung kann ich eh vergessenSad

Zitat:Man beachte die Besonderheit an diesem Positing: Irgendwer verbietet mehr als 10 Zitate.
Jupp, das Prob hatte ich auch schon mehrmals mit PHPBB in anderen Foren. Einfachste Lösung: In zwei Posts antworten. Wenn sich ein User wirklich die Mühe macht >10 Zitate einzufügen, hab ich als MOD auch Verständnis fürs Doppelposten...Smile

LIebe Grüße,
Dennis
' schrieb:Nun habe ich nur noch das Problem, daß ich die Variable nicht einfach über Rechtsklick->Eigenschaften benennen kann, sondern sie auf jeden Fall über ->Objekt wählen an ein Frontpanelobjekt knüpfen müß.
Es gilt folgendes:
Grundsätzlich ist jeder "Ergebnisspeicher" mit einem Frontpanelelement verbunden. Soll heißen: Du berechnest etwas, das dann in einer Variablen gespeichert werden soll. In C++ würde das ganz einfach heißen "Ergebnis.Wert=1+2+3"; Dieses Ergebnis würdest du jetzt in einem weiteren Schritt am Bildschirm (=Frontpanel) anzeigen wollen: z.B. "Ergebnis.AnzeigeFeld.Text:=String(Ergebnis.Wert)". LV nun ist eine (mehr) intuitive Sprache: Alleine das Zuweisen des Ergebnisses einer Rechenoperation an ein Element zwecks Speicherung des Ergebnisses bewirkt bereits ein Darstellen des Ergebnisses am Bildschirm. So gesehen ist LV also einen Schritt schneller als C++. Jedem Anzeige/Bedien-Element im Blockdiagramm ist immer ein entsprechendes Element am Frontpanel (in Folge dann am Bildschirm) zugewiesen.
So gesehen bleibt dir also gar nichts anderes übrig, als irgendwas mit einem (Frontpanel-)Element zu erbinden.

Zitat:Geht das auch einfacher? Was wäre, wenn ich eine Variable XYZ aus z.B. einer Rechenoperation an eine andere übergeben möchte - dann hätte sie ja auch nie direkten Bezug zum Frontpanel...
Die Variable XYZ selbst - solange es sich eben um eine "Variable" handelt und nicht nur um einen Wire - hat bereits ein Element am Frontpanel!
Ansonsten kannst du die Variable XYZ jedem anderen (Frontpanel-)Element zuweisen - Voraussetzung ist natürlich Typ-Kompatibilität (die auch mit einer entsprechenden Konvertierung erreicht werde kann).

Zitat:Wenn ich in einem VI ein Bündel habe und dieses an ein Element "Aufspalten" anknüpfe, übernimmt letzteres die Namen der Clusterinhalte automatisch - klappt auch umgekehrt. Wenn ich allerdings ein SubVI einfüge, welches per Bündel Ein- oder Ausgaben macht, klappt dies nicht so einfach, obwohl die evtl. Fehlermeldung alle Namen richtig auflisten kann. Jetzt frage ich mich, ob ich da was falsch mache oder ob man hier wirklich alle Namen selbst eintippen muß.
Mach aus dem, was du im Haupt-VI als Cluster erzeugt hat, eine (stricte) Typdefinition. Diese typdefinition kannst du in ein (Sub-)VI einfügen und als Eingang oder Ausgang definieren. Dann kannst du an dieses SubVI eben diesen Cluster aus dem HauptVI anlegen und musst nicht nochmals alles eintippen.

Zitat:Wenn du mir jetzt sagst, wo es diesen Basiskurs gibt wäre ich dir sehr dankbar.
Im allgemeinen immer über http://www.ni.com

Zitat:Mein Problem ist nämlich, daß wir LV "nur" als Campuslizenz incl. zweier mäßiger Schulungs-CDs haben und mein Prof. ein Verfechter von Testpoint ist, sprich eine externe/kostenpflichtige Schulung kann ich eh vergessen
Engagement und selbständige Problemlösung sollten für den Professor mindestens genauso viel zählen wie das Ergebnis. Wobei letzteres nicht schlecht sein wird bei gutem ersten.
Heyho!

Hab ganz herzlichen Dank für die Antwort - damit bringst du mich schonmal ein ganzes Stück weiter an LV heranSmile

...leider gab es in der Familie einen Trauerfall, weshalb ich mich momentan mit ganz anderen Dingen beschäftige(n muß). Ich werde aber sobald Zeit und Kopf wieder verfügbar sind an gleicher Stelle einsteigen.

Liebe Grüße,
Dennis
Referenz-URLs