@@ -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