FAQs from Rohde & Schwarz

Gestione remota dei risultati di misura del VNA tramite comandi SCPI

Descrizione

All'utente viene richiesto di spostare i risultati da un analizzatore di reti al PC del controllore o a un'unità di rete.

Risoluzione

Durante l'esecuzione dell'automazione delle misure è tipicamente necessario salvare o elaborare i risultati. In questo contesto si può parlare di due diverse opzioni:

  • Trasferimento di file, in cui una serie di risultati viene spostata dal VNA a una determinata unità di rete
  • Trasferimento dei dati, in cui i dati vengono trasferiti dal VNA all'ambiente di programmazione o all'area di lavoro per un'ulteriore elaborazione "in programma"

Il seguente esempio Matlab fornisce un'introduzione per affrontare i due casi sopra descritti utilizzando un analizzatore di reti vettoriale R&S ZNB20. Per l'approccio di trasferimento dei file, una serie di parametri s o di file touchstone viene salvata su un'unità USB collegata al VNA in D:\. Per il caso di trasferimento dei dati, una forma d'onda attiva viene trasferita dal VNA a Matlab e tracciata di conseguenza per la verifica.

+++Code+++

% Preconditions:
% - Installed R&S VISA 5.11.0 or later with R&S VISA.NET

%% Opening the session
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %visa connection, toolbox required
inst_handle.OutputBufferSize = 1000000; %buffer size in bytes
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); %instrument verification status
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); %this section presents four traces on display
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; %nr of points, sets resolution of the trace
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); %Defines the center frequency
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); %Sets the 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'); %Activate single sweep mode for all channels.
fprintf(inst_handle,'INIT:ALL;*WAI'); %Start a single sweep in all channels.

timeout=30; %timeout in seconds
set(inst_handle,'Timeout',timeout); %timeout increased before acquisition to avoid sync errors

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); %set current directory to a USB stick displayed as D: in Windows
fprintf(inst_handle,'MMEMory:CDIRectory?'); %file explorer, this is where the s-parameters will be saved
directory_path=fscanf(inst_handle); % "File Transfer" concept
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"');

% Transfer one trace to Matlab workspace, data transfer concept

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 removes the extra terminator in the buffer
timeout=1; %timeout in seconds goes back to a normal value
set(inst_handle,'Timeout',timeout);

%--------------Presentation of the trace in a plot---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
for c = 1:points %scale time axis and power data
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'); %error queue check up
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

Dopo aver eseguito il codice, la schermata del VNA si presentava come di seguito. La forma d'onda Matlab ottenuta è stata sovrapposta mentre un paio di marcatori sono stati aggiunti manualmente come controllo della correttezza dei dati acquisiti,

Ecco anche l'output Matlab per la verifica in termini di errori e versione FW sull'analizzatore ZNB20 insieme alla posizione dei parametri s salvati sotto D:\ nel VNA:

Come ulteriore dettaglio, è possibile verificare la trasmissione della traccia selezionata utilizzando RS Visa Tester Trace Tool. Una volta eseguito il programma, si è osservato quanto segue,

Il simbolo hash # introduce il blocco di dati. Il numero successivo indica quante delle successive cifre descrivono la lunghezza del blocco di dati. In questo esempio, le tre cifre successive indicano una lunghezza di 804 byte, che corrisponde al numero di punti selezionato, 201 in questo esempio. Il comando FORM REAL,32 assegna quattro byte per ogni punto dati.

Riferimenti: