LabVIEWでメモリにデータを保存する方法
- 更新日2025-08-27
- 10分で読める
LabVIEWは制御器、表示器、ワイヤ、およびその他のオブジェクトのデータをメモリに保存します。
ブールデータ
ブールデータは8ビット値として保存されます。値が0の場合、ブール値はFALSEです。0以外の値はすべてTRUEで表されます。
バイト整数
バイト整数は、符号付きおよび符号なしの8ビット形式です。
ワード整数
ワード整数は、符号付きおよび符号なしの16ビット形式です。
倍長整数
倍長整数は、符号付きおよび符号なしの32ビット形式です。
4倍長整数
4倍長整数は、符号付きおよび符号なしの64ビット形式です。
固定小数点
固定小数点は、符号付きおよび符号なしの64ビット形式です。LabVIEWでは拡張ビット数が小さい場合でも、固定小数点数は64ビットに拡張されます。
単精度浮動小数
単精度浮動小数点数は32ビットIEEE単精度形式です。
倍精度
倍精度浮動小数点数は64ビットIEEE倍精度形式です。
拡張
拡張精度浮動小数点数は80ビットIEEE拡張精度形式です。
単精度複素数
複素単精度浮動小数点数は、32ビットIEEE単精度形式の実部と虚部の値で構成されます。
倍精度複素数
複素倍精度浮動小数点数は、64ビットIEEE倍精度形式の実部と虚部の値で構成されます。
拡張複素数
複素拡張精度浮動小数点数は、IEEE拡張精度形式の実部と虚部の値で構成されます。
浮動小数点および複素数について、「s」は符号ビット (0は正の値、1は負の値)、「exp」はバイアス指数 (底2)、仮数は[0,1]範囲の数値です。
タイムスタンプ
LabVIEWは、タイムスタンプを2つの倍精度浮動小数のクラスタとして保存します。最初の倍精度浮動小数は、時間帯に依存しないグリニッジ標準時の1904年1月1日金曜日午前0:00 (01-01-1904 00:00:00) 以後の経過秒数を表します。2番目の倍精度浮動小数は、端数秒を表します。
配列
配列はハンドルまたはポインタに対するポインタとして保存され、配列の各次元のサイズを32ビット整数で表し、その後にデータが続きます。ハンドルが0の場合、配列は空になります。プラットフォームによってはアライメント制限があるため、データの最初の要素が正しくアライメントが行われるように、2~3バイトのパディングが次元サイズに続くことがあります。LabVIEW配列を使用する共有ライブラリを書き込む場合は、ハンドルのサイズを調整する必要がある場合もあります。
以下の図は、単精度浮動小数点数の1D配列を示します。左側の10進数は、配列が開始するメモリ位置のバイトオフセットを表します。
以下の図は、16ビット整数の4次元配列を示します。
LabVIEWでは、メモリ内で1Dおよび2D配列のアライメントが行われます。これは、線形代数の演算および行列データタイプに関連する演算のパフォーマンスを向上させます。
文字列
文字列はストラクチャに対するポインタとして保存され、以下の図に示すとおり、1D配列のバイト整数 (8ビット文字) が続く4バイト長の値を含みます。ストラクチャに対するポインタであるハンドルがNULLの場合、文字列は空の文字列として扱われます。この空の文字列は、長さの値が0の文字列と同じです。LabVIEWでは終了文字ではなく、長さの値を使用して文字列の終端を指定するので、文字列の任意のポイントでNULL文字、ASCII文字0を含むすべての文字を埋め込むことができます。LabVIEWの文字列をC文字列として外部コードに渡すと、そのコードは埋め込まれている最初のNULL文字で終了すると解釈され、問題が発生します。
パス
LabVIEWのパスは、パスタイプとパスコンポーネントを含む不透明なデータ構造に対するポインタです。パスの種類は、絶対パスでは0、相対パスでは1、UNC (汎用名前付け規則―Universal Naming Convention) パスでは3です。UNCパスはWindowsのみで発生し、最初の構成要素として、ドライブ名ではなく\\<machine name>\<share name>と表記されます。パスの種類で、その他の値はすべて無効パスを示します。
パスに関する情報にアクセスするには、以下の関数を使用します。
- FDepth()
- FDirName()
- FIsAPath()
- FIsAPathOfType()
- FIsEmptyPath()
- FNamePtr()
- FVolName()
パスに要素を追加するには、以下の関数を使用します。
- FAddPath()
- FAppendName()
新規にパスを作成するには、以下の関数を使用します。
- FNotAPath()
- FPathCpy()
- FEmptyPath()
- FMakePath()
- FRelPath()
「FDestroyPath()」関数を使用して、パスを破棄します。
以下の関数を使用して、パスをテキスト形式(またはテキスト形式をパス)に変換します。
- FFileSystemStringToPath()
- FPathToFileSystemDSString()
- FPathToText()
- FTextToPath()
- ConvertPathToPlatformIndependentText()
- ConvertPlatformIndependentTextToPath()
2つのパスを比較するには、以下の関数を使用します。
- FPathCmp()
- FPathCmpLexical()
関連情報
クラスタ
LabVIEWは、クラスタ順位に従ってさまざまなデータタイプのクラスタ要素を保存します。クラスタ順序を表示したり、修正したりするには、クラスタの枠線を右クリックしてショートカットメニューからクラスタ内の制御器の並び替えを選択します。スカラデータをクラスタで直接的に保存し、それを間接的に配列、文字列、パスにクラスタで保存します。特定のプラットフォームではアライメント制限があるため、次のクラスタの始まりで正しくアライメントされるように、クラスタの終わりに複数バイトのパディングを追加することがあります。クラスタの配列を使用する共有ライブラリを書き込む際に、配列を参照するハンドルのサイズを調整する場合は、このパディングを考慮する必要があります。
クラスタのメモリのレイアウトは実行しているプラットフォームによって異なります。クラスタ要素がアドレスの境界で揃うように、要素間がパディングされることがあります。アドレスの境界は自然境界の概念に基づいています。データアドレスの始まりがデータサイズの倍数である場合、そのデータは自然な境界でアライメントされているといえます。たとえば、4バイト整数は、4の倍数のアドレスで始まる場合に自然境界にアライメントされているといえます。多くのコンパイラには、これらの境界に上限があり、それ以降は制約が緩和されます。たとえば、8バイト整数は4バイトの境界でアライメントできます。LabVIEWを実行するプラットフォームについて、アライメントの制限は以下のとおりです。
- (Phar Lap ETS) データのアライメントは、1バイトの境界に対してのみ行われます。
- (macOS 64ビットおよびLinux 64ビット) データは8バイトの境界まで自然にアライメントされます。
- (Windows 64ビットおよびVxWorks) データは8バイトの境界まで自然にアライメントされます。
すべてのプラットフォームでは、クラスタは、多くの場合、制限付きでアライメントが行われた要素のアライメントを採用します。
以下の表は、16ビット整数、倍精度浮動小数点、拡張精度浮動小数点数、配列、8ビット符号なし整数を含むクラスタを表します。各行には、メモリアドレスとそれに対応する要素と要素サイズが含まれます。
- (Phar Lap ETS) データのアライメントは1バイトの境界に対してのみ行われるため、次のクラスタのメモリアドレスは17になります。
メモリアドレス 要素 サイズ (バイト) 0: I16整数 2 2: EXT浮動 10 12: 配列のハンドル 4 16: U8整数 1 - (Windows 64ビット、macOS 64ビット、Linux 64ビット) データは8バイトまでの境界に自然にアライメントされるため、次のクラスタが32になるように、U8整数の後に7バイトのパディングが追加されます。
メモリアドレス 要素 サイズ (バイト) 0: I16整数 2 2: EXT浮動 10 12: パディング 4 16: 配列のハンドル 8 24: U8整数 1 25: パディング 7 - (VxWorks ) データは8バイトの境界まで自然にアライメントが行われるため、次のクラスタが40になるように、U8整数の後に7バイトのパディングが追加されます。VxWorksはEXT浮動を倍長倍精度として実装することに注意してください。
メモリアドレス 要素 サイズ (バイト) 0: I16整数 2 2: パディング 6 8: EXT浮動 16 24: 配列のハンドル 8 32: U8整数 1 33: パディング 7
LabVIEWは、他のクラスタの中に埋め込まれたクラスタを間接ブロックなしでラインに直接保存します。LabVIEWは配列、文字列、パスを間接的に保存します。
以下の図は、同じ方法でデータを保存する2つの異なるクラスタを示します。
波形
波形はクラスタと同じ方法で保存されます。
Refnum
refnumは符号付き32ビット整数として保存されます。
バリアント
バリアントは、LabVIEWの内部データ構造に対するハンドルとして保存されます。バリアントデータタイプは4バイトで構成されます。