LabVIEW備忘録

National Instruments社のグラフィカル言語 LabVIEWに関する学習Blogです。

波形データをCSVで保存(絶対時間)

LabVIEWで初心者が戸惑うポイントの一つに波形データの概念がある。波形は値Y、開始時刻t0、データ間隔dt、属性attributesから構成されているため、直感的な横軸時刻、縦軸値のデータペアになっていないのである。複数チャンネルの波形データをcsvに保存する場合など、ちょっとしたコーディングが必要となる。
下図のVIでは複数チャンネルを積んだ2D配列を転置することでチャンネルが列となる配列を作成、絶対時刻配列をテキスト上で置換合成している。そこそこ重たい処理なので、高速サンプリングした波形への適用は注意が必要。

f:id:labviewtips:20170811190156p:plain

LabVIEWを使うようなハード寄りの職場ではExcelで開ける事の価値は高いと思うので重宝するのでは。ファイルサイズが大きくなる場合は素直にバイナリやtdmsへの記録方法切替をお薦めする。

Waveforms2CSV_LV14.zip - Google ドライブ

と、ここまで書いたところで
NIのフォーラムに同じようなVIが紹介されていた(こちちらは相対時間だが)。
DAQmx アナログ集録で集録したデータをCSV形式で保存/Writing data acquired with DAQmx AI into CSV files - Discussion Forums - National Instruments

ループ実行時間を計測する

While Loopのエラー配線に接続し実行時間と回数を表示する。生産者/消費者デザインパターンなどの各ループに配置しておけば、コードのボトルネックが判別できる。エラー配線上に配置しているのは実行タイミングを明示化するため。

f:id:labviewtips:20170811182146p:plain

ElapsedTimerbyError_LV14.zip - Google ドライブ

ネタ元
使えるLabVIEWテクニック 時間を計る
ループの実行時間を測定するサンプル: LabVIEWの杜 Blog

アナログ波形データのデータ量最適化(0)

NI社のCompatDAQシリーズを用いてアナログデータ収録を行う際のデータサイズについて検討する。簡単のため構成はNI cDAQ-9172 / NI 9221(±60 V、アナログ入力、800 kS/秒、8 Chモジュール)とする。

検証用として以下のコードを作成した。(もう少し複雑な処理を追加する場合は収録ループと記録ループを生産者/消費者デザインパターン化する必要がある。)

f:id:labviewtips:20170812094624p:plain

ここで想定しているアナログ入力NI9221は12bitの分解能だが、DAQmxでアナログ波形を何も考えずに読み取るとループ上段のようにデータが32bitの倍精度小数(BDL)になってしまうのである。ループ中段のように16bitの単精度小数(SGL)に変換するのが望ましく、これによりファイルサイズを50%改善できる。

NI社のCモジュールで16bit以上の分解能のあるものは熱電対がほとんどで、これらは低速サンプリングしかできないため、DBLのまま使用してもファイルサイズ上ほとんど問題がない。タイムスタンプ/DBL変換と同じく、このあたりが初心者のひっかかりポイントな気がする。