diff --git a/include/ui/revpioption_ui.py b/include/ui/revpioption_ui.py
index ff141c0..6407217 100644
--- a/include/ui/revpioption_ui.py
+++ b/include/ui/revpioption_ui.py
@@ -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"))
diff --git a/include/ui/revpiprogram_ui.py b/include/ui/revpiprogram_ui.py
index b641284..9552c5d 100644
--- a/include/ui/revpiprogram_ui.py
+++ b/include/ui/revpiprogram_ui.py
@@ -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"))
diff --git a/include/ui_dev/revpioption.ui b/include/ui_dev/revpioption.ui
index 88d2eb3..21dc69d 100644
--- a/include/ui_dev/revpioption.ui
+++ b/include/ui_dev/revpioption.ui
@@ -6,8 +6,8 @@
0
0
- 452
- 503
+ 416
+ 522
@@ -27,23 +27,6 @@
- -
-
-
- 5
-
-
- 120
-
-
-
- -
-
-
- ... sucessfully without error
-
-
-
-
@@ -58,10 +41,29 @@
- -
-
+
-
+
+
-
+
+ Do nothing
+
+
+ -
+
+ Restart after piCtory changed
+
+
+ -
+
+ Always restart the PLC program
+
+
+
+
+ -
+
- Restart PLC program after exit or crash
+ Driver reset action:
@@ -72,9 +74,6 @@
- -
-
-
-
-
@@ -99,6 +98,13 @@
+ -
+
+
+ ... sucessfully without error
+
+
+
-
@@ -106,6 +112,33 @@
+ -
+
+
+ 5
+
+
+ 120
+
+
+
+ -
+
+
+ Restart PLC program after exit or crash
+
+
+
+ -
+
+
+ -
+
+
+ PLC program behavior after piCtory driver reset clicked
+
+
+
diff --git a/include/ui_dev/revpiprogram.ui b/include/ui_dev/revpiprogram.ui
index 4a50e50..f6dccb1 100644
--- a/include/ui_dev/revpiprogram.ui
+++ b/include/ui_dev/revpiprogram.ui
@@ -6,8 +6,8 @@
0
0
- 488
- 500
+ 400
+ 501
@@ -20,15 +20,8 @@
PLC program
- -
-
-
- Python 2
-
-
-
- -
-
+
-
+
-
@@ -37,13 +30,6 @@
- -
-
-
- Python PLC start program:
-
-
-
-
@@ -51,8 +37,12 @@
- -
-
+
-
+
+
+ Python PLC start program:
+
+
-
@@ -61,6 +51,13 @@
+ -
+
+
+ Python 2
+
+
+
-
@@ -68,6 +65,26 @@
+ -
+
+
+ -
+
+
+ sec.
+
+
+ 600
+
+
+
+ -
+
+
+ Software watchdog (0=disabled):
+
+
+
diff --git a/revpicommander/locale/revpicommander_de.ts b/revpicommander/locale/revpicommander_de.ts
index 68fc9a7..c0e0a60 100644
--- a/revpicommander/locale/revpicommander_de.ts
+++ b/revpicommander/locale/revpicommander_de.ts
@@ -134,15 +134,25 @@ Unsaved changes will be lost
DebugIos
-
+
signed
-
+
big_endian
+
+
+ as text
+
+
+
+
+ as number
+
+
MqttManager
@@ -437,7 +447,7 @@ Select 'Yes' to override, 'No' to download only missing file
RevPiOption
-
+
Question
@@ -449,74 +459,74 @@ ACL changes and service settings are applied immediately.
-
+
Error
-
+
The settings could not be saved on the Revolution Pi!
Try to save the values one mor time and check the log files of RevPiPyLoad if the error rises again.
-
+
Do you really want to quit?
Unsaved changes will be lost.
-
+
running
-
+
stopped
-
+
The MQTT service is not available on your RevPiPyLoad version.
-
+
read only
-
+
read and write
-
+
Are you sure you want to deactivate the XML-RPC server? You will NOT be able to access the Revolution Pi with this program after saving the options!
-
+
Start/Stop PLC program and read logs
-
+
+ read IOs in watch mode
-
+
+ read properties and download PLC program
-
+
+ upload PLC program
-
+
+ set properties
@@ -543,258 +553,258 @@ Unsaved changes will be lost.
RevPiProgram
-
+
Error
-
+
You have to select a start program, before uploading the settings.
-
+
Question
-
+
The settings will be set on the Revolution Pi now.
If you made changes on the 'PCL Program' section, your plc program will restart now!
-
+
The settings could not be saved on the Revolution Pi!
Try to save the values one mor time and check the log files of RevPiPyLoad if the error rises again.
-
+
Do you really want to quit?
Unsaved changes will be lost.
-
+
Reset driver...
-
+
Reset piControl driver after successful uploading new piCtory configuration?
The process image will be interrupted for a short time!
-
+
Got an network error while send data to Revolution Pi.
Please try again.
-
+
Success
-
+
The transfer of the piCtory configuration and the reset of piControl have been successfully executed.
-
+
The piCtory configuration was successfully transferred.
-
+
Can not process the transferred file.
-
+
Can not find main elements in piCtory file.
-
+
Contained devices could not be found on Revolution Pi. The configuration may be from a newer piCtory version!
-
+
Could not load RAP catalog on Revolution Pi.
-
+
The piCtory configuration could not be written on the Revolution Pi.
-
+
Warning
-
+
The piCtroy configuration has been saved successfully.
An error occurred on piControl reset!
-
+
Save ZIP archive...
-
+
ZIP archive (*.zip);;All files (*.*)
-
+
Save TGZ archive...
-
+
TGZ archive (*.tgz);;All files (*.*)
-
+
Could not load PLC program from Revolution Pi.
-
+
Coud not save the archive or extract the files!
Please retry.
-
+
Transfer successfully completed.
-
+
Upload content of ZIP archive...
-
+
The selected file ist not a ZIP archive.
-
+
Upload content of TAR archive...
-
+
TAR archive (*.tgz);;All files (*.*)
-
+
The selected file ist not a TAR archive.
-
+
No files to upload...
-
+
Found no files to upload in given location or archive.
-
+
There was an error deleting the files on the Revolution Pi.
Upload aborted! Please try again.
-
+
The PLC program was transferred successfully.
-
+
Information
-
+
Could not find the selected PLC start program in uploaded files.
This is not an error, if the file was already on the Revolution Pi. Check PLC start program field
-
+
There is no piCtory configuration in this archive.
-
+
The Revolution Pi could not process some parts of the transmission.
-
+
Errors occurred during transmission.
-
+
Save piCtory file...
-
+
piCtory file (*.rsc);;All files (*.*)
-
+
Could not load piCtory file from Revolution Pi.
-
+
piCtory configuration successfully loaded and saved to:
{0}.
-
+
Upload piCtory file...
-
+
Save piControl file...
-
+
Process image file (*.img);;All files (*.*)
-
+
Could not load process image from Revolution Pi.
-
+
Process image successfully loaded and saved to:
{0}.
@@ -1024,100 +1034,125 @@ Publish values with topic: [basetopic]/set/[outputname]
-
+
... sucessfully without error
-
+
... after exception and errors
-
+
Start PLC program automatically
-
+
Restart PLC program after exit or crash
-
+
Set process image to NULL if program terminates...
-
+
Do not use replace io file
-
+
Use static file from RevPiPyLoad
-
+
Use dynamic file from work directory
-
+
Give own path and filename
-
+
Restart delay in seconds:
-
+
RevPiPyLoad server services
-
+
Edit ACL
-
+
MQTT process image publisher
-
+
Start RevPi piControl server
-
+
status
-
+
piControl server is:
-
+
MQTT publish service is:
-
+
Settings
-
+
Activate XML-RPC for RevPiPyControl
+
+
+ Do nothing
+
+
+
+
+ Restart after piCtory changed
+
+
+
+
+ Always restart the PLC program
+
+
+
+
+ Driver reset action:
+
+
+
+
+ PLC program behavior after piCtory driver reset clicked
+
+
diag_program
@@ -1127,12 +1162,12 @@ Publish values with topic: [basetopic]/set/[outputname]
-
+
Python 2
-
+
Python 3
@@ -1142,75 +1177,85 @@ Publish values with topic: [basetopic]/set/[outputname]
-
+
Set write permissions for plc program to workdirectory
-
+
Python version:
-
+
Program arguments:
-
+
Transfair PLC program
-
+
ZIP archive
-
+
TGZ archive
-
+
Upload
-
+
Download
-
+
Transfair format:
-
+
Including piCtory configuration
-
+
Remove all files on Revolution Pi before upload
-
+
Control files
-
+
piCtory configuraiton
-
+
Process image from piControl0
+
+
+ sec.
+
+
+
+
+ Software watchdog (0=disabled):
+
+
diag_revpiinfo
diff --git a/revpicommander/revpioption.py b/revpicommander/revpioption.py
index a63ddc8..143c81d 100644
--- a/revpicommander/revpioption.py
+++ b/revpicommander/revpioption.py
@@ -82,8 +82,7 @@ class RevPiOption(QtWidgets.QDialog, Ui_diag_options):
int(self.cbx_zeroonexit.isChecked()) != self.dc.get("zeroonexit", 0) or
int(self.cbx_zeroonerror.isChecked()) != self.dc.get("zeroonerror", 0) or
self.txt_replace_io.text() != self.dc.get("replace_ios", "") or
- # todo: self.dc.get("plcprogram_watchdog", 0)
- # todo: self.dc.get("reset_driver_action", 2)
+ self.cbb_reset_driver_action.currentIndex() != self.dc.get("reset_driver_action", 2) or
# todo: self.dc.get("rtlevel", 2)
int(self.cbx_plcslave.isChecked()) != self.dc.get("plcslave", 0) or
@@ -120,6 +119,7 @@ class RevPiOption(QtWidgets.QDialog, Ui_diag_options):
self.cbx_zeroonexit.setChecked(bool(self.dc.get("zeroonexit", 0)))
self.cbx_zeroonerror.setChecked(bool(self.dc.get("zeroonerror", 0)))
self.txt_replace_io.setText(self.dc.get("replace_ios", ""))
+ self.cbb_reset_driver_action.setCurrentIndex(self.dc.get("reset_driver_action", 2))
self.cbx_plcslave.setChecked(bool(self.dc.get("plcslave", 0)))
self.acl_plcslave = self.dc.get("plcslaveacl", "")
self.cbx_mqtt.setChecked(bool(self.dc.get("mqtt", 0)))
@@ -159,6 +159,7 @@ class RevPiOption(QtWidgets.QDialog, Ui_diag_options):
self.dc["autostart"] = int(self.cbx_autostart.isChecked())
self.dc["autoreload"] = int(self.cbx_autoreload.isChecked())
self.dc["autoreloaddelay"] = self.sbx_autoreloaddelay.value()
+ self.dc["reset_driver_action"] = self.cbb_reset_driver_action.currentIndex()
self.dc["zeroonexit"] = int(self.cbx_zeroonexit.isChecked())
self.dc["zeroonerror"] = int(self.cbx_zeroonerror.isChecked())
self.dc["replace_ios"] = self.txt_replace_io.text()
diff --git a/revpicommander/revpiprogram.py b/revpicommander/revpiprogram.py
index d65236f..c9b8ba1 100644
--- a/revpicommander/revpiprogram.py
+++ b/revpicommander/revpiprogram.py
@@ -63,7 +63,8 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
self.txt_plcarguments.text() != self.dc.get("plcarguments", "") or \
self.rbn_pythonversion_2.isChecked() != (self.dc.get("pythonversion", 3) == 2) or \
self.rbn_pythonversion_3.isChecked() != (self.dc.get("pythonversion", 3) == 3) or \
- int(self.cbx_plcworkdir_set_uid.isChecked()) != self.dc.get("plcworkdir_set_uid", 0)
+ int(self.cbx_plcworkdir_set_uid.isChecked()) != self.dc.get("plcworkdir_set_uid", 0) or \
+ self.sbx_plcprogram_watchdog.value() != self.dc.get("plcprogram_watchdog", 0)
def _load_settings(self, files_only=False):
"""Load values to GUI widgets."""
@@ -98,6 +99,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
self.rbn_pythonversion_2.setChecked(self.dc.get("pythonversion", 3) == 2)
self.rbn_pythonversion_3.setChecked(self.dc.get("pythonversion", 3) == 3)
self.cbx_plcworkdir_set_uid.setChecked(bool(self.dc.get("plcworkdir_set_uid", 0)))
+ self.sbx_plcprogram_watchdog.setValue(self.dc.get("plcprogram_watchdog", 0))
def accept(self) -> None:
# todo: After upload ask for restart pcl program?
@@ -129,6 +131,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
self.dc["plcarguments"] = self.txt_plcarguments.text()
self.dc["pythonversion"] = 2 if self.rbn_pythonversion_2.isChecked() else 3
self.dc["plcworkdir_set_uid"] = int(self.cbx_plcworkdir_set_uid.isChecked())
+ self.dc["plcprogram_watchdog"] = self.sbx_plcprogram_watchdog.value()
saved = helper.cm.call_remote_function(
"set_config", self.dc, ask,