FAQs from Rohde & Schwarz

Gestion à distance des résultats de mesures du VNA en utilisant des commandes SCPI

Désignation

Il est demandé à l'utilisateur de déplacer les résultats depuis un analyseur de réseaux vers un contrôleur PC ou vers un lecteur réseau.

Résolution

Lors de l'exécution de l'automatisation des mesures, il est généralement nécessaire de sauvegarder ou de traiter les résultats. Dans ce contexte, on peut parler de deux options différentes,

  • Le transfert de fichier, où un ensemble de résultats est déplacé depuis le VNA vers un certain lecteur réseau
  • Le transfert de données, où les données sont déplacées depuis le VNA vers l'environnement de programmation ou l'espace de travail pour un traitement “dans le programme” ultérieurement

Ci-dessous, un exemple Matlab fait la présentation de l'adressage des deux cas précédents en utilisant un analyseur de réseaux vectoriels R&S ZNB20. Pour l'approche du transfert de fichier, un ensemble de paramètres S ou de fichiers touchstone sont sauvegardés sur un lecteur USB connecté au VNA sous D:\. Pour le cas du transfert de données, une trace active est déplacée depuis le VNA dans Matlab et tracée graphiquement en conséquence pour vérification.

+++Code+++

% Pré-conditions :
% - R&S VISA 5.11.0 ou ultérieur installé avec le R&S VISA.NET

%% Ouverture de session
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); %visa connection, toolbox required
inst_handle.OutputBufferSize = 1000000; %Taille mémoire en octets
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); %Vérification statut instrument
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); %cette section présente quatre traces à l'écran
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; %nr of points, règle la résolution de la trace
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); %Définit la fréquence centrale
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); %Règle le 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'); %Active le mode balayage unique pour toutes les voies.
fprintf(inst_handle,'INIT:ALL;*WAI'); %Démarre un balayage unique dans toutes les voies.

timeout=30; %temporisation en secondes
set(inst_handle,'Timeout',timeout); %temporisation augmentée avant l'acquisition pour éviter les erreurs de synchronisation

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); %règle le répertoire actuel pour une clé USB affichée comme D: dans Windows
fprintf(inst_handle,'MMEMory:CDIRectory?'); %explorateur de fichiers, c'est où les paramètres S seront sauvegardés
directory_path=fscanf(inst_handle); % concept "Transfert de fichier"
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"');

% Transfert d'une trace vers l'espace de travail Matlab, concept de transfert de données

fprintf(inst_handle,'INIT1:IMM;*WAI'); %exécute le balayage unique pour la voie 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 supprime la terminaison supplémentaire dans la mémoire
timeout=1; %temporisation en secondes revient à une valeur normale
set(inst_handle,'Timeout',timeout);

%--------------Présentation de la trace dans un diagramme---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
pour c = 1:points %échelle de l'axe de temps et des données de puissance
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'); %liste d'erreurs vérifiée
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

Après l'exécution du code, l'écran du VNA est affiché comme ci-dessous. La trace Matlab obtenue a été superposée tandis que le couple de marqueurs a été ajouté manuellement comme vérificateur des données capturées,

Ici, la sortie Matlab également à des fins de vérification en termes d'erreurs et la version de FW sur le ZNB20 avec l'emplacement des paramètres S sauvegardés sous D:\ dans le VNA :

Comme détail supplémentaire, on peut vérifier la transmission de la trace sélectionnée en utilisant l'outil RS Visa Tester Trace. Un aperçu ci-dessous après l'exécution du programme,

Le symbole # introduit un bloc de données. Le nombre suivant indique combien parmi les chiffres suivants décrivent la longueur du bloc de données. Dans cet exemple, les trois chiffres suivants indiquent la longueur de 804 octets qui correspond au nombre de points sélectionné, 201 dans cet exemple. La commande FORM REAL,32 attribue quatre octets par point de données.

Références :