Detailed upgrade guide for upgrading between breaking versions
As this package adheres to Semantic Versioning this document thereby describes the necessary steps to upgrade between two major versions.
This is a compressed extraction of the changelog
- Remove dependency to
Serial
andrequests
fromumodbus.modbus
, see #18ModbusRTU
class is part of serial.py, see #18ModbusTCP
class is part of tcp.py, see #18ModbusRTU
andModbusTCP
classes and related functions removed from modbus.py, see #18- Imports changed from:
from umodbus.modbus import ModbusRTU
tofrom umodbus.serial import ModbusRTU
from umodbus.modbus import ModbusTCP
tofrom umodbus.tcp import ModbusTCP
read_coils
andread_discrete_inputs
return a list with the same length as the requested quantity instead of always 8, see #12 and #25read_holding_registers
returns list with amount of requested registers, see #25
The way of importing ModbusRTU
and ModbusTCP
changed. Update the imports
according to the following table. For further details check #18
Version 1 | Version 2 |
---|---|
from umodbus.modbus import ModbusRTU |
from umodbus.serial import ModbusRTU |
from umodbus.modbus import ModbusTCP |
from umodbus.tcp import ModbusTCP |
The functions read_coils
, read_discrete_inputs
and read_holding_registers
return now a list with the same length as the requested register quantity.
All major version 1 releases of this package returned a list with 8 elements on a coil register request.
# example usage only, non productive code example
# reading one coil returned a list of 8 boolean elements
>>> host.read_coils(slave_addr=10, starting_addr=123, coil_qty=1)
[True, False, False, False, False, False, False, False]
# expectation is [True]
# reading 3 coils returned a list of 8 boolean elements
>>> host.read_coils(slave_addr=10, starting_addr=126, coil_qty=3)
[False, False, False, False, False, False, False, False]
# expectation is [False, True, False]
With the fixes of major version 2 a list with the expected length is returned
# example usage only, non productive code example
# reading one coil returns a list of 1 boolean element
>>> host.read_coils(slave_addr=10, starting_addr=123, coil_qty=1)
[True]
# reading 3 coils returns a list of 3 boolean elements
>>> host.read_coils(slave_addr=10, starting_addr=126, coil_qty=3)
[False, True, False]
All major version 1 releases of this package returned a list with 8 elements on a discrete input register request.
# example usage only, non productive code example
# reading one discrete input register returned a list of 8 boolean elements
>>> host.read_discrete_inputs(slave_addr=10, starting_addr=123, input_qty=1)
[True, False, False, False, False, False, False, False]
# expectation is [True]
# reading 3 discrete input register returned a list of 8 boolean elements
>>> host.read_discrete_inputs(slave_addr=10, starting_addr=126, input_qty=3)
[False, False, False, False, False, False, False, False]
# expectation is [False, True, False]
With the fixes of major version 2 a list with the expected length is returned
# example usage only, non productive code example
# reading one discrete input register returns a list of 1 boolean element
>>> host.read_discrete_inputs(slave_addr=10, starting_addr=123, input_qty=1)
[True]
# reading 3 discrete input registers returns a list of 3 boolean elements
>>> host.read_discrete_inputs(slave_addr=10, starting_addr=126, input_qty=3)
[False, True, False]
In all major version 1 releases of this package returned a tuple with only one element on a holding register request.
# example usage only, non productive code example
# reading one register only worked as expected
>>> host.read_holding_registers(slave_addr=10, starting_addr=93, register_qty=1, signed=False)
(19,)
# expectation is (19,)
# reading multiple registers did not work as expected
# register values of register 93 + 94 should be returned
>>> host.read_holding_registers(slave_addr=10, starting_addr=93, register_qty=2, signed=False)
(19,)
# expectation is (19, 29)
With the fixes of major version 2 a list with the expected length is returned
# example usage only, non productive code example
# reading one register only worked as expected
>>> host.read_holding_registers(slave_addr=10, starting_addr=93, register_qty=1, signed=False)
(19,)
# reading multiple registers did not work as expected
# register values of register 93 + 94 should be returned
>>> host.read_holding_registers(slave_addr=10, starting_addr=93, register_qty=2, signed=False)
(19, 29)