DiamondLightSource / DiamondLightSource/mx-bluesky

Oscillate I23 goniometer plan timing out prematurely

Open
#981 0 comments 0 reactions 0 assignees View on GitHub
bug I23 Laser Shaping
Dominant language
Python
Stars
4
Forks
5
Avg merge
1d 30m
Merged PRs (30d)
2

Description

When using `bps.repeat` to oscillate the goniometer indefinitely between maximum positive and negative rotation, a timeout occurs before a full oscillation can complete. Furthermore, the plan itself cannot be stopped unless the terminal that it's running in is killed - only individual oscillations can be cancelled.

Stack trace

```
Run aborted
Traceback (most recent call last):
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/tasks.py", line 490, in wait_for
return fut.result()
^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/epics/core/_aioca.py", line 297, in put
await caput(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 127, in call_wrapper
return await throw_wrapper(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 109, in throw_wrapper
return await awaitable
^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 159, in ca_timeout
result = await awaitable
^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 840, in caput
await done.wait()
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 67, in wait
await self._event.wait()
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/locks.py", line 213, in wait
await fut
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 44, in _wait_for
return await asyncio.wait_for(coro, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/tasks.py", line 492, in wait_for
raise exceptions.TimeoutError() from exc
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_status.py", line 122, in _notify_watchers_from
async for update in iterator:
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/epics/motor.py", line 174, in set
async for current_position in observe_value(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 346, in observe_value
async for _, value in observe_signals_value(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 424, in observe_signals_value
raise exc
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 246, in set
await _wait_for(self._connector.backend.put(value, wait=wait), timeout, source)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 46, in _wait_for
raise asyncio.TimeoutError(source) from e
TimeoutError: ca://LA18L-MO-LSR-01:OMEGA.VAL

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 1584, in _run
msg = self._plan_stack[-1].throw(stashed_exception or resp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/src/mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py", line 35, in rotate_continuously
yield from bps.repeat(lambda: go_to_furthest_maximum(goniometer), num=num)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/utils/__init__.py", line 1952, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 1811, in repeat
return (yield from repeated_plan())
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 1795, in repeated_plan
yield from ensure_generator(plan())
File "/scratch/gmg29649/mx-bluesky/src/mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py", line 29, in go_to_furthest_maximum
yield from bps.mv(goniometer.omega, -3600 if current_value > 0 else 3600)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/utils/__init__.py", line 1952, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 392, in mv
yield Msg("wait", None, group=group)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 2399, in _status_object_completed
raise FailedStatus(ret) from exc
bluesky.utils.FailedStatus: , errored: TimeoutError('ca://LA18L-MO-LSR-01:OMEGA.VAL')>
Traceback (most recent call last):
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/tasks.py", line 490, in wait_for
return fut.result()
^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/epics/core/_aioca.py", line 297, in put
await caput(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 127, in call_wrapper
return await throw_wrapper(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 109, in throw_wrapper
return await awaitable
^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 159, in ca_timeout
result = await awaitable
^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 840, in caput
await done.wait()
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/aioca/_catools.py", line 67, in wait
await self._event.wait()
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/locks.py", line 213, in wait
await fut
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 44, in _wait_for
return await asyncio.wait_for(coro, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/dls_sw/apps/python/miniforge/4.10.0-0/envs/python3.11/lib/python3.11/asyncio/tasks.py", line 492, in wait_for
raise exceptions.TimeoutError() from exc
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_status.py", line 122, in _notify_watchers_from
async for update in iterator:
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/epics/motor.py", line 174, in set
async for current_position in observe_value(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 346, in observe_value
async for _, value in observe_signals_value(
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 424, in observe_signals_value
raise exc
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 246, in set
await _wait_for(self._connector.backend.put(value, wait=wait), timeout, source)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/ophyd_async/core/_signal.py", line 46, in _wait_for
raise asyncio.TimeoutError(source) from e
TimeoutError: ca://LA18L-MO-LSR-01:OMEGA.VAL

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/scratch/gmg29649/mx-bluesky/src/mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py", line 45, in
RE(rotate_continuously(gonio))
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 973, in __call__
plan_return = self._resume_task(init_func=_build_task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 1120, in _resume_task
raise exc
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 1755, in _run
raise err
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 1584, in _run
msg = self._plan_stack[-1].throw(stashed_exception or resp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/src/mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py", line 35, in rotate_continuously
yield from bps.repeat(lambda: go_to_furthest_maximum(goniometer), num=num)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/utils/__init__.py", line 1952, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 1811, in repeat
return (yield from repeated_plan())
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 1795, in repeated_plan
yield from ensure_generator(plan())
File "/scratch/gmg29649/mx-bluesky/src/mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py", line 29, in go_to_furthest_maximum
yield from bps.mv(goniometer.omega, -3600 if current_value > 0 else 3600)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/utils/__init__.py", line 1952, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/plan_stubs.py", line 392, in mv
yield Msg("wait", None, group=group)
File "/scratch/gmg29649/mx-bluesky/.venv/lib/python3.11/site-packages/bluesky/run_engine.py", line 2399, in _status_object_completed
raise FailedStatus(ret) from exc
bluesky.utils.FailedStatus: , errored: TimeoutError('ca://LA18L-MO-LSR-01:OMEGA.VAL')>
```

## Acceptance Criteria
- Goniometer can oscillate indefinitely without timing out
- Oscillation can be stopped

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.