タイプデスクリプタ
- 更新日2025-08-27
- 19分で読める
LabVIEWはブロックダイアグラムの各ワイヤと端子をデータタイプに関連付けます。LabVIEWは、このタイプを「タイプデスクリプタ」と呼ばれるメモリ内の構造体でトラッキングします。タイプデスクリプタは、LabVIEWで任意のデータタイプを記述できる32ビット整数のシーケンスです。他に記述がない限り、数値は16進数形式で書き込まれます。
タイプは、異なるタイプから成る集合体であることもあります。たとえば、ブール配列では、配列はタイプであり、そのブール要素は別のタイプです。LabVIEWでは、複雑なタイプなど、すべてのタイプデスクリプタはリストに保存されます。
表示可能な形式
タイプデスクリプタは、「文字列に平坦化」関数または「バリアントから平坦化文字列に変換」関数を使用して、さまざまな形式で表示できます。
「文字列に平坦化」関数を使用してバリアントデータを平坦化する場合、LabVIEWは、バリアントと属性を含むそのすべての内容を平坦化します。この関数を使用した場合、タイプデスクリプタの保存バッファは次の形式になります。
| 32ビット | nTDs TDs |
| var size | nTypesUsed |
| var size | TypesUsed |
| ここで、 nTDs | は、バッファに含まれている要素タイプデスクリプタの数 |
| TDs | は、nTDsタイプデスクリプタのリスト |
| var size | は、変数のサイズであり、表記されている値により変数値 (16ビットまたは32ビット) で保存されます。値が32768より小さい場合、2バイトで保存されます。値が32768以上の場合、1に設定された高位ビットを持つ4バイトで保存されます。 |
| nTypesUsed | は、バッファを参照する構成要素により使用されているタイプデスクリプタのタイプの実際の数 |
| TypesUsed | は、使用されているTDsのすべてのタイプの指標リスト |
「バリアントから平坦化文字列に変換」関数を使用した場合、LabVIEWは、バリアントのみを平坦化し、すべての属性を破棄します。この関数を使用した場合、タイプデスクリプタは次の形式になります。
[size][type code][type specific info][name (if applicable)]
| ここで [サイズ] | は、サイズワードを含む最初のワードです。[サイズ]の最小値は4です。任意のタイプデスクリプタに名前 (PASCAL文字列) を追加すると、[サイズ]の値が、名前の長さを2の倍数に切り上げた分増加します。サイズは16ビットです。 |
| [type code] | は、2番目のワードです。LabVIEWでは、タイプコードの上位バイトは内部使用目的に予約されています。2つのタイプデスクリプタが等価かどうか比較する場合、このバイトは無視してください。タイプコードの上位バイトが等しくない場合でも、2つのタイプデスクリプタは等しくなります。タイプコードは16ビットです。 |
| [type specific info] | は、タイプデスクリプタについての追加情報です。他のタイプに対するリファレンスが含まれるので、配列とクラスタは構造体または集合体データタイプになります。たとえば、クラスタタイプには各要素のタイプに関する追加情報が含まれます。 |
| [name] | は、PASCAL文字列です。名前は存在する場合と存在しない場合があります。 |
タイプコードは、以下の表のように、単精度浮動小数や拡張精度浮動小数などの実際のタイプ情報をコード化します。これらのタイプコードの値は今後のLabVIEWバージョンで変更されることがあります。
データタイプ
以下の表は、数値、数値以外のデータタイプ、タイプコード、およびタイプデスクリプタを示します。[サイズ]の最小値はタイプコードの前に表示されます。[タイプ固有情報]の値についての情報は、一部のデータタイプのタイプコードの後に表示されます。
| メモ 名前は任意のタイプデスクリプタに追加できます。名前は、PASCAL文字列です。 |
| データタイプ | タイプデスクリプタ (16進数の数値) |
|---|---|
| 8ビット整数 | 0004 xx01 |
| 16ビット整数 | 0004 xx 02 |
| 32ビット整数 | 0004 xx 03 |
| 64ビット整数 | 0004 xx 04 |
| 符号なし8ビット整数 | 0004 xx 05 |
| 符号なし16ビット整数 | 0004 xx 06 |
| 符号なし32ビット整数 | 0004 xx 07 |
| 符号なし64ビット整数 | 0004 xx 08 |
| 単精度、浮動小数点数 | 0004 xx 09 |
| 倍精度、浮動小数点数 | 0004 xx 0A |
| 拡張精度、浮動小数点数 | 0004 xx 0B |
| 複素単精度、浮動小数点数 | 0004 xx 0C |
| 複素倍精度、浮動小数点数 | 0004 xx 0D |
| 複素拡張精度、浮動小数点数 | 0004 xx 0E |
| 列挙体8ビット整数 | <nn> xx 15 <k><k pstrs> |
| 列挙体16ビット整数 | <nn> xx 16 <k><k pstrs> |
| 列挙体32ビット整数 | <nn> xx 17 <k><k pstrs> |
| 単精度物理量 | <nn> xx 19 <k><k base-exp> |
| 倍精度物理量 | <nn> xx 1A <k><k base-exp> |
| 拡張精度物理量 | <nn> xx 1B <k><k base-exp> |
| 複素単精度物理量 | <nn> xx 1C <k><k base-exp> |
| 複素倍精度物理量 | <nn> xx 1D <k><k base-exp> |
| 複素拡張精度物理量 | <nn> xx 1E <k><k base-exp> |
| ブール | 0004 xx 21 |
| 文字列 | 0008 xx 30 <dim> |
| パス | 0008 xx 32 <dim> |
| ピクチャ | 0008 xx 33 <dim> |
| 配列 | <nn> xx 40 <k dims><要素タイプデスクリプタ> |
| クラスタ | <nn> xx 50 <k elems><要素タイプデスクリプタ> |
| 波形 | <nn> xx 54 <波形タイプ><要素タイプデスクリプタ> |
| Refnum | <nn> <refnumタイプコード> |
| バリアント | <nn> xx 53 |
| nn = 長さ、xx = LabVIEWにより予約済み、k = 数値、k pstrs = PASCAL文字列の数、k base-exp = 底の指数ペアの数、k dims = 次元数、k elems = 要素数、dimは32ビット整数。 |
前の表のとおり、タイプデスクリプタのサイズフィールドの最小値は4です。ただし、どのタイプデスクリプタも追加で名前 (PASCAL文字列) を持つことができます。そのため、サイズフィールドは2の倍数に四捨五入された名前 (PASCAL文字列として) の長さ分だけ長くなります。
列挙体8ビット整数
以下のam、fm、およびfm stereo項目の名前なしの列挙体16ビット整数のサンプルでは、各グループの文字は16進数表記の16ビットワードを表します。
0016 0015 0003 0261 6D02 666D 0966 6D20 7374 6572 656F
このタイプデスクリプタには、以下のワードが含まれています。
- 0016―合計22バイト
- 0015―列挙された8ビット整数のタイプコード
- 0003―3つの項目を含む
- 0261 6D02 666D 0966 6D20 7374 6572 656F―タイプコードの固有情報たとえば、0261 6Dは、文字列のサイズを16進数で示す接頭辞02が付いた、amのASCIIエンコードです。
同じ列挙体8ビット整数がradioと命名された場合、そのタイプデスクリプタは以下のように解釈できます。
001C 4015 0003 0261 6D02 666D 0966 6D20 7374 6572 656F 0572 6164 696F
以下は、2つのデスクリプタの比較です。
| | |
| | 異なる長さ |
| | 同一のタイプコード |
| | 列挙体値の同一表現 |
| | 名前、radio (PASCAL文字列) |
物理量
以下のm/s単位での倍精度物理量のサンプルでは、各グループの文字は16進数表記の16ビットワードを表します。
000E 001A 0002 0002 FFFF 0003 0001
このタイプデスクリプタには、以下のワードが含まれています。
- 000E―合計14バイト
- 001A―倍精度物理量のタイプコード
- 0002―2つの底の指数ペア
- 0002―指標/秒
- FFFF (-1)―秒の指数
- 0003―指標/メートル
- 0001―メートルの指数
LabVIEWでは、表示に使用する単位に関係なく、底の単位に基づいてすべての物理量を内部的に保存します。
次の表は、LabVIEWで使用される9つの底と、それらの表現を指標0〜8で示しています。
| 物理量名 | 単位 | 省略形 | 底の値 |
|---|---|---|---|
| 平面度 | ラジアン | rad | 0 |
| 立体角度 | ステラジアン | sr | 1 |
| 時間 | 秒 | s | 2 |
| 長さ | メートル | m | 3 |
| 質量 | キログラム | kg | 4 |
| 電流 | アンペア | A | 5 |
| 熱力温度 | ケルビン | K | 6 |
| 物質量 | モル | mol | 7 |
| 光強度 | カンデラ | cd | 8 |
文字列、パス、ピクチャのデータタイプ
配列次元サイズと同様に、文字列、パス、ピクチャのデータタイプは32ビット長です。ただし、現在、コード化される値は、可変サイズを示す16進数のFFFFFFFFだけです。現在、すべての文字列、パス、ピクチャは可変サイズです。実際の長さはデータとともに保存されます。
配列およびクラスタのデータタイプ
配列およびクラスタのデータタイプには、それぞれ独自のタイプコードがあります。また、配列の要素および次元またはクラスタの要素数のデータタイプに関する追加情報も含まれます。
配列
配列のタイプコードは40です。配列のタイプデスクリプタは、次の形式になります。
<nn> xx 40 <k dims><要素タイプデスクリプタ>
以下の1D倍精度の配列、浮動小数点数のタイプデスクリプタのサンプルを検討します。ここで、各グループの文字は16進数表記の16ビットワードを表します。
000E 0040 0001 FFFF FFFF 0004 000A [タイプ固有情報]
このタイプデスクリプタには、以下のワードが含まれています。
- 000E―タイプデスクリプタの全体の長さ (要素タイプ指標を含む) が合計12バイト
- 0040―配列のタイプコード
- 0001―1次元 (配列の次元数)
- FFFF FFFF―は、次元サイズ (可変サイズ) を表します。LabVIEWでは、常に0以上の実際の次元サイズをデータとともに保存します。
- 0004 000A―要素のタイプデスクリプタ要素のタイプは、配列以外のすべてのタイプが可能です。この例では、要素は倍精度の浮動小数点数であり、次のワードが含まれています。
- 0004―要素のサイズが4バイト
- 000A―倍精度浮動小数点数のタイプコード
この例のタイプデスクリプタ保存バッファの形式は以下のとおりです。
| タイプデスクリプタの数 | 0000 0002 | 固有タイプデスクリプタの数は2です。 |
| タイプデスクリプタ 0 | 0004 000A | 最初のタイプデスクリプタは倍精度浮動小数点数用です。 |
| タイプデスクリプタ 1 | 000E 0040 0001 FFFF FFFF | 2番目のタイプデスクリプタは配列用です。000Eは、タイプデスクリプタ全体の長さ (要素タイプ指標を含む) です。配列は可変サイズであるため、次元はFFFFFFFFです。 |
| 使用タイプ数 | 0002 | 使用されたタイプの合計数は2です。 |
| 使用されたタイプ | 0000 0001 | 使用されたタイプは0と1です。 |
以下の例は、ブール値の2D配列のタイプデスクリプタの例です。
0012 0040 0002 FFFF FFFF FFFF FFFF 0004 0021 [タイプ固有情報]
このタイプデスクリプタには、以下のワードが含まれています。
- 0012―タイプデスクリプタの全体の長さ (要素タイプ指標を含む) が合計18バイト
- 0040―配列のタイプコード
- 0002―2次元 (配列の次元数)
- FFFF FFFF (-1) ―第1次元のサイズ (可変サイズ)
- FFFF FFFF (-1) ―第2次元のサイズ (可変サイズ)
- 0004 0021―要素のタイプデスクリプタこの例では、要素はブールであり、次のワードが含まれています。
- 0004―要素のサイズが4バイト
- 0021―ブールのタイプコード
この例のタイプデスクリプタ保存バッファの形式は以下のとおりです。
| タイプデスクリプタの数 | 0000 0002 | 固有タイプデスクリプタの数は2です。 |
| タイプデスクリプタ 0 | 0004 0021 | 最初のタイプデスクリプタはブール用です。 |
| タイプデスクリプタ 1 | 0012 0040 0002 FFFF FFFF FFFF FFFF | 2番目のタイプデスクリプタは配列用です。0012は、タイプデスクリプタ全体の長さ (要素タイプ指標を含む) です。配列は可変サイズであるため、次元はFFFFFFFFです。 |
| 使用タイプ数 | 0002 | 使用されたタイプの合計数は2です。 |
| 使用されたタイプ | 0000 0001 | 使用されたタイプは0と1です。 |
クラスタ
クラスタのタイプコードは50です。クラスタのタイプデスクリプタは、次の形式になります。
<nn> xx 50 <k elems><要素タイプデスクリプタ>
以下の2つの整数を含むクラスタ、符号付き16ビット整数および符号なし32ビット整数のタイプデスクリプタのサンプルを検討します。ここで、各グループの文字は16進数表記の16ビットワードを表します。
000E 0050 0002 0004 0002 0004 0007
このタイプデスクリプタには、以下のワードが含まれています。
- 000E―合計14バイト
- 0050―クラスタのタイプコード
- 0002―2つの要素 (クラスタ内の要素数)
- 0004 0002―最初の要素である符号付き16ビット整数のタイプデスクリプタ
- 0004―4バイト
- 0002―符号付き16ビット整数のタイプコード
- 0004 0007―2番目の要素である符号なし32ビット整数のタイプデスクリプタ
- 0004―4バイト
- 0007―符号なし32ビット整数のタイプコード
タイプデスクリプタ保存バッファの形式は以下のとおりです。
| タイプデスクリプタの数 | 0000 0003 | 固有タイプデスクリプタの数は3です。 |
| タイプデスクリプタ 0 | 0004 0002 | 最初のタイプデスクリプタは符号付き16ビット整数用です。 |
| タイプデスクリプタ 1 | 0004 0007 | 2番目のタイプデスクリプタは符号なし32ビット整数用です。 |
| タイプデスクリプタ 2 | 000E 0050 0002 | 3番目のタイプデスクリプタはクラスタ用です。000Eは、クラスタのタイプ指標を含む、タイプデスクリプタ全体の長さです。 |
| 使用タイプ数 | 0003 | 使用されたタイプの合計数は3です。 |
| 使用されたタイプ | 0000 0001 0002 | 使用されたタイプは0、1および2です。 |
配列およびクラスタのタイプデスクリプタは他のタイプデスクリプタを含むため、深くネストする可能性があります。
重複したタイプはこのタイプリストに含まれていないことに注意してください。以下の例は、倍精度浮動小数点数の1D配列、および1つの倍精度浮動小数点数を持つクラスタのタイプデスクリプタリストです。
| タイプデスクリプタの数 | 0000 0003 | 固有タイプデスクリプタの数は3です。 |
| タイプデスクリプタ 0 | 0005 000A 00 | 最初のタイプデスクリプタは、要素タイプ用で、同じタイプのスカラ用と全く同様に表示されます。 |
| タイプデスクリプタ 1 | 000C 0040 0001 FFFF FFFF 0000 | 2番目のタイプデスクリプタは配列用です。000Cは、要素のタイプ指標を含む、タイプデスクリプタ全体の長さです。配列は可変サイズであるため、次元はFFFFFFFFです。 |
| タイプデスクリプタ 2 | 0008 0050 0001 0002 | 3番目のタイプデスクリプタはクラスタ用です。0008は、クラスタのタイプ指標を含む、タイプデスクリプタ全体の長さです。クラスタには、指標2にあるタイプによる1つの要素が含まれます。 |
| 使用タイプ数 | 0003 | 使用されたタイプの合計数は4です。 |
| 使用されたタイプ | 0000 0001 0000 0002 | 使用されたタイプは0、1、0および2です。 |
指標2にあるクラスタで参照されたタイプは、配列で使用されたタイプで検索される必要があることに注意してください。使用されたタイプの2番目の要素は0で、タイプデスクリプタ0に相当します。
波形
波形のタイプコードは54です。波形のタイプを含むワードは、タイプコードのすぐ後に続きます。波形要素クラスタのタイプデスクリプタはこのワードに続きます。波形は5つのカテゴリに分類されます。
- アナログ
- デジタル
- デジタルデータ
- タイムスタンプ
- ダイナミック
アナログ波形
以下の表は、アナログ波形のタイプを示します。
| タイプ | サブタイプコード |
|---|---|
| 8ビット符号付き | 14 |
| 16ビット符号付き | 2 |
| 32ビット符号付き | 15 |
| 64ビット符号付き | 19 |
| 倍精度浮動小数 | 3 |
| 単精度浮動小数 | 5 |
| 拡張精度浮動小数 | 10 |
| 8ビット符号なし | 11 |
| 16ビット符号なし | 12 |
| 32ビット符号なし | 13 |
| 64ビット符号なし | 20 |
| 複素単精度浮動小数 | 16 |
| 複素倍精度浮動小数 | 17 |
| 複素拡張精度浮動小数 | 18 |
たとえば、各グループの文字が16進数表記の16ビットワードを表す倍精度波形を検討します。
0006 0054 0003 //波形のサイズ、波形タイプコード、倍精度サブタイプコード3
0080 0050 0005 //クラスタのサイズ、クラスタコード、要素数
<タイムスタンプのタイプデスクリプタ>
<dtのタイプデスクリプタ>
<配列要素タイプのタイプデスクリプタ>
<未使用エラークラスタのタイプデスクリプタ>
<属性のタイプデスクリプタ>
アナログ波形の他のタイプのタイプデスクリプタは倍精度の波形に類似しています。相違点は波形要素のタイプおよびサブタイプが異なることです。
デジタル波形とデジタルデータ
デジタル波形は、唯一サブタイプコード8を持つ波形タイプです。
たとえば、各グループの文字が16進数表記の16ビットワードを表す以下の例を検討します。
00B6 0054 0008 //デジタル波形のサイズ、波形タイプコード、サブタイプコード8
<タイムスタンプのタイプデスクリプタ>
<dtのタイプデスクリプタ>
<デジタルデータのタイプデスクリプタ>
<未使用エラークラスタのタイプデスクリプタ>
<属性のタイプデスクリプタ>
デジタルデータ
デジタルデータは、波形タイプコードおよびサブタイプコード7を持つ唯一のデータタイプです。
たとえば、各グループの文字が16進数表記の16ビットワードを表す以下の例を検討します。
003E 0054 0007 //デジタルデータのサイズ、波形タイプコード、サブタイプコード7
<遷移のタイプデスクリプタ>
<データのタイプデスクリプタ>
タイムスタンプ
タイムスタンプのサブタイプコードは6です。タイムスタンプは64ビットの基数を持つ128ビット固定小数点数です。タイムスタンプは4つの整数のクラスタとして保存されます。ここで、最初の2つの符号付き整数 (64ビット) は、グリニッジ標準時で1904年1月1日金曜日午前12:00から経過した秒数[01-01-1904 00:00:00]を表します。次の2つの符号なし整数 (64ビット) は秒の小数部分を表します。
001C 0054 0006 //タイムスタンプのサイズ、波形タイプコード、タイプスタンプサブタイプコード6
<アナログ波形のタイプデスクリプタ>