diff --git a/pytec/tec_qt.py b/pytec/tec_qt.py
index 1ee6b43..b3faa7b 100644
--- a/pytec/tec_qt.py
+++ b/pytec/tec_qt.py
@@ -85,14 +85,12 @@ class WrappedClient(QObject, Client):
async def _check_zero_limits(self):
pwm_report = await self.get_pwm()
for pwm_channel in pwm_report:
+ ch = pwm_channel["channel"]
if (neg := pwm_channel["max_i_neg"]["value"]) != (pos := pwm_channel["max_i_pos"]["value"]):
# Set the minimum of the 2
- lcd = min(neg, pos)
- await self.set_param("pwm", pwm_channel["channel"], 'max_i_neg', lcd)
- await self.set_param("pwm", pwm_channel["channel"], 'max_i_pos', lcd)
- for limit in ["max_i_pos", "max_v"]:
- if pwm_channel[limit]["value"] == 0.0:
- QtWidgets.QMessageBox.warning(self.parent(), "Limits", "Max {} is set to zero on channel {}!".format("Current" if limit == "max_i_pos" else "Voltage", pwm_channel["channel"]))
+ lowest = min(neg, pos)
+ await self.set_param("pwm", ch, 'max_i_neg', lowest)
+ await self.set_param("pwm", ch, 'max_i_pos', lowest)
class ClientWatcher(QObject):
@@ -509,6 +507,39 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.plot_settings.setMenu(self.plot_menu)
+ @pyqtSlot(list)
+ def set_limits_warning(self, limits_zeroed: list):
+ for channel in limits_zeroed:
+ if len(channel) != 0:
+ break
+ else:
+ self.limits_warning.setPixmap(QtGui.QPixmap())
+ self.limits_warning.setToolTip("")
+ return
+
+ report_str = "The following output limits are set to zero:\n"
+ for ch in range(2):
+ had_zeros = False
+ first = True
+ for limit in "max_i_pos", "max_v":
+ if limit in limits_zeroed[ch]:
+ if not first:
+ report_str += ", "
+ if not had_zeros:
+ report_str += f"Channel {ch}: "
+ had_zeros = True
+ report_str += '"Max Absolute Current"' if limit == "max_i_pos" else '"Max Absolute Voltage"'
+ first = False
+ if had_zeros:
+ report_str += '\n'
+
+ report_str += "\nThere will be no overall output on channels with zeroed limits."
+
+ pixmapi = getattr(QtWidgets.QStyle.StandardPixmap, "SP_MessageBoxWarning")
+ icon = self.style().standardIcon(pixmapi)
+ self.limits_warning.setPixmap(icon.pixmap(16, 16))
+ self.limits_warning.setToolTip(report_str)
+
@pyqtSlot(int)
def set_max_samples(self, samples: int):
for channel_graph in self.channel_graphs:
@@ -767,12 +798,20 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
@pyqtSlot(list)
def update_pwm(self, pwm_data):
+ channel_zeroed_limits = [[] for i in range(2)]
+
for pwm_params in pwm_data:
channel = pwm_params["channel"]
with QSignalBlocker(self.params[channel]):
self.params[channel].child("Output Config", "Limits", "Max Absolute Voltage").setValue(pwm_params["max_v"]["value"])
self.params[channel].child("Output Config", "Limits", "Max Absolute Current").setValue(pwm_params["max_i_pos"]["value"])
+ for limit in "max_i_pos", "max_v":
+ if pwm_params[limit]["value"] == 0.0:
+ channel_zeroed_limits[channel].append(limit)
+
+ self.set_limits_warning(channel_zeroed_limits)
+
@pyqtSlot(list)
def update_postfilter(self, postfilter_data):
for postfilter_params in postfilter_data:
diff --git a/pytec/tec_qt.ui b/pytec/tec_qt.ui
index 87bb516..326d785 100644
--- a/pytec/tec_qt.ui
+++ b/pytec/tec_qt.ui
@@ -252,6 +252,9 @@
+ -
+
+
-
diff --git a/pytec/ui_tec_qt.py b/pytec/ui_tec_qt.py
index 94bdc93..909c89f 100644
--- a/pytec/ui_tec_qt.py
+++ b/pytec/ui_tec_qt.py
@@ -127,6 +127,9 @@ class Ui_MainWindow(object):
self.plot_settings.setPopupMode(QtWidgets.QToolButton.ToolButtonPopupMode.InstantPopup)
self.plot_settings.setObjectName("plot_settings")
self.settings_layout.addWidget(self.plot_settings)
+ self.limits_warning = QtWidgets.QLabel(parent=self.bottom_settings_group)
+ self.limits_warning.setObjectName("limits_warning")
+ self.settings_layout.addWidget(self.limits_warning)
self.background_task_lbl = QtWidgets.QLabel(parent=self.bottom_settings_group)
self.background_task_lbl.setObjectName("background_task_lbl")
self.settings_layout.addWidget(self.background_task_lbl)