mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
Parameter for shutdown timeout in seconds for plc program (default is and was 5 seconds)
This commit is contained in:
@@ -5,6 +5,7 @@ autostart = 1
|
||||
plcworkdir = /var/lib/revpipyload
|
||||
plcworkdir_set_uid = 1
|
||||
plcprogram = program.py
|
||||
plcprogram_stop_timeout = 5
|
||||
plcprogram_watchdog = 0
|
||||
plcarguments =
|
||||
plcuid = 1000
|
||||
|
||||
@@ -40,6 +40,7 @@ class RevPiPlc(Thread):
|
||||
self._program = program
|
||||
self._procplc = None
|
||||
self._pversion = pversion
|
||||
self._stop_timeout_steps = 10
|
||||
self.autoreload = False
|
||||
self.exitcode = None
|
||||
self.gid = 65534
|
||||
@@ -257,7 +258,7 @@ class RevPiPlc(Thread):
|
||||
proginit.logger.debug("leave RevPiPlc.stop()")
|
||||
return
|
||||
|
||||
while self._procplc.poll() is None and count < 10:
|
||||
while self._procplc.poll() is None and count < self._stop_timeout_steps:
|
||||
count += 1
|
||||
proginit.logger.info(
|
||||
"wait term plc program {0} seconds".format(count * 0.5)
|
||||
@@ -284,3 +285,15 @@ class RevPiPlc(Thread):
|
||||
proginit.logger.debug("leave RevPiPlc.stop()")
|
||||
|
||||
autoreloaddelay = property(__get_autoreloaddelay, __set_autoreloaddelay)
|
||||
|
||||
@property
|
||||
def stop_timeout(self) -> int:
|
||||
"""Get program stop timeout in seconds."""
|
||||
return self._stop_timeout_steps // 2
|
||||
|
||||
@stop_timeout.setter
|
||||
def stop_timeout(self, value: int):
|
||||
"""Set program stop timeout in seconds."""
|
||||
if type(value) != int:
|
||||
raise TypeError("Value of stop_timeout must be <class 'int'>")
|
||||
self._stop_timeout_steps = value * 2
|
||||
|
||||
@@ -220,6 +220,8 @@ class RevPiPyLoad:
|
||||
"plcworkdir", ".")
|
||||
self.plcprogram = self.globalconfig["DEFAULT"].get(
|
||||
"plcprogram", "none.py")
|
||||
self.plcprogram_stop_timeout = self.globalconfig.getint(
|
||||
"DEFAULT", "plcprogram_stop_timeout", fallback=5)
|
||||
self.plcprogram_watchdog = self.globalconfig["DEFAULT"].getint(
|
||||
"plcprogram_watchdog", 0)
|
||||
self.plcarguments = self.globalconfig["DEFAULT"].get(
|
||||
@@ -376,6 +378,7 @@ class RevPiPyLoad:
|
||||
self.plc.autoreload = self.autoreload
|
||||
self.plc.autoreloaddelay = self.autoreloaddelay
|
||||
self.plc.softdog.timeout = self.plcprogram_watchdog
|
||||
self.plc.stop_timeout = self.plcprogram_stop_timeout
|
||||
self.plc.zeroonerror = self.zeroonerror
|
||||
self.plc.zeroonexit = self.zeroonexit
|
||||
|
||||
@@ -581,6 +584,7 @@ class RevPiPyLoad:
|
||||
th_plc.softdog.address = \
|
||||
0 if self.revpi_led_address < 0 else self.revpi_led_address
|
||||
th_plc.softdog.timeout = self.plcprogram_watchdog
|
||||
th_plc.stop_timeout = self.plcprogram_stop_timeout
|
||||
th_plc.zeroonerror = self.zeroonerror
|
||||
th_plc.zeroonexit = self.zeroonexit
|
||||
|
||||
@@ -964,6 +968,7 @@ class RevPiPyLoad:
|
||||
dc["plcworkdir"] = self.plcworkdir
|
||||
dc["plcworkdir_set_uid"] = int(self.plcworkdir_set_uid)
|
||||
dc["plcprogram"] = self.plcprogram
|
||||
dc["plcprogram_stop_timeout"] = self.plcprogram_stop_timeout
|
||||
dc["plcprogram_watchdog"] = self.plcprogram_watchdog
|
||||
dc["plcarguments"] = self.plcarguments
|
||||
dc["plcuid"] = self.plcuid
|
||||
@@ -1253,6 +1258,7 @@ class RevPiPyLoad:
|
||||
"autoreloaddelay": "[0-9]+",
|
||||
"autostart": "[01]",
|
||||
"plcprogram": ".+",
|
||||
"plcprogram_stop_timeout": "[0-9]+",
|
||||
"plcprogram_watchdog": "[0-9]+",
|
||||
"plcarguments": ".*",
|
||||
"plcworkdir_set_uid": "[01]",
|
||||
|
||||
Reference in New Issue
Block a user