Skip to content

Commit 198e408

Browse files
committed
fix modbus error delay
1 parent 8ad6587 commit 198e408

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

classes/transports/modbus_base.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
from configparser import SectionProxy
1515

1616
class modbus_base(transport_base):
17+
18+
modbus_delay_increament : float = 0.05
19+
''' delay adjustment every error. todo: add a setting for this '''
20+
21+
modbus_delay_setting : float = 0.85
22+
'''time inbetween requests, unmodified'''
23+
1724
modbus_delay : float = 0.85
1825
'''time inbetween requests'''
1926

@@ -45,6 +52,7 @@ def __init__(self, settings : 'SectionProxy', protocolSettings : 'protocol_setti
4552
self.send_holding_register = settings.getboolean('send_holding_register', fallback=self.send_holding_register)
4653
self.send_input_register = settings.getboolean('send_input_register', fallback=self.send_input_register)
4754
self.modbus_delay = settings.getfloat(['batch_delay', 'modbus_delay'], fallback=self.modbus_delay)
55+
self.modbus_delay_setting = self.modbus_delay
4856

4957

5058
if self.analyze_protocol_enabled:
@@ -454,7 +462,7 @@ def read_modbus_registers(self, ranges : list[tuple] = None, start : int = 0, en
454462

455463
if register.isError() or isError:
456464
self._log.error(register.__str__)
457-
self.modbus_delay = self.modbus_delay + 0.050 #increase delay, error is likely due to modbus being busy
465+
self.modbus_delay += self.modbus_delay_increament #increase delay, error is likely due to modbus being busy
458466

459467
if self.modbus_delay > 60: #max delay. 60 seconds between requests should be way over kill if it happens
460468
self.modbus_delay = 60
@@ -468,6 +476,11 @@ def read_modbus_registers(self, ranges : list[tuple] = None, start : int = 0, en
468476
self._log.warning("Retry("+str(retry)+" - ("+str(total_retries)+")) range("+str(index)+")")
469477
index = index - 1
470478
continue
479+
elif self.modbus_delay > self.modbus_delay_setting: #no error, decrease delay
480+
self.modbus_delay -= self.modbus_delay_increament
481+
if self.modbus_delay < self.modbus_delay_setting:
482+
self.modbus_delay = self.modbus_delay_setting
483+
471484

472485

473486
retry -= 1

0 commit comments

Comments
 (0)