workflows.py: added safe dtz positon check

This commit is contained in:
appleb_m
2026-06-17 11:39:57 +02:00
parent 271e3e6ce3
commit 37d3e55da3
2 changed files with 53 additions and 9 deletions
+24 -2
View File
@@ -98,6 +98,27 @@ class BeamlineConfig:
host = cfg_get("daq.hardware.redis_url", f"{self.__bl}-redis.psi.ch")
self.__client = redis.Redis(host=host, port=6379, db=0, decode_responses=True)
self.simulated_detector = bl is MXBeamline.SIMULATED
self._initialize_optional_yaml_defaults()
def _initialize_optional_yaml_defaults(self) -> None:
raw_dtz_safe_position = cfg_get("daq.hardware.dtz_safe_position")
if raw_dtz_safe_position in (None, ""):
return
if self.dtz_safe_position is not None:
return
try:
self.dtz_safe_position = float(raw_dtz_safe_position)
logger.info(
f"Initialized dtz_safe_position from beamline config: {self.dtz_safe_position}"
)
except (TypeError, ValueError) as e:
logger.warning(
f"Ignoring invalid daq.hardware.dtz_safe_position value: "
f"{raw_dtz_safe_position!r} ({e})"
)
#GUI session management
@@ -820,7 +841,7 @@ class BeamlineConfig:
def dtz_safe_position(self) -> float | None:
tmp = self.__client.get(f"{self.__bl}:dtz_safe_position")
if tmp is None:
return 200.0
return None
return float(tmp)
@dtz_safe_position.setter
@@ -1197,4 +1218,5 @@ if __name__ == "__main__":
cfg = BeamlineConfig(bl=mx_beamline())
# cfg.allow_non_staff_request_from_staff = True
# cfg.state_busy = False
cfg.abr_meas_pos = AerotechCoordinate(at_mm=Coordinate(x=0.0,y=0.0,z=0.0))
#fg.abr_meas_pos = AerotechCoordinate(at_mm=Coordinate(x=0.0,y=0.0,z=0.0))
cfg.dtz_safe_position = 300.0
+29 -7
View File
@@ -1,10 +1,10 @@
from aare.common.models import SampleCameraSettings
from aare.daq.devices import BeamlineDevices
from aare.daq.config import BeamlineConfig, ABR_POS_MOUNT, ABR_OMEGA_MOUNT
from aare.common.logger_config import setup_logger
from aare.devices.area_detector import AutoEnum
from aare.common.logger_config import setup_logger
from aare.devices.bec_worker import BeamlineState
from aare.daq.devices import BeamlineDevices
from aare.daq.config import BeamlineConfig, ABR_POS_MOUNT, ABR_OMEGA_MOUNT
import time
@@ -12,7 +12,32 @@ logger = setup_logger("aareDAQ")
SAFE_POSITION = 600
def _move_detector_to_safe_position_if_needed(devs: BeamlineDevices, cfg: BeamlineConfig):
safe_position = cfg.dtz_safe_position
current_dtz = cfg.dtz
if safe_position is None:
logger.debug("No dtz_safe_position configured; skipping detector move")
return
if current_dtz is None:
logger.debug("Current dtz is unknown; skipping detector safe-position move")
return
if current_dtz < safe_position:
logger.info(f"Moving detector to safe position {safe_position}")
return devs.bec_worker.det_z(value=safe_position)
logger.debug(
f"Detector already at or beyond safe position "
f"(current={current_dtz}, safe={safe_position}); skipping move"
)
return None
def common_2rse(devs: BeamlineDevices, cfg: BeamlineConfig):
_move_detector_to_safe_position_if_needed(devs, cfg)
devs.bec_worker.move_to(BeamlineState.ROBOT_SAMPLE_EXCHANGE)
print('move smargon home')
devs.smargon_move_home()
@@ -123,9 +148,7 @@ def sa2dc(devs: BeamlineDevices, cfg: BeamlineConfig):
logger.info(f"sam cam auto exposure in {time.perf_counter() - start:.2f}")
def dc2sa(devs: BeamlineDevices, cfg: BeamlineConfig):
status = None
if cfg.dtz and cfg.dtz < SAFE_POSITION:
status = devs.bec_worker.det_z(value=SAFE_POSITION)
status = _move_detector_to_safe_position_if_needed(devs, cfg)
devs.samcam_auto(AutoEnum.AUTO)
devs.bec_worker.move_to(BeamlineState.SAMPLE_ALIGNMENT)
devs.aerotech_pos = cfg.abr_meas_pos
@@ -215,7 +238,6 @@ def common2maintenance(devs: BeamlineDevices, cfg: BeamlineConfig):
if __name__ == "__main__":
from aare.common.beamline import mx_beamline
import time
beamline = mx_beamline()
config = BeamlineConfig(beamline)
devices = BeamlineDevices(beamline)