独自のデータファイル形式の設計と維持の必要性を減らすため、NIは、TDMという柔軟性のあるデータモデルを作成しました。このデータモデルは、NI LabVIEW、LabWindows/CVI、DIAdemを使ってアクセスでき、Excelなど、他のアプリケーションに移植することができます。サードパーティのソフトウェアアプリケーションでTDMデータモデルにアクセスできる、TDM DLLもあります。TDMデータモデルには、特定のプロジェクト要件に合わせて拡張する機能など、独自のメリットが複数あります。また、データをディスクに転送する際、計測データに記述情報を簡単に付加することができます。TDMデータモデルは、TDMとTDMSという2種類のファイル形式に対応します。このホワイトペーパーの主題である、TDMストリーミングAPIは、TDMSファイルを記述し、十分な説明が付加されたデータをディスクに転送できるように最適化されています。データストレージVIと「計測ファイルに書き込む」Express VIによって記述された、TDMデータモデルのその他のファイル形式は、データの文書化に対して同様の柔軟性を持っていますが、データをディスクに転送できるように最適化はされていません。この新しいTDMストリーミングVIは、異なるユースケースに幅広く対応しているため、TDMデータモデルとの連携手段として推奨されています。ただし、データストレージVIにも独自の機能があり、たとえば、TDMSファイルの読み取り/書き込みを行ったり、ファイルからデータのクエリを行ったりする機能があります。TDMに関するホワイトペーパーでは、両方のAPIを含めた、NI TDMプラットフォームの概要を説明しています。
このホワイトペーパーでは、TDMデータモデルの詳細を紹介するとともに、LabVIEW TDMストリーミングVIによって、収集しているデータの価値を高めつつ、プログラミング時間を短縮する方法を説明します。
TDMデータモデルには、図1に示すように、ルート、グループ、チャンネルの3つの階層があります。各レベルは、顧客が定義した属性に無限に対応し、ファイルが「検索可能」な状態にします。
図1.LabVIEWで記述された各TDMSファイルには、ルート、グループ、チャンネルレベルの記述情報が含まれます。
要件の厳しいXMLベースのヘッダファイルがあるTDMファイルとは異なり、TDMSファイルには、「.TDMS_Index.」という拡張子がついたバイナリインデックスファイルがあります。TDMS_Indexファイルは、全ての属性情報とデータファイルへのポインタを統合した情報を提供するので、読み取りを行いながら、データへアクセスする速度が上がります。TDMS_Indexファイルは失われると、自動的に再生成されます。
TDMデータモデルファイルには複数のグループを含めることができ、各グループには複数のチャンネルを含めることができます。また、3つのレベルのそれぞれで、独自のカスタムプロパティを組み込むこともできます。
TDMSファイルに含められる記述情報こそがこの形式の主な特長であり、独自のヘッダストラクチャを設計することなく、簡単にデータを文書化することができます。文書化要件が増えても、アプリケーションを設計し直す必要はありません。特定のニーズに合わせてTDMSデータモデルを拡張するだけです。
LabVIEWのその他のファイルI/O関数と同様、TDMストリーミングAPIを使って、ファイルを開き、ファイルに書き込み、ファイルを閉じる必要があります。パレットのネイティブTDMS VIを使用すれば、選択するプロパティを保存することもできるため、計測ファイルへの追加情報の書き込みに通常伴うファイル形式、データタイプの適合化などの作業について心配することがありません。次のセクションでは、書き込み/読み取り、プロパティの作成、TDMSファイルの共有の基本について説明します。
LabVIEW TDMストリーミングVIで計測データを書き込む最も簡単な形式を以下に示します。この例では、DAQアシスタントで計測値の配列を生成し、「データ書き込み」VIに渡します。
図2.チャンネルレベルでTDMSファイルにデータを書き込みます。
「データ書き込み」VIには信号入力の他に2つの入力があることに注目してください。上記の例では、DAQアシスタントからの全てのチャンネルには、同じグループおよびチャンネル名が与えられています。グループおよびチャンネル名の入力が配線されないままになっている場合、デフォルトで「名称未設定」になります。
図3は、TDMストリーミングVIを使ってデータを読み取る最も簡単な形式を示しています。ここでは、「TDMSを開く」VIが、「TDMS読み取り」VIにファイルリファレンスを渡すと、「メイングループ」グループの全てのデータがTDMSファイルからメモリに読み込まれて、波形グラフに表示されます。
図3.TDMSファイルからデータを読み取ります。
TDMSデータモデルは、あるデータタイプを書き込むときに、自動的に一定のプロパティを作成します。しかし、特定のニーズに応えるため、プロパティ (UTT、シリアル番号、テスト温度など) を作成する必要がある場合があります。この作業を行うには、図4に示したとおり、ファイル、グループ、またはチャンネルレベルでプロパティを記述できる「TDMSプロパティを設定」VIを使います。
プロパティのファイルレベルによって、配線が必要な入力端子が決まります。たとえば、グループプロパティを記述するには、グループ名端子だけを配線する必要があります。チャンネルプロパティを記述するには、グループ名とチャンネル名の両方の端子を配線する必要があります。しかし、ファイルプロパティを記述するには、グループ名とチャンネル名の端子を未配線にしておく必要があります。これらのケースは図5に示しました。
「TDMSプロパティを設定」VIを使って、個々のプロパティをそれ自体で指定したり、配列を使って複数のプロパティを指定したりすることができます。図4では、ファイルレベルで2つのプロパティ (TestIDとPlant) を指定しています。これは、配列のサイズを大きくするだけで、より多くのプロパティを指定するように拡張できます。シリアル番号など、1つのプロパティだけが記述されるのであれば、配列は必ずしも必要ではありません。
プロパティの値は、さまざまなデータタイプでも構いません。図4では、文字列プロパティがファイルとグループレベルで記述されています。しかし、チャンネルレベルでは、2つの数値プロパティを記述して、最低と最高の温度を指定しています。
図5は、「TDMSプロパティを設定」VIを使って、ファイルレベルでの追加の記述情報を保存しています。この例では、テストの日付とユーザが配列に組み込まれてから、カスタムプロパティとして記述されています。
TDMSファイルに記述すると、そのプロパティは「TDMSプロパティを取得」VIを使って、LabVIEWに読み込むことができます。プロパティは、グループ名端子とチャンネル名端子を配線することで、指定されたレベルに対してだけ返されます。たとえば、図6は、グループ名もチャンネル名も配線されていないため、ファイルレベルのプロパティの取得方法を示しています。特定のチャンネルのプロパティを取得するには、チャンネルグループ名とチャンネル名の両方をグループ名とチャンネル名の端子に配線する必要があります。このプロセスはプロパティの書き込みと大変似ています。図6に示したとおりです。
この構成においては、プロパティの値はバリアント配列として返されます。データが文字列、倍精度、ブールなど、さまざまであるためです。データはフロントパネルにバリアントとして表示したり、LabVIEWで適切なデータタイプに変換したりすることができます。プロパティ名とそのデータタイプが既知の場合、「TDMSプロパティを取得」VIに入力として配線したり、正しいデータタイプで直接読み込むことができます。
TDMSファイルビューアは、TDMSアプリケーションの開発時に大変優れたツールとして活用できます。このツールを使えば、VIを1度呼び出すことで、TDMSファイルに記述したものが全て自動的に表示されます。大変柔軟性に優れており、非常に複雑なTDMSファイルを読み取ることが可能です。
このファイルビューアは他のTDMSストリーミングVIと同じ場所に含まれているため、プログラムに簡単に配置できます。図7のとおり、他のTDMSストリーミングVIとともに関数パレットに含まれています。図8のとおり、ファイルを閉じた後に配置して使用できます。TDMSファイル内のデータおよびプロパティを表示できる別のウィンドウが自動的に開きます。
図9は、ファイルビューアの外観サンプルです。ファイルビューアの左側にはツリー構造が表示されるので、グループやチャンネルなど、ファイル内の異なるデータレベルにアクセスすることができます。ウィンドウの右側には、左側のツリー構造から選択したレベルの中のプロパティとデータが表示されます。
ウィンドウの右側には、4つのタブが表示されます。プロパティタブは、特定のデータストレージレベルに関連付けられた全てのプロパティを表示します。値タブは、表形式で記述された全てのデータを表示します。アナログ値タブとデジタル値タブは、グラフィカル形式でデータを表示します。
TDMストリーミングVIには、読み取り/書き込み操作を最適化するための、最適化/更新機能が含まれています。
「TDMS書き込み」VIの各呼び出しによって、データブロックがファイルに記録されます。これには複数のチャンネルが含まれる場合があります。この場合、複数の書き込みが行われた際には、1つのチャンネルのデータがファイルの連続した領域に書き込まれなくなります。「TDMSを最適化」VIは、チャンネルごとにファイルを再編成して、読み取り操作を最適化します。このようにして、ユーザはTDMSファイルを毎回読み取る際に最適化するのではなく、「オフライン」で最適化するので、パフォーマンスペナルティはたった1度で済みます。たとえば、ユーザはデータを非常にすばやくデータを収集および保存して、読み取り操作を実行する前にファイルを最適化できます。
「TDMSを更新」VIは、キャッシュしたデータを全て強制的にディスクに保存します。システムがクラッシュしたときにデータが失われることがない、便利な機能です。「TDMSを更新」VIを使うと、システムのパフォーマンスが多少下がります。
LabVIEWのTDMストリーミングVIは、データをディスクに迅速かつ効率的に記述するものです。また、リアルタイムシステムで機能することを想定して設計されているため、確定的なシステムにすばやくデータを保存できます。したがって、TDMストリーミングVIを使えば、あらかじめ定義されたフレームワークなしで、バイナリ形式のデータを書き込むのではなく、リアルタイムシステム上の構造化された形式のデータを追跡できます。
TDMSファイルは、LabVIEW、LabWindows/CVI、DIAdemソフトウェアに対応しています。DIAdemソフトウェアでは、データマイニング技術を使用して、データの関係性や相関関係を簡単に検索することができます。また、Microsoft ExcelにTDMSファイルをロードするためのアドインもご用意しています。 Excel TDMSアドインをダウンロードします。
LabVIEWには、データの読み取りおよび書き込み用のさまざまなファイルI/Oオプションがあります。TDMストリーミングVIには、従来LabVIEWで行っていたファイル操作を超えるようなメリットが複数備わっています。これらの利点:
1.データを構造化された形式でディスクに短時間でストリーミング
2.テストデータとともに記述情報を保存できるため、検索が容易
3.データをグループに分類して構造化 (たとえば、グループ1=温度センサ、グループ2=圧力センサ)
4.APIを簡単に使って、通常データの保存に関連する下位レベルファイルI/Oを抽象化
5.後に解析を行う際データの記述に役立つプロパティを追加
6.リアルタイムシステムで使用