FAQs from Rohde & Schwarz

SCPI 명령으로 VNA 측정 결과를 원격으로 처리하기

설명

벡터 네트워크 분석기(VNA)에서 컨트롤러 PC 또는 네트워크 드라이브로 결과를 전송하려고 합니다.

해결 방법

일반적으로 측정 자동화를 실행하는 동안 결과를 저장하거나 처리해야 합니다. 이 상황에서는 두 가지 옵션을 사용할 수 있습니다.

  • VNA에서 특정 네트워크 드라이브로 결과를 전송하는 파일 전송 기능
  • "프로그램 내에서" 추가 처리를 위해 VNA에서 프로그래밍 환경이나 워크스페이스로 데이터를 전송하는 데이터 전송 기능

아래에 제시된 Matlab 예시에서는 R&S ZNB20 Vector Network Analyzer에서 두 가지 옵션을 사용하는 방법을 설명합니다. 파일 전송의 경우, s-파라미터 또는 터치스톤 파일 세트가 VNA와 연결된 USB의 D:\에 저장됩니다. 데이터 전송의 경우, 활성 트레이스가 VNA에서 Matlab으로 전송되고 확인을 위해 표시됩니다.

+++코드+++

% 전제 조건:
% - R&S VISA.NET에서 R&S VISA 5.11.0 이상 버전 설치

%% 세션 오프닝
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %VISA 연결, Toolbox 필요
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"); %네 개의 트레이스 표시
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; 포인트 %nr, 트레이스 해상도 설정
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:\"'); %Windows에서 D:로 표시되는 현재 디렉터리를 USB에 설정
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"');

% 트레이스를 Matlab 워크스페이스로 전송하는 "데이터 전송"

fprintf(inst_handle,'INIT1:IMM;*WAI'); %run single sweep for channel1
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 트레이스가 중첩되었으며 캡처된 데이터의 정상 상태 확인을 위해 두 개의 마커가 수동으로 추가되었습니다.

VNA의 D:\에 저장된 s-파라미터의 위치와 함께 ZNB20의 오류 및 펌웨어 버전 검증을 위한 Matlab 출력은 다음과 같습니다.

추가 정보로, R&S VisaTester Trace Tool을 사용하여 선택된 트레이스의 전송을 검증할 수도 있습니다. 프로그램 실행 후 확인된 예시는 다음과 같습니다.

해시 기호(#)는 데이터 블록을 나타냅니다. 바로 다음의 숫자는 그 다음에 나온 숫자에서 데이터 블록의 길이를 설명하는 자리의 개수를 나타냅니다. 이 예시에서 이어지는 세 자리 숫자는 804 바이트 길이를 나타내며, 선택한 포인트 숫자 201과 일치합니다. FORM REAL,32 명령은 데이터 포인트당 4 바이트를 할당합니다.

참조자료: