Zwischenspeicherung von Daten in LabVIEW
- Aktualisiert2025-08-27
- 6 Minute(n) Lesezeit
Die Daten von Bedien- und Anzeigeelementen sowie von Verbindungen und anderen Objekten werden im Arbeitsspeicher je nach Datentyp unterschiedlich gespeichert.
Boolesche Daten
Boolesche Werte werden in LabVIEW durch 8 Bit dargestellt. Ist der Wert 0, so lautet der boolesche Wert FALSE. Alle Werte ungleich 0 stehen für TRUE.
Byte-Integer
Byte-Integer mit und ohne Vorzeichen werden im 8-Bit-Format dargestellt.
Word-Integer
Word-Integer mit und ohne Vorzeichen werden im 16-Bit-Format dargestellt.
Long-Integer
Long-Integer mit und ohne Vorzeichen werden im 32-Bit-Format dargestellt.
Quad-Integer
Quad-Integer mit und ohne Vorzeichen werden im 64-Bit-Format dargestellt.
Festkomma
Festkommawerte mit und ohne Vorzeichen werden im 64-Bit-Format dargestellt. LabVIEW führt eine Vorzeichenerweiterung von Festkommawerten auf 64 Bit durch, auch wenn die erweiterten Bits nicht signifikant sind.
Einfach
Fließkommazahlen mit einfacher Genauigkeit werden im 32-Bit-Single-Format nach IEEE dargestellt.
Doppelt
Fließkommazahlen mit doppelter Genauigkeit werden im 64-Bit-Double-Format nach IEEE dargestellt.
Erweitert
Fließkommazahlen mit erweiterter Genauigkeit werden im 80-Bit-Extended-Format nach IEEE dargestellt.
Komplex (Single)
Komplexe Fließkommazahlen mit einfacher Genauigkeit bestehen aus realen und imaginären Werten im 32-Bit-Single-Format nach IEEE.
Komplex (Double)
Komplexe Fließkommazahlen mit doppelter Genauigkeit bestehen aus realen und imaginären Werten im 64-Bit-Double-Format nach IEEE.
Komplex (Extended)
Komplexe Fließkommazahlen mit erweiterter Genauigkeit bestehen aus realen und imaginären Werten im Extended-Format nach IEEE.
Bei Fließkommazahlen und komplexen Zahlen ist s das Vorzeichen-Bit (0 entspricht positiv, 1 entspricht negativ). Der angepasste Exponent zur Basis 2 wird durch "exp" dargestellt, und die Mantisse ist eine Zahl im Bereich [0,1].
Zeitstempel
LabVIEW speichert einen Zeitstempel als Cluster aus zwei Werten mit doppelter Genauigkeit. Der erste Wert mit doppelter Genauigkeit entspricht dabei der zeitzonenunabhängigen Anzahl von Sekunden, die seit Freitag, 1. Januar 1904, 00:00 Uhr Weltzeit verstrichen sind [01-01-1904 00:00:00]. Der zweite Wert mit doppelter Genauigkeit stellt die Sekundenbruchteile dar.
Arrays
Arrays werden als Handles (Zeiger auf Zeiger) gespeichert, die die Größe jeder Dimension des Arrays in 32-Bit-Integern gefolgt von den Daten enthalten. Ist das Handle 0, so handelt es sich um ein leeres Array. Aufgrund eingeschränkter Ausrichtungsmöglichkeiten auf manchen Plattformen können der Dimensionsgröße einige Füll-Bytes folgen, damit das erste Element der Daten ordnungsgemäß ausgerichtet ist. Beim Datenaustausch mit einer DLL mit einem LabVIEW-Array muss möglicherweise die Größe des Handles angepasst werden.
In der folgenden Abbildung sehen Sie ein 1D-Array aus Fließkommazahlen mit einfacher Genauigkeit. Die Dezimalzahlen auf der linken Seite stellen den jeweiligen Byte-Versatz von der Position im Speicher dar, an der das Array beginnt.
Die folgende Abbildung zeigt ein 4D-Array aus 16-Bit-Integer-Werten.
In LabVIEW werden sowohl 1D- als auch 2D-Arrays im Speicher ausgerichtet. Das ist bei der linearen Algebra und bei Matrizen sinnvoll.
Strings
Strings werden als Zeiger auf eine Struktur gespeichert, die einen 4 Byte langen Wert, gefolgt von einem 1D-Array aus Byte-Integern (8-Bit-Zeichen) enthält (siehe nachfolgende Abbildung). Wenn das Handle (der Zeiger) auf die Struktur NULL ist, wird der String als leerer String interpretiert (also als String mit der Länge 0). Da das Ende eines Strings anhand seiner Länge und nicht durch ein Abschlusszeichen ermittelt wird, kann der String an jeder Stelle das NULL-Zeichen (d. h. das ASCII-Zeichen 0) enthalten. Bei der Weiterleitung von LabVIEW-Code an externen Programmcode, der einen C-String erwartet, wird der String allerdings beim Antreffen des ersten NULL-Zeichens als beendet interpretiert.
Pfade
Ein LabVIEW-Pfad ist ein Zeiger auf eine Datenstruktur, die aus einem Pfadtyp und Pfadkomponenten besteht. Der Pfadtyp lautet bei einem absoluten Pfad 0, bei einem relativen Pfad 1 und bei einem UNC-Pfad (UNC - Universal Naming Convention) 3. UNC-Pfade gibt es nur unter Windows. Sie fangen nicht mit einem Laufwerksbuchstaben, sondern mit \\<Rechnername>\<Freigegebenes Verzeichnis> an. Jeder andere Wert für den Pfadtyp stellt einen ungültigen Pfad dar.
Mit folgenden Funktionen können Angaben zu Pfaden abgefragt werden:
- FDepth()
- FDirName()
- FIsAPath()
- FIsAPathOfType()
- FIsEmptyPath()
- FNamePtr()
- FVolName()
Mit folgenden Funktionen werden einem Pfad Elemente hinzugefügt:
- FAddPath()
- FAppendName()
Mit folgenden Funktionen wird ein neuer Pfad erzeugt:
- FNotAPath()
- FPathCpy()
- FEmptyPath()
- FMakePath()
- FRelPath()
Ein Pfad wird mit der Funktion FDestroyPath() gelöscht.
Mit folgenden Funktionen können Sie einen Pfad in Text umwandeln (und umgekehrt):
- FFileSystemStringToPath()
- FPathToFileSystemDSString()
- FPathToText()
- FTextToPath()
- ConvertPathToPlatformIndependentText()
- ConvertPlatformIndependentTextToPath()
Mit folgenden Funktionen werden zwei Pfade verglichen:
- FPathCmp()
- FPathCmpLexical()
Weitere Informationen
Cluster
Cluster-Elemente verschiedener Datentypen werden entsprechend der Reihenfolge der Cluster-Elemente gespeichert. Zum Anzeigen und Bearbeiten der Reihenfolge der Cluster-Elemente klicken Sie mit der rechten Maustaste auf den Rand des Clusters und wählen Sie aus dem Kontextmenü die Option Elemente im Cluster neu ordnen aus. Skalarwerte werden in LabVIEW direkt in Clustern gespeichert und Arrays, Strings und Pfade indirekt. Aufgrund eingeschränkter Ausrichtungsmöglichkeiten auf manchen Plattformen können einem Cluster in einem Array Füll-Bytes folgen, so dass der nächste Cluster ordnungsgemäß ausgerichtet ist. Beim Datenaustausch mit einer DLL mit einem Cluster-Array müssen diese Füll-Bytes berücksichtigt werden, wenn die Größe des Handles des Arrays angepasst wurde.
Das Speicher-Layout von Clustern ist je nach Plattform unterschiedlich. LabVIEW fügt in manchen Fällen Füll-Bytes zwischen Cluster-Elementen ein, so dass die Elemente an bestimmten Adressgrenzen ausgerichtet sind. Für Adressgrenzen wird die natürliche Ausrichtung angewandt. Daten werden an ihrer natürlichen Grenze ausgerichtet, wenn die Startadresse ein Vielfaches der Größe der Daten ist. So wird beispielsweise ein 4-Byte-Integer natürlich ausgerichtet, wenn er an einer Adresse beginnt, die ein Vielfaches von 4 ist. Die meisten Compiler haben eine Obergrenze mit weniger strikten Regeln. So kann beispielsweise ein 8-Byte-Integer an einer 4-Byte-Grenze ausgerichtet werden. Für die Plattformen, auf denen LabVIEW ausgeführt werden kann, gelten folgende Einschränkungen bezüglich der Ausrichtung:
- (Phar Lap ETS) Daten werden nur an 1-Byte-Grenzen ausgerichtet.
- (macOS 64 Bit und Linux 64 Bit) Daten werden natürlich an Grenzen bis zu 8 Byte ausgerichtet.
- (Windows 64 Bit und VxWorks) Daten werden natürlich an Grenzen bis zu 8 Byte ausgerichtet.
Bei Clustern gilt auf allen Plattformen die Ausrichtung des Elements mit den meisten Einschränkungen.
Die nachfolgenden Tabellen stellen einen Cluster mit einem 16-Bit-Integer, einem Fließkommawert doppelter Genauigkeit, einem Fließkommawert erweiterter Genauigkeit, einem Array und einem vorzeichenlosen 8-Bit-Integer dar. Jede Zeile enthält eine Speicheradresse, das dazugehörige Element und die Elementgröße.
- (Phar Lap ETS) Da Daten nur an 1-Byte-Grenzen ausgerichtet werden, lautet die Speicheradresse des nächsten Clusters 17.
Speicheradresse Element Größe (Byte) 0: I16-Integer 2 2: Fließkomma (EXT) 10 12: Array-Handle 4 16: U8-Integer 1 - (Windows 64 Bit, macOS 64 Bit und Linux 64 Bit) Da Daten natürlich an bis zu 8-Byte-Grenzen ausgerichtet werden, fügt LabVIEW sieben Füll-Bytes nach dem U8-Integer ein, so dass die Speicheradresse des nächsten Clusters 32 lautet.
Speicheradresse Element Größe (Byte) 0: I16-Integer 2 2: Fließkomma (EXT) 10 12: Füllzeichen 4 16: Array-Handle 8 24: U8-Integer 1 25: Füllzeichen 7 - (VxWorks) Da Daten natürlich an bis zu 8-Byte-Grenzen ausgerichtet werden, fügt LabVIEW sieben Füll-Bytes nach dem U8-Integer ein, so dass die Speicheradresse des nächsten Clusters 40 lautet. Beachten Sie, dass VxWorks Fließkommazahlen mit erweiterter Genauigkeit als Long-Werte mit doppelter Genauigkeit implementiert.
Speicheradresse Element Größe (Byte) 0: I16-Integer 2 2: Füllzeichen 6 8: Fließkomma (EXT) 16 24: Array-Handle 8 32: U8-Integer 1 33: Füllzeichen 7
LabVIEW speichert Cluster direkt eingebettet und ohne Dereferenzierung in anderen Clustern. Arrays, Strings und Pfade werden dagegen indirekt gespeichert.
In der folgenden Abbildung sehen Sie zwei Cluster, deren Daten auf die gleiche Weise gespeichert werden.
Signalverlauf
Signalverläufe werden genau wie Cluster gespeichert.
Referenz
Referenzen werden als 32-Bit-Integer mit Vorzeichen gespeichert.
Variant
Variantdaten werden als Handles auf eine LabVIEW-interne Datenstruktur gespeichert. Variantdaten bestehen aus 4 Bytes.