mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 23:23: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 = /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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]",
|
||||||
|
|||||||
Reference in New Issue
Block a user