craft-software/Legacy/Instrument_Drivers/drivers/Keysight_U2042XA.py
2025-07-04 15:52:40 +02:00

80 lines
2.8 KiB
Python

import pyvisa
import time
class KeysightU2042XA:
def __init__(self,adress,freq,cal=1):
#establish connection to device with pyvisa. The device is initiallized with visa adress "adress" and with frequency "freq". If cal == 1 a on e time calibration
#and zeroing is performed
self.rm = pyvisa.ResourceManager()
try:
self.inst = self.rm.open_resource(adress)
except:
print(f'could not connect to {adress}')
return
self.inst.timeout = 20000
self.inst.write('SYST:PRES')
# time.sleep(0.2)
self.inst.write(f'SENS:FREQ {freq}')
time.sleep(0.2)
if cal == 1:
self.inst.write('CAL:ZERO:AUTO ONCE')
time.sleep(16)
self.inst.write('CAL:AUTO ONCE')
time.sleep(6)
self.inst.write('CAL:ZERO:AUTO OFF')
self.inst.write('CAL:AUTO OFF')
self.inst.write('INIT:CONT ON')
time.sleep(2)
def __del__(self):
self.rm.close()
def activate_CW(self):
#bring the device in a state to measure CW. The values can then be obtained by "read"
self.inst.write('CAL:ZERO:AUTO OFF')
self.inst.write('CAL:AUTO OFF')
self.inst.write('DET:FUNC AVER')
self.inst.write('INIT:CONT ON')
def activate_trace(self):
#brings the device in a state to measure traces. The traces are obtained with read_trace
self.inst.write('CAL:ZERO:AUTO OFF')
self.inst.write('CAL:AUTO OFF')
self.inst.write('DET:FUNC NORM')
self.inst.write('INIT:CONT OFF')
self.inst.write('TRIG:SOUR INT')
self.inst.write('TRAC:STAT ON')
def read(self):
#reads the CW or Pulse measurement from the device
data = float(self.inst.query('FETC?'))
return data
def read_trace(self,res):
#reads a trace with resolution "res" from the device
self.inst.write('INIT')
# data = self.inst.query(f"TRAC? {res}")
data = self.inst.query_binary_values(f"TRAC? {res}", datatype='f', is_big_endian = True)
# self.inst.write('TRAC? LRES')
# data = self.inst.read_raw()
return data
def set_trace_time(self,t):
#sets the duration of the trace
self.inst.write(f"SENS:TRAC:TIME {t}")
def set_trigger_delay(self,t):
#sets the trigger delay of the trace
print(f'TRIG:DEL {t}')
self.inst.write(f'TRIG:DEL {t}')
def set_trigger_level(self,*args):
#sets the trigger level of the device. If no argument is given it is set to auto
if args:
self.inst.write(f"TRIG:LEV:AUTO 0")
self.inst.write(f"TRIG:LEV {args[0]}")
else:
self.inst.write(f"TRIG:LEV:AUTO 1")