LabVIEWでメモリにデータを保存する方法



LabVIEW 2018ヘルプ


発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照

ダウンロード (Windowsのみ)


LabVIEW 2016ヘルプ
LabVIEW 2017ヘルプ
LabVIEW 2018ヘルプ
LabVIEW 2019ヘルプ
LabVIEW 2020ヘルプ

LabVIEWは制御器、表示器、ワイヤ、およびその他のオブジェクトのデータをメモリに保存します。

ブールデータ

ブールデータは8ビット値として保存されます。値が0の場合、ブール値はFALSEです。0以外の値はすべてTRUEで表されます。

バイト整数

バイト整数は、符号付きおよび符号なしの8ビット形式です。

ワード整数

ワード整数は、符号付きおよび符号なしの16ビット形式です。

倍長整数

倍長整数は、符号付きおよび符号なしの32ビット形式です。

4倍長整数

4倍長整数は、符号付きおよび符号なしの64ビット形式です。

固定小数点

固定小数点は、符号付きおよび符号なしの64ビット形式です。拡張ビット数が小さい場合でも、固定小数点数は64ビットに拡張されます。

単精度浮動小数

単精度浮動小数点数は32ビットIEEE単精度形式です。

倍精度

倍精度浮動小数点数は64ビットIEEE倍精度形式です。

拡張

拡張精度浮動小数点数は80ビットIEEE拡張精度形式です。

メモ  コンピュータのプロセッサによっては、拡張精度浮動小数点数に、64、96、および128ビットIEEE拡張精度形式を使用できます。80ビットが最も一般的です。

複素単精度浮動小数

複素単精度浮動小数点数は、32ビットIEEE単精度形式の実部と虚部の値で構成されます。

複素倍精度浮動小数

複素倍精度浮動小数点数は、64ビットIEEE倍精度形式の実部と虚部の値で構成されます。

複素拡張精度浮動小数

複素拡張精度浮動小数点数は、IEEE拡張精度形式の実部と虚部の値で構成されます。

拡張精度浮動小数点数は80ビットIEEE拡張精度形式です。

浮動小数点および複素数について、「s」は符号ビット(0は正の値、1は負の値)、「exp」はバイアス指数(底2)、仮数は[0,1]範囲の数値です。

タイムスタンプ

タイムスタンプは4つの整数のクラスタとして保存されます。最初の2つの符号付き整数(64ビット)は、グリニッジ標準時で1904年1月1日金曜日午前12:00[01-01-1904 00:00:00]から経過した秒数(時間帯に依存しない値)を表します。次の2つの符号なし整数(64ビット)は秒の小数部分を表します。

タイムスタンプについては、ni.comの以下のサポートドキュメントを参照してください。

配列

配列はハンドルまたはポインタに対するポインタとして保存され、配列の各次元のサイズを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を実行するプラットフォームについて、アライメントの制限は以下のとおりです。

  • (Windows 32ビット) データは1バイトの境界にのみアライメントが行われます。
  • (macOSおよびLinux) データは4バイトの境界まで自然にアライメントが行われます。
  • (Phar Lap ETS、VxWorks、Windows 64ビット) データは8バイトの境界まで自然にアライメントが行われます。

すべてのプラットフォームでは、クラスタは、多くの場合、制限付きでアライメントが行われた要素のアライメントを採用します。

以下の表は、16ビット整数、拡張精度浮動小数点数、配列、8ビット符号なし整数を含むクラスタを表します。各行には、メモリアドレスとそれに対応する要素と要素サイズが含まれます。

  • (Windows 32ビット) データは1バイトの境界にのみアライメントが行われるため、次のクラスタのメモリアドレスは17です。

    メモリアドレス 要素 サイズ(バイト)
    0: I16整数 2
    2: EXT浮動 10
    12: 配列のハンドル 4
    16: U8整数 1
  • (macOSおよびLinux) データは4バイトまでの自然境界にアライメントされるため、次のクラスタが24になるように、U8整数の後に3バイトのパディングを追加します。

    メモリアドレス 要素 サイズ(バイト)
    0: I16整数 2
    2: パディング 2
    4: EXT浮動 10
    14: パディング 2
    16: 配列のハンドル 4
    20: U8整数 1
    21: パディング 3
  • (Windows 64ビット) データは8バイトの境界まで自然にアライメントが行われるため、次のクラスタが32になるように、U8整数の後に7バイトのパディングを追加します。

    メモリアドレス 要素 サイズ(バイト)
    0: I16整数 2
    2: EXT浮動 10
    12: パディング 4
    16: 配列のハンドル 8
    24: U8整数 1
    25: パディング 7
  • (Phar Lap ETS、VxWorks)データは8バイトまでの自然境界にアライメントされるため、次のクラスタが24になるように、U8整数の後に3バイトのパディングを追加します。

    メモリアドレス 要素 サイズ(バイト)
    0: I16整数 2
    2: パディング 6
    8: EXT浮動 8
    16: 配列のハンドル 4
    20: U8整数 1
    21: パディング 3

LabVIEWは、他のクラスタの中に埋め込まれたクラスタを間接ブロックなしでラインに直接保存します。LabVIEWは配列、文字列、パスを間接的に保存します。

以下の図は、同じ方法でデータを保存する2つの異なるクラスタを示します。

波形

波形はクラスタと同じ方法で保存されます。

Refnum

refnumは符号付き32ビット整数として保存されます。

バリアント

バリアントは、LabVIEWの内部データ構造に対するハンドルとして保存されます。バリアントデータタイプは4バイトで構成されます。

関連する概念

平坦化されたデータ

タイプデスクリプタ

LabVIEW 7.x以前のタイプデスクリプタ



この記事は役に立ちましたか。

役に立たなかった