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!
12.01.2007, 13:25 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2007 13:25 von horstboehse.)
Ich suche schon seit längerem nach einer eleganten Methode, VI-Ein- und Ausgänge unabhängig von dem Übergabedaten-Typ zu machen.
Dafür gibt es ja zB die VIs "Flatten to String" und "Unflatten from string". Ersteres flattet die Daten und gibt zusätzlich ein ominöses Ineteger-Array mit dem Namen "type sting" zurück.
Meine Hoffnung lag nun darin, dass in diesem Array die Struktur des ursprünglichen Datentyps steht und man damit den String wieder unflatten kann.
Aber das "Unflatten from string" -VI erwartet als Übergabeparameter den konkreten Datentyp.
Nun meine Fragen:
Wozu dient dieses ominöse Array "type String"?
Gibt es eine Möglichkeit, auch ohne die explizite Angabe des Datentyps ein Unflatten durchzuführen?
Ich hoffe, ihr könnt mir weiter helfen.
Gruß, Daniel
12.01.2007, 13:47 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2007 14:00 von Achim.)
der TypeString ist doch wohl ne Beschreibung, wie deine "flattened Data" zu interpretieren ist. Meiner Einschätzung nach brauchst du das zwingend! So wie ich's verstehe, kannst du diesen TypeString aufspalten und darin enthalten ist die Information "TypeDescriptor" (die letzten beiden Stellen). Such danach mal in der LV-Hilfe! Allerdings gibts das bei LV8.x nicht mehr. Hier könntest du nach "Variant" wandeln und dann den Daten Attribute (z.B. ne "1" ) hinzufügen. Dieses Attribut könntest du in nachfolgenden VI's dann interpretieren, z.B. 1=boolesches Array, 2=double,....und dann mit ner Case-Struktur in den passenden Typ wandeln. So könntest du immer Variant weitergeben, in jedem VI halt dann erst mal den Typ checken...
Um Eingänge "unabhängig" vom Übergabetyp zu machen, wäre die Alternative wohl, ein polymorphes VI zu erstellen. Dabei werden mehrere VI's mit dem stets gleichen Ein-/Ausgangsschema (Connector), aber verschiedenen Datentypen erstellt (bool, double, int, var, array, cluster, ref.). Jedes VI verarbeitet die ihm entsprechenden Daten. Alle VI's werden aber als polymorphes VI "zusammengeführt", d.h. du lädst "MyPolymorphVI.vi" in den Code, und schließt eine beliebigen Datentyp an. Ist dieser in deinem VI definiert, passt sich das VI automatisch an...aber das kennst du sicher...war nur so'n Gedanke...
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Allerdings möchte ich nicht nur einzelne Variablen übergeben, sondern ein Cluster aus vielen Elementen.
Und immer, wenn ich ein Element hinzufügen will, muss ich in jedem Vi die Ein- und Ausgänge ändern. Das nervt.
Kann man diesen Type-String nicht irgendwie in den Cluster-Typ zurückwandeln, um im Sub-VI zu unflatten?
Ich möchte halt gern erreichen, dass ich dem Cluster ein Element hinzufügen kann, ohne dass die Sub-VIs, die dieses Element nicht brauchen,
sondern lediglich andere aus dem Cluster, davon berührt werden.
Hatte überlegt, die einzelnen Clusterelemente in einem Variant als Atribute zu speichern und in den Sub-VIs wieder auszulesen. Aber das ist auch irgendwie umständlich!?
Gruß, Daniel
15.01.2007, 08:53 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2007 08:55 von Achim.)
ich würde vorschlagen, du erstellst "Type Definitions". Dabei erstellst du ein beliebiges Bedienelement (z.b. ein Cluster), machst auf das Bedienelement nen Rechtsklick und wählst Customize. Hier speicherst du das Element als StrictTypeDef und fügst es in alle benötigten VIs ein bzw. ersetzt dein dort evtl. schon vorhandenes Cluster mit der TypeDef. Jedes Mal, wenn du die TypeDef aus nem beliebigen VI heraus änderst, ändert sich es auch in allen anderen VIs! Ob du dann in allen VIs auf alle Elemente zugreifst oder nicht, bleibt dir überlassen. Auf jeden Fall sind dann alle (neue und alte) Elemente in allen VIs verfügbar...
Noch Fragen?
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
15.01.2007, 09:05 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2007 09:33 von Lucki.)
Hier mal ein Beispiel für die Umwandlung Cluster in String und wieder zurück. Der Zweck der Übung war die Abspeicherung und das Wiedereinlesen der komplexen Clusterdaten in eine INI-Datei. Das Speichern/Lesen habe ich weggelassen, gezeigt wird nur die beiderseitige Konvertierung. Wenn gewünscht, poste ich auch das VI mit.
Auch so, um dieser Frage zuvorzukommen: Warum werden Typenstring-Aus und -Eingang der beiden VIs nicht einfach miteinander verbunden, statt diese Konstante zu erzeugen? Antwort: Weil die Reihenfolge normalerweise vertauscht ist, d.h zuerst wird aus der INI-Datei gelesen, und erst dann und auch nur evtl. wieder zurückgespeichert.