LabVIEW備忘録

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

Max hold

スペアナよろしく波形の最大値を記録する機能を実装した。シフトレジスタに波形各要素の最大値を入れて比較しているだけ。Reset端子にラッチボタンを接続すればクリアできる。
f:id:labviewtips:20171118173508p:plain
MaxHoldSingleWave_LV14.zip - Google ドライブ

下図は方形波+一様ノイズ信号(青線)が時間積算にしたがって方形波の最大値(赤線)に近づいていく様子が見て取れる。
FFT後の周波数波形などに適用すると威力を発揮すかも。
f:id:labviewtips:20171118172717p:plain

Advanced plotting toolkit

前回グラフをPNGに出力する話題をしたが、直接ライブラリから画像を生成する方法を紹介。
Advanced Plotting Toolkit

f:id:labviewtips:20170915001310p:plain

一見してわかるように中身はmatplotlibであり、そこそこ美麗な各種グラフを出力することが可能である。Picture表示器に出力されるだけなので案の定速度は低く、動的に計測データを表示するような場合は、グラフ更新間隔はせいぜい0.5s間隔が限度となる。また、日本語フォントを使いたい場合は力技で合成するしかない。

f:id:labviewtips:20170915001743p:plain

グラフをPNGに保存

グラフやチャートを瞬間的にスナップショットをしたい場合の選択肢は

  1. インボークノード⇒画像を取得
  2. インボークノード⇒画像をエクスポート
  3. 外部ライブラリなどに投げる

の3択になる。
1.はお世辞にも見た目が良いとは言えないLabVIEWのUIをそのまま保存してしまうので2.について紹介する(3については別途)。

f:id:labviewtips:20170910130323p:plain

グラフ制御器のリファレンスとPNGの保存パスを指定するたけ。一時ファイルをディスクに書き込むし、インボークノードなので連続処理への適用はご法度。

前回実行時の設定値を復元

開発環境の場合は現在の値を設定をデフォルトを都度すればよいが、exeを作ってしまうと毎回制御値の値がデフォルトに初期化されてしまう。Ctrl Val.Get Allを用いて全ての制御器値を取得、xml化してcfgファイルに書き込み/読み込みをすることで制御器設定を維持できる。バリアントをそのままxmlに平坦化すると上手くないようなので、一旦クラスタに分解している。

ControlValue.zip - Google ドライブ

読み込み側VI LoadContrlValue.vi
f:id:labviewtips:20170819100518p:plain

書き込み側VI SaveControlValu.vi
f:id:labviewtips:20170819102215p:plain


書き込み側の無効制御器指標に終了ボタンの指標を設定することで、次回実行時に終了ボタンがいきなりTrueとなることを防止している。

注)windowsUACの問題があるのでProgram Files以下にexeをインストールする場合は設定cfgが作成されません。

tdms記録の勘所

tdmsファイルはなかなか良く考えられたファイルフォーマットであり、LabVIEWを使うならこれを活用しないと損である。が、何も考えないでtdmsに記録すると嵌る。

時間チャンネルを生成する方法
http://www.kyowa-ei.com/jpn/download/product/special/ni_diadem/faq/time_channel.pdf

波形データをそのままtdmsに記録するとLabVIEW波形のt0とdt情報が記録される。これをDIAdemで解析しようとすると前記URLのようにデータポイントが等間隔であるという前提で時間チャンネルを作成する必要が生じる。これを防ぐためにtdms書き込み時には波形の時間チャンネルも同時に記録すると良い。時間チャンネル分の容量(DBL)が増えてしまうが、後作業の手間を考えると圧倒的に楽である。また記録開始→一時中断→記録再開などといった処理を同一ファイルに行う場合も絶対時間のチャンネルをつけておくメリットが大きい。
f:id:labviewtips:20170816235851p:plain

DAQmxにはロギングという計測データをそのままtdmsに高速記録できる関数があるのだが、前記のような時間チャネルつけたりなど、ちょっと凝ったことをする場合にはあまり向いていない。

波形を間引く

入力波形を係数分だけ間引いた波形を返す。平均化や実効値計算などはしておらず、単純に点を間引いているだけである。グラフやチャートが重すぎる場合や、サンプリング設定を変更しないで記録データを間引きたい場合に使用する。
f:id:labviewtips:20170815222443p:plain

DecimateWaveforms.zip - Google ドライブ

DAQデバイスが認識されない

Q:NI MAX(Measurement & Automation Explore)上でCompactDAQデバイスが見えているけど型番が正常に認識されないのだけれど(下図)?

f:id:labviewtips:20170814095532p:plain

A:シャーシやデバイスが対応していません。または、タスク数がシャーシ仕様の上限を超えています。

図の場合は旧世代の9162に対応していないNI9205を差した状態で、不明なUSBデバイスとして認識されている。WiFi対応のNI ENET/WLS-9163も転送レートのためか対応デバイスが少ない。
NI-DAQmx 17.0 Readme - National Instruments

CompactDAQを使った計測システムを構築する場合、まずはMAX上でシミュレーションデバイスを構成しテストを行った後に実機でのテストをするケースが大半だと思う。シミュレーションデバイスはシャーシのタスク制限は無視しているのかアナログ入力モジュールを上限タスク数以上差しても動作してしまい、実機に移行するタイミングで嵌る。NI9178ではサポートされるアナログ入力は3タスクまで。旧機種9172ではアナログ入力1タスクまで。
いっぱいアナログ入力したい場合はcRIOでシステムを組むかシャーシを複数個導入する必要がある。cRIOは導入&学習コストが若干高いので、データ収録だけなら都度9172を買い足してくと楽。