add shortcut for acquisition modules
acq(<goal>) sets goal, starts and waits for completion
This commit is contained in:
@@ -64,6 +64,8 @@ LOG_LEVELS = {
|
|||||||
'off': logging.ERROR+1}
|
'off': logging.ERROR+1}
|
||||||
CLR = '\r\x1b[K' # code to move to the left and clear current line
|
CLR = '\r\x1b[K' # code to move to the left and clear current line
|
||||||
|
|
||||||
|
UNDEF = object()
|
||||||
|
|
||||||
|
|
||||||
class Handler(logging.StreamHandler):
|
class Handler(logging.StreamHandler):
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
@@ -213,8 +215,8 @@ class Module:
|
|||||||
clientenv.raise_with_short_traceback(error)
|
clientenv.raise_with_short_traceback(error)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def __call__(self, target=None):
|
def __call__(self, target=UNDEF):
|
||||||
if target is None:
|
if target is UNDEF:
|
||||||
return self.read()
|
return self.read()
|
||||||
watch_params = ['value', 'status']
|
watch_params = ['value', 'status']
|
||||||
for pname in watch_params:
|
for pname in watch_params:
|
||||||
@@ -222,7 +224,15 @@ class Module:
|
|||||||
updateEvent=self._watch_parameter,
|
updateEvent=self._watch_parameter,
|
||||||
callimmediately=False)
|
callimmediately=False)
|
||||||
|
|
||||||
self.target = target # this sets self._is_driving
|
if 'go' in self._commands:
|
||||||
|
if 'goal' in self._parameters and target is not None:
|
||||||
|
self.goal_enable = True
|
||||||
|
self.goal = target
|
||||||
|
if 'target' in self._parameters:
|
||||||
|
self.target = target
|
||||||
|
self.go()
|
||||||
|
elif 'target' in self._parameters:
|
||||||
|
self.target = target # this sets self._is_driving
|
||||||
|
|
||||||
def loop():
|
def loop():
|
||||||
while self._is_driving:
|
while self._is_driving:
|
||||||
@@ -232,7 +242,10 @@ class Module:
|
|||||||
loop()
|
loop()
|
||||||
except KeyboardInterrupt as e:
|
except KeyboardInterrupt as e:
|
||||||
self._secnode.log.info('-- interrupted --')
|
self._secnode.log.info('-- interrupted --')
|
||||||
self.stop()
|
try:
|
||||||
|
self.stop()
|
||||||
|
except Exception as e:
|
||||||
|
print(f'while stopping: {e!r}')
|
||||||
try:
|
try:
|
||||||
loop() # wait for stopping to be finished
|
loop() # wait for stopping to be finished
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
@@ -297,6 +310,8 @@ class Param:
|
|||||||
|
|
||||||
|
|
||||||
class Command:
|
class Command:
|
||||||
|
_obj = None
|
||||||
|
|
||||||
def __init__(self, name, modname, secnode):
|
def __init__(self, name, modname, secnode):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.modname = modname
|
self.modname = modname
|
||||||
@@ -311,11 +326,14 @@ class Command:
|
|||||||
result, _ = self.exec(self.modname, self.name, *args)
|
result, _ = self.exec(self.modname, self.name, *args)
|
||||||
else:
|
else:
|
||||||
result, _ = self.exec(self.modname, self.name, args or None)
|
result, _ = self.exec(self.modname, self.name, args or None)
|
||||||
|
if self.name == 'go' and self._obj:
|
||||||
|
self._obj._is_driving = self._obj._isBusy()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __get__(self, obj, owner=None):
|
def __get__(self, obj, owner=None):
|
||||||
if obj is None:
|
if obj is None:
|
||||||
return self
|
return self
|
||||||
|
self._obj = obj
|
||||||
return self.call
|
return self.call
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user