この記事では、LabVIEWでサードパーティ(National Instruments社以外)製のハードウェア、計測器を制御する際に使用する計測器ドライバの扱いと仕組みを解説しています。
対象とする計測器はオシロスコープです。
PCへの接続から計測器ドライバのインストールの具体的な方法、LabVIEWでのプログラムの見方と修正についてまで紹介しています。
計測器制御はLabVIEWが強みとしている部分でこれ目当てにLabVIEWを使おうかと考えているけれど具体的な手順のイメージがわかない、という方に参考にしてもらえるかなと思います。
サードパーティの関数発生器をLabVIEWで操作する
今回制御対象としているのは、Tektronix社のオシロスコープ、TBS 2000シリーズです。
後継機種もあるようなデバイスですが、たまたま触れたのがこれなので、このオシロスコープを例にPCへの接続からLabVIEWで計測器制御を行うまでの具体例を紹介していきます。
なお、オシロスコープのような、信号を計測する機器は計測器と呼んでも違和感はないと思いますが、実際にはLabVIEWで例えば関数発生器のような信号を出力する機器も「計測器制御」として扱うことができます。
計測を行うあるいは信号を出力する、様々な種類の計測器について多かれ少なかれ似たような手順を踏むことになるので、今回の記事で紹介する機器と全く同じ機器を扱うわけではなかったとしてもやることは大まかには共通しており、イメージとしては参考にしてもらえる部分はあるかなと思います。
なお、PCと計測器との接続についてはUSBを例にとっています。(記事最後にこれ以外の例としてLANで接続した場合の話もします)
接続の際に使用したケーブルは、一般的な片端がUSB TypeA、もう片端がTypeBのケーブル(以下USBケーブル)です。
具体的な手順
それでは、具体的な流れを順に紹介していきます。
必要なソフトウェアをダウンロード、インストールする
まず、ハードウェアの接続を行う前に、必要なソフトウェアをPCに揃えるため、インストーラをダウンロードし、インストールしていきます。
今回LabVIEWを使用するということでLabVIEWを入手するのは当然として、他には計測器との通信の方式によっていわゆるドライバソフトウェアが必要になります。
後で計測器ドライバというものが出てきますが、ここでいうドライバソフトウェアとは別のものなので注意してください。
本記事ではUSB接続の例を挙げますが、基本的にNI VISAというドライバソフトウェアをインストールしておけば大丈夫なことが多いです。
本記事で扱っている計測器はPC(およびNI MAX)での認識に特に苦労もしなかったですが、もしUSB接続機器で本記事に書いてあるような画面にならない、うまく進めない場合には、USB接続以外の方法を試すかあるいはNI社のドキュメントを参考にトラブルシュートを進めていくことになるかと思います。
PCに接続して認識させる
ソフトウェアを揃え終わったらPCと(USBケーブルを介して)計測器をつなぎ、PC側で「認識」させます。
この作業は、後でLabVIEWを使用する際に「この計測器を使います」という指定を行う際の計測器の「名前」を決めたりするのにも必要な作業となってきます。
まず、PCに何も(USBケーブルも)接続していない状態から始め、NI MAXを開きます。
次に、USBケーブルと計測器をつなぎ、計測器の電源を入れた状態としました。
しばらくすると、NI MAX上でUSB接続機器として認識されるようになりました。
今回はTBS2072という型の計測器として認識されています。
認識された項目を選択して、「名前」をつけていきます。
この名前が、LabVIEWで計測器を指定する際の名前になります。
今回はMyUSBOscilloscopeとしました。(名前を変更したら上の方にある「保存」ボタンを忘れずに押しておきます)

次に、計測器と通信してみます。
通常、計測器との通信テストはNI MAX上で行うことができます。
ですが、同じ通信テストはLabVIEWからでも行えるので、今回はもうLabVIEWに進んでテストを行うプログラムを作ってみます。
計測器通信プログラムをLabVIEWで作るのに一番便利なのはVISA関数を使用することです。
この関数を使用することで、計測器との通信方法がGPIBであってもシリアル通信やLAN経由の通信であっても同じ(あるいは通信方式独自の一部のパラメータの設定を追加した)プログラムで計測器との通信が可能になります。

ここでいう「テスト」とは、接続した計測器と正しく通信できるかな?を確認する作業です。
通信できていることが確認できさえすればいいので、PCから計測器に対して送るコマンドは何でもいいのですが、ここでは計測器との通信確認に「*IDN?」というコマンドを送って期待した結果が返ってくるかを見ていきます。
このIDNコマンド、「あなたは誰か教えて」というコマンドで、期待する結果は「私は~~です」といったものになるのですが、そもそもIDNコマンドを全ての計測器が受け付けるかというとそうではないと思います。
IDNコマンドは、SCPI(Standard Commands for Programmable Instruments)コマンドであり、このSCPIに対応した計測器でないと正しい通信テストができません。
もしSCPIコマンドに対応していない計測器の場合には、通信テストで送るコマンド(送信文字列)をIDNから書き換えてみてください。
テスト用のプログラムは以下の図に示したようなものとなります。
VISAリソース名には先ほどNI MAXで指定した名前を選択しておきます。

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

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

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

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

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

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

プログラムを使ってみる
試しに、自動設定機能のついた標準波形測定のプログラムを開いてみます。

フロントパネル上にある、VISA resource nameという部分が、「この装置を使用する」という名前を指定する部分であることは上で説明した通りです。
今回はNI MAX上でMyUSBOscilloscopeという名前にしているので、この部分にMyUSBOscilloscopeと直接入力するか、ドロップダウンメニューから選択します。
他の項目としては、どのチャンネルを使用するかの列挙体があります。
ブロックダイアグラムもみてみます。
このサンプルは最も基本的な制御用のプログラムで、使われている関数も4つしかなく、そのうち最初と最後(シンプルエラー処理は除いて)は計測器との通信を確立するおよび通信を切るような操作のために使用しているもので、この計測器を使うどんなプログラムでも使用する必要があるものです。
他に使用しているのは、自動設定を行うための関数、および波形の測定結果を読み取るための関数です。
全体の流れを見ると、「計測器との通信を確立する」、「測定の設定を行う」、「測定結果を読み取り表示する」、そして「計測器との通信を切る」という順になっていて、比較的わかりやすいかなと思います。

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

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

サンプルをベースに改造する
もう一つ、別のサンプルを見てみます。
それは、連続的に測定を行うためのサンプルです。
連続で測定を行う場合には、波形読み取りの関数をWhileループの中に入れて繰り返し実行します。

ただこれだけだと面白くないので、LabVIEW上で解析処理を行いその結果も一緒に表示させるようにします。
今回は解析処理として代表的なFFTをかけてやります。

修正する際の例は以下のようです。
LabVIEWのFFTの関数に渡す波形データはLabVIEWの波形データタイプである必要があるので、波形作成関数にdtとYの値を配線し波形データタイプを作っています。

もう一つ、プログラムの改造例として、測定したデータを保存する場合のプログラムを考えます。
連続的に測定を行うことを想定し、波形データタイプをそのまま扱えるtdmsファイル形式に保存します。
tdmsとは何ぞや?という方には以下の記事が参考になるかもしれません。
フロントパネルには、どこにファイルを保存するかのパス制御器を追加しており、パスの最後は拡張子を含めたファイル名(以下の図の場合mydata.tdms)とします。

プログラム例として以下のような形が考えられます。
ループの中でひたすら波形データをtdmsに書き込んでいますが、それ以外のファイル操作である開く、閉じるは一度だけ実行すればいいのでWhileループの外に配置しています。

なお、tdmsファイルは高速でデータを保存するのに便利ですが、サンプリングレートによってはデータ保存とデータ取得の速度のバランスをとるために、例えばキューを使用してループを分ける等の工夫が必要になります。
また、tdmsファイル形式はデータを確認する手段が限られる点も注意します。
LabVIEWであれば、tdmsファイルビューアという関数があるのでこれをそのまま利用できますし、Excelであればtdms用のアドオンを使用して中身を確認することができます。

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

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

GPIBではない接続の場合
上記の話はUSB接続時の様子を例に紹介しました。
しかし、PCと計測器を繋ぐのは何も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を使用しているという方も多いかと思いますが、実際の流れを紹介した資料というのはあまり見かけない気もするので、全く同じハードウェア、計測器でなくても参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント