LabVIEWForum.de - Ein paar "Was ist das eigentlich" Fragen

LabVIEWForum.de

Normale Version: Ein paar "Was ist das eigentlich" Fragen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ähhh ... was ist das eigentlich:

* Unit Test Framework VIs
* Desktop execution Toolkit

* was mache ich mit den "Variant" VIs?
* was heisst flatten und unflatten

Danke für eine Nachhilfe

Gottfried
' schrieb:* Unit Test Framework VIs
http://sine.ni.com/nips/cds/view/p/lang/en/nid/206789
' schrieb:* Desktop execution Toolkit
http://sine.ni.com/nips/cds/view/p/lang/en/nid/206790
' schrieb:* was mache ich mit den "Variant" VIs?
Da muss ich jetzt aufpassen, dass ich nichts Falsches erzähle:
Variant ist quasi ein Container, der Datentyp und Dateninhalt zusammenfasst. Prinzipiell hast du also die Möglichkeit, in einem Variant-Control jeden Datentpy zu übertragen.
' schrieb:* was heisst flatten und unflatten
Flatten To String: Jede Datentyp hat im Computer irgendein Bit-Muster. Mit Flatten To String übersetzt du dieses Bit/Byte-Muster 1 zu 1 in einen String.
Oder anders gesagt: Du tust so, als ob dieses Bit/Byte-Muster einen String darstellt. Bsp: Eine U8-Variable mit Wert 65 gibt als Flatten to String ein A

Gruß, Jens
' schrieb:http://sine.ni.com/nips/cds/view/p/lang/en/nid/206789

http://sine.ni.com/nips/cds/view/p/lang/en/nid/206790

Da muss ich jetzt aufpassen, dass ich nichts Falsches erzähle:
Variant ist quasi ein Container, der Datentyp und Dateninhalt zusammenfasst. Prinzipiell hast du also die Möglichkeit, in einem Variant-Control jeden Datentpy zu übertragen.

Flatten To String: Jede Datentyp hat im Computer irgendein Bit-Muster. Mit Flatten To String übersetzt du dieses Bit/Byte-Muster 1 zu 1 in einen String.
Oder anders gesagt: Du tust so, als ob dieses Bit/Byte-Muster einen String darstellt. Bsp: Eine U8-Variable mit Wert 65 gibt als Flatten to String ein A

Gruß, Jens


kurze Ergänzung fürs Verständnis:

Das Zeichen 'A' (großes a) ist im ASCII-Code mit der 65 codiert. So gibt es natürlich auch für alle anderen Zeichen einen entsprechenden Wert. Bei Interesse einfach mal nach ASCII Tabelle googlen.

LG,
Torsten
obwohl das Beispiel mit dem A natürlich richtig ist (ich hab jetz nicht nachgeprüft ob wirklich ein A rauskommt, aber ich glaub's jetzt einfach mal) find ich es doch unpassend, weil es den Sinn von flatten to String IMHO nicht deutlich macht.

Flatten to string ist eine Funktion um an die Byte-Representation von Daten zu kommen. IMHO müsste das eigentlich Flatten to Byte Array heißen, aber da ein u8 Array und ein LabVIEW String im Speicher genau gleich aufgebaut sind ist es auch wieder egal. Irgendwer bei NI hat dann wohl irgendwann mal entschieden dass es eben ein String ist der hinten rauskommt und kein Byte Array. Vermutlich macht dann der Compiler wieder eins draus ...

Anwendungsbeispiel: wenn man Daten über TCP verschicken will geht das nur byteweise. Der Empfänger muss dann wissen was das für ein Datentyp ist und kann die Daten dann mit Unflatten wieder in den original-LV-Datentyp zurückwandel ...
Vielleicht ist es einfacher so zu erklären (zumindest für C++ler o. ä.):

Flatten To String ist wie Type Cast von Irgendwas auf Stringtyp
Unflatten From String ist wie Type Cast von String auf Irgendwastyp

Ein Unterschied gibt es, man kann bei diesen VIs noch den Byte Order angeben.
' schrieb:obwohl das Beispiel mit dem A natürlich richtig ist (ich hab jetz nicht nachgeprüft ob wirklich ein A rauskommt, aber ich glaub's jetzt einfach mal) find ich es doch unpassend, weil es den Sinn von flatten to String IMHO nicht deutlich macht.
Vielleicht hätte ich ein anderes Bsp wählen sollen, das mit U8 ist ein wenig zu einfach.
Also, z.B. eine Double mit Wert 0,25 wird zu in HEX zu folgendem Byte-Muster: 3FD0 0000 0000 0000
' schrieb:Vielleicht ist es einfacher so zu erklären (zumindest für C++ler o. ä.):

Flatten To String ist wie Type Cast von Irgendwas auf Stringtyp
Unflatten From String ist wie Type Cast von String auf Irgendwastyp

Ein Unterschied gibt es, man kann bei diesen VIs noch den Byte Order angeben.

Nein ein Typecast ist leider etwas anderes! Ein Typecast verändert den Datentyp einer Variablen ohne die Representation im Speicher zu veränderen. LabVIEW hat auch einen Typecast und der lässt sich nur auf flache Daten (d.h. Skalars und Arrays of Skalars, wobei auch ein String ein Array of Skalar ist) anwenden. In C kann man grundsätzlich auch eine Struktur (LabVIEW Equivalent zu einem Cluster) Typecasten aber wenn diese Pointers enthält bekommt man nach einem Typecast nicht den Inhalt dieser Pointer sondern nur 4 Bytes die dem Pointer selber entsprechen.

Ein Flatten geht die ganze Datenstruktur durch und kopiert alle darin enthaltenen Daten in einen zusammenhängenden Speicherbereich. Für Skalars und Array of Skalars ist das grundsätzlich equivalent zu einem Typecast aber sobald man darin einen Cluster hat der Arrays und Strings enthält werden diese mit in den flattened Datenstrom hineinkopiert, so nötig auch rekursiv.
Unflatten macht die ganze Operation von Flatten wieder rückgängig.

Warum ein flattened Datenstrom als String representiert wird? Ganz einfach: die FILE I/O, GPIB, VISA, TCP/IP usw. VIs haben (oder hatten zumindest) alle einen String Ein- und Ausgang weil man sie eben oft mit ASCII Kommandos verwendet aber grundsätzlich kann dieser String auch binäre Daten enthalten wenn der Empfänger auf der anderen Seite damit umgehen kann. Um nun solche Flattened Daten nicht jeweils noch durch ein String To Byte Array durchschleifen zu müssen (oder was man auch hätte machen können und im Nachhineine gesehen wohl logischer gewesen wäre) all diese Funktionen auch mit Byte Arrays kompatibel zu machen (polymorphe VIs bestehen aber erst seit Version 5.0 oder so), wurden sie halt als String ausgeführt.

Rolf Kalbermatter
Danke - das ist ja ein Tutorial geworden.

Gottfried
Referenz-URLs