FAQs from Rohde & Schwarz

Procesamiento remoto de resultados de medida en un analizador de redes vectoriales utilizando comandos SCPI

Descripción

El usuario debe desplazar resultados de un analizador de redes al PC controlador o a una unidad de red.

Resolución

Al ejecutar la automatización de medidas es a menudo necesario guardar o procesar los resultados. En este contexto se pueden distinguir dos opciones diferentes:

  • transferencia de archivos, donde se traslada un conjunto de resultados del analizador de redes vectoriales a una determinada unidad de la red
  • transferencia de datos, donde los datos se desplazan del analizador de redes vectoriales al entorno de programación o el área de trabajo para el procesamiento sucesivo «dentro del programa»

El ejemplo de Matlab que se muestra más abajo proporciona una introducción para llevar a cabo los dos casos arriba indicados utilizando un analizador de redes vectoriales R&S ZNB20. Para el método de transferencia de archivos se guarda un conjunto de parámetros de dispersión o archivos Touchstone en una memoria USB conectada al analizador bajo D:\. Para el caso de transferencia de datos se traslada una traza activa del analizador a Matlab y se representa oportunamente para la verificación.

+++Código+++

% Requisitos previos:
% - Versión R&S VISA 5.11.0 o más reciente instalada con R&S VISA.NET

%% Apertura de sesión
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %conexión visa, se requiere toolbox
inst_handle.OutputBufferSize = 1000000; %tamaño de búfer en bytes
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); %estado de verificación del instrumento
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); %esta sección presenta cuatro trazas en pantalla
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; %n.° de puntos, ajusta la resolución de la traza
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); %Define la frecuencia central
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); %Ajusta el span
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'); %Activación del modo de barrido único para todos los canales.
fprintf(inst_handle,'INIT:ALL;*WAI'); %Iniciar un barrido único en todos los canales.

timeout=30; %tiempo límite en segundos
set(inst_handle,'Timeout',timeout); %tiempo límite incrementado antes de la adquisición para evitar errores de sincronización

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); %ajustar directorio actual a una memoria visualizada como D: en Windows
fprintf(inst_handle,'MMEMory:CDIRectory?'); %explorador de archivos, la ubicación donde se guardarán los parámetros de dispersión
directory_path=fscanf(inst_handle); % concepto de «transferencia de archivos»
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"');

% Transferir una traza al área de trabajo de Matlab, concepto de transferencia de datos

fprintf(inst_handle,'INIT1:IMM;*WAI'); %ejecutar barrido único para canal 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 elimina la terminación adicional en el búfer
timeout=1; %tiempo límite en segundos vuelve a un valor normal
set(inst_handle,'Timeout',timeout);

%--------------Presentación de la traza en un diagrama---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
for c = 1:points %escalar eje de tiempo y datos de potencia
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'); %verificación de cola de errores
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

Tras ejecutar el código, la pantalla del analizador de redes vectoriales muestra la imagen de abajo. La traza Matlab obtenida se ha superpuesto y se han agregado manualmente dos marcadores como verificación de los datos capturados

A continuación, la salida de Matlab para fines de verificación respecto a errores y versión de FW del ZNB20 junto con la ubicación de los parámetros de dispersión guardados en D:\ en el analizador de redes vectoriales:

Como dato adicional, también se puede verificar la transmisión de la traza seleccionada utilizando la herramienta RS Visa Tester. Tras ejecutar el programa se muestra lo siguiente

El símbolo de hash # introduce el bloque de datos. El número siguiente indica cuántos de los dígitos siguientes describen la longitud del bloque de datos. En este ejemplo, los tres siguientes dígitos indican que la longitud debe ser 804 bytes, lo que se corresponde con el número de puntos seleccionado, 201 en este ejemplo. El comando FORM REAL,32 asigna cuatro bytes por punto de datos.

Referencias: