@@ -448,7 +448,9 @@ def _add_slaves(self, selected, data, ret):
448448 self .modbus_device .add_slave (slave_to_add )
449449 for block_name , block_type in BLOCK_TYPES .items ():
450450 self .modbus_device .add_block (slave_to_add ,
451- block_name , block_type , self .block_start , self .block_size )
451+ block_name , block_type ,
452+ self .block_start ,
453+ self .block_size )
452454
453455 data .append (str (slave_to_add ))
454456 self .slave_list .adapter .data = data
@@ -540,9 +542,13 @@ def _update_data_models(self, active, tab, value):
540542 current_tab = MAP [ct .text ]
541543
542544 ct .content .update_view ()
543- # self.data_map[self.active_slave][current_tab]['dirty'] = False
544545 _data = self .data_map [active ][current_tab ]
545- item_strings = _data ['item_strings' ]
546+ registers = sum (
547+ map (
548+ lambda val : int (
549+ filter (
550+ str .isdigit , str (val .get ('formatter' , '16' )))
551+ ), _data ['data' ].values ()))/ 16
546552
547553 # Old schema
548554 if isinstance (value , list ):
@@ -553,14 +559,15 @@ def _update_data_models(self, active, tab, value):
553559 value [index ] = {'value' : v }
554560 if current_tab in ['input_registers' , 'holding_registers' ]:
555561 value [index ]['formatter' ] = 'uint16'
556- if len (value ) < self .block_size :
562+ if registers + len (value ) <= self .block_size :
557563 list_data , item_strings = ct .content .add_data (value )
558- _data ['item_strings' ] = item_strings
564+ _data ['item_strings' ].extend (item_strings )
565+ _data ['item_strings' ] = list (set (_data ['item_strings' ]))
559566 _data ['data' ].update (list_data )
560- self .update_backend (int (active ), current_tab , value )
567+ self .update_backend (int (active ), current_tab , list_data )
561568 else :
562569 msg = ("OutOfModbusBlockError: address %s"
563- " is out of block size %s" % (len (item_strings ),
570+ " is out of block size %s" % (len (value ),
564571 self .block_size ))
565572 self .show_error (msg )
566573
@@ -610,9 +617,14 @@ def sync_formatter_callback(self, blockname, data, old_formatter):
610617 _updated ['count' ] = count
611618 if old_wc > new_wc :
612619 missing = self .modbus_device .get_values (
613- int (self .active_slave ), current_tab , k , old_wc - new_val )
620+ int (self .active_slave ),
621+ current_tab , int (k ) + new_wc ,
622+ old_wc - new_wc
623+ )
614624 for i , val in enumerate (missing ):
615- o = int (k ) + i
625+ o = int (k ) + new_wc + i
626+ if not isinstance (k , int ):
627+ o = str (o )
616628 data [o ] = {'value' : val , 'formatter' : 'uint16' }
617629 _data ['data' ].update (data )
618630 _data ['data' ] = dict (ct .content .update_registers (_data ['data' ],
@@ -873,9 +885,13 @@ def load_state(self):
873885 slaves_memory = data ['slaves_memory' ]
874886 for slave_memory in slaves_memory :
875887 active_slave , memory_type , memory_data = slave_memory
876- self ._update_data_models (active_slave ,
877- memory_map [memory_type ],
878- memory_data )
888+ _data = self .data_map [active_slave ][memory_type ]
889+ _data ['data' ].update (memory_data )
890+ _data ['item_strings' ] = list (sorted (memory_data .keys ()))
891+ self .update_backend (int (active_slave ), memory_type , memory_data )
892+ # self._update_data_models(active_slave,
893+ # memory_map[memory_type],
894+ # memory_data)
879895
880896
881897setting_panel = """
0 commit comments