@@ -79,7 +79,7 @@ def dummy_trace_connect(self, connect: bool) -> None:
79
79
"""Do dummy trace."""
80
80
_ = connect
81
81
82
- def sync_get_response (self , dev_id ) -> ModbusPDU :
82
+ def sync_get_response (self , dev_id , tid ) -> ModbusPDU :
83
83
"""Receive until PDU is correct or timeout."""
84
84
databuffer = b''
85
85
while True :
@@ -108,13 +108,9 @@ def sync_get_response(self, dev_id) -> ModbusPDU:
108
108
continue
109
109
110
110
databuffer += data
111
- used_len , pdu = self .framer .processIncomingFrame (self .trace_packet (False , databuffer ))
111
+ used_len , pdu = self .framer .handleFrame (self .trace_packet (False , databuffer ), dev_id , tid )
112
112
databuffer = databuffer [used_len :]
113
113
if pdu :
114
- if pdu .dev_id != dev_id :
115
- raise ModbusIOException (
116
- f"ERROR: request ask for id={ dev_id } but id={ pdu .dev_id } , CLOSING CONNECTION."
117
- )
118
114
return self .trace_pdu (False , pdu )
119
115
120
116
def sync_execute (self , no_response_expected : bool , request : ModbusPDU ) -> ModbusPDU :
@@ -133,7 +129,7 @@ def sync_execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbus
133
129
if no_response_expected :
134
130
return ExceptionResponse (0xff )
135
131
try :
136
- return self .sync_get_response (request .dev_id )
132
+ return self .sync_get_response (request .dev_id , request . transaction_id )
137
133
except asyncio .exceptions .TimeoutError :
138
134
count_retries += 1
139
135
if self .count_until_disconnect < 0 :
@@ -191,8 +187,9 @@ async def execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbu
191
187
192
188
def pdu_send (self , pdu : ModbusPDU , addr : tuple | None = None ) -> None :
193
189
"""Build byte stream and send."""
194
- self .request_dev_id = pdu .dev_id
195
- self .request_transaction_id = pdu .transaction_id
190
+ if not self .is_server :
191
+ self .request_dev_id = pdu .dev_id
192
+ self .request_transaction_id = pdu .transaction_id
196
193
packet = self .framer .buildFrame (self .trace_pdu (True , pdu ))
197
194
if self .is_sync and self .comm_params .handle_local_echo :
198
195
self .sent_buffer = packet
@@ -214,16 +211,12 @@ def callback_disconnected(self, exc: Exception | None) -> None:
214
211
def callback_data (self , data : bytes , addr : tuple | None = None ) -> int :
215
212
"""Handle received data."""
216
213
self .last_pdu = self .last_addr = None
217
- used_len , pdu = self .framer .processIncomingFrame (self .trace_packet (False , data ))
214
+ used_len , pdu = self .framer .handleFrame (self .trace_packet (False , data ), self . request_dev_id , self . request_transaction_id )
218
215
if pdu :
219
216
self .last_pdu = self .trace_pdu (False , pdu )
220
217
self .last_addr = addr
221
218
if not self .is_server :
222
- if pdu .dev_id != self .request_dev_id :
223
- Log .warning (f"ERROR: expected id { self .request_dev_id } but got { pdu .dev_id } , IGNORING." )
224
- elif pdu .transaction_id != self .request_transaction_id :
225
- Log .warning (f"ERROR: expected transaction { self .request_transaction_id } but got { pdu .transaction_id } , IGNORING." )
226
- elif self .response_future .done ():
219
+ if self .response_future .done ():
227
220
Log .warning ("ERROR: received pdu without a corresponding request, IGNORING" )
228
221
else :
229
222
self .response_future .set_result (self .last_pdu )
0 commit comments