77
88from .transport_base import transport_base
99from ..protocol_settings import Data_Type , Registry_Type , registry_map_entry , protocol_settings
10+ from defs .common import strtobool
1011
1112from typing import TYPE_CHECKING
1213if TYPE_CHECKING :
@@ -20,13 +21,28 @@ class modbus_base(transport_base):
2021 analyze_protocol_save_load : bool = False
2122 first_connect : bool = True
2223
24+ send_holding_register : bool = True
25+ send_input_register : bool = True
26+
2327 def __init__ (self , settings : 'SectionProxy' , protocolSettings : 'protocol_settings' = None ):
2428 super ().__init__ (settings , protocolSettings = protocolSettings )
2529
26- self .analyze_protocol_enabled = settings .getboolean ('analyze_protocol' , fallback = self .analyze_protocol )
30+ self .analyze_protocol_enabled = settings .getboolean ('analyze_protocol' , fallback = self .analyze_protocol_enabled )
2731 self .analyze_protocol_save_load = settings .getboolean ('analyze_protocol_save_load' , fallback = self .analyze_protocol_save_load )
2832
2933
34+ #get defaults from protocol settings
35+ if 'send_input_register' in self .protocolSettings .settings :
36+ self .send_input_register = strtobool (self .protocolSettings .settings ['send_input_register' ])
37+
38+ if 'send_holding_register' in self .protocolSettings .settings :
39+ self .send_holding_register = strtobool (self .protocolSettings .settings ['send_holding_register' ])
40+
41+ #allow enable/disable of which registers to send
42+ self .send_holding_register = settings .getboolean ('send_holding_register' , fallback = self .send_holding_register )
43+ self .send_input_register = settings .getboolean ('send_input_register' , fallback = self .send_input_register )
44+
45+
3046 if self .analyze_protocol_enabled :
3147 self .connect ()
3248 self .analyze_protocol ()
@@ -71,7 +87,7 @@ def read_serial_number(self) -> str:
7187 sn2 = sn2 + str (data_bytes .decode ('utf-8' ))
7288 sn3 = str (data_bytes .decode ('utf-8' )) + sn3
7389
74- time .sleep (self .modbus_delay ) #sleep inbetween requests so modbus can rest
90+ time .sleep (self .modbus_delay * 2 ) #sleep inbetween requests so modbus can rest
7591
7692 print (sn2 )
7793 print (sn3 )
@@ -105,7 +121,16 @@ def write_data(self, data : dict[str, str]) -> None:
105121
106122 def read_data (self ) -> dict [str , str ]:
107123 info = {}
108- for registry_type in Registry_Type :
124+ #modbus - only read input/holding registries
125+ for registry_type in (Registry_Type .INPUT , Registry_Type .HOLDING ):
126+
127+ #enable / disable input/holding register
128+ if registry_type == Registry_Type .INPUT and not self .send_input_register :
129+ continue
130+
131+ if registry_type == Registry_Type .HOLDING and not self .send_holding_register :
132+ continue
133+
109134 registry = self .read_modbus_registers (ranges = self .protocolSettings .get_registry_ranges (registry_type = registry_type ), registry_type = registry_type )
110135 new_info = self .protocolSettings .process_registery (registry , self .protocolSettings .get_registry_map (registry_type ))
111136
0 commit comments