Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1ace05b5ab | |||
| e3bd4fd0cd | |||
| 3831c4ecb5 | |||
| 16847da053 | |||
| 0717ed147c |
@@ -21,7 +21,7 @@ from pyrcc5 import hush_resources
|
||||
|
||||
_pymodule = os.path.basename(__file__)
|
||||
_appname, _appext = _pymodule.split(".")
|
||||
_appversion = "2.0.0"
|
||||
_appversion = "2.3.0"
|
||||
# _title = """HIPA Power Usage & Saving Hierarchy""" #, HUSH!"""
|
||||
_title = """HUSH!"""
|
||||
|
||||
@@ -185,7 +185,7 @@ class StartMain(BaseWindow):
|
||||
All rights reserved.</p>
|
||||
<p>Author: J. Chrin, Spring 2023 </p>
|
||||
<p>(EPICS db adapted from A. Kovach, 2016) <p>
|
||||
<p>IOC Administrator: H. Lutz </p>
|
||||
<p>IOC Administrator: P. Fernandez (prev. H. Lutz) </p>
|
||||
<p>1st Responsible: A. Barchetti, Tel. 4779
|
||||
or 3301 (Control Room) </p>
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
cd /hipa/bd/applications/hush/hla/2.1.0
|
||||
cd /hipa/bd/applications/hush/hla/2.3.0
|
||||
|
||||
# For use if script is sourced rather than executed
|
||||
appNameDefault="hush.sh"
|
||||
|
||||
module unload gcc
|
||||
module load gcc/7.3.0
|
||||
module load gcc/7.5.0
|
||||
|
||||
if [ -z "$PS1" ] # no prompt?
|
||||
### if [ -v PS1 ] # On Bash 4.2+ ...
|
||||
@@ -17,6 +17,9 @@ else
|
||||
echo "Interactive/sourced script"
|
||||
fi
|
||||
|
||||
_EPICS_HOST_ARCH=${RHREL}-x86_64
|
||||
_EPICS_BASE=base-7.0.8
|
||||
|
||||
# Select Python Version here. Currently one of 3.5, 3.7, 3.8 and 3.10
|
||||
PYTHON_VERSION=3.10
|
||||
|
||||
@@ -32,6 +35,7 @@ if [ "$1" ]; then
|
||||
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
|
||||
PYTHON_VERSION=3.7
|
||||
PYTHON_VERSION_DIR=37
|
||||
export LD_PRELOAD=/usr/local/epics/${_EPICS_BASE}/lib/${_EPICS_HOST_ARCH}/libca.so:/usr/local/epics/${_EPICS_BASE}/lib/${_EPICS_HOST_ARCH}/libCom.so
|
||||
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
|
||||
PYTHON_VERSION=3.8
|
||||
PYTHON_VERSION_DIR=38
|
||||
@@ -50,13 +54,11 @@ fi
|
||||
|
||||
echo "PYTHON_VERSION $PYTHON_VERSION"
|
||||
|
||||
_EPICS_HOST_ARCH=${RHREL}-x86_64
|
||||
#_EPICS_HOST_ARCH=${EPICS_HOST_ARCH}
|
||||
. /opt/gfa/python $PYTHON_VERSION
|
||||
|
||||
#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.21.0/lib/${_EPICS_HOST_ARCH}:/hipa/bd/applications/deps/apps4ops/v1.12.0
|
||||
|
||||
echo $PYTHONPATH
|
||||
|
||||
@@ -111,3 +113,6 @@ else
|
||||
fi
|
||||
|
||||
|
||||
if [ "${PYTHON_VERSION}" == "3.7" ] ; then
|
||||
unset LD_PRELOAD
|
||||
fi
|
||||
|
||||
Binary file not shown.
+109
-27
@@ -19,7 +19,11 @@ from qtpy.QtWidgets import (
|
||||
QPushButton, QTabBar, QTabWidget, QTableWidgetItem, QTextEdit, QVBoxLayout,
|
||||
QWidget)
|
||||
|
||||
from common.packages import elog
|
||||
try:
|
||||
import elog
|
||||
except:
|
||||
from common.packages import elog
|
||||
|
||||
|
||||
from apps4ops.bdbase.utils import _line
|
||||
|
||||
@@ -81,7 +85,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 +96,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 +168,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 +182,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 +232,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 +256,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 +276,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 +304,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 +316,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 +421,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 +1052,7 @@ class AppGui(QWidget):
|
||||
|
||||
hbox.setSpacing(10)
|
||||
hbox.setAlignment(Qt.AlignTop)
|
||||
|
||||
qw = QWidget()
|
||||
qw.setLayout(hbox)
|
||||
|
||||
@@ -1032,11 +1104,19 @@ class AppGui(QWidget):
|
||||
pass
|
||||
# HIPA Log Book
|
||||
else:
|
||||
attributes["Eintrag"] = self.elog_enum.eintrag.INFO.name
|
||||
attributes["Effekt"] = self.elog_enum.effekt.NONE.name # keiner
|
||||
required_dict = self.parent.settings.data['ElogBooks'][
|
||||
self.parent.logbook]['Required']
|
||||
optional_dict = self.parent.settings.data['ElogBooks'][
|
||||
self.parent.logbook]['Optional']
|
||||
attributes["Eintrag"] = required_dict['Eintrag'][
|
||||
self.elog_enum.eintrag.INFO]
|
||||
attributes["Effekt"] = optional_dict["Effekt"][
|
||||
self.elog_enum.effekt.NONE] # NONE='', NO=keiner
|
||||
# "Elektorversogung"
|
||||
attributes["System"] = self.elog_enum.system.ELECTRICAL_SUPPLY.name
|
||||
attributes["Ort"] = self.elog_enum.ort.GLOBAL.name
|
||||
attributes["System"] = optional_dict["System"][
|
||||
self.elog_enum.system.ELECTRICAL_SUPPLY]
|
||||
attributes["Ort"] = optional_dict["Ort"][
|
||||
self.elog_enum.ort.GLOBAL]
|
||||
|
||||
log_mess = self.parent.message.replace("<br>", "\n")
|
||||
|
||||
@@ -1048,8 +1128,10 @@ class AppGui(QWidget):
|
||||
self.statusbar.showMessage("Reset Savings Account." +
|
||||
"Last values sent to elog")
|
||||
except Exception as ex:
|
||||
print("Exception in sendelog.py", str(ex), flush=True)
|
||||
mess = "Failed to write last saving values to elog:" + str(ex)
|
||||
print("Exception in gui.py", str(ex), flush=True)
|
||||
print(attributes)
|
||||
mess = ("Failed to write last saving values to " +
|
||||
"logbook {0}: {1}").format(self.parent.logbook, str(ex))
|
||||
self.show_log_message(
|
||||
MsgSeverity.ERROR, _pymodule, _line(), mess)
|
||||
self.statusbar.showMessage(mess)
|
||||
|
||||
Reference in New Issue
Block a user