vna = Vna() # log vna.open_log(log_file) vna.print_info() # connect to instrument (no visa) vna.open_tcp(address) # alternatively, using pyvisa: # vna.open('gpib', 20) # preset and clear errors vna.clear_status() vna.preset() vna.pause() # create an interesting setup # to save ch1 = vna.channel(1) ch1.start_frequency_Hz = 1.0e9 ch1.stop_frequency_Hz = 2.0e9 ch1.points = 401 trc1 = vna.trace('Trc1') trc1.parameter = 'S11' index = vna.create_diagram() name = vna.create_trace() trc2 = vna.trace(name)
# Setup for full N-Port calibration with cal unit vna.write("SENS1:CORR:COLL:AUTO:CONF FNPort,''") # get cal steps steps = get_cal_steps(ports, cal_size) num_steps = len(steps) # Define each cal step via SCPI for i in range(1, num_steps + 1): step = [str(n) for n in steps[i]] step = ",".join(step) scpi = "SENS1:CORR:COLL:AUTO:ASS{0}:TPOR {1}".format(i, step) vna.write(scpi) # For each cal step: # - Make sure vna ports are connected # - Start measurement # - Wait until it completes for i in range(1, num_steps + 1): while connections(vna) != steps[i]: input('Connect ports {0}'.format(step)) vna.write("SENS1:CORR:COLL:AUTO:ASS{0}:ACQ".format(i)) vna.pause(timeout_ms) # Apply calibration vna.write("SENS1:CORR:COLL:AUTO:SAVE") # Close connection vna.local() vna.close()
from rohdeschwarz.instruments.vna import SweepType import matplotlib.pyplot as plt import numpy as np # Open instrument connection vna = Vna() vna.open('TCPIP', '127.0.0.1') # SCPI command log vna.open_log("SCPI Command Log.txt") print_header(vna.log, "Measure with a1", "0.0.1") vna.print_info() # Preset vna.preset() vna.pause() vna.clear_status() # Setup channel 1 ch1 = vna.channel(1) ch1.sweep_type = SweepType.power ch1.start_power_dBm = -20.0 ch1.stop_power_dBm = 0 ch1.points = 201 ch1.if_bw_Hz = 1, 'kilo' ch1.cal_group = 'example' ch1.manual_sweep = True # Setup Trc1: S21 s21_trace = vna.trace('Trc1') s21_trace.parameter = 'S21'
# Temp dir for cal data vna.file.cd(Directory.default) temp_dir = PureWindowsPath(vna.file.directory()) / 'CAL_UNIT_DATA' if vna.file.is_directory(temp_dir): vna.file.delete_all(temp_dir) else: vna.file.mkdir(temp_dir) vna.file.cd(str(temp_dir)) # Export factory cal data files # from cal unit to VNA, # download to local computer dest_dir = Path('.') / 'data' vna.cal_unit().export_factory_cal(str(temp_dir)) vna.pause(10000) for i in vna.file.files(): src = str(temp_dir / i) dest = str(dest_dir / i) vna.file.download_file(src, dest) # Read data. # Data file naming convention: open_filename = 'CalibrationUnit Open (P{0}).s1p' short_filename = 'CalibrationUnit Short (P{0}).s1p' match_filename = 'CalibrationUnit Match (P{0}).s1p' thru_filename = 'CalibrationUnit Through (P{0}P{1}).s2p' # Read port 1 # open, short, match # format is complex (re + j*im)
scpi = "SENS{0}:CORR:COLL:FIXT:LMP {1}"; scpi = scpi.format(channel, direct_comp) vna.write(scpi) # include loss compensation # This setting is overridden if direct compensation # is on scpi = "SENS{0}:CORR:COLL:FIXT:LMP:LOSS {1}"; scpi = scpi.format(channel, include_loss) vna.write(scpi) # Measure a standard (short) at all ports scpi = "SENS{0}:CORR:COLL:FIXT:ACQ {1},{2}" scpi = scpi.format(channel, standard, ports_string) vna.write(scpi) vna.pause(10000) # wait for 10 s # Optional: # Can also measure another standard. # The VNA will use the average of both # results standard = "OPEN" scpi = "SENS{0}:CORR:COLL:FIXT:ACQ {1},{2}" scpi = scpi.format(channel, standard, ports_string) vna.write(scpi) vna.pause(10000) # wait for 10 s # Apply corrections scpi = "SENS{0}:CORR:COLL:FIXT:SAVE" scpi = scpi.format(channel) vna.write(scpi)