FAQs from Rohde & Schwarz

Vektornetzwerkanalysator: Fernverarbeitung von Messergebnissen mit SCPI-Befehlen

Beschreibung

Der Anwender soll Ergebnisse von einem Netzwerkanalysator auf den Steuer-PC oder ein Netzlaufwerk transferieren.

Auflösung

Im Rahmen der Automatisierung von Messungen ist es üblicherweise erforderlich, die Ergebnisse zu speichern oder zu verarbeiten. In diesem Zusammenhang kann man über zwei unterschiedliche Optionen sprechen.

  • Dateiübertragung, wobei ein Satz von Ergebnissen vom VNA auf ein bestimmtes Netzwerklauf verschoben wird
  • Datentransfer, wobei die Daten vom VNA in eine Programmierumgebung oder einen Workspace zur weiteren Verarbeitung "im Programm" verschoben werden

Folgendes MATLAB®-Beispiel gibt eine Einführung in die Umsetzung beider obigen Fälle mit einem R&S ZNB20 Vektornetzwerkanalysator. Für den Dateiübertragungsansatz wird ein Satz von S-Parametern oder Touchstone-Dateien auf ein USB-Laufwerk gespeichert, das am VNA unter D:\ eingehängt ist. Für den Datentransferansatz wird eine aktive Messkurve vom VNA in MATLAB® verschoben und zur Verifizierung entsprechend graphisch dargestellt.

+++Code+++

% Vorbedingungen:
% - R&S VISA 5.11.0 oder höher mit R&S VISA.NET installiert

%% Öffnen der Sitzung
clc;
inst_handle = visa('rs','TCPIP0::10.205.0.51::hislip0::INSTR'); % VISA-Verbindung, Toolbox erforderlich
inst_handle.OutputBufferSize = 1000000; % Puffergröße in Byte
inst_handle.InputBufferSize = 1000000;
fopen(inst_handle);
clc;

fprintf(inst_handle,'*IDN?'); % Messgeräte-Verifizierungsstatus
a=fscanf(inst_handle);
disp(a);

fprintf(inst_handle,"*RST"); % dieser Abschnitt zeigt vier Messkurven am Schirm
fprintf(inst_handle,"*CLS");
fprintf(inst_handle,'CONF:CHAN1:STAT ON');
fprintf(inst_handle,'SWEep:TYPE LIN');
points=201; % Anzahl Punkte, Setzen der Messkurvenauflösung
fprintf(inst_handle, 'SENSE1:SWEEP:POINTS %d',points);
fcenter=1000000000;
fprintf(inst_handle,'FREQ:CENT %d',fcenter); % Definition der Mittenfrequenz
fspan= 500000000;
fprintf(inst_handle,'FREQ:SPAN %d',fspan); % Einstellen der Darstellbreite
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'); % Aktivieren des Single-Sweep-Modus für alle Kanäle.
fprintf(inst_handle,'INIT:ALL;*WAI'); % Starten des Single-Sweep auf allen Kanälen.

timeout=30; % Timeout in Sekunden
set(inst_handle,'Timeout',timeout); % Vergrößerung des Timeout vor Erfassung, um Sync-Fehler zu vermeiden

fprintf(inst_handle,'MMEMory:CDIRectory "D:\"'); % Einstellen des aktuellen Verzeichnisses auf einem USB-Stick, der als D: in Windows dargestellt wird
fprintf(inst_handle,'MMEMory:CDIRectory?'); % Dateiexplorer, hier werden die S-Parameter gespeichert
directory_path=fscanf(inst_handle); % "Dateiübertragungs"-Konzept
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 einer Messkurve in den MATLAB®-Workspace, Datentransferkonzept

fprintf(inst_handle,'INIT1:IMM;*WAI'); % Single Sweep für Kanal1 ausführen
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 entfernt das Extra-Abschlusszeichen im Puffer
timeout=1; % Timeout in Sekunden auf einen normalen Wert
set(inst_handle,'Timeout',timeout);

%--------------Grafische Darstellung der Messkurve---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;
for c = 1:points % Zeitachse und Leistungsdaten skalieren
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'); % Fehler-Queue prüfen
a=fscanf(inst_handle);
disp(a);
fclose(inst_handle);

+++

Nach Ausführen des Code sieht der VNA-Bildschirm wie unten aus. Die erhaltene MATLAB®-Messkurve wurde überlagert, während einige Marker manuell hinzugefügt wurden, um die Plausibilität der erfassten Daten zu prüfen.

Hier finden Sie die MATLAB®-Ausgabe zu Verifizierungszwecken in Bezug auf Fehler und Firmware-Version auf dem ZNB20 zusammen mit dem Ort der gespeicherten S-Parameter unter D:\ im VNA:

Zusätzlich kann man auch die Übertragung der gewählten Messkurve mit dem RS Visa Tester Trace Tool verifizieren. Nach Ausführen des Programms kann man Folgendes sehen:

Das Rautensymbol # leitet den Datenblock ein. Die nächste Zahl gibt an, wie viele der folgenden Ziffern die Länge des Datenblocks beschreiben. Im Beispiel geben die drei folgenden Ziffern eine Länge von 804 Byte an. Dies entspricht der gewählten Anzahl der Messpunkte – in diesem Beispiel 201. Der Befehl FORM REAL,32 weist vier Bytes pro Datenpunkt zu.

Referenzen: