Skip to content

Commit 33b9815

Browse files
i23 Laser shaping robot (#1131)
* Add PVs to existing robot * Create laser shaping robot to extend existing robot * Move lid temp to generic robot and swap read/write PVs * Add robot device to aithre * Fix missing colon in prefix * Removed some PVs * Changes post-testing at lab * Restore separate laser robot * Change aithre-specific PVs back to read-writes * Split r/w of beamline_safe to have different types * Change enum to strict enum * Move super init to try and give PVs a proper name * Change lid heater type to enum * Change PV datatypes and make rw
1 parent 9f908c6 commit 33b9815

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

src/dodal/beamlines/aithre.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
from dodal.common.beamlines.beamline_utils import device_factory
22
from dodal.devices.aithre_lasershaping.goniometer import Goniometer
3+
from dodal.devices.aithre_lasershaping.laser_robot import LaserRobot
34

45
PREFIX = "LA18L"
56

67

78
@device_factory()
89
def goniometer() -> Goniometer:
910
return Goniometer(f"{PREFIX}-MO-LSR-01:", "goniometer")
11+
12+
13+
@device_factory()
14+
def robot() -> LaserRobot:
15+
return LaserRobot("robot", f"{PREFIX}-MO-ROBOT-01:")
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from ophyd_async.core import StrictEnum
2+
from ophyd_async.epics.core import epics_signal_rw
3+
4+
from dodal.devices.robot import BartRobot
5+
6+
7+
class ForceBit(StrictEnum):
8+
ON = "On"
9+
NO = "No"
10+
OFF = "Off"
11+
12+
13+
class LidHeatEnable(StrictEnum):
14+
ENABLED = "Enabled"
15+
DISABLED = "Disabled"
16+
17+
18+
class LaserRobot(BartRobot):
19+
def __init__(self, name: str, prefix: str) -> None:
20+
self.dewar_lid_heater = epics_signal_rw(
21+
LidHeatEnable, prefix + "DW_1_ENABLED", prefix + "DW_1_CTRL"
22+
)
23+
self.cryojet_retract = epics_signal_rw(ForceBit, prefix + "OP_24_FORCE_OPTION")
24+
self.set_beamline_safe = epics_signal_rw(
25+
ForceBit, prefix + "IP_16_FORCE_OPTION"
26+
)
27+
super().__init__(name=name, prefix=prefix)

src/dodal/devices/robot.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
set_and_wait_for_value,
1212
wait_for_value,
1313
)
14-
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw_rbv, epics_signal_x
14+
from ophyd_async.epics.core import (
15+
epics_signal_r,
16+
epics_signal_rw,
17+
epics_signal_rw_rbv,
18+
epics_signal_x,
19+
)
1520

1621
from dodal.log import LOGGER
1722

@@ -88,6 +93,20 @@ def __init__(self, name: str, prefix: str) -> None:
8893
self.controller_error = ErrorStatus(prefix + "CNTL")
8994

9095
self.reset = epics_signal_x(prefix + "RESET.PROC")
96+
self.stop = epics_signal_x(prefix + "ABORT.PROC")
97+
self.init = epics_signal_x(prefix + "INIT.PROC")
98+
self.soak = epics_signal_x(prefix + "SOAK.PROC")
99+
self.home = epics_signal_x(prefix + "GOHM.PROC")
100+
self.unload = epics_signal_x(prefix + "UNLD.PROC")
101+
self.dry = epics_signal_x(prefix + "DRY.PROC")
102+
self.open = epics_signal_x(prefix + "COLO.PROC")
103+
self.close = epics_signal_x(prefix + "COLC.PROC")
104+
self.cryomode_rbv = epics_signal_r(float, prefix + "CRYO_MODE_RBV")
105+
self.cryomode = epics_signal_rw(str, prefix + "CRYO_MODE_CTRL")
106+
self.gripper_temp = epics_signal_r(float, prefix + "GRIPPER_TEMP")
107+
self.dewar_lid_temperature = epics_signal_rw(
108+
float, prefix + "DW_1_TEMP", prefix + "DW_1_SET_POINT"
109+
)
91110
super().__init__(name=name)
92111

93112
async def pin_mounted_or_no_pin_found(self):

0 commit comments

Comments
 (0)