Skip to content

Commit

Permalink
Tuning sample device definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
burkeds committed May 23, 2024
1 parent 9889272 commit ecc6111
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
31 changes: 26 additions & 5 deletions src/ophyd_async/tango/device_controllers/dgg2.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
from __future__ import annotations

import asyncio
import time
from typing import Callable, List

from bluesky.protocols import Preparable, Triggerable

from ophyd_async.core import AsyncStatus
from ophyd_async.tango import TangoReadableDevice, tango_signal_rw, tango_signal_x
from ophyd_async.tango import (
TangoReadableDevice,
tango_signal_r,
tango_signal_rw,
tango_signal_x,
)
from tango import DevState


# --------------------------------------------------------------------
class DGG2Timer(TangoReadableDevice, Triggerable, Preparable):

# --------------------------------------------------------------------
def __init__(self, trl: str, name="") -> None:
TangoReadableDevice.__init__(self, trl, name)
self._set_success = True

# --------------------------------------------------------------------
def register_signals(self):

self.sampletime = tango_signal_rw(
float, self.trl + "/sampletime", device_proxy=self.proxy
)
Expand All @@ -35,6 +40,10 @@ def register_signals(self):
self.trl + "/startandwaitfortimer", device_proxy=self.proxy
)

self.start = tango_signal_x(self.trl + "/start", device_proxy=self.proxy)

self._state = tango_signal_r(DevState, self.trl + "/state", self.proxy)

self.set_name(self.name)

# --------------------------------------------------------------------
Expand All @@ -58,12 +67,24 @@ def update_watchers(remaining_time: float):
else:
update_watchers(total_time)
try:
await self.startandwaitfortimer.trigger()
await self.start.trigger()
finally:
if self.remainingtime.is_cachable():
self.remainingtime.clear_sub(update_watchers)
else:
update_watchers(await self.remainingtime.get_value())
counter = 0
state = await self._state.get_value()
while state == DevState.MOVING:
# Update the watchers with the current position every 0.5 seconds
if counter % 5 == 0:
remaining_time = await self.remainingtime.get_value()
update_watchers(remaining_time)
counter = 0
await asyncio.sleep(0.1)
state = await self._state.get_value()
counter += 1

# update_watchers(await self.remainingtime.get_value())
if not self._set_success:
raise RuntimeError("Timer was not triggered")

Expand Down
4 changes: 3 additions & 1 deletion src/ophyd_async/tango/device_controllers/omsvme58.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,15 @@ def update_watchers(current_position: float):
await self.position.set(new_position)
await asyncio.sleep(0.1)
counter = 0
while await self._state.get_value() == DevState.MOVING:
state = await self._state.get_value()
while state == DevState.MOVING:
# Update the watchers with the current position every 0.5 seconds
if counter % 5 == 0:
current_position = await self.position.get_value()
update_watchers(current_position)
counter = 0
await asyncio.sleep(0.1)
state = await self._state.get_value()
counter += 1
finally:
if self.position.is_cachable():
Expand Down
7 changes: 4 additions & 3 deletions src/ophyd_async/tango/device_controllers/sis3820.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@

# --------------------------------------------------------------------
class SIS3820Counter(TangoReadableDevice): # Triggerable

# --------------------------------------------------------------------
def __init__(self, trl: str, name="") -> None:
TangoReadableDevice.__init__(self, trl, name)
self._set_success = True

# --------------------------------------------------------------------
def register_signals(self):

self.counts = tango_signal_rw(
float, self.trl + "/counts", device_proxy=self.proxy
)
Expand All @@ -40,5 +38,8 @@ def register_signals(self):
# --------------------------------------------------------------------
async def read(self) -> Dict[str, Reading]:
ret = await super().read()
await self.reset.trigger()
return ret

async def stage(self):
await self.reset.trigger()
await super().stage()

0 comments on commit ecc6111

Please sign in to comment.