Visual StudioのC#でGPIB計測器と通信するためにどのコマンドを使用しますか?機器にコマンドを書き込んで出力を読み取ることができる必要があります。
5 に答える
Agilent IOLibrarySuiteを使用しています。
これは、C#で使用するためのチュートリアルです。C#でのI/Oプログラミングの例
それでも、私の会社ではVISA-COMの実装に安定性の問題があったため、P / Invokeを使用してvisa32.dll(これもIOライブラリスイートの一部)の周りに独自のラッパーを作成しました。
(開示:私はGPIB機器を多用する会社で働いています)
NationalInstrumentsVISAとNI488.2を使用しています。
まず、NI-VISAセットアップでをチェックしたことを確認してVisaNS.NET API
ください。次の図を参照してください。
NationalInstruments.VisaNS
プロジェクトへの参照を追加NationalInstruments.Common
します。
を作成しますMessageBasedSession
。次のコードを参照してください。
string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
visa.Write("*IDN?"); // write to instrument
string res = visa.ReadString(); // read from instrument
AMessageBasedSession
は、GPIB、イーサネット、またはUSBを介して計測器と通信するために使用できます。
アップデート
Ivi.Visa
置き換えられNationalInstruments.VisaNS
ました。したがってIvi.Visa
、プロジェクトにのみ参照を追加する必要があります。
例は次のようになります。
string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
var visa = GlobalResourceManager.Open(resourceName) as IMessageBasedSession;
visa.RawIO.Write("*IDN?\n"); // write to instrument
string res = visa.RawIO.ReadString(); // read from instrument
使用する利点はIvi.Visa
、次のいずれかのライブラリで機能することです。
シリアルポートからコマンドを送信します。
MicrosoftのCOMポートの例を参照してください。
最初にLangIntクラスでオブジェクトを作成する必要があります。次に、そのオブジェクトをGPIBメソッドで使用します。最も一般的で使用されるものは次のとおりです(「dev」という名前のオブジェクトを作成したと仮定します)。
dev.ibwrt(deviceHandle, "*IDN?", "*IDN?".Length);
dev.ibrd(deviceHandle, out Value, Arraysize);
これら2つは、デバイスにクエリを実行できます。または、それらを連続して使用することもできます。たとえば、ジェネレータの周波数を設定してから、振幅を設定します。
重要な部分は、SCPIコマンドを送信する前です。最初にデバイスを初期化する必要があります。これを行うには;
deviceHandle = ibdev(GPIBINDEX, GPIBADDRESS, SECONDARYADDRESS, TIMEOUT, EOTMODE, EOSMODE);
これらのパラメーターは、コード内で最初に宣言する必要があります。初期化後、そのデバイスハンドルですべてのGPIBコマンドを使用できます。
そしてもちろん、NationalInstruments.NI4882とLangInt.dllをプロジェクトに追加する必要があります。
NIVisaを使用できます。VbまたはC#を使用している場合は、サンプルプログラムディスクのVisa32.basまたはVisa32.csを使用してください
int DefaultSessionId= 0;
int SessionId= 0;
int LastStatus = 0;
string Address = "GPIB0::6" ; //any address
//Session Open
LastStatus = visa32.viOpenDefaultRM(out DefaultSessionId);
//Connection Open
LastStatus = visa32.viOpen(DefaultSessionId, Address + "::INSTR", 0, 0, out sessionId);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR, 13);// Set the termination character to carriage return (i.e., 13);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR_EN, 1);// Set the flag to terminate when receiving a termination character
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TMO_VALUE, 2000);// Set timeout in milliseconds; set the timeout for your requirements
//Communication
LastStatus = visa32.viPrintf(SessionId, command + "\n");//device specific commands to write
StringBuilder message = new StringBuilder(2048);
LastStatus = visa32.viScanf(SessionId, "%2048t", message);//Readback
//Session and Connection Close
visa32.viClose(SessionId);
visa32.viClose(DefaultSessionId);