1414 from configparser import SectionProxy
1515
1616class 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