Source code for csaxs_bec.devices.omny.flomni_temp_and_humidity

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

[docs] class FlomniTempHumError(Exception): pass
[docs] 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" ) temperature_heater_enabled = Cpt( EpicsSignal, name="temperature_heater_enabled", read_pv="XOMNI-TEMPHUM-HEAT_EN:0.VAL" ) ###### GALIL CONTROLLER humidity_sensor1 = Cpt( EpicsSignal, name="humidity_sensor1", read_pv="XOMNI-TEMPHUM-HUM1:0.VAL" ) humidity_sensor2 = Cpt( EpicsSignal, name="humidity_sensor2", read_pv="XOMNI-TEMPHUM-HUM2:0.VAL" ) humidity_sensor1_temperature = Cpt( EpicsSignal, name="humidity_sensor1_temperature", read_pv="XOMNI-TEMPHUM-TEMP1:0.VAL" ) humidity_sensor2_temperature = Cpt( EpicsSignal, name="humidity_sensor2_temperature", read_pv="XOMNI-TEMPHUM-TEMP2:0.VAL" ) humidity_sensor1_err = Cpt( EpicsSignal, name="humidity_sensor1_err", read_pv="XOMNI-TEMPHUM-ERR1:0.VAL" ) humidity_sensor2_err = Cpt( EpicsSignal, name="humidity_sensor2_err", read_pv="XOMNI-TEMPHUM-ERR2:0.VAL" ) flow = Cpt( EpicsSignal, name="flow", read_pv="XOMNI-TEMPHUM-FLOW:0.VAL" ) flowset = Cpt( EpicsSignal, name="flowset", read_pv="XOMNI-TEMPHUM-FLOWSET:0.VAL" ) flowset_set = Cpt( EpicsSignal, name="flowset_set", read_pv="XOMNI-TEMPHUM-FLOWSETSET:0.VAL" ) humidityset = Cpt( EpicsSignal, name="humidityset", read_pv="XOMNI-TEMPHUM-HUMSET:0.VAL" ) humidityset_set = Cpt( EpicsSignal, name="humidityset_set", read_pv="XOMNI-TEMPHUM-HUMSETSET:0.VAL" ) suction = Cpt( EpicsSignal, name="suction", read_pv="XOMNI-TEMPHUM-SUCTION:0.VAL" ) valvedry = Cpt( EpicsSignal, name="valvedry", read_pv="XOMNI-TEMPHUM-VALVEDRY:0.VAL" ) valvewet = Cpt( EpicsSignal, name="valvewet", read_pv="XOMNI-TEMPHUM-VALVEWET:0.VAL" ) setuptemp = Cpt( EpicsSignal, name="setuptemp", read_pv="XOMNI-TEMPHUM-SETUPTEMP:0.VAL" ) def omega_controller_running(self): time_diff = np.fabs(float(self.omegactrl_alive.get()) - time.time()) if time_diff > 120: return False else: return True def galil_controller_running(self): time_diff = np.fabs(float(self.galilctrl_alive.get()) - time.time()) if time_diff > 120: return False else: return True 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("=== flOMNI Temperature & Humidity Overview ===") print("") print("Temperatures:") print(f" Mirror: {float(self.temperature_mirror.get()):7.2f} °C") print(f" Mirror Setpoint (RB): {float(self.temperature_mirrorset_rb.get()):7.2f} °C") print(f" OSA: {float(self.temperature_osa.get()):7.2f} °C") print(f" OSA Setpoint (RB): {float(self.temperature_osaset_rb.get()):7.2f} °C") print(f" Heater: {float(self.temperature_heater.get()):7.2f} °C") print(f" Heater Setpoint (RB): {float(self.temperature_heaterset_rb.get()):7.2f} °C") print(f" Heater Enabled: {float(self.temperature_heater_enabled.get()):.0f}") print(f" Heater Housing: {float(self.temperature_heaterhousing.get()):7.2f} °C") print(f" Heater Housing Alarm: {float(self.temperature_heaterhousing_alarm.get()):.0f}") print("") print("Humidity Sensors:") print(f" Sensor 1 Humidity: {float(self.humidity_sensor1.get()):7.2f} %RH") print(f" Sensor 1 Temperature: {float(self.humidity_sensor1_temperature.get()):7.2f} °C") print(f" Sensor 1 Error: {float(self.humidity_sensor1_err.get()):.0f}") print(f" Sensor 2 Humidity: {float(self.humidity_sensor2.get()):7.2f} %RH") print(f" Sensor 2 Temperature: {float(self.humidity_sensor2_temperature.get()):7.2f} °C") print(f" Sensor 2 Error: {float(self.humidity_sensor2_err.get()):.0f}") print(f" Humidity Setpoint: {float(self.humidityset.get()):7.2f} %RH") print("") print("Flow Control:") print(f" Flow: {float(self.flow.get()):7.2f} sccm") print(f" Flow Setpoint (RB): {float(self.flowset.get()):7.2f} sccm") print("") print("Suction:") print(f" Suction: {float(self.suction.get()):7.2f}") print("") print("Valves:") print(f" Dry Valve: {float(self.valvedry.get()):.0f}") print(f" Wet Valve: {float(self.valvewet.get()):.0f}") print("") print("Controller Heartbeats:") print(f" OMEGA Controller Alive: {self.omega_controller_running()}") print(f" GALIL Controller Alive: {self.galil_controller_running()}") print("==============================================") def help(self): print("Help for flOMNI temperature and humidity control system:") print("Available methods:") print(" show_all() - display all current values")