Skip to content

Commit ce90e7e

Browse files
authored
Add dev_id/tid check in clients. (#2711)
1 parent d2e4b39 commit ce90e7e

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Version 3.11.0
1111
--------------
1212
* Correct bit handling (each byte is LSB->MSB). (#2707)
1313
* read_input_registers docstring change count to regs (#2704)
14+
* Add dev_id/tid check in clients (#2711)
1415

1516
Version 3.10.0
1617
--------------

pymodbus/transaction/transaction.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ def sync_execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbus
130130
return ExceptionResponse(0xff)
131131
try:
132132
response = self.sync_get_response(request.dev_id, request.transaction_id)
133+
if response.dev_id != request.dev_id:
134+
raise ModbusIOException(
135+
f"ERROR: request uses device id={request.dev_id} but received {response.dev_id}."
136+
)
137+
if response.transaction_id != request.transaction_id:
138+
raise ModbusIOException(
139+
f"ERROR: request uses transaction id={request.transaction_id} but received {response.transaction_id}."
140+
)
133141
response.retries = count_retries
134142
return response
135143
except asyncio.exceptions.TimeoutError:
@@ -170,8 +178,12 @@ async def execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbu
170178
self.count_until_disconnect= self.max_until_disconnect
171179
if response.dev_id != request.dev_id:
172180
raise ModbusIOException(
173-
f"ERROR: request ask for id={request.dev_id} but got id={response.dev_id}, CLOSING CONNECTION."
181+
f"ERROR: request uses device id={request.dev_id} but received {response.dev_id}."
174182
)
183+
if response.transaction_id != request.transaction_id:
184+
raise ModbusIOException(
185+
f"ERROR: request uses transaction id={request.transaction_id} but received {response.transaction_id}."
186+
)
175187
response.retries = count_retries
176188
return response
177189
except asyncio.exceptions.TimeoutError:

0 commit comments

Comments
 (0)