Bugfix for simulator to prevent GUI crash after first use

This commit is contained in:
2021-04-25 12:44:40 +02:00
parent cda60e119c
commit 3ea43e2931
5 changed files with 1548 additions and 1530 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -153,7 +153,7 @@ class Ui_win_revpicommander(object):
self.act_disconnect.setText(_translate("win_revpicommander", "&Disconnect"))
self.act_disconnect.setShortcut(_translate("win_revpicommander", "Ctrl+X"))
self.act_reset.setText(_translate("win_revpicommander", "Reset driver..."))
self.act_simulator.setText(_translate("win_revpicommander", "Start local si&mulator..."))
self.act_simulator.setText(_translate("win_revpicommander", "RevPi si&mulator..."))
from . import ressources_rc

View File

@@ -226,7 +226,7 @@
</action>
<action name="act_simulator">
<property name="text">
<string>Start local si&amp;mulator...</string>
<string>RevPi si&amp;mulator...</string>
</property>
</action>
</widget>

View File

@@ -248,6 +248,7 @@ class ConnectionManager(QtCore.QThread):
xml_funcs = sp.system.listMethods()
xml_mode = sp.xmlmodus()
except Exception as e:
pi.logger.exception(e)
self.connection_error_observed.emit(str(e))
return False
@@ -322,10 +323,14 @@ class ConnectionManager(QtCore.QThread):
self.xml_funcs = ["psstart", "psstop", "ps_devices", "ps_inps", "ps_outs", "ps_values", "ps_setvalue"]
self.connection_established.emit()
except Exception as e:
pi.logger.exception(e)
self.connection_error_observed.emit(str(e))
self._revpi_output = None
self._revpi = None
if settings.value("simulator/stop_remove", False, bool):
remove(procimg)
return self._revpi is not None
@@ -453,15 +458,23 @@ class ConnectionManager(QtCore.QThread):
return None
@property
def connected(self):
def connected(self) -> bool:
"""True if we have an active connection."""
return self._cli is not None
@property
def simulating(self):
def simulating(self) -> bool:
"""True, if simulating mode is running."""
return self._revpi is not None
@property
def simulating_configrsc(self) -> str:
return self._revpi.configrsc if self._revpi else ""
@property
def simulating_procimg(self) -> str:
return self._revpi.procimg if self._revpi else ""
cm = ConnectionManager()
"""Clobal connection manager instance."""

View File

@@ -70,6 +70,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
def _set_gui_control_states(self):
"""Setup states of actions and buttons."""
if helper.cm.simulating:
self.btn_plc_stop.setEnabled(True) # Stop simulator
self.btn_plc_restart.setEnabled(True) # Reset simulator values
self.btn_plc_debug.setEnabled(True)
else:
connected = helper.cm.connected
self.men_plc.setEnabled(connected)
self.act_logs.setEnabled(connected)
@@ -128,6 +134,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
pi.logger.debug("RevPiCommander.on_cm_connection_established")
self._set_gui_control_states()
if helper.cm.simulating:
self.txt_connection.setText("configrsc=\"{0}\", procimg=\"{1}\"".format(
helper.cm.simulating_configrsc,
helper.cm.simulating_procimg,
))
else:
self.txt_connection.setText("{0} - {1}:{2}".format(
helper.cm.name,
helper.cm.address,
@@ -194,13 +206,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
@QtCore.pyqtSlot()
def on_act_simulator_triggered(self):
"""Start the simulator function."""
helper.cm.pyload_disconnect()
diag = Simulator(self)
if diag.exec() != QtWidgets.QDialog.Accepted:
diag.deleteLater()
return
helper.cm.pyload_disconnect()
configrsc_file = helper.settings.value("simulator/configrsc", "", str)
procimg_file = helper.settings.value("simulator/procimg", "", str)
@@ -212,12 +223,6 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
"You can copy that from header textbox."
).format(procimg_file, configrsc_file)
)
self.txt_connection.setText("configrsc=\"{0}\", procimg=\"{1}\"".format(configrsc_file, procimg_file))
# Stop button will disable simulating
self.btn_plc_stop.setEnabled(True)
self.btn_plc_restart.setEnabled(True)
self.btn_plc_debug.setEnabled(True)
else:
pi.logger.error("Can not start simulator")
QtWidgets.QMessageBox.critical(