この記事では、LabVIEWでサードパーティ(National Instruments社以外)製のハードウェア、計測器を制御する際に使用する計測器ドライバの扱いと仕組みを解説しています。
- National Instruments社製ではない計測器を扱いたいけれどLabVIEWでどうするの?
- 計測器ドライバの関数って必要?
- 計測器ドライバの使い方を調べるにはどうすればいい?
といった方に参考にして頂けると思います。
LabVIEWの魅力の一つは、ハードウェアとの接続が行いやすく、その制御のプログラムもグラフィカルに構成できることだと思います。
LabVIEWを販売しているNational Instruments社製のハードウェアはもちろんのこと、それ以外のハードウェアもLabVIEWで制御することができます。プログラムの書き方も似てくるので、一度慣れてしまえば(ハードウェア固有の書き方など除けば)制御プログラムも作りやすいのが特徴かなと思います。
こういった計測器制御をLabVIEWで行う場合には、計測器ドライバというものをダウンロードする場合が多いです。これは「ドライバ」という名前がついていますが、いわゆるハードウェアを動かすためのドライバソフトウェアのことではなく、実態は「その計測器を動かすのに必要なLabVIEW用の関数群」になってます。
なので、サードパーティの計測器を動作させるために計測器ドライバが必須、というわけではなく、なくてもプログラムを適切に書けば動くのですが、合ったほうが圧倒的に楽ということになります。
(逆に言えば、計測器ドライバがなくても適切にプログラムを組めばサードパーティの計測器を動かすことができる、ともいえます。中には、公式な計測器ドライバをダウンロードすることでその計測器の制御に必要な「本当の」ドライバソフトを入手しないと使えないものもあるかもしれないですが)
この記事では、計測器ドライバがある前提でその探し方、計測器ドライバの構造の確認、プログラムを組む際にどのように考えるかについて個人的な経験を踏まえ紹介していこうと思います。
計測器ドライバの探し方
まずはこの計測器ドライバの探し方から確認していきます。
計測器ドライバは、
- 「計測器ドライバネットワーク」のHPで検索する
- LabVIEWから計測器ドライバを検索する
- ネットで計測器ドライバの名前+LabVIEWのキーワードで検索する
の三通りの入手方法があります。
計測器ドライバネットワークのHPは、以下のアドレスから飛ぶことができます。
このリンク上で、使用したい計測器の型番やその計測器のメーカーを検索します。もし計測器ドライバがあればそのページからダウンロードします。
LabVIEWから計測器ドライバを検索するには、メニューバーの「ツール」から「計測器ドライバを検索」を選択します。
計測器が既に接続されていてNI MAXで認識されている場合には計測器をスキャンをして、もし目的の計測器に対する計測器ドライバがあればそれがダウンロードされると思います。
しかし、手元に計測器がなくても製造元のところから計測器のベンダーを選んで「検索」をクリックし、目的の型番の製品がないかを探すことができます。
もし目的の計測器が見つかればインストールを押してインストールを開始します。
インターネットで計測器ドライバを直接探すこともできます。「○○(計測器の型番) LabVIEW ドライバ」などと検索して検索でヒットすると計測器ドライバネットワークのページに飛べると思います。
目的の計測器が見つかってダウンロードの画面に進むのですが、場合によっては自分の使用しているLabVIEWのバージョンの計測器ドライバが見つからない場合があります。そんな場合でも、一番近いバージョンのドライバをダウンロードして動くかどうか試すことはできます。
冒頭で説明したように、計測器ドライバの実体はLabVIEWの専用の関数群になっています。古いLabVIEWで作ったプログラムは多くの場合新しいLabVIEWでも動作しますし、計測器ドライバのバージョンが違ったからといって制御ができない可能性はあっても計測器を壊してしまう様な影響が出ることはないと思います。
ただし注意する必要があるのは、この方法でダウンロードされたzipファイルについては、解凍したものを、適切なフォルダであるC:\Program Files (x86)\National Instruments\<LabVIEWのバージョン>\instr.libにまるまる移す必要があります。
こうしないと、LabVIEWの関数パレット上で表示されません。なお、LabVIEWのツールメニューから計測器ドライバをインストールした場合、計測器ドライバファイルはこのフォルダに保存されるので特に何か操作をする必要はありません。
計測器ドライバを確認してみる
いずれかの方法で計測器ドライバをPCにダウンロードでき適切なフォルダにそのファイルがあることを確認出来たら、LabVIEWを開いて計測器ドライバの位置を確認します。
ブロックダイアグラムで関数パレットの中に「計測器I/O」パレットに計測器ドライバの項目があるはずなのでこれを選択します。(ここにダウンロードした計測器ドライバの名前が出ていない場合には、上記の通り計測器ドライバのファイルが適切なフォルダにあるかを確認してください)
この記事では、LabVIEWをインストールした際にどのバージョンでもデフォルトで入っているであろうAgilent 34401を例にとります。(インストールしている計測器ドライバの数によっては下の図の表示と異なる可能性があります)
計測器ドライバのAgilent 34401のパレットを確認してみます。すると、下の画像のようになっていると思います。
計測器ドライバはその計測器を作っているメーカーが提供している場合が多いと思いますが、その際には「計測器ドライバとはこういうもの」といったルールが決まっているようです。そのため、どの計測器ドライバも基本的には同じような関数がそろっています。
色々と並んでいて目移りし最初は戸惑いますが、そんなときにはVI Treeがオススメです。VITreeとかかれたアイコンを選択してこれを適当にブロックダイアグラムに置ダブルクリックすると中身が見れるので確認してみます。
フロントパネルには特に用事がないので、ブロックダイアグラムを見ると、何やら関数がたくさん並んでいるのが分かると思います。
VI Treeは基本的にどの計測器ドライバにもあると思います。その中身は、各関数をどのように並べてプログラムを作るかを説明してくれているような見た目をしています。つまり、VI Treeのブロックダイアグラムは、各関数の役割およびプログラムを作るときの全体的な構成を端的に表していると言えます(すべてのVI Treeでそうかはわかりませんが)。
さらに、Agilent 34401のVI Treeでは、サンプルがあることが記載されています。基本的に計測器ドライバをインストールすると、各関数だけでなく、プログラム例も一緒にインストールされるので、これを見てプログラムの構築の仕方を確認することができます。
実際にサンプルを見てみます。メニューバーのヘルプからサンプルを検索でNIサンプルファインダを開き、ハードウェア入力と出力の項目から計測器ドライバ、続いてLabVIEWプラグアンドプレイを選択します。
このフォルダの中で自分が使用する計測器の名前、今回の例で言えばAgilent 344401と名がついたものを探します。
適当にサンプルを開いて中身を確認してみます。すると、VI Treeで記載されていた順番通りに各関数が並んでいることが確認できると思います。
私自身はそこまで多くの計測器ドライバを見たことがあるわけではないのですが、どの計測器ドライバもInitializeの関数や構成を行うための関数、エラーを確認する関数、読み取りあるいは書き込みを行う関数、closeの関数等ある程度そろっているものは決まっています。
計測器ドライバの関数の中身とは
ところで、様々な計測器があってもだいたいどれも似たような関数で構成されているって不思議じゃないですか?
計測器は種類によって当然用途や使い方がバラバラなのに、どれも似通っている、だからこそ一つの計測器に対して慣れてしまえば応用が利きやすいともいえますが、その実態は何なのか知ろうということで、関数の一つをのぞいてみます。
まずは、どんな計測器ドライバでも必ずあるであろうInitializeの関数の中身を見てみます。
すると、VISAの関数が並んでいることが分かると思います。VISAを開くの関数から始まり、途中プロパティノードでVISA通信の設定を行っている部分はあるものの、VISAの設定やVISAの読み書きの関数が並べられているだけです。
VISAの通信では、コマンドとしての文字列を通信相手と送受信するというプログラムの形をとっています。Initializeの関数で言えば、*IDN?の文字列が通信相手に送るコマンドであり、その応答を見て通信相手が本当にAgilentの34401であるかを確認している、という動作になっています。
他の関数を見てみても同じことが言えます。関数としてのサブVIの中に別の関数であるサブVIが入れ子になっている部分もありますが、中身をたどると最終的にはVISA通信のプログラムが書かれているのにすぎないことが分かると思います。
LabVIEW以外の言語で計測器を扱う場合には、通信用のコマンドをテキストとして羅列し送信、あるいは計測器からの応答を受信していきます。これと全く同じことを、グラフィカルに、コマンドの送受信をしているとは感じさせない作りで、行うのがLabVIEWによる計測器制御になります。
例えば上の図の例の場合、Configure Multipoint.viという関数を実行することで「:TRIG:COUN 1;:SAMP:COUN 1;」という文字列がVISA書き込みの関数に渡されていますが、このコマンド自体はLabVIEWではない、テキスト言語で書く場合にも同じです。
各関数でどういったコマンドが計測器に渡されているかを調べるには、その関数単体でフロントパネル上のパラメタを適切に設定したうえで実行するだけです。その関数そのものはエラーを出しますが、VISA書き込みに渡す文字列(=コマンド)はとりあえず表示されるためです。
計測器ドライバがなくてもLabVIEWで計測器を動かせるのはこのためです。その計測器のコマンドリファレンスを見て、その通りにコマンドが送られるようにプログラムを構築できればいいのですが、ただまぁこのやり方だとLabVIEWを使っているメリットもあまり感じられないかもしれません。
各関数の役割を把握できれば、意図したとおりに計測器を動かすように組みやすくなるため、各関数の中でどういったコマンドが送られているかを「読み取く」のは大切です。例えば以下はサンプルであるAgilent 34401 Read Single Measurement.viの各関数がどういう役割を持っているか調べるため使用されているコマンドを見た場合です。
もちろん、Ctrl + Hの詳細ヘルプで各関数を見ても関数の説明があると思うので、これも手掛かりになります。
ある程度計測器ドライバAPIの関数を読み解くのに慣れると、実際にその計測器でやりたいことがサンプルプログラムで揃っていない場合にメーカーに問い合わせるときにも役立ちます。
計測器メーカーに、例えば「電圧を測りたいんだけれどどのviを使えばいいの?」とか「○○.viの後にどの関数を並べればいいの?」と聞いても、viという表現をして(LabVIEWとしての話をして)欲しい答えが返ってくることは経験上ほとんどありません。
かといって、LabVIEWを提供しているNational Instruments社に問い合わせても、その計測器を直接扱っているわけではないため、基本的には適切な情報は持っていない場合がほとんどです。
そこで、計測器メーカーに問い合わせする際にviという表現で話すのではなく、例えば「:VOLT:MEASコマンドの後にどういうコマンドを送ればいいですか?」とか「データを取得するにはどういったコマンドを送るべきですか?」と聞けば大抵何かしらの返答がもらえるので、あとはそのコマンドが使用されているLabVIEWの関数を見つければいいことになります。
個々の関数の仕組みや使い方がわかったら、あとはそれらをLabVIEWらしく数珠繋ぎにして、繰り返しが必要なところはループに入れて、条件分岐させる必要があるときにはケースストラクチャを使用して、という具合に使い分ければプログラム完成まで近づけます。
サードパーティの計測器を扱いたい、でも一からコマンドをテキスト形式で書き書きするのは苦手という方にこの記事が参考になるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント