API changes
Versions (X.Y.Z) where Z == 0 e.g. 3.0.1 do NOT have API changes!
API changes 3.14.0
ModbusTlsServer, removed parameters certfile=,keyfile=,password=, only accept sslctx= * This is due to complaints that the development certificate is self signed, and thus insecure for production.
ModbusTlsClient, removed generate_ssl() * This is due to complaints that the development certificate is self signed, and thus insecure for production.
Upgraded 3rd party libraries (only relevant for developing pymodbus)
API changes 3.13.0
removed RemoteDeviceContext, because it only is a partial forwarder a proper forwarder should be made at frame level.
datastore get/setValues is removed, please use server.async_get/setValues instead.
datastore show a deprecation warning please use simData instead.
SimData/SimDevice have been updated
API changes 3.12.0
when using no_response_expected=, the call returns None
remove idle_time() from sync client since it is void
ModbusSerialServer new parameter “allow_multiple_devices” which gives limited multipoint support with baudrate < 19200 and a good RS485 line.
SimData / SimDevice are now integrated in the server (and will mid-term replace other datastores).
API changes 3.11.0
Revert wrong byte handling in v3.10.0 bit handling order is LSB-> MSB for each byte REMARK: word are ordered depending on big/little endian readCoils and other bit functions now return bit in logical order (NOT byte order)
Example: Hex bytes: 0x00 0x01 delivers False * 8 True False * 7
Hex bytes: 0x01 0x03 delivers True False * 7 True True False * 6
API changes 3.10.0
ModbusSlaveContext replaced by ModbusDeviceContext
payload removed (replaced by “convert_to/from_registers”)
slave=, slaves= replaced by device_id=, device_ids=
slave request names changed to device
bit handling order is LSB (last byte) -> MSB (first byte) readCoils and other bit functions now return bit in logical order (NOT byte order)
Older versions had LSB -> MSB pr byte V3.10 have LSB -> MSB across bytes.
Example: Hex bytes: 0x00 0x01 Older versions would deliver False * 8 True False * 7 V3.10 deliver True False * 15
Hex bytes: 0x01 0x03 Older versions would deliver True False * 7 True True False * 6 V3.10 deliver True True False * 6 True False * 7
API changes 3.9.0
Python 3.9 is reaching end of life, and no longer supported. Depending on the usage the code might still work
Start*Server, custom_functions -> custom_pdu (handled by Modbus<x>Server)
Bit handling (e.g. read_coils) was not handling the bits in the correct order
API changes 3.8.0
ModbusSlaveContext, removed zero_mode parameter.
Removed skip_encode parameter.
renamed ModbusExceptions enums to legal constants.
enforced client keyword only parameters (positional not allowed).
added trace_packet/pdu/connect to client/server.
removed on_connect_callback from client.
removed response_manipulator, request_tracer from server.
API changes 3.7.0
default slave changed to 1 from 0 (which is broadcast).
broadcast_enable, retry_on_empty, no_resend_on_retry parameters removed.
class method generate_ssl() added to TLS client (sync/async).
removed certfile, keyfile, password from TLS client, please use generate_ssl()
on_reconnect_callback() removed from clients (sync/async).
on_connect_callback(true/false) added to async clients.
binary framer no longer supported
Framer.<type> renamed to FramerType.<type>
PDU classes moved to pymodbus/pdu
Simulator config custom actions kwargs -> parameters
Non defined parameters (kwargs) no longer valid
Drop support for Python 3.8 (its no longer tested, but will probably work)
API changes 3.6.0
framer= is an enum: pymodbus.Framer, but still accept a framer class
API changes 3.5.0
Remove handler parameter from ModbusUdpServer
Remove loop parameter from ModbusSerialServer
Remove handler and allow_reuse_port from repl default config
Static classes from the
constantsmodule are now inheriting fromenum.Enumand using UPPER_CASE naming scheme, this affects: -MoreData-DeviceInformation-ModbusPlusOperation-Endian-ModbusStatusAsync clients now accepts no_resend_on_retry=True, to not resend the request when retrying.
ModbusSerialServer now accepts request_tracer=.
API changes 3.4.0
Modbus<x>Client .connect() returns True/False (connected or not)
Modbue<x>Server handler=, allow_reuse_addr=, backlog= are no longer accepted
ModbusTcpClient / AsyncModbusTcpClient no longer support unix path
StartAsyncUnixServer / ModbusUnixServer removed (never worked on Windows)
ModbusTlsServer reqclicert= is no longer accepted
ModbusSerialServer auto_connect= is no longer accepted
ModbusSimulatorServer.serve_forever(only_start=False) added to allow return
API changes 3.3.0
ModbusTcpDiagClient is removed due to lack of support
Clients have an optional parameter: on_reconnect_callback, Function that will be called just before a reconnection attempt.
general parameter unit= -> slave=
move SqlSlaveContext, RedisSlaveContext to examples/contrib (due to lack of maintenance)
BinaryPayloadBuilder.to_stringwas renamed toBinaryPayloadBuilder.encodeon_reconnect_callback for async clients works slightly different
utilities/unpack_bitstring now expects an argument named data not string
API changes 3.2.0
helper to convert values in mixin: convert_from_registers, convert_to_registers
import pymodbus.version -> from pymodbus import __version__, __version_full__
pymodbus.pymodbus_apply_logging_config(log_file_name=”pymodbus.log”) to enable file pymodbus_apply_logging_config
pymodbus.pymodbus_apply_logging_config have default DEBUG, it not called root settings will be used.
pymodbus/interfaces/IModbusDecoder removed.
pymodbus/interfaces/IModbusFramer removed.
pymodbus/interfaces/IModbusSlaveContext -> pymodbus/datastore/ModbusBaseSlaveContext.
StartAsync<type>Server, removed defer_start argument, return is None. instead of using defer_start instantiate the Modbus<type>Server directly.
ReturnSlaveNoReponseCountResponse has been corrected to ReturnSlaveNoResponseCountResponse
Option –modbus-config for REPL server renamed to –modbus-config-path
client.protocol.<something> –> client.<something>
client.factory.<something> –> client.<something>
API changes 3.1.0
Added –host to client_* examples, to allow easier use.
unit= in client calls are no longer converted to slave=, but raises a runtime exception.
Added missing client calls (all standard request are not available as methods).
client.mask_write_register() changed parameters.
server classes no longer accept reuse_port= (the socket do not accept it)
API changes 3.0.0
Base for recording changes.