migrated secop_psi drivers to new syntax
- includes all changes up to 'fix inheritance order' from git_mlz
6a32ecf342
Change-Id: Ie3ceee3dbd0a9284b47b1d5b5dbe262eebe8f283
This commit is contained in:
@@ -21,33 +21,33 @@
|
||||
"""senis hall sensor"""
|
||||
|
||||
|
||||
import time
|
||||
import threading
|
||||
import time
|
||||
|
||||
import numpy as np
|
||||
from serial import Serial
|
||||
from secop.core import Property, Parameter, Override, Readable, BoolType, \
|
||||
FloatRange, TupleOf, StringType, IntRange, Attached
|
||||
|
||||
from secop.core import Attached, BoolType, FloatRange, IntRange, \
|
||||
Parameter, Property, Readable, StringType, TupleOf
|
||||
|
||||
|
||||
class Temperature(Readable):
|
||||
pollerClass = None
|
||||
parameters = {
|
||||
'value': Override(datatype=FloatRange(unit='degC')),
|
||||
}
|
||||
|
||||
value = Parameter(datatype=FloatRange(unit='degC'))
|
||||
|
||||
|
||||
class Bcomp(Readable):
|
||||
pollerClass = None
|
||||
parameters = {
|
||||
'value': Override(datatype=FloatRange(unit='T')),
|
||||
'range': Parameter('working range', FloatRange(unit='T'), default=0),
|
||||
}
|
||||
|
||||
value = Parameter(datatype=FloatRange(unit='T'))
|
||||
range = Parameter('working range', FloatRange(unit='T'), default=0)
|
||||
|
||||
|
||||
class Raw(Readable):
|
||||
pollerClass = None
|
||||
parameters = {
|
||||
'value': Override(datatype=FloatRange()),
|
||||
}
|
||||
|
||||
value = Parameter(datatype=FloatRange())
|
||||
|
||||
|
||||
class TeslameterBase(Readable):
|
||||
@@ -58,18 +58,15 @@ class TeslameterBase(Readable):
|
||||
|
||||
the B components (and temperatures for 3MH6) are implemented as separate modules
|
||||
"""
|
||||
properties = {
|
||||
'x': Attached(),
|
||||
'y': Attached(),
|
||||
'z': Attached(),
|
||||
}
|
||||
parameters = {
|
||||
'value': Override('B vector', poll=True,
|
||||
datatype=TupleOf(FloatRange(unit='T'), FloatRange(unit='T'), FloatRange(unit='T'))),
|
||||
'usb': Parameter('usb device', StringType(), readonly=False),
|
||||
'enabled': Parameter('enable data acq', datatype=BoolType(), readonly=False, default=True),
|
||||
'nsample': Parameter('number of samples for average', datatype=IntRange(1, 1000), readonly=False, default=1),
|
||||
}
|
||||
x = Attached()
|
||||
y = Attached()
|
||||
z = Attached()
|
||||
|
||||
value = Parameter('B vector', poll=True,
|
||||
datatype=TupleOf(FloatRange(unit='T'), FloatRange(unit='T'), FloatRange(unit='T')))
|
||||
usb = Parameter('usb device', StringType(), readonly=False)
|
||||
enabled = Parameter('enable data acq', datatype=BoolType(), readonly=False, default=True)
|
||||
nsample = Parameter('number of samples for average', datatype=IntRange(1, 1000), readonly=False, default=1)
|
||||
|
||||
def init_serial(self, baud):
|
||||
self._conn = Serial(self.usb, baud, timeout=0.1)
|
||||
@@ -103,9 +100,7 @@ class Teslameter3MH3(TeslameterBase):
|
||||
remark: no query for the sample rate is possible, therefore set always to
|
||||
a default rate (therefore initwrite=True on the rate parameter)
|
||||
"""
|
||||
properties = {
|
||||
'range': Property('full scale', datatype=FloatRange(), default=2),
|
||||
}
|
||||
range = Property('full scale', datatype=FloatRange(), default=2)
|
||||
|
||||
def earlyInit(self):
|
||||
self.init_serial(115200)
|
||||
@@ -122,7 +117,7 @@ class Teslameter3MH3(TeslameterBase):
|
||||
s.timeout = 0.1 + 0.02 * self.nsample
|
||||
for _ in range(2):
|
||||
self.write_bytes(b'B')
|
||||
t = time.time()
|
||||
# t = time.time()
|
||||
reply = self.read_bytes(8 * self.nsample)
|
||||
s.timeout = 0.1
|
||||
self.stop_reading()
|
||||
@@ -147,21 +142,19 @@ class Teslameter3MH3(TeslameterBase):
|
||||
|
||||
class Teslameter3MH6(TeslameterBase):
|
||||
"""luxury model with probe and box temperature and autorange"""
|
||||
properties = {
|
||||
'x_direct': Attached(),
|
||||
'y_direct': Attached(),
|
||||
'z_direct': Attached(),
|
||||
'probe_temp': Attached(),
|
||||
'box_temp': Attached(),
|
||||
'probe_temp_direct': Attached(),
|
||||
'box_temp_direct': Attached(),
|
||||
}
|
||||
parameters = {
|
||||
'range': Parameter('range or 0 for autorange', FloatRange(0, 20, unit='T'), readonly=False, default=0),
|
||||
'rate': Parameter('sampling rate', datatype=FloatRange(10, 15000, unit='Hz'),
|
||||
readonly=False, poll=True),
|
||||
'avtime': Parameter('data acquisition time', FloatRange(), default=0),
|
||||
}
|
||||
x_direct = Attached()
|
||||
y_direct = Attached()
|
||||
z_direct = Attached()
|
||||
probe_temp = Attached()
|
||||
box_temp = Attached()
|
||||
probe_temp_direct = Attached()
|
||||
box_temp_direct = Attached()
|
||||
|
||||
range = Parameter('range or 0 for autorange', FloatRange(0, 20, unit='T'), readonly=False, default=0)
|
||||
rate = Parameter('sampling rate', datatype=FloatRange(10, 15000, unit='Hz'),
|
||||
readonly=False, poll=True)
|
||||
avtime = Parameter('data acquisition time', FloatRange(), default=0)
|
||||
|
||||
SAMPLING_RATES = {0xe0: 15000, 0xd0: 7500, 0xc0: 3750, 0xb0: 2000, 0xa1: 1000,
|
||||
0x92: 500, 0x82: 100, 0x72: 60, 0x63: 50, 0x53: 30, 0x23: 10}
|
||||
RANGES = dict(zip(b'1234', [0.1, 0.5, 2, 20]))
|
||||
@@ -183,7 +176,7 @@ class Teslameter3MH6(TeslameterBase):
|
||||
chk = np.frombuffer(reply, dtype='i1,23i1,i1')
|
||||
if not np.all(np.sum(chk['f1'], axis=1) % 256 == 0):
|
||||
status = 'checksum error'
|
||||
continue
|
||||
continue
|
||||
# first byte must be 'B' and last byte must be CR
|
||||
if np.all(chk['f0'] == ord(b'B')) and np.all(chk['f2'] == 13):
|
||||
break
|
||||
@@ -219,7 +212,7 @@ class Teslameter3MH6(TeslameterBase):
|
||||
self._z.value = mean['z'] * 0.001
|
||||
self._probe_temp.value = mean['thc']
|
||||
self._box_temp.value = mean['tec']
|
||||
|
||||
|
||||
self.write_bytes(b'D') # put into NONcalibrated mode
|
||||
if self.read_bytes(1) != b'd':
|
||||
self.log.error('missing response to D command')
|
||||
|
||||
Reference in New Issue
Block a user