set unit together with datatype
Change-Id: I412471880e71792160ee56a79375dc62dd4aaafc
This commit is contained in:
parent
21dfcbd290
commit
09056ea87e
@ -48,20 +48,20 @@ def float2hex(value, digits):
|
|||||||
class DPM3(HasIodev, Drivable):
|
class DPM3(HasIodev, Drivable):
|
||||||
OFFSET = 0x8f
|
OFFSET = 0x8f
|
||||||
SCALE = 0x8c
|
SCALE = 0x8c
|
||||||
|
|
||||||
MAGNITUDE = {'1': 1, '2': 10, '3': 100, '4': 1e3, '5': 1e4, '6': 1e5,
|
MAGNITUDE = {'1': 1, '2': 10, '3': 100, '4': 1e3, '5': 1e4, '6': 1e5,
|
||||||
'9':-1, 'A':-10, 'B':-100, 'C':-1e3, 'D':-1e4, 'E':-1e5}
|
'9':-1, 'A':-10, 'B':-100, 'C':-1e3, 'D':-1e4, 'E':-1e5}
|
||||||
|
|
||||||
iodevClass = DPM3IO
|
iodevClass = DPM3IO
|
||||||
|
|
||||||
motor = Attached()
|
motor = Attached()
|
||||||
digits = Parameter('number of digits for value', IntRange(0, 5), initwrite=True, readonly=False)
|
digits = Parameter('number of digits for value', IntRange(0, 5), initwrite=True, readonly=False)
|
||||||
value = Parameter(unit='N')
|
value = Parameter(datatype=FloatRange(unit='N'))
|
||||||
target = Parameter(unit='N')
|
target = Parameter(datatype=FloatRange(unit='N'))
|
||||||
step = Parameter('maximum motor step', FloatRange(unit='deg'), default=5, readonly=False)
|
step = Parameter('maximum motor step', FloatRange(unit='deg'), default=5, readonly=False)
|
||||||
|
|
||||||
offset = Parameter('', FloatRange(-1e5, 1e5), readonly=False, poll=True)
|
offset = Parameter('', FloatRange(-1e5, 1e5), readonly=False, poll=True)
|
||||||
|
|
||||||
#Note: we have tro treat the units properly.
|
#Note: we have tro treat the units properly.
|
||||||
""" We got an output of 150 for 10N. The maximal force we want to deal with is 100N,
|
""" We got an output of 150 for 10N. The maximal force we want to deal with is 100N,
|
||||||
thus a maximl output of 1500. 10=150/f
|
thus a maximl output of 1500. 10=150/f
|
||||||
@ -69,7 +69,7 @@ class DPM3(HasIodev, Drivable):
|
|||||||
scale_factor = Parameter('', FloatRange(-1e5, 1e5, unit='input_units/N'), readonly=False, poll=True)
|
scale_factor = Parameter('', FloatRange(-1e5, 1e5, unit='input_units/N'), readonly=False, poll=True)
|
||||||
_target = None
|
_target = None
|
||||||
fast_pollfactor = 0.01
|
fast_pollfactor = 0.01
|
||||||
|
|
||||||
def query(self, adr, value=None):
|
def query(self, adr, value=None):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
if adr == self.SCALE:
|
if adr == self.SCALE:
|
||||||
@ -109,11 +109,11 @@ class DPM3(HasIodev, Drivable):
|
|||||||
self.write_scale_factor(self.scale_factor)
|
self.write_scale_factor(self.scale_factor)
|
||||||
self.write_offset(self.offset)
|
self.write_offset(self.offset)
|
||||||
return Done
|
return Done
|
||||||
|
|
||||||
def read_digits(self):
|
def read_digits(self):
|
||||||
back_value = self._iodev.communicate('*1G135')
|
back_value = self._iodev.communicate('*1G135')
|
||||||
return int(back_value,16) - 1
|
return int(back_value,16) - 1
|
||||||
|
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
value = float(self._iodev.communicate('*1B1'))
|
value = float(self._iodev.communicate('*1B1'))
|
||||||
mot = self._motor
|
mot = self._motor
|
||||||
@ -135,10 +135,9 @@ class DPM3(HasIodev, Drivable):
|
|||||||
self.stop()
|
self.stop()
|
||||||
self.status = self.Status.IDLE, 'target reached'
|
self.status = self.Status.IDLE, 'target reached'
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def write_target(self, target):
|
def write_target(self, target):
|
||||||
self._target = target
|
self._target = target
|
||||||
self._started = True
|
|
||||||
if target - self.value > 0:
|
if target - self.value > 0:
|
||||||
self._direction = 1
|
self._direction = 1
|
||||||
else:
|
else:
|
||||||
@ -158,7 +157,7 @@ class DPM3(HasIodev, Drivable):
|
|||||||
def read_offset(self):
|
def read_offset(self):
|
||||||
reply = self.query(self.OFFSET)
|
reply = self.query(self.OFFSET)
|
||||||
return reply
|
return reply
|
||||||
|
|
||||||
def write_offset(self, value):
|
def write_offset(self, value):
|
||||||
return self.query(self.OFFSET, value)
|
return self.query(self.OFFSET, value)
|
||||||
|
|
||||||
@ -169,20 +168,20 @@ class DPM3(HasIodev, Drivable):
|
|||||||
def write_scale_factor(self, value):
|
def write_scale_factor(self, value):
|
||||||
reply = self.query(self.SCALE, value * 10 ** self.digits)
|
reply = self.query(self.SCALE, value * 10 ** self.digits)
|
||||||
return float(reply) / 10 ** self.digits
|
return float(reply) / 10 ** self.digits
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ from os.path import basename, exists, join
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.interpolate import splev, splrep # pylint: disable=import-error
|
from scipy.interpolate import splev, splrep # pylint: disable=import-error
|
||||||
|
|
||||||
from secop.core import Attached, BoolType, Parameter, Readable, StringType
|
from secop.core import Attached, BoolType, Parameter, Readable, StringType, FloatRange
|
||||||
|
|
||||||
|
|
||||||
def linear(x):
|
def linear(x):
|
||||||
@ -174,7 +174,7 @@ class Sensor(Readable):
|
|||||||
|
|
||||||
calib = Parameter('calibration name', datatype=StringType(), readonly=False)
|
calib = Parameter('calibration name', datatype=StringType(), readonly=False)
|
||||||
abs = Parameter('True: take abs(raw) before calib', datatype=BoolType(), readonly=False, default=True)
|
abs = Parameter('True: take abs(raw) before calib', datatype=BoolType(), readonly=False, default=True)
|
||||||
value = Parameter(unit='K')
|
value = Parameter(datatype=FloatRange(unit='K'))
|
||||||
pollinterval = Parameter(export=False)
|
pollinterval = Parameter(export=False)
|
||||||
status = Parameter(default=(Readable.Status.ERROR, 'unintialized'))
|
status = Parameter(default=(Readable.Status.ERROR, 'unintialized'))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user