この記事では、LabVIEWでGPIB接続した機器との通信を行う際の初歩的な流れを紹介しています。
対象としているのは、NI社が昔に販売していたInstrument Simulatorという計測器制御に慣れるためのシミュレータデバイスです。(そこらへんに転がっていたのがこれしかなかったのですが、ちゃんと通信ができました)
この機器にGPIBで接続して、PCからコマンドを送る際の具体的な流れを紹介しています。
計測器制御の大まかな流れ
LabVIEWでGPIBなどの接続バスを介して接続した機器を制御することを、大雑把に「計測器制御」と呼びます。
計測器、というとデータを取得する入力デバイスのイメージかもしれませんが、電圧や電流信号を出す、出力デバイスも含みます。
接続の方法については、本記事で紹介するGPIBでなくても、シリアル通信とかUSBとか他にも規格はありますが、どのような接続方法であっても大まかにはやることは共通しています。
- 必要なドライバソフトウェアをインストールする
- NI MAXで計測器との通信ができているかを確認する
- LabVIEWプログラムで計測器に対してコマンドを送る
これらについて次の項以降で簡単に紹介していきます。
なお、LabVIEWで制御できるのは何もNI社のハードウェアだけというわけでなく、いわゆるサードパーティ製のハードウェアの制御にも対応しています。
どのような機器が対象となっているかについて簡単に把握するためには、「計測器ドライバを検索」の機能で広く対象の計測器(やメーカー)を見てみるといいと思います。
計測器ドライバを検索の機能で検索する場合、ログインを求められるので、NI社のHPでアカウントがある必要があります(LabVIEWなどをインストールする際に作成済みかと思いますが)。
製造元としてYokogawaとかKeithley、Omron、Anritsuなど選び、検索ボタンを押すことで、登録された計測器ドライバの一覧が表示されるので、ここからインストールすることができます。
この計測器ドライバというのは、多くの場合、「なければLabVIEWから対象の機器を制御できない」、というものではありませんが、LabVIEWプログラムを作る難易度を下げてくれるもので、具体的にはその対象機器に対して送るコマンドが既に定義された関数群になっています。
使用する際のイメージについては以下の記事が参考になるかもしれません。
経験上、この「計測器ドライバを検索」で引っかからない計測器であってもその計測器のメーカー名とLabVIEWのキーワードで検索することで、計測器ドライバを見つけることができる場合があります。
また、「頑張れば」計測器ドライバが見つからない計測器に対してもLabVIEWで制御することができる場合があると思います(後述するように、GPIB用の関数やVISAという特定の関数群を用いて対象の機器にコマンドを送り通信ができるのであれば)。
必要なドライバソフトウェアをインストールする
まずは、必要なドライバソフトウェアをインストールすることから始めます。
すぐ上で説明した「計測器ドライバ」は、実体としてはLabVIEW用の関数群ですが、こちらの「ドライバソフトウェア」は、文字通りハードウェア(GPIBやシリアル通信のバス)用のドライバソフトウェアです。
LabVIEWの場合、GPIB通信であればNI 488.2、シリアル通信やUSB通信ではNI Serialというドライバソフトウェアがあるので、それぞれの用途に合わせてインストールすることになります。
NI パッケージマネージャというソフトからインストールするので、まずはNI パッケージマネージャをインストールするところから始めます(最近のLabVIEWはこのNI パッケージマネージャを経由してインストールするため、既にLabVIEWがインストールされているPCであれば既に入っているかと思います)。
ただ、LabVIEWで計測器制御を行う場合に多くはVISAという関数を使用することになるため、このためのNI VISAというソフトウェアもインストールします。
「NI 488.2とかNI Serialって、NIって名前がついているからNI製のGPIBケーブルとかシリアルケーブルじゃないとダメなの?」と思う方いるかなと思いますが、私が知る限りこの考えは正しく、NI 488.2やNI Serial等はあくまでNI製のGPIBケーブルやシリアルケーブルに対応したドライバソフトウェアです。
ただし、NI製のケーブルを使ってつないだ先の機器自体は、NI製だろうとサードパーティ製だろうとそれはどちらでも構いません。
要はコマンドをLabVIEWから送ってそれに応答すればいいだけなので、機器自体がGPIBに準拠していればいい、ということですね。
じゃあNI製以外のケーブルを使った場合では通信ができないのかというとそういうわけでもないようです。
次の項目で紹介するようにNI MAXで通信が確立しているかをテストする際に、「NI製以外のケーブル」を使ってつないだ場合にNI MAXで機器が見えるかどうかの絶対的な保証はされていないと思いますが、例えば「NI製以外のケーブル」のGPIB USB変換ケーブルを使用して期待通りにいかなかった場合についてはNI社の技術資料にて一応の説明があるのでまずはこちらの内容を参考にした方がいいようです。
また、特定のドライバソフトが既にインストールされている場合に特定の操作が必要な場合があるようです。
NI MAXで計測器との通信ができているかを確認する
次にやることとしては、NI MAXで計測器との通信ができているかを確認することです。
NI MAXは、とても簡単に説明すると、「LabVIEWでハードウェアを使用する準備としてテストしたり構成したりするためのソフトウェア」です。
LabVIEWをインストールしたら知らない間にインストールされているはずです。
今回はGPIB接続を行うものとして、NI製の「GPIB USB HS」というケーブルを使用します。(手元になかったので今回は使用していませんが本来はGPIB USB HS +という後継機があります)
GPIB USB HSは、PC側にUSBポートしかない場合に、このUSBとGPIBポートをつなぐことができるケーブルで、つまり状態としては以下の図のような感じです。
当然、通信バスの種類や使用するケーブルの種類等で様々なパターンが考えられます。
このケーブルをPCに挿した時点でNI MAX上ではこのケーブルの情報が表示されるはずで、もしこの項目が出てこない場合には抜き差しをしたりあるいはドライバソフトウェア(NI 488.2)が正しくインストールされているか確認する必要があります。
項目が表示されたら、「計測器をスキャン」します。
もしケーブルでPCと機器を接続している場合、この計測器のスキャンによって相手機器が検出できます。
検出できない場合にはNI MAXで指定したGPIBアドレスが機器の設定と一致しているかを確認します。
無事、検出できたら、この時点でLabVIEWプログラムに移ることもできます。
ただ、もしLabVIEWでうまく通信ができなかった時のために、最低限テストを行う機能として、NI MAX上で「VISAテストパネル」で通信のテストをします。
これにより、LabVIEWでプログラムを組む前に、最低限通信が確立できている(PCからコマンドを送ってその応答を受信できる)かどうかを確認できます。
VISAテストパネルの中のInput/Outputのタブを選択して、コマンド(デフォルトだと*IDN?)を送ったり(Write)その応答を受け取る(read)ことができます。
なお、Queryボタンは、「WriteしてからReadする」といったような送信と受信を順番に行う動作をします。そのため、応答が返ってくるのがわかっている操作にはQueryボタンが便利です。
このテストパネルで最初から用意されているIDNコマンドを送って結果が返ってくるのは、SCPIコマンドに対応している機器が該当します。
逆に言うと、SCPIコマンドに対応していない機器については、IDNコマンドを送っても正しく応答は返ってこないと思います。
だったらLabVIEWで使えない、ということではなく、あくまでその機器に適したコマンドを送る必要がある、というだけなので、その場合にはテストパネルでの確認はやめてLabVIEWで試すのがいいと思います。
LabVIEWプログラムで計測器に対してコマンドを送る
NI MAXでの確認が終わったら、プログラムの中でコマンドを送ったり応答を受け取る、といった操作をやっていきます。
今回対象としているNI Instrument Simulatorは、ユーザーマニュアルにコマンド一覧があります。
ユーザーマニュアルは、今ではどのような機器でも大体ネットからダウンロードできますね(昔は分厚いコマンドリファレンスを紙の冊子から参照して苦労しました)。
他の機器であっても似たようなコマンドリファレンスの資料があると思うのでその内容に沿って機器にコマンドを送ってやります。
最も簡単な例はVISAテストパネルでも送っていたIDNコマンドの送信とその応答を受け取るプログラムで、これについてはサンプルファインダのサンプルにあります。
GPIB通信の場合、「簡単なGPIB」というサンプルがそれにあたります。
GPIBアドレスを正しく選択してプログラムを実行、テストパネルと同じ結果が返ってきたら成功です。
なお、SCPIコマンドに対応しておらずIDNコマンドに対して応答しない機器については、このサンプルのブロックダイアグラムで定数になっている「*IDN?」の部分を別のコマンドにして動作を確認することができると思います。
ただし、サンプルを編集して保存してしまうと次回サンプルを開いた際にその編集後の状態として開いてしまうため、サンプルを編集する場合にはプログラムを新規のviにコピーするか、編集しても保存しないようにします。
LabVIEWで計測器制御を行う場合には、それぞれの通信バス専用の関数を使用するのではなく、VISAの関数を使用するのが便利な場合があります。
VISAとは何なのか、について詳しい説明はネットで検索してもらえればと思いますが、すごく簡単に言うと「通信バスが違っても似たノリでプログラムが書ける」ようになるための仕組みです(有識者の方、間違っていたらコメントください・・・)。
もちろん、それぞれの通信バスによって仕組みが違う部分はあるのでそれを無視して同じプログラムが動くわけではないですが、基本的な形を覚えておくと異なるバスの機器に対しても応用が効きやすいのはメリットになります。
ということで、これ以降で紹介するプログラムはVISAの関数を使用します。
VISAを使用したプログラムの例もまたサンプルファインダで見つけることができます。
GPIBの場合には「VISA関数を使用したGPIB」というサンプルが該当します。
VISAのプログラムでは、NI MAXで見えていた計測器の名前を「VISAリソース」の名前として指定しプログラムを実行することになります。
ブロックダイアグラムを見ると、VISAと左上に書かれた関数がいくつか使用されているのがわかると思います。
なお、このサンプルはあくまでこのサンプルで定義されたコマンド(SOUR:FUNCなど)を受け付ける機器にしか適用できないのでご注意ください(当然、全ての機器に対してこのサンプルを実行してエラーなく期待した結果を得られるわけではありません)。
サンプルはサンプルでいいのですが、もっとシンプルにVISAのプログラムを書くとすると以下の図のような感じになります。
基本的な構造として、リソースを開いて、コマンドを送信、必要に応じて応答を受信、プログラム終了時にはリソースを閉じる、という動作を行い、それぞれに対して関数が用意されています。
関数は、計測器I/Oのパレットの中のVISAパレットからとってきます。
開いて、何かをして、閉じる、といった一連の流れは、LabVIEWでファイルIOの関数を使用したプログラムを組んだことがある方はイメージが付きやすいのではないかなと思います。
上のプログラムを基本として、様々なコマンドを送って様々な応答を得た際の結果を以下でいくつか紹介します。
繰り返しになりますが、各コマンドは全ての機器に対して使用できるものではありません。もちろん、似た機能は似たコマンドで扱えることはあると思いますが。
本記事では対象機器としてInstrument Simulatorを使用しているので、そのマニュアルに記載されているコマンドをプログラム中で実行しています。
実際に使用する機器に対してもマニュアルを見てコマンドを送ることになると思うので、あくまで一例として参考にしてもらえればと思います。
まずはマルチメーターからの出力値を取得することを模擬した機能の例です。
次に波形データとして現在の波形データのフォーマットをクエリした場合の例です。
波形を出力する際の、出力波形の形として設定された内容を確認する場合の例です。
波形データを取得する場合の例です。
こちらについては、「VISA関数を使用したGPIB」のサンプルとほぼ同じですが、対象としている波形をノイズ付きの正弦波にしています。
このときに注意する必要があるのは、波形データとして得られている値(複数のデータ点)は、LabVIEWでいうところの「波形のY値」であり、時間情報(サンプリング間隔)を持っていないということです。
つまり、Y値の配列として得られている値の一点一点の間隔が1秒なのか0.1秒なのか、0.01秒なのかといった時間情報がないので、グラフに表示した場合の横軸はあくまで「配列の要素番号」となっています。
もし波形データとして得た値を解析するために例えばFFTをかける場合、時間の情報がないと正確な解析ができません。
機器によって違うと思いますが、時間情報をクエリして時間の情報を合わせた形の「波形データ」を作り、これをFFTの関数に渡すようにします。
上のような結果を得るためのプログラムのブロックダイアグラムの一例が以下の図です。
SENS:SWE:TIME?というコマンドで時間情報が得られるとマニュアルに書いてあるので、その応答を文字列としてまず受取り、これを数値データに変換して波形作成の関数に渡して波形データとしてからFFTの関数に渡しています。
さて、今回の例ではNI Instrument Simulatorを使用しこれには計測器ドライバは存在していないので直接VISAの関数を使用してコマンドを送っています。
一方でもし計測器ドライバを使用している場合には、既にその計測器ドライバにある関数群の中でVISAの関数が使われていてそれぞれの関数の目的にあったコマンドが定義されているため、プログラムを書く側としてみれば、コマンドを知らなくても関数の使い方さえ間違えなければプログラムが書けてしまいます。
計測器ドライバが便利だという理由はここにあります。
あるいは、仕組みさえわかってしまえば計測器ドライバのような一連の関数を自作して、グループや研究室の人と共有することもいいと思います。
いちいちコマンドを参照しなくてもよくなり、アイコンでその関数が何をする(どんなコマンドを送る)かを示せるようになれば、使いまわしすることができますしね。
本記事では、具体的な計測制御の例としてGPIBで接続した機器をLabVIEWで動かすまでの手順を紹介しました。
LabVIEWはハードウェアを操作するのに長けたプログラミング言語といえます。
とはいっても知らないことが多いと使うことはできないため、本記事の内容で最初何をすればいいかの大まかなイメージがつかめたと思ってもらえたらうれしいです。
ここまで読んでいただきありがとうございました。
コメント