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.

Hinweis Fließkommazahlen mit erweiterter Genauigkeit können je nach Prozessor des Computers zuweilen auch im 64-, 96- oder 128-Bit-IEEE-Format vorliegen. Die meisten Intel- und AMD-Prozessoren verwenden das 80-Bit-Format.

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

Verwenden von LabVIEW-Manager-Funktionen in DLLs

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.
    SpeicheradresseElementGröße (Byte)
    0:I16-Integer2
    2:Fließkomma (EXT)10
    12:Array-Handle4
    16:U8-Integer1
  • (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.
    SpeicheradresseElementGröße (Byte)
    0:I16-Integer2
    2:Fließkomma (EXT)10
    12:Füllzeichen4
    16:Array-Handle8
    24:U8-Integer1
    25:Füllzeichen7
  • (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.
    SpeicheradresseElementGröße (Byte)
    0:I16-Integer2
    2:Füllzeichen6
    8:Fließkomma (EXT)16
    24:Array-Handle8
    32:U8-Integer1
    33:Füllzeichen7

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.

Zugehörige Themen

Serialisierte Daten

Typdeskriptoren