@@ -440,36 +440,36 @@ def write_register(self, register, value):
440
440
441
441
def write_registers_with_retry (self , start_register , values ):
442
442
""" Write values with a retry mechanism """
443
- with self .mutex :
444
- retry = self . write_retry
445
- logging . info ( f"Writing { start_register } with { values } " )
446
- signed = False
447
- success = False
448
- retries = 0
449
- failed = 0
450
- while retry > 0 and not success :
451
- try :
443
+ retry = self .write_retry
444
+ logging . info ( f"Writing { start_register } with { values } " )
445
+ signed = False
446
+ success = False
447
+ retries = 0
448
+ failed = 0
449
+ while retry > 0 and not success :
450
+ try :
451
+ with self . mutex :
452
452
self .instrument .write_registers (int (start_register ,16 ), values )
453
- except minimalmodbus .NoResponseError :
454
- logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
455
- retry = retry - 1
456
- retries = retries + 1
457
- time .sleep (self .write_retry_delay )
458
- except minimalmodbus .InvalidResponseError :
459
- logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
460
- retry = retry - 1
461
- retries = retries + 1
462
- time .sleep (self .write_retry_delay )
463
- except serial .serialutil .SerialException :
464
- logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
465
- retry = retry - 1
466
- retries = retries + 1
467
- time .sleep (self .write_retry_delay )
468
- success = True
469
- if success :
470
- logging .info ('Modbus Write Request: %s successful. Retries: %d' , start_register , retries )
471
- else :
472
- logging .error ('Modbus Write Request: %s failed. Retry exhausted. Retries: %d' , start_register , retries )
453
+ except minimalmodbus .NoResponseError :
454
+ logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
455
+ retry = retry - 1
456
+ retries = retries + 1
457
+ time .sleep (self .write_retry_delay )
458
+ except minimalmodbus .InvalidResponseError :
459
+ logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
460
+ retry = retry - 1
461
+ retries = retries + 1
462
+ time .sleep (self .write_retry_delay )
463
+ except serial .serialutil .SerialException :
464
+ logging .debug (f"Failed to write_register { start_register } { traceback .format_exc ()} " )
465
+ retry = retry - 1
466
+ retries = retries + 1
467
+ time .sleep (self .write_retry_delay )
468
+ success = True
469
+ if success :
470
+ logging .info ('Modbus Write Request: %s successful. Retries: %d' , start_register , retries )
471
+ else :
472
+ logging .error ('Modbus Write Request: %s failed. Retry exhausted. Retries: %d' , start_register , retries )
473
473
474
474
def read_register (self , registeraddress , read_type , signed , registers = 1 ):
475
475
""" Read value from register with a retry mechanism """
@@ -691,7 +691,7 @@ def convert_value(self, register, value):
691
691
return next ((k for k , v in register ['modes' ].items () if v == value ), value )
692
692
return value
693
693
694
- def write_register_block (self , block_name , update_register , value ):
694
+ def write_register_block (self , block_name , update_register , new_value ):
695
695
""" Write a specific register block from configuration to Modbus """
696
696
block = next ((b for b in self .config .get ('write_register_blocks' , []) if b ['name' ] == block_name ), None )
697
697
if not block :
@@ -706,7 +706,7 @@ def write_register_block(self, block_name, update_register, value):
706
706
if register_name == update_register :
707
707
register = self .get_register (register_name )
708
708
if register :
709
- raw_value = self .translate_to_raw_value (register , value )
709
+ raw_value = self .translate_to_raw_value (register , new_value )
710
710
else :
711
711
logging .error (f"Register { register_name } not found in configuration" )
712
712
continue
@@ -719,13 +719,26 @@ def write_register_block(self, block_name, update_register, value):
719
719
if 'append' in block :
720
720
for append_item in block ['append' ]:
721
721
values .append (append_item )
722
- logging .info (f"Would write { block ['start_register' ]} with { values [:length ]} " )
722
+ # logging.info(f"Would write {block['start_register']} with {values[:length]}")
723
723
#logging.info(f"Reference values: {[0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1]}")
724
724
# [0, 0, 1, 540, 530, 425, 470, 10000, 10000, 89, 90, 250, 480, 1, 10, 1]
725
-
726
725
#self.write_registers_with_retry(block['start_register'], [0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1])
727
726
728
- self .write_registers_with_retry (block ['start_register' ], values [:length ])
727
+ register = self .get_register (update_register )
728
+ new_raw_value = self .translate_to_raw_value (register , new_value )
729
+
730
+ retry = self .write_retry + 10
731
+ while retry > 0 :
732
+ current_raw_value = self .raw_data [update_register ]
733
+ current_value = self .translate_from_raw_value (register , current_raw_value )
734
+ if current_raw_value == new_raw_value :
735
+ logging .info (f"Current value for { register ['name' ]} : { current_raw_value } ({ current_value } ). Matches desired value: { new_raw_value } ({ new_value } )." )
736
+ retry = 0
737
+ else :
738
+ logging .info (f"Current value for { register ['name' ]} : { current_raw_value } ({ current_value } ), attempting to set it to: { new_raw_value } ({ new_value } ). Retries remaining: { retry } " )
739
+ self .write_registers_with_retry (block ['start_register' ], values [:length ])
740
+ time .sleep (self .write_retry_delay )
741
+ retry = retry - 1
729
742
730
743
def get_register (self , register_name ):
731
744
""" Look up a register from self.config['registers'] """
0 commit comments