From 0717ed147c4e3454ae39c12766bc4a5cc997ba56 Mon Sep 17 00:00:00 2001 From: chrin Date: Wed, 3 Jul 2024 08:48:42 +0200 Subject: [PATCH] monitor BEAMREQ for UCN to better handle enabling-disenabling of sector STANDBY button; add PK1, PK2 to PK1, PK1 sector line (previously only IW was required) --- hush.sh | 4 +- src/gui.py | 108 +++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 90 insertions(+), 22 deletions(-) diff --git a/hush.sh b/hush.sh index 0ee1694..019db15 100755 --- a/hush.sh +++ b/hush.sh @@ -1,5 +1,5 @@ #!/bin/bash -cd /hipa/bd/applications/hush/hla/2.1.0 +cd /hipa/bd/applications/hush/hla/2.1.1 # For use if script is sourced rather than executed appNameDefault="hush.sh" @@ -56,7 +56,7 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64 #C_EXT version for Py 3.5, 3.7. 3.8, 3.10: -export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/hipa/bd/applications/deps/apps4ops/v1.10.0 +export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/hipa/bd/applications/deps/apps4ops/v1.11.0 echo $PYTHONPATH diff --git a/src/gui.py b/src/gui.py index 4a4dac6..7b81456 100644 --- a/src/gui.py +++ b/src/gui.py @@ -81,7 +81,7 @@ class AppGui(QWidget): self.table_pwr_dict = {} self.offtime_dict = {} - self.I_min = 1.0 + self.I_min = 1.0 #0.09 for testing self.with_rf = False self.sec_state_list = ["ZIP2-HUSH:STATE", "ZIW2-HUSH:STATE", @@ -92,10 +92,16 @@ class AppGui(QWidget): self.cafe.open(["ZHIPA-HUSH:LASTPWR", "ZHIPA-HUSH:TOTPWR", "ZHIPA-HUSH:LASTSAVE", "ZHIPA-HUSH:TOTSAVE"]) self.cafe.open(self.sec_state_list) - self.cafe.open("UCN:BEAMREQ:STATUS") + #self.cafe.open("UCNQ:BEAMREQ:STATUS") self.cafe.openNowAndWait(0.1) - self.cafe.monitor("UCNQ:BEAMREQ:STATUS") + self.uncq_beam_req = self.cafe.getCache("UCNQ:BEAMREQ:STATUS") + if self.uncq_beam_req is None: + self.uncq_beam_req = "stopped" + + self.beam_req_running = False \ + if self.uncq_beam_req == "stopped" else True + #self.cafe.monitor("UCNQ:BEAMREQ:STATUS") idx = self.settings.data["header"].index("IP2") self.sectorI_dict = {} @@ -158,8 +164,8 @@ class AppGui(QWidget): ucn_line = ["PK1", "PK2", "UCN"] sinq_line = ["PK1", "PK2", "SINQ"] - pk1_line = ["IW2"] - pk2_line = ["IW2"] + pk1_line = ["IW2", "PK1"] + pk2_line = ["IW2", "PK1", "PK2"] for sector in self.settings.data["header"][idx:]: gateway_indices = self.get_standby_index_list(sector) @@ -172,22 +178,49 @@ class AppGui(QWidget): idx].trigger_monitor_float.emit( pvd.value[0], pvd.status, pvd.alarmSeverity) - def enable_disable_ucn(sect, sector_line, value): + + def enable_disable_ucn(sect, sector_line, value): self.sectorI_dict[sect] = value + ''' beam_req_running = True - beam_req_status = self.cafe.getCache("UCNQ:BEAMREQ:STATUS") - #print(" beam_req_status", beam_req_status, flush=True) - - if beam_req_status is not None: - if beam_req_status == "stopped": - beam_req_running = False + def is_beam_req_running(): + beam_req_running = True + beam_req_status = self.uncq_beam_req #self.cafe.getCache("UCNQ:BEAMREQ:STATUS") + + if beam_req_status is not None: + if beam_req_status == "stopped": + beam_req_running = False + return beam_req_running + ''' + for sector in sector_line: - beam_req_flag = True + beam_req_flag = False + if sector == "UCN": - beam_req_flag = beam_req_running - + beam_req_flag = self.beam_req_running #is_beam_req_running() + ''' + with self.lock: + if not beam_req_flag: + if not self.table_sol_dict[ + sector].init_value_button.isEnabled(): + self.table_sol_dict[ + sector].init_value_button.setEnabled(True) + if not self.table_pwr_dict[ + sector].init_value_button.isEnabled(): + self.table_pwr_dict[ + sector].init_value_button.setEnabled(True) + else: + if self.table_sol_dict[ + sector].init_value_button.isEnabled(): + self.table_sol_dict[ + sector].init_value_button.setEnabled(False) + if self.table_pwr_dict[ + sector].init_value_button.isEnabled(): + self.table_pwr_dict[ + sector].init_value_button.setEnabled(False) + ''' # if self.sectorI_dict['UCN'] > self.I_min or self.sectorI_dict[ # 'SINQ'] > self.I_min: if self.sectorI_dict[sector] > self.I_min or beam_req_flag: @@ -195,7 +228,6 @@ class AppGui(QWidget): sector].standby_value_button.isEnabled(): self.table_sol_dict[ sector].standby_value_button.setEnabled(False) - else: if not self.table_sol_dict[ sector].standby_value_button.isEnabled(): @@ -220,9 +252,16 @@ class AppGui(QWidget): def enable_disable_pk(sect, sector_line, value): self.sectorI_dict[sect] = value + + #print("==>sector firing", sect, "with value", value) + for sector in sector_line: - if self.sectorI_dict["PK1"] > self.I_min or self.sectorI_dict[ - "PK2"] > self.I_min: + #print("sector", sector, "in line", sector_line, + # "has value", self.sectorI_dict[sector] + #) + #if self.sectorI_dict["PK1"] > self.I_min or self.sectorI_dict[ + # "PK2"] > self.I_min: + if self.sectorI_dict[sector] > self.I_min: if self.table_sol_dict[ sector].standby_value_button.isEnabled(): self.table_sol_dict[ @@ -233,6 +272,18 @@ class AppGui(QWidget): self.table_sol_dict[ sector].standby_value_button.setEnabled(True) + def receive_ucnq_update(value, status, alarm_severity): + del status, alarm_severity + self.uncq_beam_req = value + print("self.uncq_beam_req", self.uncq_beam_req) + self.beam_req_running = True + if self.uncq_beam_req is not None: + if self.uncq_beam_req == "stopped": + self.beam_req_running = False + + enable_disable_ucn("UCN", ucn_line, self.sectorI_dict["UCN"]) + + def receive_ucn_update(value, status, alarm_severity): del status, alarm_severity enable_disable_ucn("UCN", ucn_line, value) @@ -249,6 +300,9 @@ class AppGui(QWidget): del status, alarm_severity enable_disable_pk("PK2", pk2_line, value) + self.gui_header.beam_current_wgt_dict[ + "UCNQ"].trigger_monitor_str.connect(receive_ucnq_update) + self.gui_header.beam_current_wgt_dict[ "UCN"].trigger_monitor_float.connect(receive_ucn_update) self.gui_header.beam_current_wgt_dict[ @@ -258,6 +312,11 @@ class AppGui(QWidget): self.gui_header.beam_current_wgt_dict[ "PK2"].trigger_monitor_float.connect(receive_pk2_update) + pvd = self.cafe.getPV("UCNQ:BEAMREQ:STATUS") + self.gui_header.beam_current_wgt_dict[ + "UCNQ"].trigger_monitor_str.emit( + pvd.value[0], pvd.status, pvd.alarmSeverity) + # Not required any longer @Slot(int, str, object) @@ -358,9 +417,17 @@ class AppGui(QWidget): val_now = self.sector_designated_magnet_values_dict[sector][pv] val_standby = self.sector_designated_magnet_standby_dict[sector][pv] #print(sector, val_now, val_standby) - if abs(val_now) > (1.2 * abs(val_standby)): + if sector == "UCN": is_standby = False - break + if not (abs(val_now) > (1.2 * abs(val_standby))): + is_standby = True + break + else: + if abs(val_now) > (1.2 * abs(val_standby)): + is_standby = False + break + + with self.lock: if not is_standby: @@ -981,6 +1048,7 @@ class AppGui(QWidget): hbox.setSpacing(10) hbox.setAlignment(Qt.AlignTop) + qw = QWidget() qw.setLayout(hbox)