improve modbus parsing

- parse Modbus messages well if another msg
   follows in the receive buffer
This commit is contained in:
Stefan Allius
2024-05-11 23:40:46 +02:00
parent 4ea70dee64
commit e43a02c508

View File

@@ -347,6 +347,7 @@ class Talent(Message):
self._send_buffer += b'\x01'
self.__finish_send_msg()
self.__process_data()
self.state = self.STATE_UP
elif self.ctrl.is_resp():
return # ignore received response
@@ -387,15 +388,20 @@ class Talent(Message):
def msg_modbus(self):
hdr_len, modbus_len = self.parse_modbus_header()
data = self._recv_buffer[self.header_len:
self.header_len+self.data_len]
if self.ctrl.is_req():
if not self.mb.recv_req(data[hdr_len:]):
return
self.forward_modbus_resp = True
self.inc_counter('Modbus_Command')
elif self.ctrl.is_ind():
# logger.debug(f'Modbus Ind MsgLen: {modbus_len}')
self.modbus_elms = 0
for key, update, _ in self.mb.recv_resp(self.db, self._recv_buffer[
self.header_len + hdr_len:self.header_len+self.data_len],
for key, update, _ in self.mb.recv_resp(self.db, data[
hdr_len:],
self.node_id):
if update:
self.new_data[key] = True