Releases: pymodbus-dev/pymodbus
v2.0.0rc2
Note This is a Major release and might affect your existing Async client implementation. Refer examples on how to use the latest async clients.
- Async client implementation based on Tornado, Twisted and asyncio with backward compatibility support for twisted client.
- Allow reusing existing[running] asyncio loop when creating async client based on asyncio.
- Allow reusing address for Modbus TCP sync server.
- Add support to install tornado as extra requirement while installing pymodbus.
- Support Pymodbus REPL
- Add support to python 3.7.
- Bug fix and enhancements in examples.
Pymodbus Patch
Temporary fix to #307 . Use this patch only if you are having a device which is slow in responding to ReadDeviceInformationRequest/ReportSlaveIdRequest/Any diagnostic requests
.
Not a foolproof solution
PyModbus v1.5.2
Version 1.5.2
- Fix serial client
is_socket_open
method
Version 1.5.1
-
Fix device information selectors
-
Fixed behaviour of the MEI device information command as a server when an invalid object_id is provided by an external client.
-
Add support for repeated MEI device information Object IDs (client/server)
-
Added support for encoding device information when it requires more than one PDU to pack.
-
Added REPR statements for all syncchronous clients
-
Added
isError
method to exceptions, Any response received can be tested for success before proceeding.res = client.read_holding_registers(...) if not res.isError(): # proceed else: # handle error or raise
-
Add examples for MEI read device information request
Version 1.5.0
- Improve transaction speeds for sync clients (RTU/ASCII), now retry on empty happens only when retry_on_empty kwarg is passed to client during intialization
client = Client(..., retry_on_empty=True)
- Fix tcp servers (sync/async) not processing requests with transaction id > 255
- Introduce new api to check if the received response is an error or not (response.isError())
- Move timing logic to framers so that irrespective of client, correct timing logics are followed.
- Move framers from transaction.py to respective modules
- Fix modbus payload builder and decoder
- Async servers can now have an option to defer
reactor.run()
when usingStart<Tcp/Serial/Udo>Server(...,defer_reactor_run=True)
- Fix UDP client issue while handling MEI messages (ReadDeviceInformationRequest)
- Add expected response lengths for WriteMultipleCoilRequest and WriteMultipleRegisterRequest
- Fix _rtu_byte_count_pos for GetCommEventLogResponse
- Add support for repeated MEI device information Object IDs
- Fix struct errors while decoding stray response
- Modbus read retries works only when empty/no message is received
- Change test runner from nosetest to pytest
- Fix Misc examples
v2.0.0rc1
Version 2.0.0rc1
Note This is a Major release and might affect your existing Async client implementation. Refer examples on how to use the latest async clients.
- Async client implementation based on Tornado, Twisted and asyncio
PyModbus v1.5.1
Version 1.5.1
-
Fix device information selectors
-
Fixed behaviour of the MEI device information command as a server when an invalid object_id is provided by an external client.
-
Add support for repeated MEI device information Object IDs (client/server)
-
Added support for encoding device information when it requires more than one PDU to pack.
-
Added REPR statements for all syncchronous clients
-
Added
isError
method to exceptions, Any response received can be tested for success before proceeding.res = client.read_holding_registers(...) if not res.isError(): # proceed else: # handle error or raise
-
Add examples for MEI read device information request
PyModbus 1.5.0
- Improve transaction speeds for sync clients (RTU/ASCII), now retry on empty happens only when retry_on_empty kwarg is passed to client during intialization
client = Client(..., retry_on_empty=True)
- Fix tcp servers (sync/async) not processing requests with transaction id > 255
- Introduce new api to check if the received response is an error or not (response.isError())
- Move timing logic to framers so that irrespective of client, correct timing logics are followed.
- Move framers from transaction.py to respective modules
- Fix modbus payload builder and decoder
- Async servers can now have an option to defer
reactor.run()
when usingStart<Tcp/Serial/Udo>Server(...,defer_reactor_run=True)
- Fix UDP client issue while handling MEI messages (ReadDeviceInformationRequest)
- Add expected response lengths for WriteMultipleCoilRequest and WriteMultipleRegisterRequest
- Fix _rtu_byte_count_pos for GetCommEventLogResponse
- Add support for repeated MEI device information Object IDs
- Fix struct errors while decoding stray response
- Modbus read retries works only when empty/no message is received
- Change test runner from nosetest to pytest
- Fix Misc examples
v1.5.0.rc3
- Improve transaction speeds for sync clients (RTU/ASCII), now retry on empty happens only when retry_on_empty kwarg is passed to client during intialization
client = Client(..., retry_on_empty=True)
- Fix tcp servers (sync/async) not processing requests with transaction id > 255
- Introduce new api to check if the received response is an error or not (response.isError())
- Move timing logic to framers so that irrespective of client, correct timing logics are followed.
- Move framers from transaction.py to respective modules
- Fix modbus payload builder and decoder
- Async servers can now have an option to defer
reactor.run()
when usingStart<Tcp/Serial/Udo>Server(...,defer_reactor_run=True)
- Fix UDP client issue while handling MEI messages (ReadDeviceInformationRequest)
- Add expected response lengths for WriteMultipleCoilRequest and WriteMultipleRegisterRequest
- Fix _rtu_byte_count_pos for GetCommEventLogResponse
- Add support for repeated MEI device information Object IDs
- Fix struct errors while decoding stray response
- Modbus read retries works only when empty/no message is received
- Change test runner from nosetest to pytest
- Fix Misc examples
Pymodbus v1.5.0rc2
- Improve transaction speeds for sync clients (RTU/ASCII), now retry on empty happens only when retry_on_empty kwarg is passed to client during intialization
client = Client(..., retry_on_empty=True)
- Fix tcp servers (sync/async) not processing requests with transaction id > 255
- Introduce new api to check if the received response is an error or not (response.isError())
- Move timing logic to framers so that irrespective of client, correct timing logics are followed.
- Move framers from transaction.py to respective modules
- Fix modbus payload builder and decoder
- Async servers can now have an option to defer
reactor.run()
when usingStart<Tcp/Serial/Udo>Server(...,defer_reactor_run=True)
- Fix UDP client issue while handling MEI messages (ReadDeviceInformationRequest)
- Add expected response lengths for WriteMultipleCoilRequest and WriteMultipleRegisterRequest
- Fix struct errors while decoding stray response
- Change test runner from nosetest to pytest
- Fix Misc examples
Pymodbus 1.5.0 Pre release
-
Improve transaction speeds for sync clients (RTU/ASCII), now retry on empty happens only when retry_on_empty kwarg is passed to client during intialization
client = Client(..., retry_on_empty=True)
-
Fix tcp servers (sync/async) not processing requests with transaction id > 255
-
Introduce new api to check if the received response is an error or not (response.isError())
-
Move timing logic to framers so that irrespective of client, correct timing logics are followed.
-
Move framers from transaction.py to respective modules
-
Fix modbus payload builder and decoder
-
Async servers can now have an option to defer reactor.run() when using
Start<Tcp/Serial/Udo>Server(...,defer_reactor_run=True)
-
Fix UDP client issue while handling MEI messages (ReadDeviceInformationRequest)
-
Fix Misc examples
-
Source dist (tar.gz) is now available in PyPI as well.
v1.4.0
- Bug fix Modbus TCP client reading incomplete data
- Check for slave unit id before processing the request for serial clients
- Bug fix serial servers with Modbus Binary Framer
- Bug fix header size for ModbusBinaryFramer
- Bug fix payload decoder with endian Little
- Payload builder and decoder can now deal with the wordorder as well of 32/64 bit data.
- Support Database slave contexts (SqlStore and RedisStore)
- Custom handlers could be passed to Modbus TCP servers
- Asynchronous Server could now be stopped when running on a seperate thread (StopServer)
- Signal handlers on Asyncronous servers are now handled based on current thread
- Registers in Database datastore could now be read from remote clients
- Fix examples in contrib (message_parser.py/message_generator.py/remote_server_context)
- Add new example for SqlStore and RedisStore (db store slave context)
- Fix minor comaptibility issues with utilities.
- Update test requirements
- Update/Add new unit tests
- Move twisted requirements to extra so that it is not installed by default on pymodbus installtion