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:
2021-02-24 16:15:23 +01:00
parent bc5edec06f
commit 41baf5805f
79 changed files with 2610 additions and 3952 deletions

View File

@@ -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')