FAQs from Rohde & Schwarz

SCPIコマンドによるVNA測定結果のリモート処理

説明

ユーザーはネットワーク・アナライザからコントローラーPCまたはネットワークドライブに結果を転送する必要があります。

解決策

測定を自動化する場合、一般的に結果を保存または処理することが必要です。このコンテキストで言及される操作としては、次の2種類があります。

  • ファイル転送:結果のセットをVNAから特定のネットワークドライブに転送する場合
  • データ転送:データをVNAからプログラミング環境またはワークスペースに転送して、プログラムでさらに処理する場合

以下に示すMatlabの例は、1台のR&S ZNB20 ベクトル・ネットワーク・アナライザを使って上記2つのケースに対応する場合の手順を示します。ファイル転送方式の場合、SパラメータまたはTouchstoneファイルのセットを、VNAにD:\として接続されたUSBドライブに保存します。データ転送の場合、アクティブトレースをVNAからMatlabに転送し、検証のためにプロットします。

+++コード+++

% 前提条件:
% - R&S VISA 5.11.0以降とR&S VISA.NETをインストール済み

%% セッションを開く
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %VISA接続、ツールボックスが必要
inst_handle.OutputBufferSize = 1000000; %バッファーのサイズ(バイト単位)
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); %測定器検証ステータス
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); %このセクションでは4つのトレースを画面に表示
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; %ポイント数、トレースの分解能を設定
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); %中心周波数を定義
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); %スパンを設定
fprintf(inst_handle,'SOUR:POW -20');
fprintf(inst_handle,'BANDwidth 1000');
fprintf(inst_handle,'TRIG:SOUR IMM');
fprintf(inst_handle,'CALCulate:PARameter:DELete:ALL');
fprintf(inst_handle,'CALC1:PAR:SDEF "Ch1Trc1", "S21" ');
fprintf(inst_handle,'DISP:WIND1:TRAC1:FEED "Ch1Trc1"');
fprintf(inst_handle,'CALC1:PAR:SDEF "Ch1Trc2", "S11" ');
fprintf(inst_handle,'DISP:WIND1:TRAC2:FEED "Ch1Trc2"');
fprintf(inst_handle,'CALC1:PAR:SDEF "Ch1Trc3", "S12" ');
fprintf(inst_handle,'DISP:WIND1:TRAC3:FEED "Ch1Trc3"');
fprintf(inst_handle,'CALC1:PAR:SDEF "Ch1Trc4", "S22" ');
fprintf(inst_handle,'DISP:WIND1:TRAC4:FEED "Ch1Trc4"');

fprintf(inst_handle,'INIT:CONT:ALL OFF'); %全チャネルに対してシングル掃引モードをオン。
fprintf(inst_handle,'INIT:ALL;*WAI'); %全チャネルでシングル掃引を開始。

timeout=30; %タイムアウト(秒単位)
set(inst_handle,'Timeout',timeout); %同期エラーを避けるため収集前にタイムアウトを延長

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); %現在のディレクトリーをUSBメモリ(WindowsではD:と表示)に設定
fprintf(inst_handle,'MMEMory:CDIRectory?'); %ファイルエクスプローラー、ここにSパラメータを保存
directory_path=fscanf(inst_handle); %「ファイル転送」方式
X = 'Target Directory for saving the s2p file=';
disp(X);
disp(directory_path);
fprintf(' Saving s-parameters file ...\n ');
fprintf(inst_handle,'MMEM:STOR:TRAC:CHAN 1,"vna_traces.s2p"');

% 1つのトレースをMatlabワークスペースに転送、データ転送方式

fprintf(inst_handle,'INIT1:IMM;*WAI'); %チャネル1でシングル掃引を実行
fprintf('Fetching data points ...\n ');

fprintf(inst_handle,':FORM REAL,32');
fprintf(inst_handle,'CALC1:DATA:TRAC? "Ch1Trc4", FDAT');

data = binblockread(inst_handle,'float32');
fread(inst_handle,1); %freadによりバッファー内の余分のターミネータを削除
timeout=1; %タイムアウト(秒単位)を通常の値に戻す
set(inst_handle,'Timeout',timeout);

%--------------トレースのプロットへの表示---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
for c = 1:points %時間軸とパワーデータのスケール設定
points_array(1,c)=points_array(1,c)*resolution;
points_array(1,c)=points_array(1,c) + fstart;
end
plot(points_array,data);
fprintf(inst_handle,':SYST:ERR?\n'); %エラー待ち行列のチェック
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

コードを実行した後、VNAの画面は以下のようになります。得られたMatlabトレースは重ね表示されており、キャプチャーデータの確認用にいくつかのマーカーが手動で追加されています。

次に示すのも検証用のMatlab出力で、エラーとZNB20のファームウェアバージョンに加えて、Sパラメータの保存場所(VNAのD:\)が示されます。

追加の詳細として、選択したトレースの伝送をRS Visa Testerトレースツールで検証できます。プログラムを実行すると、以下の内容が表示されます。

シャープ文字#の後ろに、データブロックが続きます。#の直後の数字は、その次に続くデータブロックの長さを示す桁の数です。この例の場合、その後の3つの数字は804バイトの長さを表しています。これは選択したポイント数(この例では201)と整合します。FORM REAL,32コマンドは、データポイントあたり4バイトを割り当てるからです。

参考資料: