We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 5af8eae commit 8ba0cfaCopy full SHA for 8ba0cfa
3 files changed
classes/protocol_settings.py
@@ -1049,7 +1049,7 @@ def process_register_ushort(self, registry : dict[int, int], entry : registry_ma
1049
for i in range(start_bit, end): # Iterate over each bit position (0 to 15)
1050
# Check if the i-th bit is set
1051
if (val >> i) & 1:
1052
- flag_index = "b"+str(i+offset)
+ flag_index = "b"+str(i+offset-start_bit)
1053
if flag_index in self.codes[entry.documented_name+"_codes"]:
1054
flags.append(self.codes[entry.documented_name+"_codes"][flag_index])
1055
classes/transports/modbus_base.py
@@ -377,6 +377,7 @@ def evaluate_score(entry : registry_map_entry, val):
377
def write_variable(self, entry : registry_map_entry, value : str, registry_type : Registry_Type = Registry_Type.HOLDING):
378
""" writes a value to a ModBus register; todo: registry_type to handle other write functions"""
379
380
+ value = value.strip()
381
382
temp_map = [entry]
383
ranges = self.protocolSettings.calculate_registry_ranges(temp_map, self.protocolSettings.registry_map_size[registry_type], init=True) #init=True to bypass timechecks
@@ -443,10 +444,10 @@ def write_variable(self, entry : registry_map_entry, value : str, registry_type
443
444
#16 bit flags
445
flag_size : int = Data_Type.getSize(entry.data_type)
446
- if re.match(r"^[0-1]{"+flag_size+"}$", current_value): #bitflag string
447
+ if re.match(rf"^[0-1]{{{flag_size}}}$", value): #bitflag string
448
#is string of 01... s
449
# Convert binary string to an integer
- value = int(current_value, 2)
450
+ value = int(value[::-1], 2) #reverse string
451
452
# Ensure it fits within ushort range (0-65535)
453
if value > 65535:
@@ -456,7 +457,7 @@ def write_variable(self, entry : registry_map_entry, value : str, registry_type
456
457
458
#apply bitmasks
459
bit_index = entry.register_bit
- bit_mask = ((1 << bit_size) - 1) << bit_index # Create a mask for extracting X bits starting from bit_index
460
+ bit_mask = ((1 << flag_size) - 1) << bit_index # Create a mask for extracting X bits starting from bit_index
461
clear_mask = ~(bit_mask) # Mask for clearing the bits to be updated
462
463
# Clear the bits to be updated in the current_value
protocols/test.holding_registry_map.csv
@@ -15,7 +15,8 @@ variable name,data type,writable,register,documented name,description,values,uni
15
,8bit,W,12.b8,Time_Month,,1-12,,
16
,8bit,W,13,Time_Date,,1-31,,
17
,8bit,W,13.b8,Time_Hour,,0-23,,
18
-,8bit,W,14,Time_Minute,,0-59,,
+,8bit,W,14,Time_Minute,,0-59,,
19
,8bit,W,14.b8,Time_Second,,0-59,,
20
,,W,21,decimal,,0-59,0.1,
21
-,8bit_flags,W,22.b8,bit_flags,,"{""b0"": ""bit 0"", ""b1"": ""bit 1"",""b2"": ""bit 2"",""b3"": ""bit 3"", ""b4"": ""bit 4"",""b5"": ""bit 5"", ""b6"": ""bit 6"", ""b7"": ""bit 7""}",,
+,8bit_flags,W,22,bit_flags1,,"{""b0"": ""bit 0"", ""b1"": ""bit 1"",""b2"": ""bit 2"",""b3"": ""bit 3"", ""b4"": ""bit 4"",""b5"": ""bit 5"", ""b6"": ""bit 6"", ""b7"": ""bit 7""}",,
22
+,8bit_flags,W,22.b8,bit_flags2,,"{""b0"": ""bit 0"", ""b1"": ""bit 1"",""b2"": ""bit 2"",""b3"": ""bit 3"", ""b4"": ""bit 4"",""b5"": ""bit 5"", ""b6"": ""bit 6"", ""b7"": ""bit 7""}",,
0 commit comments