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)

This commit is contained in:
2024-07-03 08:48:42 +02:00
parent 859a22476d
commit 0717ed147c
2 changed files with 90 additions and 22 deletions

View File

@@ -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

View File

@@ -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)