SR830: moved dicts out of class
Change-Id: If056b1bf4e81c3b609ded087dff2b40c7119903f
This commit is contained in:
parent
a5dfc82b95
commit
c9ccaa484a
@ -22,6 +22,15 @@ import re
|
|||||||
from frappy.core import StringIO, HasIO, Parameter, EnumType, FloatRange, TupleOf, ERROR, IDLE, WARN
|
from frappy.core import StringIO, HasIO, Parameter, EnumType, FloatRange, TupleOf, ERROR, IDLE, WARN
|
||||||
|
|
||||||
|
|
||||||
|
def string_to_value(value):
|
||||||
|
value_with_unit = re.compile(r'(\d+)([pnumkMG]?)')
|
||||||
|
value, pfx = value_with_unit.match(value).groups()
|
||||||
|
pfx_dict = {'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e3, 'M': 1e6, 'G': 1e9}
|
||||||
|
if pfx in pfx_dict:
|
||||||
|
value = round(float(value) * pfx_dict[pfx], 12)
|
||||||
|
return float(value)
|
||||||
|
|
||||||
|
|
||||||
class SR830_IO(StringIO):
|
class SR830_IO(StringIO):
|
||||||
end_of_line = b'\r' # should be <if> or <cr>
|
end_of_line = b'\r' # should be <if> or <cr>
|
||||||
identification = [('*IDN?', r'Stanford_Research_Systems,.*')]
|
identification = [('*IDN?', r'Stanford_Research_Systems,.*')]
|
||||||
@ -33,22 +42,25 @@ class XY(HasIO):
|
|||||||
freq = Parameter('oscill. frequen. control', FloatRange(1e-3, 102000), unit='Hz', readonly=False)
|
freq = Parameter('oscill. frequen. control', FloatRange(1e-3, 102000), unit='Hz', readonly=False)
|
||||||
phase = Parameter('reference phase control', FloatRange(-360, 729), unit='deg', readonly=False)
|
phase = Parameter('reference phase control', FloatRange(-360, 729), unit='deg', readonly=False)
|
||||||
|
|
||||||
sen_range = ['2nV', '5nV', '10nV', '20nV', '50nV', '100nV', '200nV', '500nV',
|
SEN_RANGE = ['2nV', '5nV', '10nV', '20nV', '50nV', '100nV', '200nV', '500nV',
|
||||||
'1uV', '2uV', '5uV', '10uV', '20uV', '50uV', '100uV', '200uV', '500uV',
|
'1uV', '2uV', '5uV', '10uV', '20uV', '50uV', '100uV', '200uV', '500uV',
|
||||||
'1mV', '2mV', '5mV', '10mV', '20mV', '50mV', '100mV', '200mV', '500mV',
|
'1mV', '2mV', '5mV', '10mV', '20mV', '50mV', '100mV', '200mV', '500mV',
|
||||||
'1V']
|
'1V']
|
||||||
|
|
||||||
irange = Parameter('sensitivity index', EnumType('sensitivity index range',
|
irange = Parameter('sensitivity index', EnumType('sensitivity index range',
|
||||||
{name: idx for idx, name in enumerate(sen_range)}), readonly=False)
|
{name: idx for idx, name in enumerate(SEN_RANGE)}), readonly=False)
|
||||||
|
|
||||||
range = Parameter('sensitivity value', FloatRange(2e-9, 1), unit='V', default=1, readonly=False)
|
range = Parameter('sensitivity value', FloatRange(2e-9, 1), unit='V', default=1, readonly=False)
|
||||||
|
|
||||||
time_const = ['10us', '30us', '100us', '300us', '1ms', '3ms', '10ms', '30ms', '100ms', '300ms',
|
TIME_CONST = ['10us', '30us', '100us', '300us', '1ms', '3ms', '10ms', '30ms', '100ms', '300ms',
|
||||||
'1s', '3s', '10s', '30s', '100s', '300s', '1ks', '3ks', '10ks', '30ks']
|
'1s', '3s', '10s', '30s', '100s', '300s', '1ks', '3ks', '10ks', '30ks']
|
||||||
|
|
||||||
tc = Parameter('time const. value', FloatRange(1e-6, 3e4), unit='s', readonly=False)
|
tc = Parameter('time const. value', FloatRange(1e-6, 3e4), unit='s', readonly=False)
|
||||||
itc = Parameter('time const. index', EnumType(
|
itc = Parameter('time const. index', EnumType(
|
||||||
'time const. index range', {name: value for value, name in enumerate(time_const)}), readonly=False)
|
'time const. index range', {name: value for value, name in enumerate(TIME_CONST)}), readonly=False)
|
||||||
|
|
||||||
|
SEN_RANGE_values = [string_to_value(value) for value in SEN_RANGE]
|
||||||
|
TIME_CONST_values = [string_to_value(value) for value in TIME_CONST]
|
||||||
|
|
||||||
ioClass = SR830_IO
|
ioClass = SR830_IO
|
||||||
|
|
||||||
@ -89,18 +101,6 @@ class XY(HasIO):
|
|||||||
# conv_status = HasConvergence.read_status(self)
|
# conv_status = HasConvergence.read_status(self)
|
||||||
return status_type, status_msg
|
return status_type, status_msg
|
||||||
|
|
||||||
def string_to_value(self, value):
|
|
||||||
value_with_unit = re.compile(r'(\d+)([pnumkMG]?)')
|
|
||||||
value, pfx = value_with_unit.match(value).groups()
|
|
||||||
pfx_dict = {'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e3, 'M': 1e6, 'G': 1e9}
|
|
||||||
if pfx in pfx_dict:
|
|
||||||
value = round(float(value) * pfx_dict[pfx], 12)
|
|
||||||
return float(value)
|
|
||||||
|
|
||||||
def init_values(self):
|
|
||||||
self.sen_range_values = [self.string_to_value(value) for value in self.sen_range]
|
|
||||||
self.time_const_values = [self.string_to_value(value) for value in self.time_const]
|
|
||||||
|
|
||||||
def read_xy(self):
|
def read_xy(self):
|
||||||
reply = self.communicate('SNAP? 1, 2')
|
reply = self.communicate('SNAP? 1, 2')
|
||||||
xy = tuple(float(x) for x in reply.split(','))
|
xy = tuple(float(x) for x in reply.split(','))
|
||||||
@ -111,8 +111,8 @@ class XY(HasIO):
|
|||||||
|
|
||||||
def read_range(self):
|
def read_range(self):
|
||||||
idx = self.read_irange()
|
idx = self.read_irange()
|
||||||
name = self.sen_range[idx]
|
name = self.SEN_RANGE[idx]
|
||||||
value = self.string_to_value(name)
|
value = string_to_value(name)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def write_irange(self, irange):
|
def write_irange(self, irange):
|
||||||
@ -125,11 +125,9 @@ class XY(HasIO):
|
|||||||
cl_idx = None
|
cl_idx = None
|
||||||
cl_value = float('-inf')
|
cl_value = float('-inf')
|
||||||
|
|
||||||
for idx, sen_value in enumerate(self.sen_range_values):
|
for idx, sen_value in enumerate(self.SEN_RANGE_values):
|
||||||
value = self.string_to_value(sen_value)
|
if target >= sen_value > cl_value:
|
||||||
|
cl_value = sen_value
|
||||||
if target >= value > cl_value:
|
|
||||||
cl_value = value
|
|
||||||
cl_idx = idx
|
cl_idx = idx
|
||||||
|
|
||||||
self.communicate(f'SENS {cl_idx}')
|
self.communicate(f'SENS {cl_idx}')
|
||||||
@ -145,8 +143,8 @@ class XY(HasIO):
|
|||||||
|
|
||||||
def read_tc(self):
|
def read_tc(self):
|
||||||
idx = self.read_itc()
|
idx = self.read_itc()
|
||||||
name = self.time_const[idx]
|
name = self.TIME_CONST[idx]
|
||||||
value = self.string_to_value(name)
|
value = string_to_value(name)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def write_tc(self, target):
|
def write_tc(self, target):
|
||||||
@ -154,14 +152,12 @@ class XY(HasIO):
|
|||||||
cl_idx = None
|
cl_idx = None
|
||||||
cl_value = float('inf')
|
cl_value = float('inf')
|
||||||
|
|
||||||
for idx, time_value in enumerate(self.time_const_values):
|
for idx, time_value in enumerate(self.TIME_CONST_values):
|
||||||
value = self.string_to_value(time_value)
|
if time_value >= target:
|
||||||
|
diff = time_value - target
|
||||||
if value >= target:
|
|
||||||
diff = value - target
|
|
||||||
|
|
||||||
if diff < cl_value:
|
if diff < cl_value:
|
||||||
cl_value = value
|
cl_value = time_value
|
||||||
cl_idx = idx
|
cl_idx = idx
|
||||||
|
|
||||||
self.communicate(f'OFLT {cl_idx}')
|
self.communicate(f'OFLT {cl_idx}')
|
||||||
|
@ -121,7 +121,6 @@ class TemperatureLoopTC1(SensorTC1, Drivable):
|
|||||||
return True
|
return True
|
||||||
self.set_param('TC', '-')
|
self.set_param('TC', '-')
|
||||||
return False
|
return False
|
||||||
###########
|
|
||||||
|
|
||||||
def read_ramp(self):
|
def read_ramp(self):
|
||||||
return float(self.get_param('RR'))
|
return float(self.get_param('RR'))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user