TDMSファイルについて

ステップアップ

スポンサーリンク

この記事は、初心者向けのまずこれシリーズ第7回の補足記事です。ファイル保存の形式の一種であるTDMSファイルを知りたい、という方向けにもう少し内容を補足しています。

LabVIEWのプログラムでは測定機器を制御して、データの測定、その解析などを行うのが重要な役割になることも多いのですが、その後そのデータをちゃんと保存して残しておくことも同じくらい重要です。

どのファイル形式で保存するかについては悩みどころですが、この記事ではまずこれシリーズで扱ったテキストファイル形式とはまた異なるTDMSというファイル形式を扱います。

TDMSなんて聞き覚えがないよ、という方もいるかもしれません。それもそのはず、TDMSファイル形式自体は、LabVIEWを提供しているNational Instruments社が独自で作っているフォーマットになっています。

ただ、計測器制御のプログラム作りに向いているLabVIEWに親和性の高いファイル形式となっているので、LabVIEWプログラムを身に着ける上で覚えておいて損はないはずです。

この記事では大まかにTDMSファイル形式について紹介していきます。

スポンサーリンク

TDMSファイルとは

TDMSは、Technical Data Management Streamingの略とのことです。

直訳すれば技術データ、ですが、要は計測器制御によって得られる測定データを指します。ただし、単に測定されたデータそのものを扱うというだけではなく、周辺情報(メタデータ)の記録も行うことができます。

これにより、データそのものをただ単に扱うよりも管理がしやすくなるという利点が挙げられます。

メタデータは、プロパティとして扱われます。プロパティは自由に決めることができ、ファイルの分類などに役立てることができます。例えば

  • 測定者
  • 日付、日時
  • 測定対象物、測定条件

といったものが挙げられます。もちろん他の項目も自由に決めることができます。

TDMSには階層構造があり、チャンネルグループとチャンネルという階層を持っています。一つのファイルで異なる日付に複数の測定種を保存する際に、日付毎にチャンネルグループを分け、測定種(加速度のX、Y、Z方向など)をチャンネル毎に分ける、といった区分けをするイメージです。

TDMSプロパティを設定の関数を使用するのですが、グループ名やチャンネル名を指定することで保存されるプロパティの種類が変わります。

例えば、グループ名のみを指定すると、入力したプロパティはグループに対するプロパティとなります。

上記の例は、TDMSファイル作成の指定が「open or create」になっていることに注意します。もし「replace」などと指定していた場合、同じファイル名を指定すると前のデータは残りません。

もしグループ名とチャンネル名を入力した場合には、そのグループに属するチャンネル個々に対するプロパティとなります。

複数のファイルを管理するのではなく一つのファイルにグループやチャンネルで区分けしてデータを保存できる便利さがあります。

そして、保存される情報自体はバイナリで扱うため、テキストファイルへの書き込みと比べて速度が速いという特徴があります。大量のデータを短時間で保存する必要がある場合にテキストファイル形式では処理の時間が間に合わなくて不都合が生じる場合でもTDMSであれば問題とならない場合があります。

TDMSはどんなとき使うのか

TDMSは、上記のように

  • 複数の似たような測定結果をまとめて一つのファイルとして保存したい
  • 高速でデータを保存したい

といった際に使用することを検討します。

一つのファイルの中でグループによって区分けができるので、関連したデータをまとめて扱うことができれば、ファイルを複数扱うよりも管理がシンプルになります。

また、LabVIEWでデータを扱う際の形式の一つである波形データをそのまま配線して記録することができるのも特徴の一つです。時間情報ごとまとめて記録できるので、データの記録だけとにかくまず行って後からFFT解析を行う際にも役立ちます。

テキストファイルに書き込むのように数字を文字(テキスト)にするような操作も挟まずにそのままデータを配線できることも便利です。

その場で解析を行う必要がなく、とにかくデータだけまずは取得したい、ということで高速でデータ保存を行い、後でゆっくり解析するという場面では特に重宝すると思います。

TDMSの扱い方

TDMSファイルを使用する場合のプログラムの例をいくつか下に示します。が、基本的な使い方は一般的なファイルI/Oと同じです。

まず、一番ベーシックな書き方は下の図になります。通常のファイルIOと同じく、開いて、書いて、閉じる、です。

Excelで開いたときの例も示しています。最初のシートに各グループやチャンネルの情報があり、各チャンネルの中にある具体的なデータは各シートを見ます。

TDMS以外のファイルを扱う際の方法と微妙に異なるのは、開く関数のファイルパス入力です。TDMSファイルの場合、この入力パスは必須入力になっています。(一般のファイルを開く関数ではパスの入力がない場合ダイアログが表示されます)

他にも、既に上で似たような例を紹介していますが、チャンネルグループとチャンネルにプロパティを設定している場合の書き方はこのようになります。

この図では、複数のチャンネルに対して3つのプロパティ、「テスト担当者」、「条件」、「テスト」というものを設け、それぞれに値を記入しています。

表示上の都合でプロパティの値を定数にしていますが、もちろん制御器でも構いません。結果ファイルとプロパティ名、プロパティ値およびチャンネル名の対応は上の図で同じ色とした四角枠で表しています。(並び順はExcelでの表示時に変わっています)

あるいは、異なるチャンネルグループでそれぞれ同じチャンネル項目を扱う際にはこのように書くことができます。

結局、プロパティはグループごとあるいはチャンネル毎に設定し、書き込みの際にはどのグループのどのチャンネルへの書き込みなのかを指定した状態でデータを渡すことになります。

なお、書き込みの関数に波形の配列データを渡したときにチャンネル名も指定する場合には、チャンネル名の入力も文字列の配列である必要があります。

保存時の話ばかりではなく、TDMSファイルの読み取りのプログラムの例も紹介します。

一番ベーシックな読み取りのプログラムは例えばこのような形になります。

保存のプログラムでグループやチャンネルを指定したのと同じで、読み込みでもグループやチャンネルを指定することができます。指定しない場合の挙動はヘルプに記載があります。

プロパティを設定できる以上、特定のプロパティの値を持つチャンネルのみを抜き出すといったこともやろうと思えばできるのですが、少しプログラムが複雑になります。

というのも、チャンネルのプロパティを読み取る関数自体にチャンネル名を入力する必要があるためです。そのチャンネル名がわからない場合でも、チャンネル名を入力しないとプロパティを取得できないため、少し工夫が要ります。

例えば、TDMSファイルのチャンネルにテスト担当者というプロパティがあったとして、そのプロパティで特定のデータを持つチャンネルを読み取る際には次のような形となります。

TDMSの内容をリスト関数からまずはそのTDMSファイルの中にあるグループ名の一覧を取得し、Forループに渡しています。Forループの中にあるTDMSの内容をリスト関数で、そのグループにあるチャンネル名の配列を取得し、これをさらにForループに渡しています。

一番内側のForループでは随時チャンネル名が渡され、そのチャンネル名に対して「テスト担当者」というプロパティの値が何なのかを得て、それが検索するプロパティ値と一致しているかを判定、一致しているものがあればそのグループ名とチャンネル名をForループの外に渡して、ケースストラクチャの中の読み取り関数に渡しているという仕組みです。

実際に動作させるとこのような結果が得られます。

上の図で、右下、「里中智子」というプロパティ値はファイルにありません。しかし、チャンネル名は「最後の値」が出てきてしまいます。そうであっても、「プロパティ発見」のブールがFALSEであることで、「そのような名前のプロパティはなかった」と判断できることになります。

プロパティを自在に決められるため逆に言えば一般のファイルI/Oと比べて若干プログラムにクセがありますが、慣れてしまえば便利に使えると思います。

TDMSの欠点

ここまでTDMSの良い点を紹介してきましたが、欠点というか惜しい点があります。それは

  • Excelのプラグインでしか扱えない

という点です。今までの説明でもExcelの結果で示していたのはこれが理由です。

より正確には、National Instruments社が扱っている他のソフトウェアでは開くことができるようなのですが、通常だとExcelに対するTDM Excel Add-inというアドインソフトを使用するかあるいはLabVIEWプログラムで読み取り専用のプログラムを何かしら作るしかありません。

一応LabVIEWの中にはTDMSファイルの中身を関数一つで表示させるTDMSファイルビューアという機能がありますがこれは名前の通りビューアになっています。中身をただ見たいだけならこのビューアでも十分機能すると思います。入力は、TDMSのファイルパスを指定するだけです。

この関数、LabVIEW 2020を境に仕様が変わっています。LabVIEW 2020までは各タブ(プロパティ、値(テーブル)、アナログ値(グラフ))で表示項目を分けていましたが、LabVIEW 2020ではこれらが一つの画面に表示されています。

もちろん、データ測定時にはその利便性からTDMSファイル形式で高速に行い、保存されたデータは後でゆっくり他のファイル形式に変換するということもできます。

例えばシンプルに以下の図のように書けます。

上の図ではTDMSの読み取りでグループ名やチャンネルを指定していないので、特定のグループ内の特定のチャンネルのデータを変換するにはちゃんと指定する必要があります。

またTDMS読み取りの関数の左下に数値の2次元配列を入力していますが、こうすることで読み取られたデータを波形データではなく2次元の数値配列として読み取ることができます。この形であれば「配列からスプレッドシート文字列に変換」で楽々テキストファイルに記入できます。

もし時間情報も含めてテキストファイルに変換する場合には、例えば以下の記事のような方法が取れるかと思います。

制約がありながらも、TDMSそれ自体は高速でLabVIEWの波形データをそのまま扱えプロパティの設定で管理や検索にも向いている便利なファイル形式となっています。

必要に応じて正しく選択すれば、LabVIEWによる計測器制御プログラムの強力な味方になってくれるので、まずは触って慣れて、いつでも使えるようにしておければいいと思います。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました