simplify callbacks
on Module, use one single callback list 'paramsCallback' instead of 'valueCallbacks', 'errorCallbacks'. Redesign the mechanism to avoid most of the closures. Change-Id: Ie7f68f6bf97ab3f3cd961faa20b0e77730e5b37d Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/33118 Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch> Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
This commit is contained in:
@ -27,7 +27,7 @@ import numpy as np
|
||||
from scipy.interpolate import splev, splrep # pylint: disable=import-error
|
||||
|
||||
from frappy.core import Attached, BoolType, Parameter, Readable, StringType, \
|
||||
FloatRange
|
||||
FloatRange, nopoll
|
||||
|
||||
|
||||
def linear(x):
|
||||
@ -195,35 +195,40 @@ class Sensor(Readable):
|
||||
if self.description == '_':
|
||||
self.description = f'{self.rawsensor!r} calibrated with curve {self.calib!r}'
|
||||
|
||||
def doPoll(self):
|
||||
self.read_status()
|
||||
|
||||
def write_calib(self, value):
|
||||
self._calib = CalCurve(value)
|
||||
return value
|
||||
|
||||
def update_value(self, value):
|
||||
def _get_value(self, rawvalue):
|
||||
if self.abs:
|
||||
value = abs(float(value))
|
||||
self.value = self._calib(value)
|
||||
self._value_error = None
|
||||
rawvalue = abs(float(rawvalue))
|
||||
return self._calib(rawvalue)
|
||||
|
||||
def error_update_value(self, err):
|
||||
if self.abs and str(err) == 'R_UNDER': # hack: ignore R_UNDER from ls370
|
||||
self._value_error = None
|
||||
return None
|
||||
self._value_error = repr(err)
|
||||
raise err
|
||||
def _get_status(self, rawstatus):
|
||||
return rawstatus if self._value_error is None else (self.Status.ERROR, self._value_error)
|
||||
|
||||
def update_status(self, value):
|
||||
if self._value_error is None:
|
||||
self.status = value
|
||||
def update_value(self, rawvalue, err=None):
|
||||
if err:
|
||||
if self.abs and str(err) == 'R_UNDER': # hack: ignore R_UNDER from ls370
|
||||
self._value_error = None
|
||||
return
|
||||
err = repr(err)
|
||||
else:
|
||||
self.status = self.Status.ERROR, self._value_error
|
||||
try:
|
||||
self.value = self._get_value(rawvalue)
|
||||
except Exception as e:
|
||||
err = repr(e)
|
||||
if err != self._value_error:
|
||||
self._value_error = err
|
||||
self.status = self._get_status(self.rawsensor.status)
|
||||
|
||||
def update_status(self, rawstatus):
|
||||
self.status = self._get_status(rawstatus)
|
||||
|
||||
@nopoll
|
||||
def read_value(self):
|
||||
return self._calib(self.rawsensor.read_value())
|
||||
return self._get_value(self.rawsensor.read_value())
|
||||
|
||||
@nopoll
|
||||
def read_status(self):
|
||||
self.update_status(self.rawsensor.status)
|
||||
return self.status
|
||||
return self._get_status(self.rawsensor.read_status())
|
||||
|
Reference in New Issue
Block a user