diff --git a/csaxs_bec/device_configs/flomni_config.yaml b/csaxs_bec/device_configs/flomni_config.yaml index 24e9679..ab0b16f 100644 --- a/csaxs_bec/device_configs/flomni_config.yaml +++ b/csaxs_bec/device_configs/flomni_config.yaml @@ -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 \ No newline at end of file + 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 \ No newline at end of file diff --git a/csaxs_bec/devices/omny/flomni_temp_and_humidity.py b/csaxs_bec/devices/omny/flomni_temp_and_humidity.py new file mode 100644 index 0000000..498fc78 --- /dev/null +++ b/csaxs_bec/devices/omny/flomni_temp_and_humidity.py @@ -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:")