C++で計測器(ネットワーク・アナライザ)を制御する方法

source_code
macOS Sierraで計測器を制御する環境構築
上の記事ではmacOS Sierraで計測器を制御する環境の構築を行いました。
環境の構築ができたので、具体的なコードについて紹介したいと思います。
今回はC++で制御するコードを書きましたので参考にしてみてください。

PCと計測器の接続

今回は計測器としてネットワーク・アナライザ(N9923A)を用いました。
ネットワーク・アナライザをPCで制御するためにネットワーク・アナライザとPCを接続する必要があります。
今回使用したネットワーク・アナライザにはEthernetケーブル使用できるためEthernetケーブルを用いてPCと接続します。
計測器とPCを接続しないと以下に示すコードが動かないので注意してください。
計測器によってPCとの接続方法が異なると思いますので、そちらに関しては計測器の販売元のホームページで確認お願いします。

C++のソースコード

では実際のソースコードについて紹介していきます。
どの計測器を制御する場合でもあまり違いはないと思います。
まず、全体のソースコードを以下に示します。

//C++で計測器を制御
#include <stdio.h>
#include "visa.h"

int main(int argc, char* argv[]) {
 ViSession rm, inst;
 ViStatus viError;

 //ネットワークアナライザとの接続確認
 viError = viOpenDefaultRM(&rm);
 viError = viOpen(rm, "TCPIP::192.168.0.2::inst0::INSTR", VI_NULL, VI_NULL, &inst);

 viError = viPrintf(inst, "*IDN?\n");

 char buf[256], data[30];
 viError = viScanf(inst, "%256t", buf);
 printf("*IDN?:%s", buf);

 //ネットワークアナライザの設定
 viError = viPrintf(inst, "FREQ:STAR 12E6\n");
 viError = viPrintf(inst, "FREQ:STOP 15E6\n");
 viError = viPrintf(inst, "CALC:MARK1 NORM\n");
 viError = viPrintf(inst, "CALC:MARK1:X 13.56E6\n");
 viError = viPrintf(inst, "CALC:MARK:FORM DEF\n");
}
ここから詳しく内容について説明していきます。
3行目にあるように"visa.h"をincludeすることでViSessionやViStatus、viOpen()、viPrintf()などを使用することができます。

13行目の"*IDN?\n"をviPrintf()でネットワーク・アナライザへ書き込むことで計測器の製品名などの情報がinstに格納されます。

16行目でViSettion型からchar型に変換し、取得した情報を表示させています。
ここで、変な文字列が返ってきている場合は、計測器とPCの接続に問題があるまたは11行目の""内の指定に問題がある可能性があります。
正しく情報が取得できていれば計測器とPCの通信を行うことができています。

PCから計測器に命令するときはviError = viPrintf(inst, "");の""内を変えることで様々な指示をすることができます。

詳しい説明は今回は省いていますが大まかな流れは以上となります。

0 件のコメント :

コメントを投稿