3 Commits

Author SHA1 Message Date
6d7e06e9ec v1.8.3 2025-08-28 13:48:57 +02:00
ec53e627db v1.8.2 2025-06-22 14:06:24 +02:00
34c9942bca 1.8.1 2025-06-19 08:09:34 +02:00
15 changed files with 389 additions and 147 deletions

View File

@@ -1,5 +1,4 @@
{
"Parameters":{
"drawLine" : {"flag" : 0, "data":{ "widget": "QHLine", "text" : "None", "value" : "None"}},
@@ -10,10 +9,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -21,7 +21,7 @@ from src.gui import AppGui
_pymodule = os.path.basename(__file__)
_appname, _appext = _pymodule.split(".")
_appversion = "2.0.0"
_appversion = "1.8.1"
# _title = """Power Usage & Saving Hierarchy""" #, HUSH!"""
_title = """HUSH!"""
@@ -207,7 +207,7 @@ class StartMain(BaseWindow):
#########################################################################
if __name__ == "__main__":
delay = 25 if "_" in _pymodule else 40
delay = 8 if "_" in _pymodule else 15
app = QApplication(sys.argv)
splash = BaseWindow.initialize_application(
app, appname=_appname, delay=delay, facility=Facility.PROSCAN)

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush_g1.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush_g2.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush_g3.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush_o2.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.0
cd /proscan/bd/applications/hush/hla/1.8.3
# For use if script is sourced rather than executed
appNameDefault="hush_pif.sh"

View File

@@ -94,14 +94,52 @@ class AppGui(QWidget):
no_alarm_color_str = f'background-color: {no_alarm_color};'
self.no_alarm_sss = ('QLabel {color:#000000; font-weight: bold; ' +
no_alarm_color_str + '}')
self.pv_alarm_warn = self.settings.data['alarmPV']['warn']
self.pv_alarm_error = self.settings.data['alarmPV']['error']
self.pv_user_start_time = self.settings.data['alarmPV']['startTime']
self.pv_user_end_time = self.settings.data['alarmPV']['endTime']
self.alarm_warn = 90
self.alarm_error = 180
self.user_start_time = "07:00"
self.user_end_time = "17:00"
def cb_alarm_warn(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.alarm_warn = pvdata.value[0]
def cb_alarm_error(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.alarm_error = pvdata.value[0]
def cb_user_start(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.user_start_time = pvdata.value[0]
def cb_user_end(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.user_end_time = pvdata.value[0]
self.cafe.openMonitorPrepare()
self.cafe.monitorStart(self.pv_alarm_warn, cb=cb_alarm_warn)
self.cafe.monitorStart(self.pv_alarm_error, cb=cb_alarm_error)
self.cafe.monitorStart(self.pv_user_start_time, cb=cb_user_start)
self.cafe.monitorStart(self.pv_user_end_time, cb=cb_user_end)
self.cafe.openMonitorNow()
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
self.expert_parameters = self.parent.expert_parameters
self.gui_frame.expert_parameters_group.setFixedWidth(260) #260
self.gui_frame.expert_parameters_group.setFixedHeight(180) #130
self.gui_frame.expert_parameters_group.setFixedHeight(130) #130
self.gui_frame.operator_parameters_group.setFixedWidth(260)
self.gui_frame.operator_parameters_group.setFixedHeight(130)
self.gui_frame.measurement_tab_wgt.setFixedWidth(440)
@@ -115,14 +153,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
@@ -130,8 +195,11 @@ class AppGui(QWidget):
self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control")
#self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC")
print("====================================")
if "Controlroom" in self.assigned_master:
shift_type = CAQMenu(self, pv_name="PRO-HUSH:SHIFT-TYPE")
self.gui_frame.operator_parameters_group.layout().insertWidget(
0, QLabel(" Shift Type:"))
@@ -171,7 +239,8 @@ class AppGui(QWidget):
self.gui_frame.results_layout.addWidget(
self.reset_lastpwr(), 1, 0, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignCenter))
self.expert_labels = self.parent.expert_labels
self.settings = self.parent.settings
@@ -181,7 +250,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 +279,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 +292,20 @@ 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.open(open_list)
self.cafe.open(self.pv_alarm_warn)
self.cafe.open(self.pv_alarm_error)
self.cafe.open(self.pv_user_start_time)
self.cafe.open(self.pv_user_end_time)
self.cafe.openNowAndWait(0.4)
time.sleep(0.1)
self.cafe.printDisconnected()
self.submastership_dict = {
"G1": "UNDEF", "G2": "UNDEF", "O2": "UNDEF", "PIF": "UNDEF",
"G3": "UNDEF"}
@@ -270,6 +323,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 +378,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:
@@ -337,12 +393,17 @@ class AppGui(QWidget):
except Exception as ex:
print("EMIT FAILED", str(ex))
#Alarm handling
self.gui_frame.results_layout.addWidget(
self.group_alarm(), 1, 1, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignCenter))
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 +417,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 +468,165 @@ 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 ')
#No alarm in day shift
def in_operation_range():
current_time = datetime.now().time()
#given_time_start = datetime.strptime("07:00AM", "I:%M%p").time()
#given_time_stop = datetime.strptime("05:30PM", "I:%M%p").time()
given_time_start = datetime.strptime(self.user_start_time, "%H:%M").time()
given_time_stop = datetime.strptime(self.user_end_time, "%H:%M").time()
#print(given_time_start, given_time_stop)
if given_time_start <= current_time <= given_time_stop:
return True
else:
pvdata = self.cafe.getPVCache(self.settings.data[sect]['status'])
tz = pvdata.tsDate
return False
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_alarm[idx].setText(
self.alarm_text + str(int(self.simple_tdiff[idx][0])) + ' min ')
#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 'Controlroom' in self.assigned_master:
if 'Geschlossen' not in self.sector_disruptor_dict['SH']:
if in_operation_range():
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
alarm_val = 0
elif self.simple_tdiff[idx][0] > int(self.alarm_error):
#self.input_parameters['alarmMajor']):
self.simple_alarm[idx].setStyleSheet(self.alarm_major_sss)
alarm_val = 2
elif self.simple_tdiff[idx][0] > int(self.alarm_warn):
#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
disruptor_list = [self.sector_disruptor_dict['G3'],
self.sector_disruptor_dict['PIF'],
self.sector_disruptor_dict['O2'],
self.sector_disruptor_dict['G2']]
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])
#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 ')
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
else:
alarm_val = what_alarm(sect)
#if in_operation_range():
# alarm_val = 0
# self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
pv = self.settings.data[sect]['alarm']
if not self.input_parameters["simulation"]:
if 'Controlroom' in self.assigned_master:
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)
#if in_operation_range():
# alarm_val = 0
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 +723,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 +1087,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 +1114,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 +1130,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 +1148,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 +1179,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 +1216,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,8 +1228,42 @@ class AppGui(QWidget):
qptime.setFixedWidth(104)
return qsector, qpinit, qpnow, qpsave, qptime, qptotsave
return qsector, qpinit, qpnow, qpsave, qptime, qptotsave, qawakealarm
def group_alarm(self):
qgrid = QGridLayout()
qwarn = CAQTextEntry(self, pv_name=self.pv_alarm_warn)
qerror = CAQTextEntry(self, pv_name=self.pv_alarm_error)
qstarttime = CAQTextEntry(self, pv_name=self.pv_user_start_time)
qendtime = CAQTextEntry(self, pv_name=self.pv_user_end_time)
qlwarn = QLabel("Minutes to Minor Alarm:")
qlerror = QLabel(" Major Alarm:")
qlstarttime = QLabel("User Operation Start Time:")
#qlstarttime.setToolTip("Format HH::MM")
qlendtime = QLabel(" End Time:")
#qlendtime.setToolTip("Format HH::MM")
qgrid.addWidget(qlwarn, 0, 0, 1, 2)
qgrid.addWidget(qlerror, 0, 3, 1, 1)
qgrid.addWidget(qlstarttime, 1, 0, 1, 2)
qgrid.addWidget(qlendtime, 1, 3, 1, 1)
qgrid.addWidget(qwarn, 0, 2, 1, 1)
qgrid.addWidget(qerror, 0, 4, 1, 1)
qgrid.addWidget(qstarttime, 1, 2, 1, 1)
qgrid.addWidget(qendtime, 1, 4, 1, 1)
qw = QGroupBox("Alarm Settings")
qw.setContentsMargins(9, 9, 9, 9)
qw.setObjectName("OUTER")
qw.setLayout(qgrid)
qw.setFixedWidth(410) # 596
qw.setFixedHeight(150)
return qw
def group_sector_qtabwidget(self):
#idx_last = self.settings.data["header"].index("MASTER")
@@ -1205,6 +1427,7 @@ class AppGui(QWidget):
self.status_dict[sector].setText(self.awake_text)
self.simple_alarm[idx].setVisible(True)
def paint_asleep():
@@ -1220,6 +1443,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 +1496,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 +2151,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 +2171,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

24
src/t.py Normal file
View File

@@ -0,0 +1,24 @@
from datetime import datetime
def in_range():
current_time = datetime.now().time()
#given_time_start = datetime.strptime("07:00AM", "I:%M%p").time()
#given_time_stop = datetime.strptime("05:30PM", "I:%M%p").time()
given_time_start = datetime.strptime("07:00", "%H:%M").time()
given_time_stop = datetime.strptime("17:00", "%H:%M").time()
if given_time_start <= current_time <= given_time_stop:
print("in range", current_time)
return True
else:
print(current_time)
print(given_time_stop)
if in_range():
print("in range")
else:
print("not in range")