この記事で扱っていること
- ファイルにあるデータのヘッダ情報をグラフのプロット名に反映する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでファイルを読み取りこれをグラフに表示させることを考えます。
もし一つのファイルに複数のチャンネルのデータが入っていて、なおかつそれらにヘッダ情報、例えばある列の数値は○○のデータ、別の列の数値は××のデータ、といった情報があるのであれば、グラフでもそれらをわかりやすく表示するに越したことはありません。
そのためにはヘッダの情報を読み取って、その文字列をプロット名にするように工夫する必要があります。
これはプロパティノードを使用して簡単に組むことができます。
どんな結果になるか
今回対象としているファイルは例えば下の図のようなヘッダ情報を持つファイルです。
一行目に各列のデータが何を表わしているかという情報が載っています。
このファイルを読み取るプログラムがこちらです。特にグラフ表示以外の機能は持たせておらず、ファイルの選択もプログラム実行時に表示されるファイル選択のダイアログで行います。
プログラムを実行、ファイルを選択するとこのように各プロット名が表示されるのがわかります。
プログラムの構造
読み取るヘッダの情報をどのようにプロット名に反映させるかが肝になりますが、Forループを使えば簡単に行えます。
ブロックダイアグラムとしては例えば以下の形が考えられます。
配列から削除関数を使用しているのは、ヘッダ部分(削除出力)とデータ部分(サブセット削除後の配列)に分離するためです。
もし、読み込むファイルがカンマ区切りではなく例えばタブ区切りなのであれば、上記の「スプレッドシート文字列を配列に変換」関数の上から入力しているデリミタ定数をタブにするだけで対応できます。
重要なのは、各プロットに対するプロパティの設定は、まずどのプロットに対する処理なのかということをアクティブプロットプロパティで指定することです。順番として
- アクティブプロットプロパティにプロットの番号を入力
- そのプロットに対するプロパティを設定する
という順番とするだけです。
なお、この手法はもちろんプロット名以外の各プロットへのプロパティにも使用できます。
データの読み取り方向に注意する
上のブロックダイアグラムで2D配列転置を使用しているのを不自然に思った方はいないでしょうか?
実際に実行してみればわかりますが、この関数を使用しないとプロットされるのは意図しない形のプロットになります。
これは、LabVIEWがグラフに複数種類のプロットを表示させる際の仕様に関わっていて、「行方向にあるデータを一つのプロットとみなす」という仕組みになっています。
今回読み取らせたファイルの中身は、まず配列から削除の関数でデータの部分のみを抜き出していました。その際のデータの並びは、ファイルに記載のあったままの状態なので、例えば行方向に見ると「0,0,0」や「3,6,9」、あるいは「8,16,24」という3つの数値の並びが合計10個ありました。
これをLabVIEWの波形グラフの仕様通りに「行方向にあるデータを一つのプロットとみなす」としたために、10個のプロットが表れた、ということになります。
そしてこれを正しく直すために2D配列転置の関数を使用して行と列を入れ替える必要がありました。
LabVIEWでせっかく読み取って表示させたグラフ、ちゃんとどれがなんのデータなのか区別して表示させるのはわかりやすさに直結します。ヘッダの情報があればそのデータを活用することができるので今回の記事がヒントになれば嬉しいです。
ここまで読んでいただきありがとうございました。
コメント