この記事で扱っていること
- TDMSでグループごとに自動でフォルダ分けしてCSVに変換する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでデータをとるにあたって、ひとつのファイルでグループやチャンネルなどの階層を自由に分けられるTDMSは結構便利に使えます。
ただ、弱点もあり、TDMSファイルを扱えるソフトが限られる、という点がネックになります。
一応、Excelでアドインをいれれば扱えるようになりますが、複数人でファイルを共有する場合などには、むしろ最初から扱いやすいファイル形式に変換した方が都合がいい場合もあると思います。
本記事では、TDMSで一つのファイルに複数のグループ、チャンネルとして分けたデータをフォルダやファイルを分けてcsvファイルに自動変換するプログラムの例を紹介しています。
どんな結果になるか
変換プログラムでは、変換元のTDMSファイルパスと、変換後のフォルダやファイルを保存するディレクトリパスをそれぞれ選択する画面のみで構成しています。

プログラムを実行すると、フォルダやファイルを自動的に分別して生成します。
試しに、このようなデータを持つTDMSを例にとります。

実行することで、tdmsファイルにあるグループ名ごとにフォルダが作成されます。

各フォルダには、そのグループに属しているチャンネルのデータが個別にcsvファイルとして保存されています。
これで、tdmsファイルからグループ、チャンネル毎に個別のcsvファイルにすることができます。

プログラムの構造
プログラムとしてはシンプルで、指定したTDMSファイルの中身にどのようなグループおよびチャンネルが入っているかをリストで取得してForループで順番に変換を行っています。

最初のTDMSの内容をリストの後に指標配列を使ったり、1D配列から重複を削除関数を使用しているのは、指定したtdmsファイルの中のグループ名を取得するためです。
TDMSの内容をリストの関数を、グループ名を指定しない状態で使用すると、そのtdmsのグループやチャンネルの一覧を2次元配列で取得できるのですが、グループ名はその2次元配列の0行目にあるものの重複が多いので、これを1D配列から重複を削除関数で重複を消し、後のForループで使用しています。

内側のForループで文字列にフォーマット関数を使用して波形データ中のタイムスタンプとその時のY値をテキストに変換しています。
文字列にフォーマット関数でタイムスタンプを扱うためには「%<>T」として<>の間に時間形式文字列の形式コードを入力します。
例えば今回の例の場合には
%<%Y%m%d-%H%M%S%3u>T
としていますが、これは
年月日-時分秒
の順番で記録する場合の例です(秒は小数点部分まで表します)。
別にこの表記である必要もないので、好きな保存形式になるように形式コードの表を参考に変えてみてください。

波形データ以外も含んでいる場合
上の例では、TDMSから読み取るデータが波形データであることを前提としていました。
ただ、TDMSは波形データでなくても例えばただの浮動小数点の配列データも保存できるため、この場合に「タイムスタンプ」は存在しないことから、無意味な時間データを保存することになってしまいます。
これを避けるために、各チャンネルの中身のデータタイプを取得するのもいいのですが、タイムスタンプがないデータに対するt0はデフォルト値であるので、これを判断材料にしてケースストラクチャを使用する方法が見た目にもわかりやすいのでこちらの方法を採用することにします。

本記事では、TDMSでグループごとに自動でフォルダ分けしてCSVに変換する方法を紹介しました。
データを分ける方法はどのようにデータを管理したいか、共有したいかで異なるアプローチをとることになると思いますが、その中でも今回は一番シンプルにTDMSのグループおよびチャンネルでフォルダやファイルを分ける仕組みを紹介しました。参考になるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント