Microsoft .NETを使用して計測器を制御するには、計測器によってPCに接続するバスが異なるため、開発者がアプリケーションを書くために各バスのプロトコルとアプリケーションプログラミングインタフェース(API)を学ぶ必要性が出てきます。VISA (Virtual Instrument Software Architecture) は、各計測器ハードウェアバスにおける低レベルドライバを1つのAPIにまとめる高レベルのドライバで、バスインタフェースに関係なく計測器との通信を可能にします。このアプリケーションノートでは、C#やVisual Basic .NETにあるVISA .Netライブラリを使用して、GPIB、シリアル、イーサネット/LAN、IEEE 1394、USB計測器と通信するための .NETアプリケーション用VISAの活用方法について説明しています。
VISAは、GPIB、シリアル、イーサネット/LAN、IEEE 1394、USB計測器との通信を統合して計測器制御アプリケーションをシンプルにするために開発されたドライバソフトウェアアーキテクチャです。VISAには次の利点があります。
VISA .NET APIは、VISAを用いた計測器との通信に使用する .NETクラスで構成されたオブジェクト指向のインタフェースです。C#やVisual Basic .NETのような.NET準拠の言語を使用できます。
VISA .NET APIは、フリーで提供されているNI-VISAドライバソフトウェアに含まれています。NI製品を使用の場合、NI VISAは、NI VISAから無償でダウンロードできます。NI VISAの .NETサポートをインストールするには、図1に示すように開発サポートカテゴリの下にある .NET Framework 1.1言語サポートを選択します。
VisaNSクラスライブラリのリファレンスを追加する
C#またはVisual Basic .NET計測器制御アプリケーションを作成するには、まずVisual Studioのソリューションを構成します。ソリューション エクスプローラーを見ると、各プロジェクトにリファレンスが整理されている参照設定と呼ばれるカテゴリがあります。VISA .NET APIクラスライブラリを使用するには、NationalInstruments.CommonとNationalInstruments.VisaNSリファレンスをプロジェクトに追加する必要があります。NationalInstruments.Commonネームスペースには、NI製の多くのドライバで使用されているコモンメソッドやプロパティが含まれています。NationalInstruments.VisaNSネームスペースには、VISA .NET API用のメソッドとプロパティが含まれています。新規のリファレンスを追加するには、参照設定カテゴリを右クリックして参照の追加を選択します。
VisaNSネームスペースをアプリケーションにインポートする
VisaNSクラスのリファレンスを追加すると、 それをプロジェクトで使用できるようになります。VisaNSネームスペースをインポートすることで、タイプ入力の頻度を削減してより効率よくオブジェクトにアクセスすることができます。アプリケーションの最初に次のコードを追加することで、VisaNSネームスペースをインポートできます。
[C#]
using NationalInstruments.VisaNS;
[VB .NET]
Imports NationalInstruments.VisaNS
計測器のリソース名を特定する
リソースとは、GPIB、シリアル、イーサネット/LAN、IEEE 1394、USB計測器またはコントローラです。計測器デスクリプタとしても知られるリソース名は、VISAリソースの正確な名前と場所を指定します。たとえば、リソース名のASRL1::INSTRはコンピュータのCOMポート1を示し、GPIB0::13::INSTRはアドレス13のGPIB計測器を示しています。VISAを使用して計測器と通信するには、計測器のアドレスと計測器デスクリプタを特定する必要があります。次のリンクをクリックすると、「計測器制御の基本」のハードウェアページが開き、任意のハードウェアバスでのVISAリソースの特定方法が記載された記事にアクセスすることができます。
このリソース名は、本チュートリアルで後ほど通信する計測器を指定する際に使用します。
VISAセッションを開く
セッションとはVISA .NET APIとリソースとの接続またはリンクのことです。VISA .NET APIには、特定のアプリケーション用に設計されたさまざまなセッションクラスが含まれています。たとえば、MessageBasedSessionクラスは、テキスト文字列形式でメッセージを送受信する計測器に使用されます。それに対してRegisterBasedSessionクラスは、レジスタから書き込み読み取りを行うことで通信する計測器に使用します。本チュートリアルでは、MessageBasedSessionクラスについて説明します。その他のセッションタイプについては、NI VISAと一緒にインストールされるNI-VISA .NET Frameworkヘルプを参照してください。
新規のMessageBasedSessionを作成するには、まず最初にアプリケーションでそれを変数として宣言することです。次のコードは、新規MessageBasedSessionを宣言する方法を示したものです。
[C#]
private MessageBasedSession mbSession;
[VB .NET]
Private mbSession As MessageBasedSession
このMessageBasedSession変数をフォームまたはクラスのグローバル変数として宣言することが重要です。計測器と通信するすべての関数がこのオブジェクトにアクセスする必要があります。
MessageBasedSession変数を宣言した後で、MessageBasedSessionオブジェクトのインスタンスを作成する必要があります。インスタンスの作成には、ResourceManagerクラスのスタティック(またはVisual Basicで「shared」と呼ばれる)メソッド、GetLocalManagerを使用します。このメソッドで新規のResourceManagerオブジェクトのインスタンスが作成されます。この新規ResourceManagerオブジェクトには、「Open」と呼ばれる関数が含まれており、これによってSession\オブジェクトのインスタンスが作成されます。最後に、新規作成されたSessionオブジェクトをMessageBasedSessionにキャストします。ResourceManagerとSessionクラスには、このチュートリアルで説明する以上の多くの機能が含まれます。クラスについての詳細は、NI VISAと一緒にインストールされるNI-VISA .NET Frameworkヘルプを参照してください。次のコードは、1ラインのコードで3つの操作を実行する方法を示しています。
[C#]
mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().
Open(resourceString.Text);
[VB .NET]
mbSession = CType(ResourceManager.GetLocalManager().
Open(resourceString.Text), MessageBasedSession)
ResourceManagerオブジェクトのOpenメソッドは、パラメータとして文字列の計測器リソース名を受け取ることができます。計測器のリソース名の探し方は本チュートリアルのはじめに説明した通りです。
アプリケーションをさらに強固にするために、tryおよびcatchステートメントを追加します。tryおよびcatchステートメントは、処理を実行中に発生するあらゆるエラーに対して応答することを可能にします。特に、InvalidCastExceptionタイプの例外とその他すべての例外をExceptionタイプを使用して補足ます。次のコードは、tryおよびcatchステートメントの使用方法を示しています。
[C#]
try
{
mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().
Open(resourceString.Text);
}
catch(InvalidCastException)
{
MessageBox.Show("Resource selected must be a message-based session");
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
[VB .Net]
Try
mbSession = CType(ResourceManager.GetLocalManager().
+Open(resourceString.Text), MessageBasedSession)
Catch exp As InvalidCastException
MessageBox.Show("Resource selected must be a message-based session")
Catch exp As Exception
MessageBox.Show(exp.Message)
End Try
データを転送する
計測器と通信するセッションを作成した後、計測器へのデータ送信を開始し、その応答を読み取ることができます。メッセージベース計測器と通信する最も一般的な3つの操作は、クエリ、書き込み、読み込みです。クエリ操作は、計測器に対してコマンドを書き込み、その応答を読み取ります。それに対して書き込みコマンドは、計測器にコマンドを送信するのみで、読み取りコマンドを使用して計測器からの情報を読み取ります。次のコードは、クエリ操作の使い方を示しています。
[C#]
try
{
string responseString = mbSession.Query(stringToWrite.Text);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
[VB .NET]
Try
Dim responseString As String = mbSession.Query(stringToWrite.Text)
Catch exp As Exception
MessageBox.Show(exp.Message
End Try
読み取り/書き込み操作は、MessageBasedSessionクラスのメソッドであるため、クエリ操作とほとんど同じように使用されます。これら操作の詳細については、NI VISAと一緒にインストールされるNI-VISA .NET Frameworkヘルプを参照してください。
VISAセッションを閉じる
VISAセッションを閉じるには、MessageBasedSessionクラスのDisposeを使用する必要があります。このメソッドによって、セッションに割り当てられたリソースが解放されます。次のコードは、セッションを破棄する方法を示しています。
[C#]
mbSession.Dispose();
[VB .NET]
mbSession.Dispose()
NI VISAは、多種多様にわたる計測器制御に最適のソリューションです。VISA .NET APIは、計測器との容易な通信を可能とするオブジェクト指向インタフェースを提供します。