Skip to content

Commit 731b080

Browse files
authored
Merge pull request #632 from riptideio/dev
Pymodbus 2.5.2
2 parents de0cc3e + 44c9a43 commit 731b080

File tree

5 files changed

+28
-14
lines changed

5 files changed

+28
-14
lines changed

CHANGELOG.rst

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
version 2.5.2
2+
----------------------------------------------------------
3+
* Add kwarg `reset_socket` to control closing of the socket on read failures (set to `True` by default).
4+
* Add `--reset-socket/--no-reset-socket` to REPL client.
5+
16
version 2.5.1
27
----------------------------------------------------------
38
* Bug fix TCP Repl server.

pymodbus/repl/client/main.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,10 @@ def _process_args(args, string=True):
233233
@click.option("--retry-on-error", is_flag=True, default=False,
234234
help="Retry on error response")
235235
@click.option("--retries", default=3, help="Retry count")
236+
@click.option("--reset-socket/--no-reset-socket", default=True, help="Reset client socket on error")
236237
@click.pass_context
237238
def main(ctx, verbose, broadcast_support, retry_on_empty,
238-
retry_on_error, retries):
239+
retry_on_error, retries, reset_socket):
239240
if verbose:
240241
global log
241242
import logging
@@ -248,7 +249,8 @@ def main(ctx, verbose, broadcast_support, retry_on_empty,
248249
"broadcast": broadcast_support,
249250
"retry_on_empty": retry_on_empty,
250251
"retry_on_invalid": retry_on_error,
251-
"retries": retries
252+
"retries": retries,
253+
"reset_socket": reset_socket
252254
}
253255

254256

pymodbus/repl/server/cli.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
| ___< | |/ \ / _ \ / __ | | __ \| | \/ ___/ \_____ \_/ __ \_ __ \ \/ // __ \_ __ \\
2626
| | \___ | Y Y ( <_> ) /_/ | | \_\ \ | /\___ \ / \ ___/| | \/\ /\ ___/| | \/
2727
|____| / ____|__|_| /\____/\____ | |___ /____//____ > /_______ /\___ >__| \_/ \___ >__|
28-
\/ \/ \/ \/ \/ \/ \/ \/"""
28+
\/ \/ \/ \/ \/ \/ \/ \/
29+
"""
2930

3031
SMALL_TITLE = "Pymodbus server..."
3132
BOTTOM_TOOLBAR = HTML('(MODBUS SERVER) <b><style bg="ansired">Press Ctrl+C or '
@@ -80,7 +81,9 @@
8081

8182

8283
def info(message):
83-
click.secho(str(message), fg="green")
84+
if not isinstance(message, str):
85+
message = str(message)
86+
click.secho(message, fg="green")
8487

8588

8689
def warning(message):
@@ -191,12 +194,12 @@ async def interactive_shell(server):
191194

192195

193196
async def main(server):
194-
with patch_stdout():
195-
try:
196-
await interactive_shell(server)
197-
finally:
198-
pass
199-
warning("Bye Bye!!!")
197+
# with patch_stdout():
198+
try:
199+
await interactive_shell(server)
200+
finally:
201+
pass
202+
warning("Bye Bye!!!")
200203

201204

202205
async def run_repl(server):

pymodbus/transaction.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def __init__(self, client, **kwargs):
6969
self.retry_on_invalid = kwargs.get('retry_on_invalid',
7070
Defaults.RetryOnInvalid)
7171
self.retries = kwargs.get('retries', Defaults.Retries) or 1
72+
self.reset_socket = kwargs.get('reset_socket', True)
7273
self._transaction_lock = RLock()
7374
self._no_response_devices = []
7475
if client:
@@ -217,7 +218,8 @@ def execute(self, request):
217218
"/Unable to decode response")
218219
response = ModbusIOException(last_exception,
219220
request.function_code)
220-
self.client.close()
221+
if self.reset_socket:
222+
self.client.close()
221223
if hasattr(self.client, "state"):
222224
_logger.debug("Changing transaction state from "
223225
"'PROCESSING REPLY' to "
@@ -230,7 +232,8 @@ def execute(self, request):
230232
# Handle decode errors in processIncomingPacket method
231233
_logger.exception(ex)
232234
self.client.state = ModbusTransactionState.TRANSACTION_COMPLETE
233-
self.client.close()
235+
if self.reset_socket:
236+
self.client.close()
234237
return ex
235238

236239
def _retry_transaction(self, retries, reason,
@@ -294,7 +297,8 @@ def _transact(self, packet, response_length,
294297

295298
except (socket.error, ModbusIOException,
296299
InvalidMessageReceivedException) as msg:
297-
self.client.close()
300+
if self.reset_socket:
301+
self.client.close()
298302
_logger.debug("Transaction failed. (%s) " % msg)
299303
last_exception = msg
300304
result = b''

pymodbus/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def __str__(self):
4141
return '[%s, version %s]' % (self.package, self.short())
4242

4343

44-
version = Version('pymodbus', 2, 5, 1)
44+
version = Version('pymodbus', 2, 5, 2)
4545

4646
version.__name__ = 'pymodbus' # fix epydoc error
4747

0 commit comments

Comments
 (0)