Skip to content

Commit 692e59a

Browse files
authored
Correct future. (#2507)
1 parent ce87313 commit 692e59a

File tree

4 files changed

+12
-8
lines changed

4 files changed

+12
-8
lines changed

examples/client_custom_msg.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from pymodbus import FramerType
1717
from pymodbus.client import AsyncModbusTcpClient as ModbusClient
18+
from pymodbus.exceptions import ModbusIOException
1819
from pymodbus.pdu import ExceptionResponse, ModbusPDU
1920
from pymodbus.pdu.bit_message import ReadCoilsRequest
2021

@@ -128,8 +129,12 @@ async def main(host="localhost", port=5020):
128129
client.register(CustomModbusPDU)
129130
slave=1
130131
request1 = CustomRequest(32, slave=slave)
131-
result = await client.execute(False, request1)
132-
print(result)
132+
try:
133+
result = await client.execute(False, request1)
134+
except ModbusIOException:
135+
print("Server do not support CustomRequest.")
136+
else:
137+
print(result)
133138

134139
# inherited request
135140
request2 = Read16CoilsRequest(32, slave)

pymodbus/transaction/transaction.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ async def execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbu
133133
request.transaction_id = self.getNextTID()
134134
count_retries = 0
135135
while count_retries <= self.retries:
136+
self.response_future = asyncio.Future()
136137
self.pdu_send(request)
137138
if no_response_expected:
138139
return None
@@ -141,11 +142,9 @@ async def execute(self, no_response_expected: bool, request: ModbusPDU) -> Modbu
141142
self.response_future, timeout=self.comm_params.timeout_connect
142143
)
143144
self.count_no_responses = 0
144-
self.response_future = asyncio.Future()
145145
return response
146146
except asyncio.exceptions.TimeoutError:
147147
count_retries += 1
148-
self.response_future = asyncio.Future()
149148
if self.count_no_responses >= self.accept_no_response_limit:
150149
self.connection_lost(asyncio.TimeoutError("Server not responding"))
151150
raise ModbusIOException(

test/examples/test_examples.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,7 @@ async def test_custom_msg(
156156
if use_comm != "tcp" or use_framer != "socket":
157157
return
158158
assert mock_server
159-
with pytest.raises(asyncio.CancelledError):
160-
await main_custom_client(port=use_port, host=use_host)
159+
await main_custom_client(port=use_port, host=use_host)
161160

162161
async def test_payload(self, mock_clc, mock_cls):
163162
"""Test server/client with payload."""

test/transaction/test_transaction.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,10 @@ async def test_transaction_execute(self, use_clc, scenario):
165165
await transact.execute(False, request)
166166
else: # if scenario == 5: # response
167167
transact.comm_params.timeout_connect = 0.2
168-
transact.response_future.set_result(response)
169168
resp = asyncio.create_task(transact.execute(False, request))
170-
await asyncio.sleep(0.2)
169+
await asyncio.sleep(0.1)
170+
transact.response_future.set_result(response)
171+
await asyncio.sleep(0.1)
171172
assert response == await resp
172173

173174
async def test_transaction_receiver(self, use_clc):

0 commit comments

Comments
 (0)