Skip to content

Commit 2c0a3a5

Browse files
committed
fix sub ushort writes - bitwise
1 parent 2c2b73e commit 2c0a3a5

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

classes/transports/modbus_base.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ def write_variable(self, entry : registry_map_entry, value : str, registry_type
377377

378378

379379
temp_map = [entry]
380-
ranges = self.protocolSettings.calculate_registry_ranges(temp_map, init=True) #init=True to bypass timechecks
380+
ranges = self.protocolSettings.calculate_registry_ranges(temp_map, self.protocolSettings.registry_map_size[registry_type], init=True) #init=True to bypass timechecks
381381
registry = self.read_modbus_registers( ranges=ranges, registry_type=registry_type)
382382
info = self.protocolSettings.process_registery(registry, temp_map)
383383
#read current value
@@ -419,14 +419,17 @@ def write_variable(self, entry : registry_map_entry, value : str, registry_type
419419
clear_mask = ~(bit_mask) # Mask for clearing the bits to be updated
420420

421421
# Clear the bits to be updated in the current_value
422-
ushortValue = current_value & clear_mask
422+
ushortValue = registry[entry.register] & clear_mask
423423

424424
# Set the bits according to the new_value at the specified bit position
425425
ushortValue |= (new_val << bit_index) & bit_mask
426426

427+
#bit_size = Data_Type.getSize(entry.data_type)
427428
bit_mask = (1 << bit_size) - 1 # Create a mask for extracting X bits
429+
bit_index = entry.register_bit
428430
check_value = (ushortValue >> bit_index) & bit_mask
429431

432+
430433
if check_value != new_val:
431434
raise ValueError("something went wrong bitwise")
432435
else:
@@ -435,7 +438,7 @@ def write_variable(self, entry : registry_map_entry, value : str, registry_type
435438
if ushortValue is None:
436439
raise ValueError("Invalid value - None")
437440

438-
self._log.info(f"WRITE: {current_value} => {ushortValue} to Register {entry.register}")
441+
self._log.info(f"WRITE: {current_value} => {value} ( {registry[entry.register]} => {ushortValue} ) to Register {entry.register}")
439442
self.write_register(entry.register, ushortValue)
440443

441444

0 commit comments

Comments
 (0)