C#およびVisual Basic .NET計測制御

概要

This document has been archived and is no longer updated by National Instruments.

VisaNS is the legacy .NET API for VISA created by National Instruments before the standard specification was available. National Instruments recommends that you use the standard NI-VISA .NET API instead of VisaNS for any new application that you develop.


Controlling instruments with Microsoft .Net applications is challenging because of the the variety of buses instruments provide to connect to PCs. For each bus type, developers must learn the bus protocols and application programming interfaces (APIs) to write an application. VISA (Virtual Instrument Software Architecture) is a high-level driver that abstracts the lower-level drivers for each instrument hardware bus type and provides a single API for communicating with instruments regardless of the bus interface. This application note discusses how you can take advantage of VISA for .NET applications using the VISA .Net libraries in C# and Visual Basic .Net to communicate with GPIB, serial, Ethernet / LAN, IEEE 1394, and USB instruments.

内容

概要

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概要

VISAは、GPIB、シリアル、イーサネット/LAN、IEEE 1394、USB計測器との通信を統合して計測器制御アプリケーションをシンプルにするために開発されたドライバソフトウェアアーキテクチャです。VISAには次の利点があります。

  • VISAは、非依存インタフェースであり、それぞれのインタフェースに関わらず、同様のメソッドで複数計測器との通信を可能にする1つのAPIを提供します。たとえばVISAがメッセージベース計測器にASCII文字列送信するコマンドは、GPIB、シリアル、イーサネット/LAN、IEEE 1394、USBにおいて同じものです。
  • オブジェクト志向のアーキテクチャで、将来開発される新しい計測器インタフェースにも容易に対応できます。
  • 全機能を備えた計測プログラミングでありながら、コマンドセットは非常にコンパクトです。

VISA .NET API概要

VISA .NET APIは、VISAを用いた計測器との通信に使用する .NETクラスで構成されたオブジェクト指向のインタフェースです。C#やVisual Basic .NETのような.NET準拠の言語を使用できます。

VISA .NET API使い方

VISA .NET APIは、フリーで提供されているNI-VISAドライバソフトウェアに含まれています。NI製品を使用の場合、NI VISAは、NI VISAから無償でダウンロードできます。NI VISAの .NETサポートをインストールするには、図1に示すように開発サポートカテゴリの下にある .NET Framework 1.1言語サポートを選択します。


図1: .NETサポートを示したNI-VISAのインストール



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は、計測器との容易な通信を可能とするオブジェクト指向インタフェースを提供します。

Was this information helpful?

Yes

No