open to start

This commit is contained in:
2024-03-07 15:13:43 +01:00
parent bee564a5bd
commit 350f2884c3
2 changed files with 146 additions and 127 deletions
+2 -1
View File
@@ -202,9 +202,10 @@ class StartMain(BaseWindow):
#########################################################################
if __name__ == "__main__":
delay = 25 if "_" in _pymodule else 40
app = QApplication(sys.argv)
splash = BaseWindow.initialize_application(
app, appname=_appname, delay=25, facility=Facility.PROSCAN)
app, appname=_appname, delay=delay, facility=Facility.PROSCAN)
myapp = StartMain()
+144 -126
View File
@@ -75,6 +75,8 @@ class AppGui(QWidget):
"PG2-HUSH:STATE", "PO2-HUSH:STATE",
"PPIF-HUSH:STATE", "PG3-HUSH:STATE"]
self.sector_list_all = self.settings.data["headerMagnetSector"]
# Overwrite default
self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control")
#self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC")
@@ -126,13 +128,9 @@ class AppGui(QWidget):
self.table_sol_dict = {}
self.table_pwr_dict = {}
self.offtime_dict = {}
self.cafe.openPrepare()
self.cafe.open(["PRO-HUSH:LASTPWR", "PRO-HUSH:TOTPWR",
"PRO:LASTSAVE", "PPO-HUSH:TOTSAVE"])
self.cafe.open(self.sec_state_list)
self.cafe.openNowAndWait(0.1)
self.pv_mastership_status = "mastershipStatus"
local_sector_list = ["G1", "SH", "G2", "O2", "PIF", "G3"]
# Overload from guiheader.py
self.sector_disruptor_dict = {}
@@ -151,13 +149,49 @@ class AppGui(QWidget):
sector] = self.get_standby_dict(sector)
print(self.sector_designated_magnet_values_dict, flush=True)
print("====================================================================")
print("====================================================================")
pv_list = []
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
pv_list.append(self.settings.data[key]["status"])
self.sector_list = []
#Take out B1B2 and SH
for sector in self.sector_list_all:
if self.pv_mastership_status in self.settings.data[sector]:
self.sector_list.append(sector)
print(self.sector_list, flush=True)
self.pv_name_in_sector_list = [None] * len(self.sector_list)
for i, sector in enumerate(self.sector_list):
print(i, sector, flush=True)
self.pv_name_in_sector_list[i] = self.settings.data[sector][self.pv_mastership_status]
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[i].encode('utf-8')
self.pv_name_in_sector_list[i] = self.pv_name_in_sector_list[i].decode('ascii')
hush_list = ["PRO-HUSH:LASTPWR", "PRO-HUSH:TOTPWR",
"PRO:LASTSAVE", "PPO-HUSH:TOTSAVE"]
open_list = hush_list + self.sec_state_list + pv_list + self.pv_name_in_sector_list
self.cafe.openPrepare()
self.cafe.open(open_list)
self.cafe.openNowAndWait(1.5)
self.submastership_dict = {
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF",
"G3": "UNDEF"}
for key in self.submastership_dict:
pvname = self.settings.data[key]["mastershipStatus"]
pvname = self.settings.data[key][self.pv_mastership_status]
value = self.cafe.get(pvname)
self.submastership_dict[key] = value
@@ -232,14 +266,7 @@ class AppGui(QWidget):
break
'''
pv_list = []
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
pv_list.append(self.settings.data[key]["status"])
self.cafe.openPrepare()
self.cafe.open(pv_list)
self.cafe.openNowAndWait(2.0)
for key in self.sector_disruptor_dict:
if key in self.settings.data["headerMagnetSector"]:
@@ -287,32 +314,51 @@ class AppGui(QWidget):
elif "G3" in key:
self.receive_g3_update(
pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
'''
'''
#Trigger group_submaster_wgt
for wgt in self.submaster_wgt:
print("wgt.pv_name", wgt.pv_name, flush=True)
pvd = self.cafe.getPVCache(wgt.pv_name, dt='str')
wgt.trigger_monitor_str.emit(
pvd.value[0], pvd.status, pvd.alarmSeverity)
print("emit value =====================>", wgt.sector, pvd.value[0])
for sector in self.sector_list_all:
if "B1B2" in sector:
continue
gateway_indices = self.get_standby_index_list(sector)
for idx in gateway_indices:
pv_name_gw = self.table_sol_dict[sector].pv_gateway[idx].pv_name
pvd = self.cafe.getPVCache(pv_name_gw, dt='float')
print("pv_name_gw", pv_name_gw, flush=True)
pvd.show()
self.table_sol_dict[sector].pv_gateway[
idx].trigger_monitor_float.emit(
pvd.value[0], pvd.status, pvd.alarmSeverity)
print("gw emit done")
def enable_disable_beamline(self, sect, sector_line, value):
def is_submaster(local_sector, local_sector_line):
print("===========", local_sector, local_sector_line, flush=True)
#print("===========", local_sector, local_sector_line, flush=True)
if local_sector in self.submastership_dict and \
"Controlroom" not in self.assigned_master:
print(local_sector,
self.submastership_dict[local_sector].upper(),
flush=True)
#print(local_sector,
# self.submastership_dict[local_sector].upper(),
# flush=True)
if "PIF" in local_sector and (
"G3" in local_sector_line or \
"Gantry 3" in self.assigned_master):
print("HERE", flush=True)
print(self.submastership_dict, flush=True)
print("bool", bool(
"MASTERSHIP" in self.submastership_dict[
"G3"].upper()), flush=True)
return bool(
"MASTERSHIP" in self.submastership_dict[
"G3"].upper())
else:
print("HERE//", flush=True)
print(local_sector, local_sector_line, self.assigned_master, flush=True)
print("HERE//", flush=True)
return bool(
"MASTERSHIP" in self.submastership_dict[
local_sector].upper())
@@ -321,7 +367,7 @@ class AppGui(QWidget):
else:
return self.gui_header.is_master()
print("sect/value/sector_line", sect, value, sector_line, flush=True)
#print("sect/value/sector_line", sect, value, sector_line, flush=True)
if not sector_line:
return
@@ -330,10 +376,10 @@ class AppGui(QWidget):
for sector in reversed(sector_line):
if "Geschlossen" not in self.sector_disruptor_dict[
sector] or not is_submaster(sector, sector_line): #not self.gui_header.is_master():
print("sector/value", sector, value, flush=True)
print("isMaster", self.gui_header.is_master(), flush=True)
print("master", self.gui_header.mastership, flush=True)
print("assigned master", self.assigned_master, flush=True)
#print("sector/value", sector, value, flush=True)
#print("isMaster", self.gui_header.is_master(), flush=True)
#print("master", self.gui_header.mastership, flush=True)
#print("assigned master", self.assigned_master, flush=True)
with self.lock:
if self.table_sol_dict[
sector].standby_value_button.isEnabled():
@@ -345,8 +391,8 @@ class AppGui(QWidget):
self.table_sol_dict[
sector].restore_value_button.setEnabled(False)
else:
print("Geschlossen? sector/value/ismaster", sector, value,
self.gui_header.mastership, flush=True)
#print("Geschlossen? sector/value/ismaster", sector, value,
# self.gui_header.mastership, flush=True)
with self.lock:
if not self.table_sol_dict[
sector].standby_value_button.isEnabled():
@@ -467,7 +513,8 @@ class AppGui(QWidget):
self.gui_header.color_pframe(color)
#print("SIMULATION IS TRUE??", self.input_parameters["simulation"])
#Not required any longer
@Slot(int, str, object)
def receive_sec_state(self, handle, pv, pvdata):
if pvdata.status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
@@ -517,7 +564,7 @@ class AppGui(QWidget):
pv_standby_dict[pv_magnet] = standby_value
return pv_standby_dict
#Not used any longer
def already_in_standby(self, sec):
devices = self.settings.data[sec]["iocDevice"]
pv_list = []
@@ -562,7 +609,7 @@ class AppGui(QWidget):
self.submastership_dict[sender.sector] = value
#Check on value and act accordingly
print("receive_submaster", sender.sector, value, flush=True)
#print("receive_submaster", sender.sector, value, flush=True)
if "G1" in sender.sector:
pvd = self.cafe.getPVCache(
self.settings.data["G1"]["status"], dt="str")
@@ -588,35 +635,36 @@ class AppGui(QWidget):
self.settings.data["G3"]["status"], dt="str")
self.receive_g3_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
print("receive_submaster->", sender.sector, flush=True)
pv_id = "mastershipStatus"
qgrid = QGridLayout()
qgb = QGroupBox("Mastership Status")
no_beamlines = 0
sector_list_all = self.settings.data["headerMagnetSector"]
sector_list = []
#sector_list_all = self.settings.data["headerMagnetSector"]
#sector_list = []
#Take out B1B2 and SH
for sector in sector_list_all:
if "mastershipStatus" in self.settings.data[sector]:
sector_list.append(sector)
#for sector in self.sector_list_all:
# if "mastershipStatus" in self.settings.data[sector]:
# sector_list.append(sector)
print(sector_list, flush=True)
#print(sector_list, flush=True)
self.submaster_wgt = [None] * len(sector_list)
self.submaster_wgt = [None] * len(self.sector_list)
'''
pv_name = [None] * len(sector_list)
for i, sector in enumerate(sector_list):
print(i, sector, flush=True)
pv_name[i] = self.settings.data[sector][pv_id]
pv_name[i] = self.settings.data[sector][self.pv_mastership_status]
pv_name[i] = pv_name[i].encode('utf-8')
pv_name[i] = pv_name[i].decode('ascii')
self.cafe.openPrepare()
self.cafe.open(pv_name)
self.cafe.openNowAndWait(2.0)
'''
for i, sector in enumerate(sector_list):
if "mastershipStatus" in self.settings.data[sector]:
for i, sector in enumerate(self.sector_list):
if self.pv_mastership_status in self.settings.data[sector]:
no_beamlines += 1
qgb_inner = QGroupBox(sector)
@@ -630,16 +678,12 @@ class AppGui(QWidget):
#pv_name = self.settings.data[sector][pv_id]
#pv_name = pv_name.encode('utf-8')
#pv_name = pv_name.decode('ascii')
self.submaster_wgt[i] = CAQLabel(self, pv_name=str(pv_name[i]))
self.submaster_wgt[i] = CAQLabel(
self, pv_name=str(self.pv_name_in_sector_list[i]))
self.submaster_wgt[i].sector = sector
self.submaster_wgt[i].sector_list = sector_list
self.submaster_wgt[i].sector_list = self.sector_list
self.submaster_wgt[i].trigger_monitor_str.connect(receive_submaster_update)
#time.sleep(0.1)
#QApplication.processEvents()
#time.sleep(0.1)
#QApplication.processEvents()
#time.sleep(0.1)
#pvd = self.cafe.getPVCache(pv_name, dt='str')
#self.submaster_wgt[i].trigger_monitor_str.emit(pvd.value[0], pvd.status,
@@ -654,6 +698,7 @@ class AppGui(QWidget):
qgrid.addWidget(qgb_inner, 0, i, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter))
'''
QApplication.processEvents()
time.sleep(0.1)
for wgt in self.submaster_wgt:
@@ -661,6 +706,7 @@ class AppGui(QWidget):
pvd = self.cafe.getPVCache(wgt.pv_name, dt='str')
wgt.trigger_monitor_str.emit(pvd.value[0], pvd.status, pvd.alarmSeverity)
print("emit value ========================================>", wgt.sector, pvd.value[0])
'''
qgb.setContentsMargins(9, 9, 9, 9)
qgb.setObjectName("OUTER")
qgb.setLayout(qgrid)
@@ -676,31 +722,6 @@ class AppGui(QWidget):
idx_last = self.settings.data["header"].index("MASTER")
# Sector
'''
qgrid.setContentsMargins(0, 0, 0, 0)
qgrid.setSpacing(0)
container2 = QWidget()
container3 = QWidget()
container4 = QWidget()
container5 = QWidget()
container6 = QWidget()
layout2 = QHBoxLayout(container2)
layout2.setContentsMargins(0, 0, 0, 0)
layout2.setAlignment(Qt.AlignCenter)
layout3 = QHBoxLayout(container3)
layout3.setContentsMargins(0, 0, 0, 0)
layout3.setAlignment(Qt.AlignCenter)
layout4 = QHBoxLayout(container4)
layout4.setContentsMargins(0, 0, 0, 0)
layout4.setAlignment(Qt.AlignCenter)
layout5 = QHBoxLayout(container5)
layout5.setContentsMargins(0, 0, 0, 0)
layout5.setAlignment(Qt.AlignCenter)
layout6 = QHBoxLayout(container6)
layout6.setContentsMargins(0, 0, 0, 0)
layout6.setAlignment(Qt.AlignCenter)
'''
qlp = QLabel("Power \n(kW)")
f = qlp.font()
f.setPixelSize(13)
@@ -852,7 +873,7 @@ class AppGui(QWidget):
self.offtime_dict[pv_pwr_timeout] = qptime
# Time to allow cb_outtime to fire
time.sleep(0.2)
time.sleep(0.05)
qptime.setFixedWidth(104)
@@ -923,20 +944,21 @@ class AppGui(QWidget):
# updates of SOL also update PWR, and vice-versa
# Do not click if already on standby!!
update_enabled = is_update_enabled()
with self.lock():
update_enabled = is_update_enabled()
if update_enabled:
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.click()
time.sleep(0.05)
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
if update_enabled:
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.click()
time.sleep(0.05)
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
table.init_value_button.setEnabled(False)
self.table_pwr_dict[sector].init_value_button.click()
time.sleep(0.05)
self.table_sol_dict[sector].init_value_button.setEnabled(True)
table.init_value_button.setEnabled(False)
self.table_pwr_dict[sector].init_value_button.click()
time.sleep(0.05)
self.table_sol_dict[sector].init_value_button.setEnabled(True)
QApplication.processEvents(QEventLoop.AllEvents, 1)
QApplication.processEvents(QEventLoop.AllEvents, 1)
if not self.input_parameters["simulation"]:
status, status_list, pv_list = table.set_standby_values()
@@ -952,11 +974,11 @@ class AppGui(QWidget):
##self.check_status(_pymodule, 'set', pv, stat, _line())
# Disable because _table.set_standby_values() enables it
if not update_enabled:
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.setEnabled(False)
with self.lock():
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
table.init_value_button.setEnabled(False)
def on_sector_restore(self):
@@ -986,9 +1008,10 @@ class AppGui(QWidget):
stat = self.cafe.set(pv_last_pwr, sum_pwr)
self.check_status(_pymodule, "set", pv_last_pwr, stat, _line())
def is_sector_standby(self, sector, pv_name, value):
self.sector_designated_magnet_values_dict[sector][pv_name] = value
print(self.sector_designated_magnet_values_dict[sector], flush=True)
#print(self.sector_designated_magnet_values_dict[sector], flush=True)
is_standby = True
for pv in self.sector_designated_magnet_values_dict[sector]:
val_now = self.sector_designated_magnet_values_dict[sector][pv]
@@ -996,42 +1019,35 @@ class AppGui(QWidget):
if abs(val_now) > (1.2 * abs(val_standby)):
is_standby = False
break;
print(sector, " is in standby:", is_standby, flush=True)
break;
with self.lock:
if not is_standby:
print(sector, " is in standby==>:", is_standby, flush=True)
if not self.table_sol_dict[sector].init_value_button.isEnabled():
#print(sector, " isEnabled is False make True==>:", is_standby, flush=True)
self.table_sol_dict[sector].init_value_button.setEnabled(True)
print(sector, " Test pwr in standby==>:", is_standby, flush=True)
if not self.table_pwr_dict[sector].init_value_button.isEnabled():
#print(sector, " pwr isEnabled is False make True==>:", is_standby, flush=True)
if not self.table_pwr_dict[sector].init_value_button.isEnabled():
self.table_pwr_dict[sector].init_value_button.setEnabled(True)
print(sector, " is in standby======>:", is_standby, flush=True)
else:
print(sector, " is in standby==>:", is_standby, flush=True)
if self.table_sol_dict[sector].init_value_button.isEnabled():
print(sector, " isEnabled is True make Flase==>:", is_standby, flush=True)
self.table_sol_dict[sector].init_value_button.setEnabled(False)
if self.table_pwr_dict[sector].init_value_button.isEnabled():
print(sector, " pwr isEnabled is False make True==>:", is_standby, flush=True)
if self.table_pwr_dict[sector].init_value_button.isEnabled():
self.table_pwr_dict[sector].init_value_button.setEnabled(False)
print(sector, " is sector standby end:", is_standby, flush=True)
@Slot(float, int, int)
def designated_magnet_cb(self, value, status, alarm_severity):
print("designated_magnet_cb", status, flush=True)
#print("designated_magnet_cb", status, flush=True)
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
return
sender = self.sender()
sector = sender.sector
pv_name = sender.pv_name
print("local_cb", sender.pv_name, value, status, alarm_severity, flush=True)
#print("local_cb", sender.pv_name, value, status, alarm_severity, flush=True)
#self.sector_designated_magnet_values_dict[sector][pv_name] = value
self.timer.singleShot(0, lambda: self.is_sector_standby(sector, pv_name, value))
print("designated_magnet_cb end for sector", sector, flush=True)
#print("designated_magnet_cb end for sector", sector, flush=True)
@@ -1237,8 +1253,10 @@ class AppGui(QWidget):
table_sol.pv_gateway[idx].sector = sector
table_sol.pv_gateway[idx].trigger_monitor_float.connect(
self.designated_magnet_cb)
time.sleep(0.55)
#time.sleep(0.55)
#move to init
'''
for idx in gateway_indices:
pv_name_gw = table_sol.pv_gateway[idx].pv_name
pvd = self.cafe.getPVCache(pv_name_gw, dt='float')
@@ -1248,16 +1266,16 @@ class AppGui(QWidget):
table_sol.pv_gateway[idx].trigger_monitor_float.emit(
pvd.value[0], pvd.status, pvd.alarmSeverity)
print("gw emit done")
'''
def on_sol_update():
table_sol.init_value_button.setEnabled(False)
table_pwr.init_value_button.click()
time.sleep(0.1)
time.sleep(0.05)
table_sol.init_value_button.setEnabled(True)
pv = "P" + table_pwr.init_value_button.sector + "-HUSH:LASTPWR"
init_sum = sum(table_pwr.get_init_values().values())
print("SUM up all the values", pv, init_sum, flush=True)
#print("SUM up all the values", pv, init_sum, flush=True)
#B1B2 is not is not in state machine
if "B1B2" in table_pwr.init_value_button.sector:
return
@@ -1268,7 +1286,7 @@ class AppGui(QWidget):
def on_init_update():
table_pwr.init_value_button.setEnabled(False)
table_sol.init_value_button.click()
time.sleep(0.1)
time.sleep(0.05)
table_pwr.init_value_button.setEnabled(True)
if init_column: