def setUp(self): vna = Vna() vna.open_tcp() vna.clear_status() vna.manual_sweep = True timeout_ms = 2 * vna.sweep_time_ms + 5000 vna.start_sweeps() vna.pause(timeout_ms) self.vna = vna
def setUp(self): self.serial_no = "123" self.settings = default_settings.copy() path = get_root_path() / "test_measure" self.settings['save']['directory'] = path vna = Vna() vna.open_tcp() vna.clear_status() self.vna = vna
def setUp(self): root_path = get_root_path() / "test_diagram" serial_no = "123" by_serial_no = True self.path = SavePath(root_path, serial_no, by_serial_no) vna = Vna() vna.open_tcp() vna.clear_status() vna.manual_sweep = True timeout_ms = 2 * vna.sweep_time_ms + 5000 vna.start_sweeps() vna.pause(timeout_ms) self.vna = vna self.settings = default_settings.copy()
def connect_to_vna(self, address): self.disconnect_from_vna() try: vna = Vna() vna.open_tcp(address) if not vna.connected(): raise self.command_error(f"cannot connect to '{address}'") except (error, herror, gaierror, timeout): raise self.command_error( f"socket error while connecting to '{address}'") except ConnectionError: raise self.command_error( f"connection error while connecting to '{address}'.") self.vna = vna
def main(): parser = argparse.ArgumentParser( description='Connect to a Rohde & Schwarz VNA') parser.add_argument('--visa', metavar='bus', default=False, help="use VISA with 'bus'") parser.add_argument('--address', default='127.0.0.1', help='instrument address') parser.add_argument('--timeout', default=5000, type=int, help='default instrument timeout (ms)') parser.add_argument('--log', default='', help='SCPI command log filename') args = parser.parse_args() vna = Vna() try: if args.visa: vna.open(args.visa, args.address) else: vna.open_tcp(args.address) if args.timeout: vna.timeout_ms = args.timeout if vna.connected(): print("connected: {0}".format(vna.id_string())) if args.log: vna.open_log(args.log) vna.log.write('{0}\n'.format(datetime.datetime.now())) vna.log.write('--------------------------\n\n') vna.print_info() sys.path.insert(0, os.getcwd()) code.interact('', local=locals()) sys.exit(0) else: raise Exception('Could not connect to instrument') except SystemExit: pass except: print('Error connecting to instrument\n') parser.print_help() finally: if vna.log: vna.close_log() if vna.connected(): vna.close()
def test_source_power_cal(self, data): reads = data['reads'] ch = data['channel'] port = data['port'] sweeps = data['sweeps'] tolerance = data['tolerance'] vna = Vna() vna.bus = FifoBus(reads) vna.channel(ch).source_power_cal(port, sweeps, tolerance) for write in data['writes']: if 'position' in write: pos = write['position'] self.assertEqual(write['command'], vna.bus.writes[pos]) else: self.assertIn (write['command'], vna.bus.writes)
def test_save_measurement_locally(self): vna = Vna() vna.open_tcp('rsa22471.local') vna.preset() ports = [1, 2] ch = vna.channel() try: success = ch.save_measurement_locally('test', ports) except: print(sys.exc_info()[0]) print(vna.errors) raise if not success: print(vna.errors) vna.clear_status() self.assertTrue(success)
def setUp(self): source_root = os.path.dirname(os.path.realpath(__file__)) self.source_root = Path(source_root) root_path = get_root_path() / "test_html" serial_no = self.serial_no = "123" by_serial_no = True self.path = SavePath(root_path, serial_no, by_serial_no) vna = Vna() vna.open_tcp() vna.clear_status() vna.manual_sweep = True timeout_ms = 2 * vna.sweep_time_ms + 5000 vna.start_sweeps() vna.pause(timeout_ms) self.vna = vna self.settings = default_settings.copy()
def connect_to_vna(address): vna = Vna() try: vna.open_tcp(address) except: print("\n\n* Error!\n* Problem connecting to VNA at ip {0}".format(address)) return None try: if not vna.connected(): print("\n\n* Error!\n* Problem connecting to VNA at ip {0}".format(address)) return None if not vna.properties.is_known_model(): print("\n\n* Error!\n* Could not find R&S VNA at ip {0}".format(address)) print("* *IDN? response: {0}".format(vna.id_string())) return None; except: print("\n\n* Error!\n* Problem connecting to VNA at ip {0}".format(address)) return None # set long timeout, vna.timeout_ms = 60000 return vna
from pathlib import Path from power_deembed import read_s21 from rohdeschwarz.instruments.vna import Vna # patch rohdeschwarz vna import power_deembed.patch.vna.channel.power_cal root_path = Path(__file__).parent filename = str(root_path / 'test' / 'fixtures' / '3 dB attenuator.s2p') channel = 1 wave = 'b1' vna = Vna() vna.open_tcp() # offsets ch = vna.channel(channel) freq_Hz, offsets_dB = read_s21(filename) assert not False in freq_Hz == ch.cal_freq_Hz # interpolate # offsets_dB = np.interp(ch.cal_freq_Hz, freq_Hz, offsets_dB) # deembed, apply power_cal_dB = ch.get_power_cal(wave) - offsets_dB ch.set_power_cal(power_cal_dB)
def test_power_sensors(self, data): vna = Vna() vna.bus = FifoBus([data['read']]) self.assertEqual(vna.power_sensors, data['result'])
def tearDownClass(self): vna = Vna() vna.open_tcp() vna.close()
def main(): parser = argparse.ArgumentParser( description='Connect to a Rohde & Schwarz VNA') parser.add_argument('--visa', metavar='bus', default=False, help="use VISA with 'bus'") parser.add_argument('--address', default='127.0.0.1', help='instrument address') parser.add_argument('--port', default=5025, type=int, help='port (TCP only)') parser.add_argument('--timeout', default=5000, type=int, help='default instrument timeout (ms)') parser.add_argument('--log', help='SCPI command log filename') parser.add_argument( '--export-cal-data', action='store_true', help='Save corrections to numpy `savez` (*.pyz) data file') parser.add_argument('--outer-channel', type=int, help='channel with outer corrections') parser.add_argument('--outer-cal-group', help='cal group containing outer corrections') parser.add_argument('--inner-channel', type=int, help='channel with inner corrections') parser.add_argument('--inner-cal-group', help='cal group containing inner corrections') parser.add_argument('--filename', default='Port {port}.s2p', help="default: 'Port {port}.s2p'") parser.add_argument('ports', type=int, nargs='+', help='VNA ports to extract DUTs from') args = parser.parse_args() if not args.inner_channel and not args.inner_cal_group: print('error: must include inner source, either channel or cal group') parser.print_help() sys.exit(-1) if not args.outer_channel and not args.outer_cal_group: print('error: must include outer source, either channel or cal group') parser.print_help() sys.exit(-1) vna = Vna() try: if args.visa: vna.open(args.visa, args.address) else: vna.open_tcp(args.address, args.port) if args.timeout: vna.timeout_ms = args.timeout if vna.connected(): if args.log: vna.open_log(args.log) print_header(vna.log, 'R&S S2P Extractor', '1.0') vna.print_info() else: raise Exception('Could not connect to instrument') if args.outer_channel: outer_source = Source(Type.CHANNEL, args.outer_channel) else: outer_source = Source(Type.CAL_GROUP, args.outer_cal_group) if args.inner_channel: inner_source = Source(Type.CHANNEL, args.inner_channel) else: inner_source = Source(Type.CAL_GROUP, args.inner_cal_group) print(f"ports: {args.ports}") for port in args.ports: filename = args.filename.format(port=port) print(f' {filename}') calculate(vna, outer_source, inner_source, port, filename, args.export_cal_data) except Exception as err: parser.print_help() raise finally: if vna.connected(): vna.errors vna.clear_status() if vna.log: vna.close_log() if vna.connected(): vna.close()