gui: fix ctrl_panel value getting overwritten bug
This commit is contained in:
parent
3344e7ab19
commit
aae89256c3
|
@ -449,6 +449,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
self._set_up_ctrl_btns()
|
self._set_up_ctrl_btns()
|
||||||
self._set_up_plot_menu()
|
self._set_up_plot_menu()
|
||||||
|
|
||||||
|
def _setValuewithLock(self, value):
|
||||||
|
if not self.opts.get("lock", None):
|
||||||
|
self.setValue(value)
|
||||||
|
Parameter.setValuewithLock = _setValuewithLock
|
||||||
|
|
||||||
self.params = [
|
self.params = [
|
||||||
Parameter.create(name=f"Laser Diode Status", type='group', value=0, children=self.LASER_DIODE_STATUS),
|
Parameter.create(name=f"Laser Diode Status", type='group', value=0, children=self.LASER_DIODE_STATUS),
|
||||||
Parameter.create(name=f"Laser Diode Parameters", type='group', value=1, children=self.LASER_DIODE_PARAMETERS),
|
Parameter.create(name=f"Laser Diode Parameters", type='group', value=1, children=self.LASER_DIODE_PARAMETERS),
|
||||||
|
@ -606,32 +611,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
self.plot_settings.setMenu(self.plot_menu)
|
self.plot_settings.setMenu(self.plot_menu)
|
||||||
|
|
||||||
def _set_param_tree(self):
|
def _set_param_tree(self):
|
||||||
def _setValue(self, value, blockSignal=None):
|
|
||||||
"""
|
|
||||||
Implement 'lock' mechanism for Parameter Type
|
|
||||||
|
|
||||||
Modified from the source
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
if blockSignal is not None:
|
|
||||||
self.sigValueChanged.disconnect(blockSignal)
|
|
||||||
value = self._interpretValue(value)
|
|
||||||
if fn.eq(self.opts["value"], value):
|
|
||||||
return value
|
|
||||||
|
|
||||||
if "lock" in self.opts.keys():
|
|
||||||
if self.opts["lock"]:
|
|
||||||
return value
|
|
||||||
self.opts["value"] = value
|
|
||||||
self.sigValueChanged.emit(
|
|
||||||
self, value
|
|
||||||
) # value might change after signal is received by tree item
|
|
||||||
finally:
|
|
||||||
if blockSignal is not None:
|
|
||||||
self.sigValueChanged.connect(blockSignal)
|
|
||||||
|
|
||||||
return self.opts["value"]
|
|
||||||
|
|
||||||
status = self.ld_status
|
status = self.ld_status
|
||||||
status.setHeaderHidden(True)
|
status.setHeaderHidden(True)
|
||||||
status.setParameters(self.params[0], showTop=False)
|
status.setParameters(self.params[0], showTop=False)
|
||||||
|
@ -640,7 +619,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
tree.setHeaderHidden(True)
|
tree.setHeaderHidden(True)
|
||||||
tree.setParameters(self.params[1], showTop=False)
|
tree.setParameters(self.params[1], showTop=False)
|
||||||
self.params[1].sigTreeStateChanged.connect(self.send_command)
|
self.params[1].sigTreeStateChanged.connect(self.send_command)
|
||||||
self.params[1].setValue = _setValue
|
|
||||||
|
|
||||||
status = self.tec_status
|
status = self.tec_status
|
||||||
status.setHeaderHidden(True)
|
status.setHeaderHidden(True)
|
||||||
|
@ -650,7 +628,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
tree.setHeaderHidden(True)
|
tree.setHeaderHidden(True)
|
||||||
tree.setParameters(self.params[3], showTop=False)
|
tree.setParameters(self.params[3], showTop=False)
|
||||||
self.params[3].sigTreeStateChanged.connect(self.send_command)
|
self.params[3].sigTreeStateChanged.connect(self.send_command)
|
||||||
self.params[3].setValue = _setValue
|
|
||||||
|
|
||||||
@asyncSlot()
|
@asyncSlot()
|
||||||
async def autotune(param):
|
async def autotune(param):
|
||||||
|
@ -794,16 +771,16 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
try:
|
try:
|
||||||
settings = settings['laser']
|
settings = settings['laser']
|
||||||
with QSignalBlocker(self.params[1]):
|
with QSignalBlocker(self.params[1]):
|
||||||
self.params[1].child('Output Config', 'LD Current Set').setValue(settings["ld_drive_current"]['value'])
|
self.params[1].child('Output Config', 'LD Current Set').setValuewithLock(settings["ld_drive_current"]['value'])
|
||||||
self.params[1].child('Output Config', 'LD Current Set Soft Limit').setValue(settings["ld_drive_current_limit"]['value'])
|
self.params[1].child('Output Config', 'LD Current Set Soft Limit').setValuewithLock(settings["ld_drive_current_limit"]['value'])
|
||||||
self.params[1].child('Output Config', 'LD Terminals Short').setValue(settings["ld_terms_short"])
|
self.params[1].child('Output Config', 'LD Terminals Short').setValuewithLock(settings["ld_terms_short"])
|
||||||
self.params[1].child('Output Config', 'Default Power On').setValue(settings["default_pwr_on"])
|
self.params[1].child('Output Config', 'Default Power On').setValuewithLock(settings["default_pwr_on"])
|
||||||
self.params[1].child('Photodiode Monitor Config', 'LD Power Limit').setValue(settings["ld_pwr_limit"])
|
self.params[1].child('Photodiode Monitor Config', 'LD Power Limit').setValuewithLock(settings["ld_pwr_limit"])
|
||||||
if settings["pd_mon_params"]["responsitivity"] is not None:
|
if settings["pd_mon_params"]["responsitivity"] is not None:
|
||||||
self.params[1].child('Photodiode Monitor Config', 'Responsitivity').setValue(settings["pd_mon_params"]["responsitivity"])
|
self.params[1].child('Photodiode Monitor Config', 'Responsitivity').setValuewithLock(settings["pd_mon_params"]["responsitivity"])
|
||||||
else:
|
else:
|
||||||
self.params[1].child('Photodiode Monitor Config', 'Responsitivity').setValue(0)
|
self.params[1].child('Photodiode Monitor Config', 'Responsitivity').setValuewithLock(0)
|
||||||
self.params[1].child('Photodiode Monitor Config', 'Dark Current').setValue(settings["pd_mon_params"]["i_dark"])
|
self.params[1].child('Photodiode Monitor Config', 'Dark Current').setValuewithLock(settings["pd_mon_params"]["i_dark"])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Params tree cannot be updated. Data:{settings}", exc_info=True)
|
logging.error(f"Params tree cannot be updated. Data:{settings}", exc_info=True)
|
||||||
|
|
||||||
|
@ -812,17 +789,17 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
try:
|
try:
|
||||||
report = report['laser']
|
report = report['laser']
|
||||||
with QSignalBlocker(self.params[0]):
|
with QSignalBlocker(self.params[0]):
|
||||||
self.params[0].child('Power').setValue('g' if report['pwr_on'] else 'w')
|
self.params[0].child('Power').setValuewithLock('g' if report['pwr_on'] else 'w')
|
||||||
self.params[0].child('Alarm').setValue('r' if report['pwr_excursion'] else 'w')
|
self.params[0].child('Alarm').setValuewithLock('r' if report['pwr_excursion'] else 'w')
|
||||||
|
|
||||||
with QSignalBlocker(self.params[1]):
|
with QSignalBlocker(self.params[1]):
|
||||||
self.params[1].child('Readings', 'LD Current Set').setValue(report["ld_i_set"])
|
self.params[1].child('Readings', 'LD Current Set').setValuewithLock(report["ld_i_set"])
|
||||||
self.params[1].child('Readings', 'PD Current').setValue(report["pd_i"])
|
self.params[1].child('Readings', 'PD Current').setValuewithLock(report["pd_i"])
|
||||||
if report["pd_pwr"] is not None:
|
if report["pd_pwr"] is not None:
|
||||||
self.params[1].child('Readings', 'PD Power').setValue(report["pd_pwr"])
|
self.params[1].child('Readings', 'PD Power').setValuewithLock(report["pd_pwr"])
|
||||||
else:
|
else:
|
||||||
self.params[1].child('Readings', 'PD Power').setValue(0)
|
self.params[1].child('Readings', 'PD Power').setValuewithLock(0)
|
||||||
self.params[1].child('Readings', 'LF Mod Termination (50 Ohm)').setValue(report["term_50ohm"])
|
self.params[1].child('Readings', 'LF Mod Termination (50 Ohm)').setValuewithLock(report["term_50ohm"])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
||||||
|
|
||||||
|
@ -831,26 +808,26 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
try:
|
try:
|
||||||
settings = settings['thermostat']
|
settings = settings['thermostat']
|
||||||
with QSignalBlocker(self.params[3]):
|
with QSignalBlocker(self.params[3]):
|
||||||
self.params[3].child('Output Config', 'Control Method').setValue("Temperature PID" if settings["pid_engaged"] else "Constant Current")
|
self.params[3].child('Output Config', 'Control Method').setValuewithLock("Temperature PID" if settings["pid_engaged"] else "Constant Current")
|
||||||
self.params[3].child('Output Config', 'Control Method', 'Set Current').setValue(settings["tec_settings"]['i_set']['value'])
|
self.params[3].child('Output Config', 'Control Method', 'Set Current').setValuewithLock(settings["tec_settings"]['i_set']['value'])
|
||||||
self.params[3].child('Output Config', 'Control Method', 'Set Temperature').setValue(float(settings["temperature_setpoint"]))
|
self.params[3].child('Output Config', 'Control Method', 'Set Temperature').setValuewithLock(float(settings["temperature_setpoint"]))
|
||||||
self.params[3].child('Output Config', 'Limits', 'Max Cooling Current').setValue(settings["tec_settings"]['max_i_pos']['value'])
|
self.params[3].child('Output Config', 'Limits', 'Max Cooling Current').setValuewithLock(settings["tec_settings"]['max_i_pos']['value'])
|
||||||
self.params[3].child('Output Config', 'Limits', 'Max Heating Current').setValue(settings["tec_settings"]['max_i_neg']['value'])
|
self.params[3].child('Output Config', 'Limits', 'Max Heating Current').setValuewithLock(settings["tec_settings"]['max_i_neg']['value'])
|
||||||
self.params[3].child('Output Config', 'Limits', 'Max Voltage Difference').setValue(settings["tec_settings"]['max_v']['value'])
|
self.params[3].child('Output Config', 'Limits', 'Max Voltage Difference').setValuewithLock(settings["tec_settings"]['max_v']['value'])
|
||||||
self.params[3].child('Output Config', 'Default Power On').setValue(settings["default_pwr_on"])
|
self.params[3].child('Output Config', 'Default Power On').setValuewithLock(settings["default_pwr_on"])
|
||||||
# TODO: Update the Temperature ADC Settings here as well
|
# TODO: Update the Temperature ADC Settings here as well
|
||||||
self.params[3].child('Temperature Monitor Config', 'Upper Limit').setValue(settings["temp_mon_settings"]['upper_limit'])
|
self.params[3].child('Temperature Monitor Config', 'Upper Limit').setValuewithLock(settings["temp_mon_settings"]['upper_limit'])
|
||||||
self.params[3].child('Temperature Monitor Config', 'Lower Limit').setValue(settings["temp_mon_settings"]['lower_limit'])
|
self.params[3].child('Temperature Monitor Config', 'Lower Limit').setValuewithLock(settings["temp_mon_settings"]['lower_limit'])
|
||||||
self.params[3].child('PID Config', 'Kp').setValue(settings["pid_params"]['kp'])
|
self.params[3].child('PID Config', 'Kp').setValuewithLock(settings["pid_params"]['kp'])
|
||||||
self.params[3].child('PID Config', 'Ki').setValue(settings["pid_params"]['ki'])
|
self.params[3].child('PID Config', 'Ki').setValuewithLock(settings["pid_params"]['ki'])
|
||||||
self.params[3].child('PID Config', 'Kd').setValue(settings["pid_params"]['kd'])
|
self.params[3].child('PID Config', 'Kd').setValuewithLock(settings["pid_params"]['kd'])
|
||||||
self.params[3].child('PID Config', 'PID Output Clamping', 'Minimum').setValue(settings["pid_params"]['output_min'])
|
self.params[3].child('PID Config', 'PID Output Clamping', 'Minimum').setValuewithLock(settings["pid_params"]['output_min'])
|
||||||
self.params[3].child('PID Config', 'PID Output Clamping', 'Maximum').setValue(settings["pid_params"]['output_max'])
|
self.params[3].child('PID Config', 'PID Output Clamping', 'Maximum').setValuewithLock(settings["pid_params"]['output_max'])
|
||||||
self.params[3].child('Thermistor Settings', 'T₀').setValue(settings["thermistor_params"]['t0'])
|
self.params[3].child('Thermistor Settings', 'T₀').setValuewithLock(settings["thermistor_params"]['t0'])
|
||||||
self.params[3].child('Thermistor Settings', 'R₀').setValue(settings["thermistor_params"]['r0'])
|
self.params[3].child('Thermistor Settings', 'R₀').setValuewithLock(settings["thermistor_params"]['r0'])
|
||||||
self.params[3].child('Thermistor Settings', 'B').setValue(settings["thermistor_params"]['b'])
|
self.params[3].child('Thermistor Settings', 'B').setValuewithLock(settings["thermistor_params"]['b'])
|
||||||
self.graphs.set_temp_setpoint_line(temp=round(settings["temperature_setpoint"], 6))
|
self.graphs.set_temp_setpoint_line(temp=round(settings["temperature_setpoint"], 4))
|
||||||
self.graphs.set_temp_setpoint_line(visible=settings['pid_engaged'])
|
self.graphs.set_temp_setpoint_line(visible=settings['pid_engaged'])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Params tree cannot be updated. Data:{settings}", exc_info=True)
|
logging.error(f"Params tree cannot be updated. Data:{settings}", exc_info=True)
|
||||||
|
|
||||||
|
@ -859,14 +836,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
try:
|
try:
|
||||||
report = report['thermostat']
|
report = report['thermostat']
|
||||||
with QSignalBlocker(self.params[2]):
|
with QSignalBlocker(self.params[2]):
|
||||||
self.params[2].child('Power').setValue('g' if report['pwr_on'] else 'w')
|
self.params[2].child('Power').setValuewithLock('g' if report['pwr_on'] else 'w')
|
||||||
self.params[2].child('Alarm').setValue('r' if report['temp_mon_status']['over_temp_alarm'] else 'w')
|
self.params[2].child('Alarm').setValuewithLock('r' if report['temp_mon_status']['over_temp_alarm'] else 'w')
|
||||||
with QSignalBlocker(self.params[3]):
|
with QSignalBlocker(self.params[3]):
|
||||||
if report["temperature"] == None:
|
if report["temperature"] == None:
|
||||||
self.params[3].child('Readings', 'Temperature').setValue(-273.15)
|
self.params[3].child('Readings', 'Temperature').setValuewithLock(-273.15)
|
||||||
else:
|
else:
|
||||||
self.params[3].child('Readings', 'Temperature').setValue(report["temperature"])
|
self.params[3].child('Readings', 'Temperature').setValuewithLock(report["temperature"])
|
||||||
self.params[3].child('Readings', 'Current through TEC').setValue(report["tec_i"])
|
self.params[3].child('Readings', 'Current through TEC').setValuewithLock(report["tec_i"])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
||||||
|
|
||||||
|
@ -935,7 +912,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
if inner_param.opts.get("target", None) is not None:
|
if inner_param.opts.get("target", None) is not None:
|
||||||
if inner_param.opts.get("action", None) is not None:
|
if inner_param.opts.get("action", None) is not None:
|
||||||
cmd = getattr(getattr(self.kirdy, inner_param.opts["target"]), inner_param.opts["action"])
|
cmd = getattr(getattr(self.kirdy, inner_param.opts["target"]), inner_param.opts["action"])
|
||||||
|
param.child(*param.childPath(inner_param)).setOpts(lock=True)
|
||||||
await cmd(data)
|
await cmd(data)
|
||||||
|
param.child(*param.childPath(inner_param)).setOpts(lock=False)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
async def coro_main():
|
async def coro_main():
|
||||||
|
|
Loading…
Reference in New Issue