|
|
|
|
@@ -95,7 +95,8 @@ class AppGui(QWidget):
|
|
|
|
|
self.no_alarm_sss = ('QLabel {color:#000000; font-weight: bold; ' +
|
|
|
|
|
no_alarm_color_str + '}')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.status_dict = {}
|
|
|
|
|
|
|
|
|
|
self.font_gui = self.parent.gui_frame.font_gui
|
|
|
|
|
self.input_parameters = self.parent.input_parameters
|
|
|
|
|
self.input_labels = self.parent.input_labels
|
|
|
|
|
@@ -115,14 +116,41 @@ class AppGui(QWidget):
|
|
|
|
|
self.timer_blink = QTimer()
|
|
|
|
|
self.timer_blink.setSingleShot(True)
|
|
|
|
|
self.timer_blink.count = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.sec_state_list = ["PG1-HUSH:STATE", "PSH-HUSH:STATE",
|
|
|
|
|
"PG2-HUSH:STATE", "PO2-HUSH:STATE",
|
|
|
|
|
"PPIF-HUSH:STATE", "PG3-HUSH:STATE"]
|
|
|
|
|
|
|
|
|
|
self.sector_list_all = self.settings.data["headerMagnetSector"]
|
|
|
|
|
|
|
|
|
|
self.pv_mastership_status = "mastershipStatus"
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
#Keep SH
|
|
|
|
|
self.simple_sector_list = self.settings.data["headerMagnetSector"][
|
|
|
|
|
1:] if "Controlroom" in self.assigned_master else self.sector_list
|
|
|
|
|
|
|
|
|
|
self.simple_t0 = [None] * len(self.simple_sector_list)
|
|
|
|
|
self.simple_tdiff = [None] * len(self.simple_sector_list)
|
|
|
|
|
self.simple_tlast_asleep = [None] * len(self.simple_sector_list)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i, sector in enumerate(self.simple_sector_list):
|
|
|
|
|
pvdata = self.cafe.getPVCache(self.settings.data[sector]['status'])
|
|
|
|
|
tz = pvdata.tsDate
|
|
|
|
|
self.simple_t0[i] = datetime(
|
|
|
|
|
tz[0], tz[1], tz[2], tz[3], tz[4], tz[5])
|
|
|
|
|
self.simple_tdiff[i] = self.time_difference(self.simple_t0[i])
|
|
|
|
|
print('sector, time difference = ', sector, self.simple_tdiff[i])
|
|
|
|
|
self.simple_tlast_asleep[i] = self.simple_t0[i]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Overwrite default
|
|
|
|
|
|
|
|
|
|
@@ -181,7 +209,7 @@ class AppGui(QWidget):
|
|
|
|
|
self.table_pwr_dict = {}
|
|
|
|
|
self.offtime_dict = {}
|
|
|
|
|
|
|
|
|
|
self.pv_mastership_status = "mastershipStatus"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local_sector_list = ["G1", "SH", "G2", "O2", "PIF", "G3"]
|
|
|
|
|
# Overload from guiheader.py
|
|
|
|
|
@@ -210,30 +238,7 @@ class AppGui(QWidget):
|
|
|
|
|
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)
|
|
|
|
|
#Keep SH
|
|
|
|
|
self.simple_sector_list = self.settings.data["headerMagnetSector"][
|
|
|
|
|
1:] if "Controlroom" in self.assigned_master else self.sector_list
|
|
|
|
|
|
|
|
|
|
self.simple_t0 = [None] * len(self.simple_sector_list)
|
|
|
|
|
self.simple_tdiff = [None] * len(self.simple_sector_list)
|
|
|
|
|
|
|
|
|
|
for i, sector in enumerate(self.simple_sector_list):
|
|
|
|
|
pvdata = self.cafe.getPVCache(self.settings.data[sector]['status'])
|
|
|
|
|
tz = pvdata.tsDate
|
|
|
|
|
self.simple_t0[i] = datetime(tz[0], tz[1], tz[2], tz[3], tz[4], tz[5])
|
|
|
|
|
self.simple_tdiff[i] = self.time_difference(self.simple_t0[i])
|
|
|
|
|
print('sector, time difference = ', sector, self.simple_tdiff[i])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.pv_name_in_sector_list = [None] * len(self.sector_list)
|
|
|
|
|
for i, sector in enumerate(self.sector_list):
|
|
|
|
|
print(i, sector, flush=True)
|
|
|
|
|
@@ -246,13 +251,15 @@ class AppGui(QWidget):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hush_list = ["PRO-HUSH:LASTPWR", "PRO-HUSH:TOTPWR",
|
|
|
|
|
"PRO:LASTSAVE", "PPO-HUSH:TOTSAVE"]
|
|
|
|
|
"PRO-HUSH:LASTSAVE", "PRO-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.cafe.openNowAndWait(1.0)
|
|
|
|
|
|
|
|
|
|
self.cafe.printDisconnected()
|
|
|
|
|
|
|
|
|
|
self.submastership_dict = {
|
|
|
|
|
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF",
|
|
|
|
|
"G3": "UNDEF"}
|
|
|
|
|
@@ -270,6 +277,22 @@ class AppGui(QWidget):
|
|
|
|
|
self.gui_frame.measurement_layout.addWidget(
|
|
|
|
|
self.magnet_tab_wgt, 0, 2, 3, 2, alignment=Qt.AlignTop)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
status_wgt = self.group_sector_status()
|
|
|
|
|
status_wgt.setFixedHeight(340)
|
|
|
|
|
|
|
|
|
|
#qf = QLabel('HELP')
|
|
|
|
|
#qf.setFixedHeight(25)
|
|
|
|
|
#self.gui_frame.measurement_layout.addWidget(qf, 1, 0, 1, 1)
|
|
|
|
|
|
|
|
|
|
self.gui_frame.measurement_layout.addWidget(
|
|
|
|
|
status_wgt, 1, 0, 4, 1, alignment=Qt.AlignTop)
|
|
|
|
|
|
|
|
|
|
self.gui_frame.measurement_layout.setRowStretch(6, 90)
|
|
|
|
|
self.gui_frame.measurement_layout.setColumnStretch(10, 90)
|
|
|
|
|
#self.gui_frame.measurement_layout.setVerticalSpacing(10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_row = self.gui_frame.measurement_layout.rowCount()
|
|
|
|
|
_column = self.gui_frame.measurement_layout.columnCount()-2
|
|
|
|
|
|
|
|
|
|
@@ -309,19 +332,6 @@ class AppGui(QWidget):
|
|
|
|
|
self.magnet_tab_wgt.setCurrentIndex(self.sh_idx)
|
|
|
|
|
self.gui_frame.central_tab_widget.setCurrentIndex(0)
|
|
|
|
|
|
|
|
|
|
status_wgt = self.group_sector_status()
|
|
|
|
|
status_wgt.setFixedHeight(340)
|
|
|
|
|
|
|
|
|
|
#qf = QLabel('HELP')
|
|
|
|
|
#qf.setFixedHeight(25)
|
|
|
|
|
#self.gui_frame.measurement_layout.addWidget(qf, 1, 0, 1, 1)
|
|
|
|
|
|
|
|
|
|
self.gui_frame.measurement_layout.addWidget(
|
|
|
|
|
status_wgt, 1, 0, 4, 1, alignment=Qt.AlignTop)
|
|
|
|
|
|
|
|
|
|
self.gui_frame.measurement_layout.setRowStretch(6, 90)
|
|
|
|
|
self.gui_frame.measurement_layout.setColumnStretch(10, 90)
|
|
|
|
|
self.gui_frame.measurement_layout.setVerticalSpacing(10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if "Controlroom" in self.assigned_master:
|
|
|
|
|
@@ -340,9 +350,7 @@ class AppGui(QWidget):
|
|
|
|
|
self.gui_frame.simulation_checkbox.stateChanged.connect(
|
|
|
|
|
self.simulation_update)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for key in self.sector_disruptor_dict:
|
|
|
|
|
if key in self.settings.data["headerMagnetSector"]:
|
|
|
|
|
print(key, flush=True)
|
|
|
|
|
@@ -356,21 +364,31 @@ class AppGui(QWidget):
|
|
|
|
|
key].trigger_monitor_str.connect(self.receive_g1_update)
|
|
|
|
|
elif "SH" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
"BMA1"].trigger_monitor_str.connect(self.receive_sh_update)
|
|
|
|
|
"BMA1"].trigger_monitor_str.connect(self.receive_sh_update)
|
|
|
|
|
|
|
|
|
|
elif "G2" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
key].trigger_monitor_str.connect(self.receive_g2_update)
|
|
|
|
|
elif "O2" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
key].trigger_monitor_str.connect(self.receive_o2_update)
|
|
|
|
|
|
|
|
|
|
elif "PIF" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
key].trigger_monitor_str.connect(self.receive_pif_update)
|
|
|
|
|
elif "G3" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
key].trigger_monitor_str.connect(self.receive_g3_update)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if "SH" in key:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
"BMA1"].trigger_monitor_str.emit(
|
|
|
|
|
pvd.value[0], pvd.status, pvd.alarmSeverity)
|
|
|
|
|
else:
|
|
|
|
|
self.gui_header.beam_current_wgt_dict[
|
|
|
|
|
key].trigger_monitor_str.emit(
|
|
|
|
|
pvd.value[0], pvd.status, pvd.alarmSeverity)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Trigger group_submaster_wgt
|
|
|
|
|
for wgt in self.submaster_wgt:
|
|
|
|
|
@@ -397,62 +415,137 @@ class AppGui(QWidget):
|
|
|
|
|
|
|
|
|
|
#print("gw emit done")
|
|
|
|
|
|
|
|
|
|
#self.update_awake_alarm_message()
|
|
|
|
|
|
|
|
|
|
#for sect in self.simple_sector_list:
|
|
|
|
|
# self.is_sector_standby(sect)
|
|
|
|
|
|
|
|
|
|
self.timer_awake = QTimer()
|
|
|
|
|
self.timer_awake.timeout.connect(self.update_awake_alarm_message)
|
|
|
|
|
self.timer_awake.start(60000)
|
|
|
|
|
self.timer_awake.start(10000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_awake_alarm_message(self):
|
|
|
|
|
for sect in self.simple_sector_list:
|
|
|
|
|
idx = self.simple_sector_list.index(sect)
|
|
|
|
|
#print(" update_awake_alarm_message -------------- ",
|
|
|
|
|
# sect, self.sector_disruptor_dict[sect])
|
|
|
|
|
if "Geschlossen" not in self.sector_disruptor_dict[sect]:
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
self.simple_alarm[idx].setText(' Active ')
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
pvdata = self.cafe.getPVCache(self.settings.data[sect]['status'])
|
|
|
|
|
tz = pvdata.tsDate
|
|
|
|
|
|
|
|
|
|
def what_alarm(sect, plot_only=False):
|
|
|
|
|
alarm_val = 0
|
|
|
|
|
pvdata = self.cafe.getPVCache(
|
|
|
|
|
self.settings.data[sect]['status'])
|
|
|
|
|
tz = pvdata.tsDate
|
|
|
|
|
idx = self.simple_sector_list.index(sect)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not plot_only:
|
|
|
|
|
|
|
|
|
|
self.simple_t0[idx] = datetime(
|
|
|
|
|
tz[0], tz[1], tz[2], tz[3], tz[4], tz[5])
|
|
|
|
|
self.simple_tdiff[idx] = self.time_difference(self.simple_t0[idx])
|
|
|
|
|
if self.simple_tdiff[idx][0] > int(self.input_parameters['alarmMajor']):
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.alarm_major_sss)
|
|
|
|
|
elif self.simple_tdiff[idx][0] > int(self.input_parameters['alarmMinor']):
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.alarm_minor_sss)
|
|
|
|
|
else:
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
#self.simple_tlast_asleep[idx])
|
|
|
|
|
date1 = self.simple_t0[idx]
|
|
|
|
|
date2 = self.simple_tlast_asleep[idx]
|
|
|
|
|
|
|
|
|
|
datet = date2 if date1 < date2 else date1
|
|
|
|
|
|
|
|
|
|
self.simple_tdiff[idx] = self.time_difference(datet)
|
|
|
|
|
|
|
|
|
|
if self.simple_tdiff[idx][0] > int(
|
|
|
|
|
self.input_parameters['alarmMajor']):
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.alarm_major_sss)
|
|
|
|
|
alarm_val = 2
|
|
|
|
|
elif self.simple_tdiff[idx][0] > int(
|
|
|
|
|
self.input_parameters['alarmMinor']):
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.alarm_minor_sss)
|
|
|
|
|
alarm_val = 1
|
|
|
|
|
else:
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
alarm_val = 0
|
|
|
|
|
|
|
|
|
|
self.simple_alarm[idx].setText(
|
|
|
|
|
self.alarm_text + str(
|
|
|
|
|
int(self.simple_tdiff[idx][0])) + ' min ')
|
|
|
|
|
|
|
|
|
|
return alarm_val
|
|
|
|
|
|
|
|
|
|
self.simple_alarm[idx].setText(
|
|
|
|
|
self.alarm_text + str(int(self.simple_tdiff[idx][0])) + ' min ')
|
|
|
|
|
for sect in self.simple_sector_list:
|
|
|
|
|
idx = self.simple_sector_list.index(sect)
|
|
|
|
|
pv = self.settings.data[sect]['alarm']
|
|
|
|
|
alarm_val = 0
|
|
|
|
|
#print(" update_awake_alarm_message -------------- ",
|
|
|
|
|
# sect, self.sector_disruptor_dict[sect])
|
|
|
|
|
|
|
|
|
|
if 'Controlroom' in self.assigned_master:
|
|
|
|
|
if 'Geschlossen' not in self.sector_disruptor_dict['SH']:
|
|
|
|
|
if self.is_sector_standby(sect):
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
self.simple_alarm[idx].setText(' Active ')
|
|
|
|
|
alarm_val = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif "Geschlossen" not in self.sector_disruptor_dict[sect]:
|
|
|
|
|
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
self.simple_alarm[idx].setText(' Active ')
|
|
|
|
|
alarm_val = 0
|
|
|
|
|
|
|
|
|
|
disruptor_list = [self.sector_disruptor_dict['G3'],
|
|
|
|
|
self.sector_disruptor_dict['PIF'],
|
|
|
|
|
self.sector_disruptor_dict['O2'],
|
|
|
|
|
self.sector_disruptor_dict['G2']]
|
|
|
|
|
#elif 'SH' in sect:
|
|
|
|
|
# continue
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
alarm_val = what_alarm(sect)
|
|
|
|
|
|
|
|
|
|
#must take on value *Geschlossen"
|
|
|
|
|
if disruptor_list[1:] == disruptor_list[:-1]:
|
|
|
|
|
|
|
|
|
|
idx_start = self.simple_sector_list.index('G2')
|
|
|
|
|
idx_end = self.simple_sector_list.index('G3')
|
|
|
|
|
tdiff_list =[]
|
|
|
|
|
tmin = 2000
|
|
|
|
|
idx_min = 0
|
|
|
|
|
for i in range (idx_start, idx_end):
|
|
|
|
|
if self.simple_tdiff[i][0] < tmin:
|
|
|
|
|
idx_min = i
|
|
|
|
|
|
|
|
|
|
idx = self.simple_sector_list.index('SH')
|
|
|
|
|
self.simple_tdiff[idx] = self.simple_tdiff[idx_min]
|
|
|
|
|
self.simple_alarm[idx].setText(self.alarm_text + str(
|
|
|
|
|
int(self.simple_tdiff[idx][0])) + ' min ')
|
|
|
|
|
pv = self.settings.data[sect]['alarm']
|
|
|
|
|
if not self.input_parameters["simulation"]:
|
|
|
|
|
stat = self.cafe.set(pv, alarm_val)
|
|
|
|
|
if stat != self.cyca.ECAFE_NOWTACCESS:
|
|
|
|
|
self.check_status(_pymodule, 'set', pv, stat, _line())
|
|
|
|
|
#print(pv, sect, alarm_val)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
date1 = self.simple_t0[idx]
|
|
|
|
|
date2 = self.simple_tlast_asleep[idx]
|
|
|
|
|
|
|
|
|
|
datet = date2 if date1 < date2 else date1
|
|
|
|
|
|
|
|
|
|
self.simple_tdiff[idx] = self.time_difference(datet)
|
|
|
|
|
#print(sect, idx, date1, date2, self.simple_tdiff[idx])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if 'Controlroom' in self.assigned_master and \
|
|
|
|
|
not self.is_sector_standby('SH'):
|
|
|
|
|
#print('SH--')
|
|
|
|
|
disruptor_list = [self.sector_disruptor_dict['G3'],
|
|
|
|
|
self.sector_disruptor_dict['PIF'],
|
|
|
|
|
self.sector_disruptor_dict['O2'],
|
|
|
|
|
self.sector_disruptor_dict['G2']]
|
|
|
|
|
|
|
|
|
|
#must take on value *Geschlossen"
|
|
|
|
|
if disruptor_list[1:] == disruptor_list[:-1]:
|
|
|
|
|
idx_start = self.simple_sector_list.index('G2')
|
|
|
|
|
idx_end = self.simple_sector_list.index('G3')
|
|
|
|
|
tdiff_list =[]
|
|
|
|
|
tmin = 999
|
|
|
|
|
idx_min = 0
|
|
|
|
|
|
|
|
|
|
for i in range (idx_start, idx_end):
|
|
|
|
|
if self.simple_tdiff[i][0] < tmin and self.simple_tdiff[i][0] !=0 :
|
|
|
|
|
idx_min = i
|
|
|
|
|
tmin = self.simple_tdiff[i][0]
|
|
|
|
|
if tmin == 999:
|
|
|
|
|
idx_min = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
idx = self.simple_sector_list.index('SH')
|
|
|
|
|
|
|
|
|
|
self.simple_tdiff[idx] = self.simple_tdiff[idx_min]
|
|
|
|
|
|
|
|
|
|
self.simple_alarm[idx].setText(self.alarm_text + str(
|
|
|
|
|
int(self.simple_tdiff[idx][0])) + ' min ')
|
|
|
|
|
|
|
|
|
|
alarm_val = what_alarm('SH', plot_only=True)
|
|
|
|
|
pv = self.settings.data['SH']['alarm']
|
|
|
|
|
if not self.input_parameters["simulation"]:
|
|
|
|
|
stat = self.cafe.set(pv, alarm_val)
|
|
|
|
|
if stat != self.cyca.ECAFE_NOWTACCESS:
|
|
|
|
|
self.check_status(_pymodule, 'set', pv, stat, _line())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def enable_disable_beamline(self, sect, sector_line, value):
|
|
|
|
|
def is_submaster(local_sector, local_sector_line):
|
|
|
|
|
@@ -549,7 +642,7 @@ class AppGui(QWidget):
|
|
|
|
|
'''
|
|
|
|
|
@Slot(str, int, int)
|
|
|
|
|
def receive_sh_update(self, value, status, alarm_severity):
|
|
|
|
|
print("receive_sh_update===>", value, flush=True)
|
|
|
|
|
#print("receive_sh_update===>", value, flush=True)
|
|
|
|
|
if status == self.cyca.ICAFE_CA_OP_CONN_DOWN:
|
|
|
|
|
return
|
|
|
|
|
self.enable_disable_beamline("SH", self.gui_header.sh_line, value)
|
|
|
|
|
@@ -913,17 +1006,23 @@ class AppGui(QWidget):
|
|
|
|
|
qtotsav.setFont(f)
|
|
|
|
|
qtotsav.setAlignment(Qt.AlignCenter)
|
|
|
|
|
|
|
|
|
|
qalarm = QLabel("Awake \nAlarm")
|
|
|
|
|
f = qalarm.font()
|
|
|
|
|
f.setPixelSize(13)
|
|
|
|
|
qalarm.setFont(f)
|
|
|
|
|
qalarm.setAlignment(Qt.AlignCenter)
|
|
|
|
|
|
|
|
|
|
qgrid.addWidget(qlp, 0, 2, 1, 1)
|
|
|
|
|
qgrid.addWidget(qsa, 0, 3, 1, 1)
|
|
|
|
|
qgrid.addWidget(qstat, 0, 4, 1, 1)
|
|
|
|
|
qgrid.addWidget(qti, 0, 5, 1, 1)
|
|
|
|
|
qgrid.addWidget(qtotsav, 0, 6, 1, 1)
|
|
|
|
|
|
|
|
|
|
self.status_dict = {}
|
|
|
|
|
qgrid.addWidget(qalarm, 0, 7, 1, 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i, sector in enumerate(self.settings.data["header"][idx:idx_last]):
|
|
|
|
|
a, b, c, d, e, f = self.sector_status(sector)
|
|
|
|
|
a, b, c, d, e, f, g = self.sector_status(sector)
|
|
|
|
|
|
|
|
|
|
self.status_dict[sector] = QLabel('')
|
|
|
|
|
|
|
|
|
|
@@ -934,13 +1033,15 @@ class AppGui(QWidget):
|
|
|
|
|
qgrid.addWidget(self.status_dict[sector], i + 1, 4, 1, 1)
|
|
|
|
|
qgrid.addWidget(e, i + 1, 5, 1, 1)
|
|
|
|
|
qgrid.addWidget(f, i + 1, 6, 1, 1)
|
|
|
|
|
if sector in self.sector_list or \
|
|
|
|
|
'Controlroom' in self.assigned_master:
|
|
|
|
|
qgrid.addWidget(g, i + 1, 7, 1, 1)
|
|
|
|
|
|
|
|
|
|
line = QHLine()
|
|
|
|
|
line.setFixedHeight(10)
|
|
|
|
|
row = qgrid.rowCount()
|
|
|
|
|
qgrid.addWidget(line, row, 1, 1, 7)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
qtot = QLabel("Total:")
|
|
|
|
|
fnt = qtot.font()
|
|
|
|
|
fnt.setPixelSize(13)
|
|
|
|
|
@@ -948,8 +1049,7 @@ class AppGui(QWidget):
|
|
|
|
|
|
|
|
|
|
qgrid.addWidget(qtot, row + 1, 0, 1, 1)
|
|
|
|
|
qgrid.addWidget(
|
|
|
|
|
CAQLineEdit(self, pv_name="PRO-HUSH:LASTPWR",
|
|
|
|
|
show_units=True),
|
|
|
|
|
CAQLineEdit(self, pv_name="PRO-HUSH:LASTPWR", show_units=True),
|
|
|
|
|
row + 1, 1, 1, 1)
|
|
|
|
|
qgrid.addWidget(
|
|
|
|
|
CAQLineEdit(self, pv_name="PRO-HUSH:TOTPWR", show_units=True),
|
|
|
|
|
@@ -967,7 +1067,7 @@ class AppGui(QWidget):
|
|
|
|
|
qw.setContentsMargins(9, 9, 9, 9)
|
|
|
|
|
qw.setObjectName("OUTER")
|
|
|
|
|
qw.setLayout(qgrid)
|
|
|
|
|
qw.setFixedWidth(596) # 480
|
|
|
|
|
qw.setFixedWidth(626) # 596
|
|
|
|
|
|
|
|
|
|
return qw
|
|
|
|
|
|
|
|
|
|
@@ -998,9 +1098,11 @@ class AppGui(QWidget):
|
|
|
|
|
pv_pwr_saved = device + ":LASTSAVE"
|
|
|
|
|
pv_pwr_timeout = device + ":OFFTIME"
|
|
|
|
|
pv_pwr_totsave = device + ":TOTSAVE"
|
|
|
|
|
pv_awake_alarm = device + ":ALARM"
|
|
|
|
|
|
|
|
|
|
self.cafe.openPrepare()
|
|
|
|
|
self.cafe.open([pv_pwr_tot, pv_pwr_last, pv_pwr_saved, pv_pwr_timeout])
|
|
|
|
|
self.cafe.open([pv_pwr_tot, pv_pwr_last, pv_pwr_saved, pv_pwr_timeout,
|
|
|
|
|
pv_awake_alarm])
|
|
|
|
|
self.cafe.openNowAndWait(2.0)
|
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
|
|
|
|
|
@@ -1033,6 +1135,11 @@ class AppGui(QWidget):
|
|
|
|
|
qptotsave = CAQLineEdit(self, pv_name=pv_pwr_totsave, show_units=False)
|
|
|
|
|
qptime = CAQLineEdit(self, pv_name=pv_pwr_timeout,
|
|
|
|
|
monitor_callback=cb_outtime, show_units=True)
|
|
|
|
|
|
|
|
|
|
qawakealarm = CAQLabel(self, pv_name=pv_awake_alarm, color_mode='alarm')
|
|
|
|
|
|
|
|
|
|
qawakealarm.setAlignment(Qt.AlignCenter)
|
|
|
|
|
|
|
|
|
|
self.offtime_dict[pv_pwr_timeout] = qptime
|
|
|
|
|
|
|
|
|
|
# Time to allow cb_outtime to fire
|
|
|
|
|
@@ -1040,7 +1147,7 @@ class AppGui(QWidget):
|
|
|
|
|
|
|
|
|
|
qptime.setFixedWidth(104)
|
|
|
|
|
|
|
|
|
|
return qsector, qpinit, qpnow, qpsave, qptime, qptotsave
|
|
|
|
|
return qsector, qpinit, qpnow, qpsave, qptime, qptotsave, qawakealarm
|
|
|
|
|
|
|
|
|
|
def group_sector_qtabwidget(self):
|
|
|
|
|
|
|
|
|
|
@@ -1205,6 +1312,7 @@ class AppGui(QWidget):
|
|
|
|
|
self.status_dict[sector].setText(self.awake_text)
|
|
|
|
|
|
|
|
|
|
self.simple_alarm[idx].setVisible(True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def paint_asleep():
|
|
|
|
|
@@ -1220,6 +1328,21 @@ class AppGui(QWidget):
|
|
|
|
|
self.status_dict[sector].setStyleSheet(self.label_standby_sss)
|
|
|
|
|
self.status_dict[sector].setText(self.standby_text)
|
|
|
|
|
self.simple_alarm[idx].setVisible(False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#print(" update_awake_alarm_message -------------- ",
|
|
|
|
|
# sect, self.sector_disruptor_dict[sect])
|
|
|
|
|
|
|
|
|
|
#if self.is_sector_standby(sect):
|
|
|
|
|
# self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
|
|
|
|
|
# self.simple_alarm[idx].setText(' Active ')
|
|
|
|
|
# alarm_val = 0
|
|
|
|
|
pv = self.settings.data[sector]['alarm']
|
|
|
|
|
if not self.input_parameters["simulation"]:
|
|
|
|
|
stat = self.cafe.set(pv, 0)
|
|
|
|
|
if stat != self.cyca.ECAFE_NOWTACCESS:
|
|
|
|
|
self.check_status(_pymodule, 'set', pv, stat, _line())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if value is not None and pv_name is not None:
|
|
|
|
|
self.sector_designated_magnet_values_dict[sector][pv_name] = value
|
|
|
|
|
@@ -1258,10 +1381,15 @@ class AppGui(QWidget):
|
|
|
|
|
if self.table_pwr_dict[sector].init_value_button.isEnabled():
|
|
|
|
|
self.table_pwr_dict[sector].init_value_button.setEnabled(
|
|
|
|
|
False)
|
|
|
|
|
if self.simple_standby:
|
|
|
|
|
if self.simple_standby:
|
|
|
|
|
paint_asleep()
|
|
|
|
|
#print("is standby true so paint standby ", is_standby)
|
|
|
|
|
|
|
|
|
|
tn = datetime.now()
|
|
|
|
|
self.simple_tlast_asleep[idx] = datetime(
|
|
|
|
|
tn.year, tn.month, tn.day, tn.hour, tn.minute, tn.second)
|
|
|
|
|
#print("is standby true so paint standby ",
|
|
|
|
|
# sector, idx, self.simple_tlast_asleep[idx])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return is_standby
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1908,9 +2036,9 @@ class AppGui(QWidget):
|
|
|
|
|
#message += "go to Experiment Mode" if \
|
|
|
|
|
# "Controlroom" not in self.assigned_master else "ramp magnets"
|
|
|
|
|
if "Controlroom" in self.assigned_master:
|
|
|
|
|
message = ""
|
|
|
|
|
message = "Request Mastership to ramp magnets"
|
|
|
|
|
else:
|
|
|
|
|
message = "Request Mastership to go to Experiment Mode"
|
|
|
|
|
message = "Request Mastership to go to Experiment Mode"
|
|
|
|
|
|
|
|
|
|
ql = QLabel(message)
|
|
|
|
|
ql.setStyleSheet('QLabel {color:black;}')
|
|
|
|
|
@@ -1928,7 +2056,7 @@ class AppGui(QWidget):
|
|
|
|
|
qwo.setLayout(qgrido)
|
|
|
|
|
wlength = len(self.simple_sector_list) if irow == 0 else int(hlength)
|
|
|
|
|
qwo.setFixedWidth(310 * wlength)
|
|
|
|
|
qwo.setFixedHeight(240 * (irow+1) - 80*irow)
|
|
|
|
|
qwo.setFixedHeight(250 * (irow+1) - 80*irow)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return qwo
|
|
|
|
|
|