FAQs from Rohde & Schwarz

Manuseio remoto de resultados de medições de analisador de redes vetoriais usando comandos SCPI

Descrição

É solicitado ao usuário que mova os resultados de um analisador de redes para o PC do controlador ou para uma unidade de rede.

Resolução

Ao executar a automação de medições, normalmente é necessário salvar ou processar os resultados. Neste contexto, pode-se falar de duas opções diferentes,

  • Transferência de arquivos; onde um conjunto de resultados é movido do analisador de redes vetoriais para uma determinada unidade de rede
  • Transferência de dados; onde os dados são movidos do analisador de redes vetoriais para o ambiente de programação ou para o espaço de trabalho para processamento posterior “no programa”

Abaixo, o exemplo do Matlab fornece uma introdução para abordar os dois casos acima usando um analisador de redes vetoriais R&S®ZNB20. Para a abordagem de transferência de arquivos, um conjunto de parâmetros S ou de arquivos Touchstone são salvos em uma unidade USB conectada ao analisador de redes vetoriais em D:\. Para o caso da transferência de dados, um traço ativo é movido do analisador de redes vetoriais para o Matlab, e traçado em conformidade para verificação.

+++Código+++

% Pré-condições:
% - R&S®VISA 5.11.0 instalado ou mais recente com o R&S®VISA.NET

%% Abrindo a sessão
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %conexão visa, toolbox solicitada
inst_handle.OutputBufferSize = 1000000; %tamanho do buffer em bytes
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); %status de verificação do instrumento
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); %esta sessão apresenta quatro traços em exibição
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; %número de pontos, define resolução do traço
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); %Define a frequência central
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); %Define o 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'); %Ativa o modo de varredura única para todos os canais.
fprintf(inst_handle,'INIT:ALL;*WAI'); %Inicia uma varredura única em todos os canais.

tempo limite=30; %tempo limite em segundos
set(inst_handle,'Timeout',timeout); %tempo limite aumentado antes da aquisição para evitar erros de sincronização

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); %define diretório atual em um pen drive USB exibido como D: no Windows
fprintf(inst_handle,'MMEMory:CDIRectory?'); %explorador de arquivos, é onde os parâmetros S serão salvos
directory_path=fscanf(inst_handle); % conceito de “Transferência de Arquivos”
X = ‘Diretório de destino para salvar o arquivo s2p=’;
disp(X);
disp(directory_path);
fprintf(‘ Salvando arquivo de parâmetros S em ...\n ’);
fprintf(inst_handle,‘MMEM:STOR:TRAC:CHAN 1, “vna_traces.s2p’”);

% Transfira um traço para o espaço de trabalho do Matlab, conceito de transferência de dados

fprintf(inst_handle,'INIT1:IMM;*WAI'); %executar varredura única para canal1
fprintf(‘Buscando pontos de dados ...\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 remove o terminal extra no buffer
tempo limite=1; %o tempo limite em segundos volta a um valor normal
set(inst_handle,'Timeout',timeout);

%--------------Apresentação do traço em um diagrama---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
for c = 1:points %eixo de tempo de escala e dados de potência
points_array(1,c)=points_array(1,c)*resolução;
points_array(1,c)=points_array(1,c) + fstart;
fim
plot(points_array,data);
fprintf(inst_handle,':SYST:ERR?\n'); %verificação de fila de erros
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

Depois de executar o código, a tela do analisador de redes vetoriais ficou conforme abaixo. O traço do Matlab obtido foi sobreposto, enquanto alguns marcadores foram adicionados manualmente como teste de integridade dos dados capturados,

Aqui também temos a saída do Matlab para fins de verificação no que diz respeito a erros e versão FW no ZNB20, juntamente com a localização dos parâmetros S salvos em D:\ no analisador de redes vetoriais:

Como detalhe adicional, também é possível verificar a transmissão do traço selecionado utilizando a ferramenta de rastreamento do testador R&S®VISA. Como observa-se abaixo após a execução do programa,

O símbolo de cardinal # introduz o bloco de dados. O próximo número indica a quantidade dos dígitos seguintes que descrevem o comprimento do bloco de dados. Neste exemplo, os três dígitos a seguir indicam que o comprimento é de 804 bytes, o que corresponde ao número selecionado de pontos, 201 neste exemplo. O comando FORM REAL,32 atribui quatro bytes por ponto de dados.

Referências: