FAQs from Rohde & Schwarz

VNA 通过 SCPI 命令远程处理测量结果

描述

用户需要将结果从网络分析仪传输至控制器电脑或网络驱动器。

解决方案

运行自动测量时,通常需要保存或处理结果。这可以采用两种方案:

  • 文件传输,即将一组结果从 VNA 传输至特定的网络驱动器
  • 数据传输,即将数据从 VNA 传输至编程环境或工作区以待进一步使用“程序”进行处理

以下 Matlab 示例展示了使用 R&S®ZNB20 矢量网络分析仪解决上述两种问题。对于文件传输方法,将一组 S 参数或 touchstone 文件保存至连接到 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 连接,需要工具箱
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; % 数据点数量,设置迹线分辨率
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'); % 为信道 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 中的错误和固件版本以及 VNA 中 D:\ 路径下保存的 S 参数的位置:

用户还可以使用 RS Visa Tester Trace Tool 验证所选迹线的传输情况,以获取其他详细信息。运行程序后,用户获得如下结果。

数据块以井字符号 # 开头。第二位数表示后面多少数字描述数据块的长度。本例中,后面三个数字指示长度为 804 个字节,这与所选的 201 个数据点数量相符。“FORM REAL,32”命令为每个数据点分配四个字节。

参考: