FAQs from Rohde & Schwarz

Дистанционная обработки результатов измерений на векторном анализаторе цепей с помощью стандартных команд

Описание

Я хочу передать результаты от анализатора цепей на управляющий ПК или сетевой диск.

Разрешение

Для автоматизированных измерений, как правило, требуются сохранение или обработка результатов. В связи с этим возможны два варианта.

  • Передача файлов: набор результатов передается от векторного анализатора цепей на определенный сетевой диск.
  • Передача данных: данные передаются от векторного анализатора цепей в среду программирования или рабочее пространство в целях дальнейшей программной обработки.

Приведенный далее сценарий Matlab демонстрирует решение обеих задач с помощью одного векторного анализатора цепей R&S ZNB20. Для передачи файлов набор s-параметров или файлов Touchstone сохраняется на USB-носитель, который подключен к векторному анализатору цепей как диск D:\. Для передачи данных активная кривая передается от векторного анализатора цепей в Matlab и переводится в графический вид в целях проверки.

+++Код+++

% Необходимые условия:
% - Установлено ПО R&S VISA версия 5.11.0 или выше с R&S VISA.NET

%% Открытие сеанса
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; % Кол-во точек определяет разрешение кривой
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-носителе, который является диском D: в Windows
fprintf(inst_handle,'MMEMory:CDIRectory?'); % Файловый менеджер, место сохранения s-параметров
directory_path=fscanf(inst_handle); % Вариант передачи файлов
X = 'Конечная папка для сохранения файла s2p=';
disp(X);
disp(directory_path);
fprintf('Сохранение файла s-параметров ...\n ');
fprintf(inst_handle,'MMEM:STOR:TRAC:CHAN 1,"vna_traces.s2p"');

% Передача одной кривой в рабочее пространство Matlab, вариант передачи данных

fprintf(inst_handle,'INIT1:IMM;*WAI'); % Запуск однократной развертки для канала 1
fprintf('Получение точек данных ...\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);

+++

После выполнения кода экран векторного анализатора цепей выглядел следующим образом. Была наложена полученная кривая Matlab, а в целях проверки достоверности полученных данных были вручную добавлены маркеры.

Далее приводится выводимый результат в Matlab в целях проверки на наличие ошибок, а также версия встроенного ПО на ZNB20 и папка для сохранения s-параметров на диске D:\ векторного анализатора цепей:

Для проверки передачи выбранной кривой также можно использовать RsVisaTraceTool. Результат выполнения программы:

Символ # означает начало блока данных. Следующее число указывает, сколько последующих цифр описывают объем блока данных. В данном примере три последующие цифры означают длину в 804 байта, что соответствует выбранному количеству точек (201 в данном примере). Команда FORM REAL,32 назначает четыре байта на одну точку данных.

Библиография: