この記事で扱っていること
- LabVIEWでtdms保存してPythonで解析する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
プログラミング言語には、それぞれに特徴があるので、「こういうプログラムを組みやすい」といった得意分野ごとに異なるプログラミング言語で開発することで工数を短縮できる場合があります。
また、既に昔作ったことがあるアルゴリズムがあるのでそれを活用したい、という場合に別のプログラミング言語を組み合わせる、といった使い方もあるかと思います。
今回の記事では、ハードウェア操作が比較的行いやすいLabVIEWで取得したデータを、Pythonで解析するために読み込むといったシナリオを考えています。
LabVIEWで取得したデータを保存する形式は、データ測定のプログラムで推奨されるtdms形式としています。
なお、pythonプログラムをLabVIEWで呼び出すといった方法について知りたい場合には別の記事をみてみてください。
どんな結果になるか
今回は以下のようなプロパティを持つtdmsファイルを例にとります。
具体的には、mytestという名前のグループに4つのチャンネルがあり、それぞれにuser nameとwave typeというプロパティを持っています。
(それ以外のwf_incrementなどは特に設定せずにtdmsが持っているプロパティ)
Pythonプログラムでこのtdmsファイルを読み込んで、プロパティを表示したり、データをグラフ表示することができます。(グラフ表示にはmatplotlibを使用)
もちろん、グラフにした結果は、LabVIEWで読み込んでも同じ形となっています。
プログラムの構造
LabVIEW側のプログラムは、とにかくtdmsファイルができればいいので何でもいいのですが、今回は以下のようなブロックダイアグラムを持つプログラムを実行してtdmsファイルを作成しました。
とにかく試したい、けどtdmsファイルを作るプログラムの例を考えるのがメンドクサイ、という場合には以下の図のプログラムそのままでまずは試してみてください。
Python側は以下のようなスクリプトとしています。
TdmsFile.readの中身には読み込みたいtdmsファイルのパスを指定しています。
結果として、tdmsファイルの中のmytestグループにあるmySine Wavechannelチャンネルの値を表示するとともに、これをグラフ表示してくれます。
Python側の準備
PythonでTDMSファイルを読み取れるようにするためには、事前にnpTDMSモジュールをpipコマンドでインストールしておきます。
あとはスクリプトの中でインポートしてtdmsファイルを扱えるようにしていきます。
APIについては以下のドキュメントを参考にしてみてください。
Installation and Quick Start — npTDMS 1.9.0 documentation
他にもいくつか試した結果を以下に紹介します。
上で紹介したのと同じLabVIEWプログラムで生成したtdmsファイルに対し、ファイルのプロパティやグループ名の表示、グループのプロパティ(今回はグループのプロパティは設定していないため結果は空の辞書となっている)、グループに属するチャンネル名とチャンネルのプロパティを表示しています。
tdmsはファイル、グループ、チャンネル、それぞれの階層でプロパティを設定でき、データの区別を行うことができます。
そのため、tdmsファイルを有効活用する際にはプロパティの読み取りが重要で、特定のプロパティを検索して合致するデータに対して解析を行う、といった使い方が便利です。
例えば以下のように一つのグループ(グループ名はfirst group)に二つのチャンネル(my test channelとmy demo channel)があってそれぞれに異なるプロパティ値を持っているような場合を考えます。
グループの中のチャンネルの数はlenで取得できますし、特定のチャンネルは指標番号(インデックス)で指定できるため、特定グループの全チャンネルのプロパティをForループで抜き出して、プロパティの値を指定して検索、なんて使い方ができます。
指標番号での指定の例を以下に載せています。
本記事では、LabVIEWでtdms形式に保存してPythonで解析するためにこれを読み込むプログラムを紹介しました。
LabVIEWでPythonプログラムを呼び出す方法もあるとはいえ、他の機能との兼ね合いもあってpython側でtdmsファイルを読み込みたい、という場合に参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント