USB-6008を使ってみる
by K.I
2009/12/17〜2010/01/29
Index
- オライリーのMake:Japanの読者限定キャンペーンで、LabView2009とUSB-6008を手に入れた。
- LabViewは以前ちょっと使ってみて面白かったんだけど、、価格が高すぎるので、もう弄ることも無いだろうと思っていたけど、
- このキャンペーンは有難い。個人でLabViewを手に入れられるとは思わなかった。オライリーとNIに感謝です。
- LabViewは、以前ちょっとだけ弄ったけど、バージョンも新しくなってるし、すっかり忘れてる。
- USB-6008は初めて使うし、まぁ自分の復習も兼ねて、使い方のメモとしてまとめておこうってことで。
- こいつは、以下のような機能を持っているらしい。
- 8チャンネルアナログ入力(12ビット、10kS/秒)
- 2チャンネルアナログ出力(12ビット、最大150 Hz、ソフトウェアタイミング)
- 12本のデジタルI/Oライン、32ビットカウンタ
[top]
- LabViewは、C言語やBASICのようなプログラム言語だけど、結構クセがあるので、とつっきにくいかもしれない。
- とりあえず、自分の理解してる範囲でごく簡単な使い方の説明だけしてみる。
- NIのソフトって、なんかインストールにやたら時間が掛かる。
- 今回、試しに全部入れようってことで、全部選んだら3〜4時間掛かった。
- どうせライセンスがあるのはLabViewだけなので、それ以外は評価版で1ヶ月だけしか使えない。
- 1ヶ月の間に全部試すのは無理だから、デフォルトだけにしとけば良かったな〜。失敗1だ〜。
- LabViewの方のドライバをインストールしたので、USB-6008の方のNI-DAQmxのドライバは入れなくても良いみたいだ。
- とりあえず、USB-6008に付属のCDROMはインストールしないで、やってみる。
- 起動すると、素っ気無いスタートアップウィンドウが表示される。
- すると、ブロックダイアグラムとフロントパネルの2つのウィンドウが開く。
- ブロックダイアグラムが、プログラムをするウィンドウ。
- フロントパネルが、作ったプログラムの表示や操作をするウィンドウ
- この2つのウィンドウがインタラクティブに連動している。
- ブロックダイアグラムで右クリックすると、関数パレットが表示される。
- 初期状態では、歯抜けだし、ラベルが出ていてスカスカなので、ちょっと気持ちわるい。
- 関数パレットの左上のピンをクリックして固定、上に3つのボタンが出来るので、右端の表示ボタンをクリック
- このパレットを別の形式で表示→アイコン
- 表示カテゴリを変更で全て選択してしまう。
- さらにツールメニュー→オプション→制御器/関数パレットで、以下のように設定する。
- ナビゲーションボタンメニュー →アイコンのみ
- パレット →アイコン
→関数パレット→三角マークがある時は階層メニューになっている
- あとは表示メニュー→ツールパレットで、ツールパレットを表示しておく。
- LabViewでは、カーソル位置によってカーソルが切り替わって、自動的に操作ツールが切り替わるんだけど、
- 最初は良くわかんないので、これを見ながらやると良い。このパレットでツールを固定することも出来る。
→ツールパレット→一番上の緑色のランプが点灯している時は自動切り替え
- それから、ヘルプメニュー→詳細ヘルプを表示、にしておこう。
- カーソル位置の部品の情報を表示してくれるので便利。というか、これが無いと分かりにくい。
- フロントパネルで右クリックすると、制御器パレットが出てくる。
- これも、関数パレットと同様に表示形式や表示カテゴリ変更をやっておく。
→制御器パレット
- 習うより慣れろってことで、いろいろ弄ってみるのが一番。
- まず、定番のボタンを押すとLEDが点灯2するってやつを作ってみる。
- フロントパネル上で右クリック、制御器パレット→モダン→ブール→押しボタンを選ぶ
- で、ボタンをフロントパネルの好きな位置に配置する。
- もう一度、フロントパネルで右クリック、制御器パレット→モダン→ブール→円LEDを選んで、
- すると、ブロックダイアグラムにも、同じような感じで、2つのアイコンが表示されている。
- 片方のアイコンの三角印の処に、カーソルを持っていくと糸巻きカーソルになるので、
- クリックすると、ワイヤ接続出来るので、今度はもう片方の三角印のところまで配線してクリック。
- 連続実行ボタンを押してやると、プログラムが開始される。
- あとは、フロントパネル上のボタンを押すとLEDが点灯する。
- プログラムが大きくなるとアイコン表示は大き過ぎて邪魔なので、
- アイコン表示を右クリックして、「アイコンとして表示」のチェックを外すと、データ端子として表示されるので小さくなる。
- これでも良いんだけど、毎回、イチイチ設定するのは煩わしいので、
- ツールメニュー→オプションで、カテゴリ→ブロックダイアグラムのフロントパネル端子をアイコンとして配置のチェックを外しておく。
- これで、デフォルトでデータ端子として表示されるようになる。
- これは最も簡単なプログラムなんだけど、LabViewの特徴が少し分かる。
- ブロックダイアグラムを見ると、スイッチもLEDもブールになっている。このことから変数の型がありそうだと分かる。
- LabVieは見かけと違って、普通の言語と同じように厳密な変数の型を持っている。
- アイコンの色で、大まかな型が分かる。例えば、ブールは緑色、整数は青、実数はオレンジとかいう感じ。
- また制御器と表示器という2種類のインターフェースがある。
- LabViewのパネル上の部品は見せかけなので、実際、LEDを制御器に、スイッチを表示器に切り替えることも出来る。
- で、ワイヤでデータをやりとりする。ワイヤの型は重要。
- このワイヤは型が合っていないと接続できない。ワイヤも、型によって色分けされている。
- 文字列だけ、少しワイヤが太いが、これは文字列がbyte列なので構造を持っているから。
- このようワイヤが太いものは、配列や何らかの構造を持っていることを表す。
- とにかくLabViewのプログラムでは、変数型を常に把握しておくことが重要。
- 普通の言語の知識があった方が、理解しやすいと思う。
1結局、何も試さないうちに期限切れになってしまいました。。
2これは画面表示だけで、実際にLEDが点灯するワケじゃないけど。
[top]
- とにかく折角のインターフェースなので、USB-6008を使ってみる。
- LabViewのドライバのインストールが終わっていれば、USB-6008とPCをUSBケーブルで接続するだけだ。
→USBケーブルでPCと接続
- 接続端子が分かりにくいので、付属のシールを貼っておこう。
- アナログの方は、差動と基準化シングルエンドの2種類があるので好きな方を。
- アナログ入力を使うためには、DAQmxアシスタントというVIを使うらしい。
- 測定I/O
- DAQmxデータ集録
- DAQmxアシスタント を選んで、ブロックダイアグラムに配置する。
- すると、新規Expressタスク作成のダイアログが開くので、信号を集録→アナログ入力→電圧を選ぶと、
- サポートされる物理チャネルとして、Dev1(USB-6008)のai0〜ai7が選択可能になっている。
- 試しに、ai0を選んでみる。
- デフォルトの構成は、信号入力範囲が-10V〜+10Vで、作動入力。
- 集録モードはNサンプルで、1kHzのレートで1kサンプル。
- 接続ダイアグラムのタブを選ぶと、入力端子が分かる。
- 入力端子に手を触れながら、実行ボタンを押すとExpressタスクのグラフに入力した波形が表示される。
- 自分のとこは東日本なので、50Hzの商用周波数が見えている。
- とりあえず、これで簡単な動作確認が出来るようになっている。
- これで良しとなったら、OKボタンを押せば、DAQアシスタントが実際に配置される。
- データの右にある三角のところを、右クリックして、
- 作成→グラフ表示器を選ぶと、グラフ表示器が接続される。
- フロントパネルには、実際にグラフ表示器が配置されるので、
- 実行すれば、アナログ入力からの波形が表示される。
- これで、アナログ電圧の測定と表示のプログラムが出来たことになる。
- とりあえずアナログ入力のプログラムは出来たんだけど、DAQアシスタントがあるだけ。。これじゃサッパリ分からない。
- まず、DAQmxアシスタントを右クリックして、NI-DAQmxコードを生成を選ぶ。
- でも、これも左側のDAQmx構成テンプレートというのは、いったい何なんだろう?。
- このDAQmx構成テンプレートは、サブVI(サブルーチンのようなもの)なので、ダブルクリックしてみる。
- すると、DAQmx構成テンプレートのフロントパネルが表示される。
- 「ウィンドウメニュー→ブロックダイアグラムを表示」或いは、CTRL-Eでブロックダイアグラムを表示する。
- つまり、このプログラムは、以下のようになっていることが分かる。
- DAQmxタスクを生成
- DAQmxチャネルを作成(AI電圧)
- DAQmxタイミング(サンプルクロック)
- DAQmx読み取り(アナログ1D波形、NチャンネルNサンプル)
- DAQmxアシスタントで基本的な骨組みを作って、後は生成されたこのプログラムを修正していけば良いと思う。
[top]
- USB-6008は、アナログ出力機能もあるので、それも試してみよう。
- ブロックダイアグラムにDAQmxアシスタントを配置し、信号を生成→アナログ出力→電圧を選んで、
- とりあえず、Dev1(USB-6008)のao0を選択する。
- 出力電圧範囲は0〜5V、端子構成は基準化シングルエンドで、生成モードは1サンプル(オンデマンド)
- これで実行しても、DAQアシスタント上では何も起こらない。
- 生成モードを、Nサンプルや連続サンプルにすると、正弦波のようなグラフが表示されるが、
- 実行すると、エラーコード -200077が発生する。
- 要求された値はこのプロパティでサポートされている値ではないというのだが。。これはどういうこと?
- うーん。仕方がないので、生成モードは1サンプル(オンデマンド)のまま、OKを押す。
- データの三角部分で右クリック。作成→制御器を選ぶと、フロントパネルに電圧値の入力用のEditボックスが表示される。
- 連続実行ボタンを押して、この数値を変えると出力電圧値が、ちゃんと変わる。
→
- フロントパネルで制御器を右クリックして、置換→モダン→数値→ダイアルに変えてみる。
- これで連続実行すると、ツマミで出力電圧を変えることが出来るようになる。
- いろいろ弄っていると、エラーコード -200561が発生する。これはの生成可能な0〜5V範囲外の指定をしたためらしい。
- データエントリで、「デフォルトの制限を使用」のチェックを外して、最小0V・最大5Vに設定する。
- スケールも、0〜5Vにする。実際はこちらだけでも良いのかもしれない。
→とりあえずの電圧出力は、これでOKだけど
- このDAQアシスタントを分解しようとすると、「無効な波形タイミング」のダイアログが出る。
このタスクはExpressタスクのみで有効な「波形のタイミングを使用」のオプションを有効にします。
変換されたタスクではこのオプションは使用できません。変換したタスクで波形のタイミングを使用するように構成するには、
DAQmxタイミングVIの多態性VIセレクタから「波形を使用」を選択し、タスク名制御器と波形データをVIに配線してください。
*メモ:DAQmxタイミングVIはDAQmx書き込みVIの前に呼び出す必要があります。
- うーん。何言ってるのか良くわからん。まぁ、とにかくそのままじゃ使えないから、少し手を入れないといけないらしい。
- でも分からないからDAQアシスタントを使ってるんだから、そう言われても困るなぁ。。
- サブVIの中身を見てみたけど、これはちょっと分かりにくい感じだ。
- そもそも、DAQアシスタントの生成モードでNサンプルや連続サンプルが使えなかったのは何故なんだろう。
- USB-6008はアナログ入力は連続サンプル可能だけど、出力はクロックを使用した連続サンプルをサポートしていないらしい。
- これはつまり、アナログ入力についてはサンプリングデータをUSB-6008のメモリに保存して、高速にサンプリング出来るけど、
- アナログ出力は、メモリしたデータを高速に出力するような機能は無いみたいだ。
- でも、出力データをどうやって作っているのか、しばらく分からなくて悩んだ。
- このサンプルは、作成済みの波形データをあらかじめ配列に入れてあるだけだった。
- 作成済みデータではつまらないので、出力データをLabViewで計算して配列に入れてから、出力するようにしてみた。
- この方が、どんな波形を出力するのか分かりやすいと思う。
- あと1ms毎にデータを出力するように、Whileループに次のミリ秒倍数まで待機するようにしてみた。
- しかしこれは失敗。1にしても2ms毎にデータ出力される。0を指定すれば、1msより速い間隔で出力されるんだけどな〜。
- どうも、ミリ秒待ち機能をONにしただけで、最低1msちょっとのオーバーヘッドがあるみたいだ。
- そうはいっても、USB-6008のアナログ出力の規格は最大150Hz、つまり150S/秒ってことだと思うけど、
- それよりは速く出力出来ているが、1周期10サンプル程度で50Hzが限界。まぁ、ソフトウェアコントロールじゃしょうがないか。。
→実際の出力波形
- ミリ秒倍数を0にすれば150Hzぐらい出せるけど不安定になる。いずれにせよ波形出力に使うには、ちょっと遅すぎるけど、
- 0〜5Vの任意の電圧を、このぐらいで変化させられるならば、いろいろ使えそうだ。
[top]
- デジタル入出力についても、同様にDAQアシスタントで設定したものを基にして作れば良いだろう。
- でも、LabViewの独特のプログラム記述は、普通の言語に慣れてると違和感はあるかもしれない。
- ちなみに、の付いているブロックダイアグラムの画像は、VIスニペットと呼ばれるもので、
- LabViewのブロックダイアグラムに、ドラッグアンドドロップすれば、プログラムとして実行できるという意味。
- LabViewは普通の言語と違って、TEXTでソースプログラムを例示することが出来ないが、、
- PNGファイルの付加情報として、LabViewのプログラムを仕込んであるので、サンプルプログラムの例示が簡単に出来る。
- まだ、VIスニペットを使っているWebページ等は少ない3けど、
- 使われているページが増えれば、少しはLabViewのプログラムを作りやすくなるんじゃないかと思う。
- まぁとりあえず、これでUSB-6008の使い方が少し分かったような気がするので、
3そもそもLabViewの解説をしているページ自体が少ないんだけど。
[top]
[電子工作関連に戻る]