LabVIEWの活躍する場面は多いのだが、多くの人はアナログ信号をPCに取り込むことからLabVIEWを使い始めている。今回は初めてLabVIEWを手に取ったときの事を思い出しながらアナログ入力についておさらいをしてみよう。ただ、手元のMacにはボードがつながっていないので動作確認できないのが大いに不安ではある。 ほとんどのLabVIEWユーザーがたどった道 スタートボタンを押すタイミングを外して測定したかった瞬間を逃した時、 もっとスマートそうに仕事をするために、もっと考える時間を作るために、 LabVIEW6iからアナログ入力データのデータ型のデフォルトはWaveform型になっている。ファンクションパレットに表示されている関数もほとんどWaveform型の出力になっている。古いバージョンで作ったVIに使われている関数、例えば、AI Continuous Scan.viはLabVIEW6iで開いても相変わらず数値配列で出力している。ダイアグラム上で見ると同じアイコンで同じ名前で2種類の関数が存在しているような感覚になってしまう。実際はvi.libの中のAI.LLBに両方の関数が保存されているので、以前のバージョンのように数値配列で受け取りたい時にはここから呼び出してくればいいのだ。 |
||||||||||||
![]() |
||||||||||||
NIの希望としては早くWaveform型に移行してね、ということなのだろう。Exampleもある程度Waveform型に変更されている。 実用性があってダイアグラムがシンプルな例はexample>DAQ>analogin>STRMDISK.LLBの中にあるAcq N Scans to File (wdt).viだろう。1)アナログ入力の設定をし、2)アナログ入力を開始する。3)入力データを読み出してファイルへの書き込みやグラフに表示して、4)アナログ入力を停止する。 |
||||||||||||
![]() |
||||||||||||
このVIは収録データが多くなるとメモリ不足になってしまうので注意が必要だ。 大量のデータを扱う場合のアナログ入力の基本形は次にあげるCont Acq&Chart (buffered).viだろう。example>DAQ>analogin>analogin.llbに入っている。バッファーを使うことによりアナログ入力を行いながら読み込みと処理を実行できる。エラーが起こらない限りストップボタンが押されるまで連続的にアナログ入力が行われる。ファイルへのデータの書き込みはWhileループの中に関数を追加すればできる。 |
||||||||||||
![]() |
||||||||||||
さて、これを基本形と書いたのは、Acq N Scans to File (wdt).viのダイアグラムよりもこのダイアグラムの方がアナログ入力動作とデータの読み込み動作が並列動作で行われていることが良く分かるからだ。AI Start.viはスキャンレートや収録スキャン数やトリガー条件を設定し、収録を開始する。Whileループの中のAI Read.viはバックグランドで動作している収録と平行してバッファーからの読み込みを行っている。AI Start.viで開始された収録はAI Clear.viの実行により停止する。ユーザーにとってはマジックナンバーになっているTask IDもAI Clear.viの実行により消滅する。 実際に使う場合はWhileループの中に適当なWait関数を入れておいたほうが良いだろう。 この基本形にファイルへの書き込みを追加した例が、Cont Acq to Spreadsheet File.viとなる。データ量や取り込み速度を上げたい場合にはBinariで記録するCont Acq to File (binari).viが良いのだが、エクセルなどでは開けなくなるので、ある程度LabVIEWに慣れてからにしたほうが良いかもしれない。これらのVIはexample>DAQ>analogin>STRMDISK.LLBの中にある。 |
||||||||||||
![]() |
||||||||||||
最近のバージョンではTools>Data Acquisition>DAQ Solution Wizard...から自分の必要とする機能に近いVI例を探すことができる。例えばSimple Data Loggerを見てみよう。ダイアグラムの見た目はシンプルだが、AI Sample Channels (scaled array).vi、AI Read One Scan (scaled array).vi、AI Single Scan (scaled array).viと幾重にもサブVIが続いていく。 | ||||||||||||
![]() |
||||||||||||
AI Sample Channels (scaled array).viのダイアグラムは実質的にDAQ Channel name制御器を配列に変換しているだけだ。 | ||||||||||||
![]() |
||||||||||||
次のAI Read One Scan (scaled array).viのダイアグラムがアナログ入力の実質的な部分で、特にバッファーを必要としない10Hz程度までの低速入力の時に使われる。AI Config.viは毎回行う必要がないので、ケース構造の中に入れられている。iteration制御器にループカウンタを接続すればi=1以降はスキップできる。 | ||||||||||||
![]() |
||||||||||||
AI Single Scan (scaled array).viのダイアグラム | ||||||||||||
![]() |
||||||||||||
結局example>DAQ>analogin>analogin.llbに入っているCollect N Scan.viと基本は同じということが分かる。 | ||||||||||||
![]() |
||||||||||||
このVIはchannels制御器が配列のままなので、Simple Data Loggerで複数チャンネルの取り込みをしたいのだが方法が分からないといったつまずきも起こりにくいかもしれない。 チャンネルの指定方法といえばLV4ではバグみたいなものもあったのだが、LV6iでは改善されているのだろうか? LV6iではまだ体験していないのだが、DAQ Channel Wizardで名前付けができるようになったらしい。名前付けをした場合はchannels配列制御器のそれぞれの要素にしていしていけば簡単に設定できるようだ。もちろん、従来通り要素0に0:3と記入することで0から3チャンネルの取り込みを指定することもできるはずだ。 ボードの入力レンジやゲインの設定はDAQ Channel Wizardで行うのが標準的な使い方になっているようだ。全てLabVIEWから設定したい場合にはAI Config.viを名前を変更して保存しておいて、ダイアグラムの中で使われているAI Hardware Config.viの [ alternate input limits settings (no change) ] 端子に設定条件を接続すればできるはずだ。 わざわざ接続端子を付けていないことから考えるとNIはお進めしていないようだ。個人的にはWizardはMS社を連想するし、気をつける場所がふえてしまうので好きではないのだ。 |
See you!
Nigel Yamaguchi