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
Beispiel #2
0
 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()
Beispiel #4
0
 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
Beispiel #5
0
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_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)
Beispiel #7
0
 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()
Beispiel #8
0
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
Beispiel #9
0
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('--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 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()
            code.interact('', local=locals())
        else:
            print('Could not connect to instrument\n')
            parser.print_help()
    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()
Beispiel #10
0
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)
Beispiel #11
0
from rohdeschwarz.instruments.vna import Vna

# Connect
vna = Vna()
vna.open_tcp('127.0.0.1')

# Calibrate channel 1 ports 1, 2
# using automatic cal unit
index = 1
ports = [1, 2]
vna.channel(index).auto_calibrate(ports)
Beispiel #12
0
set_file  = str(root_path / 'sets' / 'set.znxml')


# IP address
address = '192.168.86.192'


# create Vna instance
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
Beispiel #13
0
from cal_functions import connections
from cal_functions import get_cal_steps
from rohdeschwarz.instruments.vna import Vna

# Provide this information:
ip_address = '127.0.0.1'
timeout_ms = 5 * 60 * 1000  # 5 mins
ports = range(1, 21)  # VNA Ports 1-20
cal_size = 8  # Cal unit is 8 ports

# Assuming channel 1 ('SENS1')
# for simplicity's sake

# Connect to VNA
vna = Vna()
vna.open_tcp(ip_address)

# Delete any previously defined cal steps
vna.write("SENS1:CORR:COLL:AUTO:ASS:DEL:ALL")

# 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)
Beispiel #14
0
#!/usr/bin/env python

from   lib.homepath import expand_home_path
from   lib.save     import create_save_action
from   lib          import schedule
from   pathlib      import Path
from   rohdeschwarz.instruments.vna import Vna
from   ruamel       import yaml

settings = {}
with open('settings.yaml', 'r') as f:
    settings = yaml.safe_load(f.read())

# Connect to VNA
vna = Vna()
vna.open_tcp(settings['vna address'])
vna.timeout_ms = 10*60*1000 # 10 mins

# Create lamdba function.
# Function will be called on interval
path   = expand_home_path(settings['path'])
action = create_save_action(vna, path)

# run
interval = settings['interval (mins)']
duration = settings['duration (hrs)']
schedule.run(interval, duration, action)
Beispiel #15
0
 def tearDownClass(self):
     vna = Vna()
     vna.open_tcp()
     vna.close()
from rohdeschwarz.instruments.vna import Vna

# Connect
vna = Vna()
vna.open_tcp('localhost')

# Preset instrument (optional)
vna.clear_status()
vna.preset()
vna.pause()

# Settings for ch1 calibration
ch1 = vna.channel(1)
ch1.sweep_type = 'lin' # linear freq sweep
ch1.start_frequency_Hz =   1,'GHz'
ch1.stop_frequency_Hz  =   2,'GHz'
ch1.points             = 101
ch1.if_bandwidth_Hz    =   1,'KHz'
ch1.power_dBm          = -10 # dBm

# check for cal unit(s)
assert vna.cal_units

# Calibrate
ports = [1, 2]
ch1.auto_calibrate(ports)
assert not vna.errors
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()
Beispiel #18
0
import csv
from   trace_history.command_line import parse_args
from   trace_history.default_time import default_time_s
from   trace_history.timestamp    import timestamp
import os
from   rohdeschwarz.instruments.vna import Vna
from   si_prefix                  import si_format
import sys


# parse cli
args = parse_args()

# init connection
vna = Vna()
vna.open_tcp(args.ip_address)
vna.open_log(args.log_file)

vna.timeout_ms = args.timeout_ms

# clear previous scpi errors
vna.clear_status()

# current date and time?
now = timestamp()

# set file
args.set_file = args.set_file or vna.active_set
vna.open_set(args.set_file)
vna.active_set = args.set_file