added PVEnumAdjustable for PVs with several states

This commit is contained in:
2020-07-18 16:45:49 +02:00
parent 1898f122ff
commit 72c3dc95aa
2 changed files with 47 additions and 0 deletions
+1
View File
@@ -3,5 +3,6 @@ from .adjustable import Adjustable
from .dummyadjustable import DummyAdjustable
from .genericadjustable import GenericAdjustable
from .pvadjustable import PVAdjustable
from .pvenumadjustable import PVEnumAdjustable
+46
View File
@@ -0,0 +1,46 @@
from epics import PV
from slic.core.task import Task
from slic.utils.printing import printable_dict
from .adjustable import Adjustable
class PVEnumAdjustable(Adjustable):
def __init__(self, pvname, name=None):
name = name or pvname
super().__init__(name)
self.pv = PV(pvname)
self.states = Enum(self.pv.enum_strs)
def get_current_value(self, as_number=False):
as_string = not as_number
return self.pv.get(as_string=as_string)
def set_target_value(self, value, hold=False):
value = self.states.get(value)
change = lambda: self.pv.put(value, wait=True, use_complete=True)
self.current_task = task = Task(change, hold=hold)
return task
def is_moving(self):
return not self.pv.put_complete
class Enum:
def __init__(self, seq):
self.data = {s:n for n, s in enumerate(seq)}
def get(self, value):
if value not in self.data.values():
value = self.data[value]
return value
def __repr__(self):
return printable_dict(self.data)