fix LimitsType to be actually used and validated
Change-Id: Id0f67e91f4ff57d4c29c33960e736c8c3ae77209 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/33683 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
parent
caaefec6db
commit
6cd83eabcc
@ -1244,16 +1244,20 @@ UInt64 = IntRange(0, (1 << 64) - 1)
|
|||||||
|
|
||||||
# Goodie: Convenience Datatypes for Programming
|
# Goodie: Convenience Datatypes for Programming
|
||||||
class LimitsType(TupleOf):
|
class LimitsType(TupleOf):
|
||||||
def __init__(self, members):
|
def __init__(self, member):
|
||||||
super().__init__(members, members)
|
super().__init__(member, member)
|
||||||
|
|
||||||
def __call__(self, value):
|
def validate(self, value, previous=None):
|
||||||
"""accepts an ordered tuple of numeric member types"""
|
"""accepts an ordered tuple of numeric member types"""
|
||||||
limits = TupleOf.validate(self, value)
|
limits = TupleOf.validate(self, value, previous)
|
||||||
if limits[1] < limits[0]:
|
if limits[1] < limits[0]:
|
||||||
raise RangeError(f'Maximum Value {limits[1]} must be greater than minimum value {limits[0]}!')
|
raise RangeError(f'maximum value {limits[1]} must be greater than '
|
||||||
|
f'minimum value {limits[0]}')
|
||||||
return limits
|
return limits
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
return LimitsType(TupleOf.copy(self).members[0])
|
||||||
|
|
||||||
|
|
||||||
class StatusType(TupleOf):
|
class StatusType(TupleOf):
|
||||||
"""convenience type for status
|
"""convenience type for status
|
||||||
|
@ -620,20 +620,14 @@ class AnalogOutput(PyTangoDevice, Drivable):
|
|||||||
|
|
||||||
del __getusermin, __setusermin, __getusermax, __setusermax
|
del __getusermin, __setusermin, __getusermax, __setusermax
|
||||||
|
|
||||||
def _checkLimits(self, limits):
|
def write_userlimits(self, value):
|
||||||
umin, umax = limits
|
umin, umax = value
|
||||||
amin, amax = self.abslimits
|
amin, amax = self.abslimits
|
||||||
if umin > umax:
|
|
||||||
raise RangeError(
|
|
||||||
f'user minimum ({umin}) above the user maximum ({umax})')
|
|
||||||
if umin < amin - abs(amin * 1e-12):
|
if umin < amin - abs(amin * 1e-12):
|
||||||
umin = amin
|
umin = amin
|
||||||
if umax > amax + abs(amax * 1e-12):
|
if umax > amax + abs(amax * 1e-12):
|
||||||
umax = amax
|
umax = amax
|
||||||
return (umin, umax)
|
return umin, umax
|
||||||
|
|
||||||
def write_userlimits(self, value):
|
|
||||||
return self._checkLimits(value)
|
|
||||||
|
|
||||||
def write_target(self, value=FloatRange()):
|
def write_target(self, value=FloatRange()):
|
||||||
umin, umax = self.userlimits
|
umin, umax = self.userlimits
|
||||||
|
Loading…
x
Reference in New Issue
Block a user