この記事では、LabVIEWでサードパーティ(National Instruments社以外)製のハードウェア、計測器を制御する際に使用する計測器ドライバの扱いと仕組みを解説しています。
対象とする計測器は関数発生器です。
PCへの接続から計測器ドライバのインストールの具体的な方法、LabVIEWでのプログラムの見方と修正についてまで紹介しています。
計測器制御はLabVIEWが強みとしている部分でこれ目当てにLabVIEWを使おうかと考えているけれど具体的な手順のイメージがわかない、という方に参考にしてもらえるかなと思います。
サードパーティの関数発生器をLabVIEWで操作する
今回制御対象としているのは、Agilent社の関数発生器、Agilent 33210Aです。
現在はもう販売終了になっているものですが、たまたま触れたのがこれなので、この関数発生器を例にPCへの接続からLabVIEWで計測器制御を行うまでの具体例を紹介していきます。
なお、関数発生器は信号を出力する装置であり何かを計測するわけではないですが、以降では「計測器」という表現もしていきます。
他の計測器についても多かれ少なかれ似たような手順を踏むことになるので、全く同じことをできるわけではないにしても、イメージとしては参考にしてもらえる部分はあるかなと思います。
なお、PCと計測器との接続についてはGPIBを例にとっています。(記事最後にこれ以外の例としてUSBやLANで接続した場合の話もしますが)
接続の際に使用したケーブルは、NI社製のGPIB USB HS+というケーブルです。
(これでなくても接続させることができるかもしれませんが、少なくともNI MAXで認識させられるかどうかに苦労する位ならGPIB USB HS+のようなNI MAXと親和性の高いケーブルを使った方が時間の節約にはなるかなと思います)
具体的な手順
それでは、具体的な流れを順に紹介していきます。
必要なソフトウェアをダウンロード、インストールする
まず、ハードウェアの接続を行う前に、必要なソフトウェアをPCに揃えるため、インストーラをダウンロードし、インストールしていきます。
今回LabVIEWを使用するということでLabVIEWを入手するのは当然として、他には計測器との通信の方式によっていわゆるドライバソフトウェアが必要になります。
後で計測器ドライバというものが出てきますが、ここでいうドライバソフトウェアとは別のものなので注意してください。
本記事ではGPIB通信の例を挙げますが、GPIBに対してはNI 488.2というドライバが対象になります。
(GPIBケーブルについては、NI社製のGPIBケーブルであるGPIB USB HS+を使用しています。)
もしシリアル通信ならNI Serialといった別のドライバソフトウェアがあります。
ただ、この辺りひっくるめて、NI VISAというドライバソフトウェアをインストールしておけば大抵事足ります。
PCに接続して認識させる
ソフトウェアを揃え終わったら、PCと(GPIB USB HS+を介して)計測器をつなぎ、PC側で「認識」させます。
この作業は、後でLabVIEWを使用する際に「この計測器を使います」という指定を行う際の計測器の「名前」を決めたりするのにも必要な作業となってきます。
まず、PCに何も(GPIB USB HS+ケーブルも)接続していない状態から始め、NI MAX(NI Measurement & Automation Explorer)を開きます。
そしてケーブルをつなぐとそのケーブルが表示されます。

次に、このケーブルと計測器をつなぎ、計測器の電源を入れた状態として、NI MAX上で計測器をスキャンしました。
計測器のスキャンに成功すると、GPIB USB HS+の下に計測器が表示されます。
今回は33210Aという型の計測器を使用しており、確かにそのように表示されています。

なお、33210A側の表示を見ると、GPIBアドレスは10となっており、これもNI MAX上の表示と一致しています。
計測器の項目を選択し、「名前」をつけていきます。
この名前が、LabVIEWで計測器を指定する際の名前になります。
今回はMyFuncGenとしました。(名前を変更したら上の方にある「保存」ボタンを忘れずに押しておきます)

次に、計測器と通信してみます。
DAQデバイスを使用した経験がある方には「テストパネルを使う」と言うとイメージがつきやすいかもしれません。
要は、接続した計測器と正しく通信できるかな?を確認する作業です。

ここで注意するのは、計測器との通信確認に(デフォルトでは)「*IDN?」というコマンドを送って期待した結果が返ってくるかを見る、という点です。
このIDNコマンド、「あなたは誰か教えて」というコマンドで、期待する結果は「私は~~です」といったものになるのですが、そもそもIDNコマンドを全ての計測器が受け付けるかというとそうではないと思います。
IDNコマンドは、SCPI(Standard Commands for Programmable Instruments)コマンドであり、このSCPIに対応した計測器でないと正しい通信テストができません。
もしSCPIコマンドに対応していない計測器の場合には、通信テストで送るコマンド(送信文字列)をIDNから書き換えてみてください。
なお、通信テストの画面にあるボタンのうち、「書き込み」はコマンド送信、「読み取り」はコマンド受信を表し、「クエリ」は送信してから受信するという操作になっています。
IDNコマンドに対してはこれを送信してから応答を受信するはずなので、クエリが楽です。
以下の図は実際にクエリを行った後の結果ですが、今回の対象計測器の名前が表示されているので通信は問題なさそうです。

ここまでできたらNI MAXでの操作はひとまず終わりです(NI MAXでは他のこともできますが、最低限やった方がいいこととしては以上です)。
計測器ドライバを入手する
次に、LabVIEWを触っていきます。
ここで大きく二つのパターンがあり、それは使用する計測器に対して
- (1)計測器ドライバが存在しこれを使用する
- (2)計測器ドライバが存在しないもしくは存在するが使用しない
のいずれかによってここから先やることが変わります。
ここでいう計測器ドライバとは、いわゆるハードウェアに対するドライバソフトウェアではなく、「計測器をLabVIEWから簡単に制御できるようにあらかじめ様々なコマンドがまとまったVIのライブラリ」といったイメージのものです。
入手方法は、LabVIEWの機能を使うかあるいは「計測器ドライバネットワーク」で探すか、もしくはその計測器のメーカーにLabVIEW用の計測器ドライバがあるかを問い合わせる、といった選択肢が考えられますが、本記事ではLabVIEWの機能を使って入手します。
つまり、本記事で以降紹介するのは(1)の内容です。
(2)、つまり計測器ドライバが存在しないもしくは使用しない(これはごく少数派と思いますが)場合には、自力でやる必要があり、それには計測器のマニュアルやプログラミングリファレンスを見る必要があります。
なんとなくでも何をすればいいか、については以下の記事が参考になるかもしれません。
(1)の場合には、(究極的には)プログラミングリファレンスを見なくてもプログラムを書けます(現に今回の記事作成にあたって私はAgilent 33210Aの資料は一切見ていませんが関数発生器として動かせています)。
前置きはこれくらいにして、計測器ドライバをLabVIEWから入手するための手順を以下紹介していきます。
まずはLabVIEWで「計測器ドライバを検索」を選択します。
すると、NI計測器ドライバファインダなるものが開きます。

この機能を使用するにあたって、ni.comのマイアカウントへのログインが必要になります。
ログインができたら、左にあるツリーの一番上、「接続された計測器」を選択してみます。
今回は既にNI MAXで認識ができている状態であり計測器ドライバも存在しているので、以下の図のように表示されます。

ここでダブルクリックすると、検索結果としてこの計測器に対応したドライバが見つかるので、これをインストールしていきます。

もしこの方法で計測器が出なくてもあきらめず、「製造元」の部分から計測器のメーカーを選択してみます。
すると様々な計測器ドライバが出てくるので、使用する計測器に対応したものを探します。

この時点で見つからない場合には・・・計測器メーカーに問い合わせるか、あるいは自力でプログラミングリファレンスなど参考にしつつコマンドを送信、受信する機能をLabVIEW上で作っていくことになります。
なお、これらの作業自体は、計測器が実際にPCに接続されていなくても、計測器メーカーを選んで計測器ドライバの一覧を見ることができます。
なので考えようによっては、「計測器ドライバがあるのを確認したからこの計測器を使おう」ということもできるかと思います。
無事計測器ドライバが見つかったとして、これをインストールしていきます。
インストールが終わったら、以下のような使用を開始画面に移ります。

ここでは、プロジェクトを開く、を選択します。
これで、この計測器ドライバに対するプロジェクトエクスプローラを開くことができます。
たいていの場合、計測器ドライバのプロジェクトとしては、その計測器ドライバを使用したプログラムサンプルが入っています。
当然、計測器ドライバによってどのようなサンプルが入っているかは異なるのでこれはあくまでAgilent 33210Aの例ですが、標準的な波形出力や周波数スイープなどのプログラムが入っています。

プログラムを使ってみる
試しに、標準波形出力のプログラムを開いてみます。

フロントパネル上にある、VISA resource nameという部分が、「この装置を使用する」という名前を指定する部分です。
今回はNI MAX上でMyFuncGenという名前にしているので、この部分にMyFuncGenと直接入力するか、ドロップダウンメニューから選択します。

他に、このプログラムの場合にはSerial Configurationという項目があり、いくつかの設定が行える部分があります。
これを見ると「あれ、このプログラムってシリアル通信で計測器を制御するとき用なんじゃない?」と思うかもしれませんが、実際はGPIB通信でも使えます。
理由は後で説明します。
他の項目としては、出力波形の種類を選ぶ項目、出力の周波数や振幅、オフセットを選べます。
ブロックダイアグラムもみてみます。
このサンプルは最も基本的な制御用のプログラムで、使われている関数も4つしかなく、そのうち最初と最後(シンプルエラー処理は除いて)は計測器との通信を確立するおよび通信を切るような操作のために使用しているもので、この計測器を使うどんなプログラムでも使用する必要があるものです。
他に使用しているのは、波形の種類を構成するための関数、および波形の出力状態を決めるための関数です。
全体の流れを見ると、「計測器との通信を確立する」、「出力波形の構成を行う」、「出力の指示を出す」、そして「計測器との通信を切る」という順になっていて、比較的わかりやすいかなと思います。

計測器ドライバは、これらの操作を行うための関数が抽象化されたサブVIとなっており、中身の詳しい構造を知らなくても、関数としてこれらサブVIを並べれば計測器が扱えます。
もちろん、関数を並べる順番が間違っていると正しく動かない、という場合もありますが、計測器の多くは、「通信を確立する」「構成する」「出力(あるいは測定)する」「通信を切る」という流れさえ正しければ動きます。
ただそうはいっても初めて使用する計測器についてはやり方がわからない、という場合には、今回のようにサンプルを見るか、あるいはVI Treeを見るのがヒントになります。
VI Treeとは、計測器ドライバに入っている、「計測器ドライバの各関数がどのような役割化を示したVI」です。
そもそも計測器ドライバには一定のフォーマットがあり、VI Treeを計測器ドライバに含めるのもフォーマットの一部なので、ほとんどの計測器ドライバにこれが存在します(まれにない場合もあるのですが・・・)。

関数パレットで計測器ドライバを見てVI Treeを選択し、ブロックダイアグラムに配置して開いてみます。
ブロックダイアグラムを見ると以下のようになっていて、左からInitialize、Configurationなどといったラベルがついていますが、基本的にはこれらを左から順に並べていけばプログラムが書けるようになっています(下の方にあるLow Levelなど必ずしも使わなくてはいけない関数ばかりではないので、ここは慣れが必要ですが)。

ところで、先ほど見たサンプル(そしてこれ以外にもAgilent 33210Aのサンプル全て)でシリアル通信用の設定項目があったのにGPIBで通信ができていた件について、その種明かしをするためにInitialize.viを開いてみます。
ブロックダイアグラムを見ると、最初の方で、インターフェースのタイプを読み取っている部分があり、ここがSerial、つまりシリアル通信の場合にはフロントパネルにあるシリアル通信用のパラメータを読み取りますが、ここがSerialではない場合のプログラムも用意されていることがわかります。
これにより、GPIBで接続している場合にはシリアル通信用のパラメータを無視してプログラムを実行、計測器を制御できていたということになります。

サンプルをベースに改造する
もう一つ、別のサンプルを見てみます。
それは、ソフトウェアトリガによって周波数スイープを行うためのサンプルです。
周波数スイープのプログラムとしては、開始周波数と終了周波数、スイープにかける時間を指定することで、滑らかに周波数の変わる波形を出力してくれます。

ただ、このサンプルはイマイチな点があり、それはプログラム終了後にも波形が出力され続けている点です。
つまり、プログラムの中で波形を出力する指令を送った後に最終的に出力を停止する命令は送っていないため(プログラムの停止と計測器の停止は直接関係ないため)、計測器側としてはいつ出力を停止していいかわからないことで、出力がされ続けてしまうことになります。
(この辺りは計測器によって仕様が違うかもしれません。出力を繰り返すという命令が明示的になされていなければ出力は一回だけ、という仕様の機器の場合には停止命令を出す必要はないわけですし)

そのためこのサンプルを少し修正して、ある程度出力をしたら波形を停止するようにしてみます。
修正する際の例は以下のようです。
この場合、出力して5000ミリ秒後に出力停止の命令を出して信号出力を止めてプログラムも終了します。

もう少し多く修正をほどこす例もみてみます。
サンプルの中に、ソフトウェアトリガのサンプルがあるのでこれを開いてみました。
このサンプルは、各周波数スイープの開始タイミングをソフトウェアトリガで指定しています。
ソフトウェアトリガ、というのは、トリガ用の関数が用意されていて、この関数がLabVIEW上で実行されたら出力する、という仕組みにする場合に選ぶトリガの一種です。
サンプルでは、Forループが5、ループの周期が1000となっているので、1秒に一回周波数スイープが行われ、これが5回実行されたら終わります。

このプログラムを修正し、ユーザーがボタンを押せばプログラムを終了するまで何回でも周波数スイープができ、なおかつ途中で開始周波数や終了周波数も変更できるようにします。
機能を追加するので当然ユーザーインタフェースであるフロントパネルも編集しますが、今回は出力用のボタンとプログラムを止めるためのボタンを追加しました。

ブロックダイアグラムは以下のように修正すればやりたいことができました。

次回以降でのサンプルの見方
計測器ドライバをインストールした直後の状態でのサンプルの見方は書きましたが、LabVIEWを終了してから次回以降サンプルをどう見るかについて最後に簡単に紹介します。
方法は大きく分けて二つ、一つは計測器ドライバがインストールされているパスに直接アクセスする方法です。
計測器ドライバ、というかこれに含まれる各種関数としてのサブVIは、ある決まったパスにないと関数パレットにうまく表示されません。
逆に言えば、そのパスを見れば関数なりサンプルもわかります。
そのパスとは、計測器ドライバをインストールしていた時に見えていたC:\Program Files (x86)\National Instruments\<LabVIEW version>\instr.libです(32ビット版LabVIEWの場合。64ビット版LabVIEWでは、(x86)のないProgram Filesの中身を探してください)。

もう一つの方法は、サンプルファインダから探す方法です。
サンプルファインダはLabVIEWのツールバーのヘルプから開くことができ、この中の特定のフォルダに計測器ドライバのサンプルがまとまっています。

GPIBではない接続の場合
上記の話はGPIB接続時の様子を例に紹介しました。
しかし、PCと計測器を繋ぐのは何もGPIBだけではなく、他のつなぎ方、例えばUSBなどもありえるわけです。
USBの場合、関数発生器の電源を付けた状態でPCに接続するとNI MAX上でこのように表示されました。
名前をわかりやすいようにして、これをLabVIEWで指定するところなどはGPIBと同じです。

また、他の接続方法としてはLANでも接続できました。
計測器とLANで接続する場合、USBやGPIBでの接続とは少し異なるステップを踏みます。
まずはIPアドレスを確認する必要があります。
計測器によってIPアドレスの確認方法は異なりこれはマニュアルを見ればわかると思いますが、IPアドレスがわかったら接続しているPCのコマンドプロンプトからpingを送って応答が返ってくるかを確認します。

次にNI MAXを開きますが、このままではLAN接続した計測器はNI MAX上に自動では表示されないため、TCP/IPリソースとしての設定を行います。
マイシステムのデバイスとインタフェースの項目を右クリックして新規作成を選び、VISA TCP/IPリソースを選択します。

新規のリソース作成画面が出たら、今回はpingの応答が返ってきているので自動検出を選び次へ進みます。
すると、対象の計測器がローカルサブネット上で検出されました。

あとはエイリアスを決めていきます。
GPIB接続の時に決めた「名前」(あとでLabVIEWプログラム上のVISAリソース名入力で指定するもの)と同じ扱いなので、わかりやすい名前をつけておき、終了します。

設定が終わると、ネットワークデバイスとして計測器が表示されるようになるので、あとは他の通信方法と同様、LabVIEWプログラム上ではエイリアス名で機器を指定してプログラムを実行するだけです。

本記事では、実際の関数発生器を例に、PCに接続して計測器ドライバを入手しサンプルを確認して修正するまでの流れを紹介しました。
強みであるハードウェア制御を行うためにLabVIEWを使用しているという方も多いかと思いますが、実際の流れを紹介した資料というのはあまり見かけない気もするので、全く同じハードウェア、計測器でなくても参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント