initial version flomni temp humidity

This commit is contained in:
x01dc
2025-10-10 15:28:38 +02:00
parent d10674b556
commit eec3df23b7
2 changed files with 146 additions and 2 deletions

View File

@@ -365,7 +365,9 @@ rtz:
readOnly: false
readoutPriority: on_request
############################################################
####################### Cameras ############################
############################################################
cam_flomni_gripper:
description: Camera sample changer
@@ -389,4 +391,30 @@ cam_flomni_overview:
enabled: true
onFailure: buffer
readOnly: false
readoutPriority: on_request
readoutPriority: on_request
# cam_flomni_xeye:
# description: Camera flOMNI Xray eye ID101
# deviceClass: csaxs_bec.devices.ids_cameras.ids_camera.IDSCamera
# deviceConfig:
# camera_ID: 101
# bits_per_pixel: 24
# channels: 3
# m_n_colormode: 1
# enabled: true
# onFailure: buffer
# readOnly: false
# readoutPriority: async
# ############################################################
# ################### flOMNI temperatures ####################
# ############################################################
flomni_temphum:
description: flOMNI Temperatures and humidity
deviceClass: csaxs_bec.devices.omny.flomni_temp_and_humidity.FlomniTempHum
deviceConfig: {}
enabled: true
onFailure: buffer
readOnly: false
readoutPriority: baseline

View File

@@ -0,0 +1,116 @@
import time
import datetime
from ophyd import Component as Cpt
from ophyd import Device
from ophyd import DynamicDeviceComponent as Dcpt
from ophyd import EpicsSignal
from prettytable import FRAME, PrettyTable
import numpy as np
class FlomniTempHumError(Exception):
pass
class FlomniTempHum(Device):
USER_ACCESS = [
"show_all",
"help",
]
SUB_VALUE = "value"
_default_sub = SUB_VALUE
temperature_mirror = Cpt(
EpicsSignal, name="temperature_mirror", read_pv="XOMNI-TEMPHUM-MIRROR:0.VAL"
)
temperature_mirrorset_set = Cpt(
EpicsSignal, name="temperature_mirrorset_set", read_pv="XOMNI-TEMPHUM-MIRRORSET_SET:0.VAL"
)
temperature_mirrorset_rb = Cpt(
EpicsSignal, name="temperature_mirrorset_rb", read_pv="XOMNI-TEMPHUM-MIRRORSET_RB:0.VAL"
)
temperature_osa = Cpt(
EpicsSignal, name="temperature_osa", read_pv="XOMNI-TEMPHUM-OSA:0.VAL"
)
temperature_osaset_set = Cpt(
EpicsSignal, name="temperature_osaset_set", read_pv="XOMNI-TEMPHUM-OSASET_SET:0.VAL"
)
temperature_osaset_rb = Cpt(
EpicsSignal, name="temperature_osaset_rb", read_pv="XOMNI-TEMPHUM-OSASET_RB:0.VAL"
)
omegactrl_alive = Cpt(
EpicsSignal, name="omegactrl_alive", read_pv="XOMNI-TEMPHUM-OMEGACTRL-ALIVE:0.VAL"
)
galilctrl_alive = Cpt(
EpicsSignal, name="galilctrl_alive", read_pv="XOMNI-TEMPHUM-GALILCTRL-ALIVE:0.VAL"
)
temperature_heater = Cpt(
EpicsSignal, name="temperature_heater", read_pv="XOMNI-TEMPHUM-HEATER:0.VAL"
)
temperature_heaterset_set = Cpt(
EpicsSignal, name="temperature_heaterset_set", read_pv="XOMNI-TEMPHUM-HEATERSET_SET:0.VAL"
)
temperature_heaterset_rb = Cpt(
EpicsSignal, name="temperature_heaterset_rb", read_pv="XOMNI-TEMPHUM-HEATERSET_RB:0.VAL"
)
temperature_heaterhousing = Cpt(
EpicsSignal, name="temperature_heaterhousing", read_pv="XOMNI-TEMPHUM-HEATERHOUSE:0.VAL"
)
temperature_heaterhousing_alarm = Cpt(
EpicsSignal, name="temperature_heaterhousing_alarm", read_pv="XOMNI-TEMPHUM-HEATERHOUSEALARM:0.VAL"
)
temperature_heater_enabled = Cpt(
EpicsSignal, name="temperature_heater_enabled", read_pv="XOMNI-TEMPHUM-HEAT_EN:0.VAL"
)
# XOMNI-TEMPHUM-HUM1,0}
# {XOMNI-TEMPHUM-HUM2,0}
# {XOMNI-TEMPHUM-TEMP1,0}
# {XOMNI-TEMPHUM-TEMP2,0}
# {XOMNI-TEMPHUM-ERR1,0}
# {XOMNI-TEMPHUM-ERR2,0}
# {XOMNI-TEMPHUM-FLOW,0}
# {XOMNI-TEMPHUM-FLOWSET,0}
# {XOMNI-TEMPHUM-FLOWSETSET,0}
# {XOMNI-TEMPHUM-HUMSET,0}
# {XOMNI-TEMPHUM-HUMSETSET,0}
# {XOMNI-TEMPHUM-SUCTION,0}
# {XOMNI-TEMPHUM-SUCTIONSET,0}
# {XOMNI-TEMPHUM-VALVEDRY,0}
# {XOMNI-TEMPHUM-VALVEWET,0}
# {XOMNI-TEMPHUM-VALVESUC,0}
# {XOMNI-TEMPHUM-SETUPTEMP,0}
# }
def __init__(self, prefix="", *, name, **kwargs):
super().__init__(prefix, name=name, **kwargs)
self.temperature_mirror.subscribe(self._emit_value, run=False)
def _emit_value(self, **kwargs):
timestamp = kwargs.pop("timestamp", time.time())
self._run_subs(sub_type=self.SUB_VALUE, timestamp=timestamp, obj=self)
def show_all(self):
print("Temperatures in flOMNI")
print(f" Mirror: {float(self.temperature_mirror.get()):.2f} degC")
print(f" Mirror Setpoint: {float(self.temperature_mirrorset_rb.get()):.2f} degC")
print(f" OSA: {float(self.temperature_osa.get()):.1f} degC")
print(f" OSA Setpoint: {float(self.temperature_osaset_rb.get()):.1f} degC")
print(f" Heater: {float(self.temperature_heater.get()):.1f} degC")
print(f" Heater Setpoint: {float(self.temperature_heaterset_rb.get()):.1f} degC")
print(f" Heater Enabled: {float(self.temperature_heater_enabled.get()):.0f}")
print(f" Heater Housing: {float(self.temperature_heaterhousing.get()):.1f} degC")
print(f" Heater Housing Alarm: {float(self.temperature_heaterhousing_alarm.get()):.0f}")
print(f" OMEGA ALIVE: {float(self.temperature_heaterhousing_alarm.get()):.0f}")
def help(self):
print("Help for OMNY temperatures:")