GUI: Control Panel changes #2

Open
atse wants to merge 21 commits from gui_dev-ctrl_panel into gui_dev
Showing only changes of commit e1bd960900 - Show all commits

View File

@ -30,6 +30,11 @@ class CtrlPanel(QObject):
self.trees_ui = trees_ui
self.NUM_CHANNELS = len(trees_ui)
def _set_value_with_lock(self, value):
if not self.opts.get("lock"):
self.setValue(value)
Parameter.set_value_with_lock = _set_value_with_lock
self.params = [
Parameter.create(
name=f"Thermostat Channel {ch} Parameters",
@ -47,7 +52,6 @@ class CtrlPanel(QObject):
set_tree_label_tips(tree)
for ch, param in enumerate(self.params):
self.params[ch].setValue = self._setValue
param.sigTreeStateChanged.connect(sigTreeStateChanged_handle)

Usability:
I think this is duplicated. "Set Current" should not reflect the value being set by "Thermostat". That area of ctrl panel is configured by user afterall. It is confusing to me if it suddenly becomes a "Reading" item. Also, the current readings already reflect the current being set already.

Instead, I think we should keep the "Set Current" and and "Setpoint" always shown and configurable. And there are some sorts of indicator indicating which value is being used for control.

image

Usability: I think this is duplicated. "Set Current" should not reflect the value being set by "Thermostat". That area of ctrl panel is configured by user afterall. It is confusing to me if it suddenly becomes a "Reading" item. Also, the current readings already reflect the current being set already. Instead, I think we should keep the "Set Current" and and "Setpoint" always shown and configurable. And there are some sorts of indicator indicating which value is being used for control. ![image](/attachments/1dba729b-7728-400b-94db-46c8a997d50e)
for handle in sigActivated_handles[ch]:
@ -77,32 +81,6 @@ class CtrlPanel(QObject):
font.setBold(True)
item.setFont(0, font)
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"]
def change_params_title(self, channel, path, title):
self.params[channel].child(*path).setOpts(title=title)
@ -111,57 +89,59 @@ class CtrlPanel(QObject):
for settings in pid_settings:
channel = settings["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("pid", "kp").setValue(
self.params[channel].child("pid", "kp").set_value_with_lock(
settings["parameters"]["kp"]
)
self.params[channel].child("pid", "ki").setValue(
self.params[channel].child("pid", "ki").set_value_with_lock(
settings["parameters"]["ki"]
)
self.params[channel].child("pid", "kd").setValue(
self.params[channel].child("pid", "kd").set_value_with_lock(
settings["parameters"]["kd"]
)
self.params[channel].child(
"pid", "pid_output_clamping", "output_min"
).setValue(settings["parameters"]["output_min"])
).set_value_with_lock(settings["parameters"]["output_min"])
self.params[channel].child(
"pid", "pid_output_clamping", "output_max"
).setValue(settings["parameters"]["output_max"])
).set_value_with_lock(settings["parameters"]["output_max"])
self.params[channel].child(
"output", "control_method", "target"
).setValue(settings["target"])
).set_value_with_lock(settings["target"])
@pyqtSlot("QVariantList")
def update_report(self, report_data):
for settings in report_data:
channel = settings["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("output", "control_method").setValue(
self.params[channel].child(
"output", "control_method"
).set_value_with_lock(
"temperature_pid" if settings["pid_engaged"] else "constant_current"
)
self.params[channel].child(
"output", "control_method", "i_set"
).setValue(settings["i_set"])
).set_value_with_lock(settings["i_set"])
if settings["temperature"] is not None:
self.params[channel].child("readings", "temperature").setValue(
settings["temperature"]
)
self.params[channel].child(
"readings", "temperature"
).set_value_with_lock(settings["temperature"])
if settings["tec_i"] is not None:
self.params[channel].child("readings", "tec_i").setValue(
settings["tec_i"]
)
self.params[channel].child(
"readings", "tec_i"
).set_value_with_lock(settings["tec_i"])
@pyqtSlot("QVariantList")
def update_thermistor(self, sh_data):
for sh_param in sh_data:
channel = sh_param["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("thermistor", "t0").setValue(
self.params[channel].child("thermistor", "t0").set_value_with_lock(
sh_param["params"]["t0"] - 273.15
)
self.params[channel].child("thermistor", "r0").setValue(
self.params[channel].child("thermistor", "r0").set_value_with_lock(
sh_param["params"]["r0"]
)
self.params[channel].child("thermistor", "b").setValue(
self.params[channel].child("thermistor", "b").set_value_with_lock(
sh_param["params"]["b"]
)
@ -172,15 +152,15 @@ class CtrlPanel(QObject):
for pwm_params in pwm_data:
channel = pwm_params["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("output", "limits", "max_v").setValue(
pwm_params["max_v"]["value"]
)
self.params[channel].child("output", "limits", "max_i_pos").setValue(
pwm_params["max_i_pos"]["value"]
)
self.params[channel].child("output", "limits", "max_i_neg").setValue(
pwm_params["max_i_neg"]["value"]
)
self.params[channel].child(
"output", "limits", "max_v"
).set_value_with_lock(pwm_params["max_v"]["value"])
self.params[channel].child(
"output", "limits", "max_i_pos"
).set_value_with_lock(pwm_params["max_i_pos"]["value"])
self.params[channel].child(
"output", "limits", "max_i_neg"
).set_value_with_lock(pwm_params["max_i_neg"]["value"])
for limit in "max_i_pos", "max_i_neg", "max_v":
if pwm_params[limit]["value"] == 0.0:
@ -192,6 +172,6 @@ class CtrlPanel(QObject):
for postfilter_params in postfilter_data:
channel = postfilter_params["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("thermistor", "rate").setValue(
self.params[channel].child("thermistor", "rate").set_value_with_lock(
postfilter_params["rate"]
)