Add option for software watchdog and driver reset action

This commit is contained in:
2020-10-13 20:02:37 +02:00
parent 5eafb2a125
commit 146dd74c95
7 changed files with 309 additions and 184 deletions

View File

@@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_diag_options(object):
def setupUi(self, diag_options):
diag_options.setObjectName("diag_options")
diag_options.resize(452, 503)
diag_options.resize(416, 522)
self.verticalLayout = QtWidgets.QVBoxLayout(diag_options)
self.verticalLayout.setObjectName("verticalLayout")
self.gb_plc = QtWidgets.QGroupBox(diag_options)
@@ -21,29 +21,24 @@ class Ui_diag_options(object):
self.lbl_replace_io = QtWidgets.QLabel(self.gb_plc)
self.lbl_replace_io.setObjectName("lbl_replace_io")
self.gridLayout.addWidget(self.lbl_replace_io, 6, 0, 1, 1)
self.sbx_autoreloaddelay = QtWidgets.QSpinBox(self.gb_plc)
self.sbx_autoreloaddelay.setMinimum(5)
self.sbx_autoreloaddelay.setMaximum(120)
self.sbx_autoreloaddelay.setObjectName("sbx_autoreloaddelay")
self.gridLayout.addWidget(self.sbx_autoreloaddelay, 2, 2, 1, 1)
self.cbx_zeroonexit = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_zeroonexit.setObjectName("cbx_zeroonexit")
self.gridLayout.addWidget(self.cbx_zeroonexit, 4, 1, 1, 2)
self.cbx_zeroonerror = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_zeroonerror.setObjectName("cbx_zeroonerror")
self.gridLayout.addWidget(self.cbx_zeroonerror, 5, 1, 1, 2)
self.cbx_autostart = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_autostart.setObjectName("cbx_autostart")
self.gridLayout.addWidget(self.cbx_autostart, 0, 0, 1, 3)
self.cbx_autoreload = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_autoreload.setObjectName("cbx_autoreload")
self.gridLayout.addWidget(self.cbx_autoreload, 1, 0, 1, 3)
self.cbb_reset_driver_action = QtWidgets.QComboBox(self.gb_plc)
self.cbb_reset_driver_action.setObjectName("cbb_reset_driver_action")
self.cbb_reset_driver_action.addItem("")
self.cbb_reset_driver_action.addItem("")
self.cbb_reset_driver_action.addItem("")
self.gridLayout.addWidget(self.cbb_reset_driver_action, 8, 1, 1, 2)
self.lbl_reset_driver_action = QtWidgets.QLabel(self.gb_plc)
self.lbl_reset_driver_action.setObjectName("lbl_reset_driver_action")
self.gridLayout.addWidget(self.lbl_reset_driver_action, 8, 0, 1, 1)
self.lbl_plc_zero = QtWidgets.QLabel(self.gb_plc)
self.lbl_plc_zero.setObjectName("lbl_plc_zero")
self.gridLayout.addWidget(self.lbl_plc_zero, 3, 0, 1, 3)
self.txt_replace_io = QtWidgets.QLineEdit(self.gb_plc)
self.txt_replace_io.setObjectName("txt_replace_io")
self.gridLayout.addWidget(self.txt_replace_io, 7, 1, 1, 2)
self.cbb_replace_io = QtWidgets.QComboBox(self.gb_plc)
self.cbb_replace_io.setObjectName("cbb_replace_io")
self.cbb_replace_io.addItem("")
@@ -51,9 +46,26 @@ class Ui_diag_options(object):
self.cbb_replace_io.addItem("")
self.cbb_replace_io.addItem("")
self.gridLayout.addWidget(self.cbb_replace_io, 6, 1, 1, 2)
self.cbx_zeroonexit = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_zeroonexit.setObjectName("cbx_zeroonexit")
self.gridLayout.addWidget(self.cbx_zeroonexit, 4, 1, 1, 2)
self.lbl_plc_delay = QtWidgets.QLabel(self.gb_plc)
self.lbl_plc_delay.setObjectName("lbl_plc_delay")
self.gridLayout.addWidget(self.lbl_plc_delay, 2, 0, 1, 2)
self.sbx_autoreloaddelay = QtWidgets.QSpinBox(self.gb_plc)
self.sbx_autoreloaddelay.setMinimum(5)
self.sbx_autoreloaddelay.setMaximum(120)
self.sbx_autoreloaddelay.setObjectName("sbx_autoreloaddelay")
self.gridLayout.addWidget(self.sbx_autoreloaddelay, 2, 2, 1, 1)
self.cbx_autoreload = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_autoreload.setObjectName("cbx_autoreload")
self.gridLayout.addWidget(self.cbx_autoreload, 1, 0, 1, 3)
self.txt_replace_io = QtWidgets.QLineEdit(self.gb_plc)
self.txt_replace_io.setObjectName("txt_replace_io")
self.gridLayout.addWidget(self.txt_replace_io, 7, 1, 1, 2)
self.lbl_lbl_reset_driver_action = QtWidgets.QLabel(self.gb_plc)
self.lbl_lbl_reset_driver_action.setObjectName("lbl_lbl_reset_driver_action")
self.gridLayout.addWidget(self.lbl_lbl_reset_driver_action, 9, 0, 1, 3)
self.verticalLayout.addWidget(self.gb_plc)
self.gb_server = QtWidgets.QGroupBox(diag_options)
self.gb_server.setObjectName("gb_server")
@@ -110,16 +122,21 @@ class Ui_diag_options(object):
diag_options.setWindowTitle(_translate("diag_options", "RevPi Python PLC Options"))
self.gb_plc.setTitle(_translate("diag_options", "Start / Stop behavior of PLC program"))
self.lbl_replace_io.setText(_translate("diag_options", "Replace IO file:"))
self.cbx_zeroonexit.setText(_translate("diag_options", "... sucessfully without error"))
self.cbx_zeroonerror.setText(_translate("diag_options", "... after exception and errors"))
self.cbx_autostart.setText(_translate("diag_options", "Start PLC program automatically"))
self.cbx_autoreload.setText(_translate("diag_options", "Restart PLC program after exit or crash"))
self.cbb_reset_driver_action.setItemText(0, _translate("diag_options", "Do nothing"))
self.cbb_reset_driver_action.setItemText(1, _translate("diag_options", "Restart after piCtory changed"))
self.cbb_reset_driver_action.setItemText(2, _translate("diag_options", "Always restart the PLC program"))
self.lbl_reset_driver_action.setText(_translate("diag_options", "Driver reset action:"))
self.lbl_plc_zero.setText(_translate("diag_options", "Set process image to NULL if program terminates..."))
self.cbb_replace_io.setItemText(0, _translate("diag_options", "Do not use replace io file"))
self.cbb_replace_io.setItemText(1, _translate("diag_options", "Use static file from RevPiPyLoad"))
self.cbb_replace_io.setItemText(2, _translate("diag_options", "Use dynamic file from work directory"))
self.cbb_replace_io.setItemText(3, _translate("diag_options", "Give own path and filename"))
self.cbx_zeroonexit.setText(_translate("diag_options", "... sucessfully without error"))
self.lbl_plc_delay.setText(_translate("diag_options", "Restart delay in seconds:"))
self.cbx_autoreload.setText(_translate("diag_options", "Restart PLC program after exit or crash"))
self.lbl_lbl_reset_driver_action.setText(_translate("diag_options", "PLC program behavior after piCtory driver reset clicked"))
self.gb_server.setTitle(_translate("diag_options", "RevPiPyLoad server services"))
self.btn_aclplcslave.setText(_translate("diag_options", "Edit ACL"))
self.cbx_mqtt.setText(_translate("diag_options", "MQTT process image publisher"))

View File

@@ -11,37 +11,44 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_diag_program(object):
def setupUi(self, diag_program):
diag_program.setObjectName("diag_program")
diag_program.resize(488, 500)
diag_program.resize(400, 501)
self.verticalLayout = QtWidgets.QVBoxLayout(diag_program)
self.verticalLayout.setObjectName("verticalLayout")
self.gb_plc = QtWidgets.QGroupBox(diag_program)
self.gb_plc.setObjectName("gb_plc")
self.gridLayout = QtWidgets.QGridLayout(self.gb_plc)
self.gridLayout.setObjectName("gridLayout")
self.rbn_pythonversion_2 = QtWidgets.QRadioButton(self.gb_plc)
self.rbn_pythonversion_2.setObjectName("rbn_pythonversion_2")
self.gridLayout.addWidget(self.rbn_pythonversion_2, 3, 1, 1, 1)
self.txt_plcarguments = QtWidgets.QLineEdit(self.gb_plc)
self.txt_plcarguments.setObjectName("txt_plcarguments")
self.gridLayout.addWidget(self.txt_plcarguments, 2, 1, 1, 2)
self.rbn_pythonversion_3 = QtWidgets.QRadioButton(self.gb_plc)
self.rbn_pythonversion_3.setObjectName("rbn_pythonversion_3")
self.gridLayout.addWidget(self.rbn_pythonversion_3, 3, 2, 1, 1)
self.lbl_plcprogram = QtWidgets.QLabel(self.gb_plc)
self.lbl_plcprogram.setObjectName("lbl_plcprogram")
self.gridLayout.addWidget(self.lbl_plcprogram, 0, 0, 1, 3)
self.cbx_plcworkdir_set_uid = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_plcworkdir_set_uid.setObjectName("cbx_plcworkdir_set_uid")
self.gridLayout.addWidget(self.cbx_plcworkdir_set_uid, 4, 0, 1, 3)
self.cbb_plcprogram = QtWidgets.QComboBox(self.gb_plc)
self.cbb_plcprogram.setObjectName("cbb_plcprogram")
self.gridLayout.addWidget(self.cbb_plcprogram, 1, 0, 1, 3)
self.rbn_pythonversion_3 = QtWidgets.QRadioButton(self.gb_plc)
self.rbn_pythonversion_3.setObjectName("rbn_pythonversion_3")
self.gridLayout.addWidget(self.rbn_pythonversion_3, 3, 2, 1, 1)
self.cbx_plcworkdir_set_uid = QtWidgets.QCheckBox(self.gb_plc)
self.cbx_plcworkdir_set_uid.setObjectName("cbx_plcworkdir_set_uid")
self.gridLayout.addWidget(self.cbx_plcworkdir_set_uid, 4, 0, 1, 3)
self.lbl_plcprogram = QtWidgets.QLabel(self.gb_plc)
self.lbl_plcprogram.setObjectName("lbl_plcprogram")
self.gridLayout.addWidget(self.lbl_plcprogram, 0, 0, 1, 3)
self.lbl_pythonversion = QtWidgets.QLabel(self.gb_plc)
self.lbl_pythonversion.setObjectName("lbl_pythonversion")
self.gridLayout.addWidget(self.lbl_pythonversion, 3, 0, 1, 1)
self.rbn_pythonversion_2 = QtWidgets.QRadioButton(self.gb_plc)
self.rbn_pythonversion_2.setObjectName("rbn_pythonversion_2")
self.gridLayout.addWidget(self.rbn_pythonversion_2, 3, 1, 1, 1)
self.lbl_plcarguments = QtWidgets.QLabel(self.gb_plc)
self.lbl_plcarguments.setObjectName("lbl_plcarguments")
self.gridLayout.addWidget(self.lbl_plcarguments, 2, 0, 1, 1)
self.txt_plcarguments = QtWidgets.QLineEdit(self.gb_plc)
self.txt_plcarguments.setObjectName("txt_plcarguments")
self.gridLayout.addWidget(self.txt_plcarguments, 2, 1, 1, 2)
self.sbx_plcprogram_watchdog = QtWidgets.QSpinBox(self.gb_plc)
self.sbx_plcprogram_watchdog.setMaximum(600)
self.sbx_plcprogram_watchdog.setObjectName("sbx_plcprogram_watchdog")
self.gridLayout.addWidget(self.sbx_plcprogram_watchdog, 5, 2, 1, 1)
self.lbl_plcprogram_watchdog = QtWidgets.QLabel(self.gb_plc)
self.lbl_plcprogram_watchdog.setObjectName("lbl_plcprogram_watchdog")
self.gridLayout.addWidget(self.lbl_plcprogram_watchdog, 5, 0, 1, 2)
self.verticalLayout.addWidget(self.gb_plc)
self.cb_transfair = QtWidgets.QGroupBox(diag_program)
self.cb_transfair.setObjectName("cb_transfair")
@@ -115,12 +122,14 @@ class Ui_diag_program(object):
_translate = QtCore.QCoreApplication.translate
diag_program.setWindowTitle(_translate("diag_program", "PLC program"))
self.gb_plc.setTitle(_translate("diag_program", "PLC program"))
self.rbn_pythonversion_2.setText(_translate("diag_program", "Python 2"))
self.rbn_pythonversion_3.setText(_translate("diag_program", "Python 3"))
self.lbl_plcprogram.setText(_translate("diag_program", "Python PLC start program:"))
self.cbx_plcworkdir_set_uid.setText(_translate("diag_program", "Set write permissions for plc program to workdirectory"))
self.lbl_plcprogram.setText(_translate("diag_program", "Python PLC start program:"))
self.lbl_pythonversion.setText(_translate("diag_program", "Python version:"))
self.rbn_pythonversion_2.setText(_translate("diag_program", "Python 2"))
self.lbl_plcarguments.setText(_translate("diag_program", "Program arguments:"))
self.sbx_plcprogram_watchdog.setSuffix(_translate("diag_program", " sec."))
self.lbl_plcprogram_watchdog.setText(_translate("diag_program", "Software watchdog (0=disabled):"))
self.cb_transfair.setTitle(_translate("diag_program", "Transfair PLC program"))
self.cbb_format.setItemText(0, _translate("diag_program", "ZIP archive"))
self.cbb_format.setItemText(1, _translate("diag_program", "TGZ archive"))

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>452</width>
<height>503</height>
<width>416</width>
<height>522</height>
</rect>
</property>
<property name="windowTitle">
@@ -27,23 +27,6 @@
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="sbx_autoreloaddelay">
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>120</number>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_zeroonexit">
<property name="text">
<string>... sucessfully without error</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_zeroonerror">
<property name="text">
@@ -58,10 +41,29 @@
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_autoreload">
<item row="8" column="1" colspan="2">
<widget class="QComboBox" name="cbb_reset_driver_action">
<item>
<property name="text">
<string>Do nothing</string>
</property>
</item>
<item>
<property name="text">
<string>Restart after piCtory changed</string>
</property>
</item>
<item>
<property name="text">
<string>Always restart the PLC program</string>
</property>
</item>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="lbl_reset_driver_action">
<property name="text">
<string>Restart PLC program after exit or crash</string>
<string>Driver reset action:</string>
</property>
</widget>
</item>
@@ -72,9 +74,6 @@
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="QLineEdit" name="txt_replace_io"/>
</item>
<item row="6" column="1" colspan="2">
<widget class="QComboBox" name="cbb_replace_io">
<item>
@@ -99,6 +98,13 @@
</item>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_zeroonexit">
<property name="text">
<string>... sucessfully without error</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="lbl_plc_delay">
<property name="text">
@@ -106,6 +112,33 @@
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="sbx_autoreloaddelay">
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>120</number>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_autoreload">
<property name="text">
<string>Restart PLC program after exit or crash</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="QLineEdit" name="txt_replace_io"/>
</item>
<item row="9" column="0" colspan="3">
<widget class="QLabel" name="lbl_lbl_reset_driver_action">
<property name="text">
<string>PLC program behavior after piCtory driver reset clicked</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>488</width>
<height>500</height>
<width>400</width>
<height>501</height>
</rect>
</property>
<property name="windowTitle">
@@ -20,15 +20,8 @@
<string>PLC program</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="1">
<widget class="QRadioButton" name="rbn_pythonversion_2">
<property name="text">
<string>Python 2</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="txt_plcarguments"/>
<item row="1" column="0" colspan="3">
<widget class="QComboBox" name="cbb_plcprogram"/>
</item>
<item row="3" column="2">
<widget class="QRadioButton" name="rbn_pythonversion_3">
@@ -37,13 +30,6 @@
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="lbl_plcprogram">
<property name="text">
<string>Python PLC start program:</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_plcworkdir_set_uid">
<property name="text">
@@ -51,8 +37,12 @@
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QComboBox" name="cbb_plcprogram"/>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="lbl_plcprogram">
<property name="text">
<string>Python PLC start program:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_pythonversion">
@@ -61,6 +51,13 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QRadioButton" name="rbn_pythonversion_2">
<property name="text">
<string>Python 2</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_plcarguments">
<property name="text">
@@ -68,6 +65,26 @@
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="txt_plcarguments"/>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="sbx_plcprogram_watchdog">
<property name="suffix">
<string> sec.</string>
</property>
<property name="maximum">
<number>600</number>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="lbl_plcprogram_watchdog">
<property name="text">
<string>Software watchdog (0=disabled):</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>