Parameter for shutdown timeout in seconds for plc program (default is and was 5 seconds)

This commit is contained in:
2021-02-27 15:05:09 +01:00
parent e4ced5539e
commit 3fe69b54cc
4 changed files with 22 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ autostart = 1
plcworkdir = /var/lib/revpipyload plcworkdir = /var/lib/revpipyload
plcworkdir_set_uid = 1 plcworkdir_set_uid = 1
plcprogram = program.py plcprogram = program.py
plcprogram_stop_timeout = 5
plcprogram_watchdog = 0 plcprogram_watchdog = 0
plcarguments = plcarguments =
plcuid = 1000 plcuid = 1000

View File

@@ -40,6 +40,7 @@ class RevPiPlc(Thread):
self._program = program self._program = program
self._procplc = None self._procplc = None
self._pversion = pversion self._pversion = pversion
self._stop_timeout_steps = 10
self.autoreload = False self.autoreload = False
self.exitcode = None self.exitcode = None
self.gid = 65534 self.gid = 65534
@@ -257,7 +258,7 @@ class RevPiPlc(Thread):
proginit.logger.debug("leave RevPiPlc.stop()") proginit.logger.debug("leave RevPiPlc.stop()")
return return
while self._procplc.poll() is None and count < 10: while self._procplc.poll() is None and count < self._stop_timeout_steps:
count += 1 count += 1
proginit.logger.info( proginit.logger.info(
"wait term plc program {0} seconds".format(count * 0.5) "wait term plc program {0} seconds".format(count * 0.5)
@@ -284,3 +285,15 @@ class RevPiPlc(Thread):
proginit.logger.debug("leave RevPiPlc.stop()") proginit.logger.debug("leave RevPiPlc.stop()")
autoreloaddelay = property(__get_autoreloaddelay, __set_autoreloaddelay) 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

View File

@@ -220,6 +220,8 @@ class RevPiPyLoad:
"plcworkdir", ".") "plcworkdir", ".")
self.plcprogram = self.globalconfig["DEFAULT"].get( self.plcprogram = self.globalconfig["DEFAULT"].get(
"plcprogram", "none.py") "plcprogram", "none.py")
self.plcprogram_stop_timeout = self.globalconfig.getint(
"DEFAULT", "plcprogram_stop_timeout", fallback=5)
self.plcprogram_watchdog = self.globalconfig["DEFAULT"].getint( self.plcprogram_watchdog = self.globalconfig["DEFAULT"].getint(
"plcprogram_watchdog", 0) "plcprogram_watchdog", 0)
self.plcarguments = self.globalconfig["DEFAULT"].get( self.plcarguments = self.globalconfig["DEFAULT"].get(
@@ -376,6 +378,7 @@ class RevPiPyLoad:
self.plc.autoreload = self.autoreload self.plc.autoreload = self.autoreload
self.plc.autoreloaddelay = self.autoreloaddelay self.plc.autoreloaddelay = self.autoreloaddelay
self.plc.softdog.timeout = self.plcprogram_watchdog self.plc.softdog.timeout = self.plcprogram_watchdog
self.plc.stop_timeout = self.plcprogram_stop_timeout
self.plc.zeroonerror = self.zeroonerror self.plc.zeroonerror = self.zeroonerror
self.plc.zeroonexit = self.zeroonexit self.plc.zeroonexit = self.zeroonexit
@@ -581,6 +584,7 @@ class RevPiPyLoad:
th_plc.softdog.address = \ th_plc.softdog.address = \
0 if self.revpi_led_address < 0 else self.revpi_led_address 0 if self.revpi_led_address < 0 else self.revpi_led_address
th_plc.softdog.timeout = self.plcprogram_watchdog th_plc.softdog.timeout = self.plcprogram_watchdog
th_plc.stop_timeout = self.plcprogram_stop_timeout
th_plc.zeroonerror = self.zeroonerror th_plc.zeroonerror = self.zeroonerror
th_plc.zeroonexit = self.zeroonexit th_plc.zeroonexit = self.zeroonexit
@@ -964,6 +968,7 @@ class RevPiPyLoad:
dc["plcworkdir"] = self.plcworkdir dc["plcworkdir"] = self.plcworkdir
dc["plcworkdir_set_uid"] = int(self.plcworkdir_set_uid) dc["plcworkdir_set_uid"] = int(self.plcworkdir_set_uid)
dc["plcprogram"] = self.plcprogram dc["plcprogram"] = self.plcprogram
dc["plcprogram_stop_timeout"] = self.plcprogram_stop_timeout
dc["plcprogram_watchdog"] = self.plcprogram_watchdog dc["plcprogram_watchdog"] = self.plcprogram_watchdog
dc["plcarguments"] = self.plcarguments dc["plcarguments"] = self.plcarguments
dc["plcuid"] = self.plcuid dc["plcuid"] = self.plcuid
@@ -1253,6 +1258,7 @@ class RevPiPyLoad:
"autoreloaddelay": "[0-9]+", "autoreloaddelay": "[0-9]+",
"autostart": "[01]", "autostart": "[01]",
"plcprogram": ".+", "plcprogram": ".+",
"plcprogram_stop_timeout": "[0-9]+",
"plcprogram_watchdog": "[0-9]+", "plcprogram_watchdog": "[0-9]+",
"plcarguments": ".*", "plcarguments": ".*",
"plcworkdir_set_uid": "[01]", "plcworkdir_set_uid": "[01]",

View File

@@ -27,7 +27,7 @@ setup(
license="LGPLv3", license="LGPLv3",
name="revpipyload", name="revpipyload",
version="0.9.6", version="0.9.6a",
scripts=[ scripts=[
"data/revpipyload", "data/revpipyload",