Upgrade Guide
Detailed upgrade guide for upgrading between breaking versions
Intro
As this package adheres to Semantic Versioning this document thereby describes the necessary steps to upgrade between two major versions.
Upgrade from major version 1 to 2
Overview
This is a compressed extraction of the changelog
Remove dependency to
Serial
andrequests
fromumodbus.modbus
, see #18
ModbusRTU
class is part of serial.py, see #18
ModbusTCP
class is part of tcp.py, see #18
ModbusRTU
andModbusTCP
classes and related functions removed from modbus.py, see #18Imports 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 #25
read_holding_registers
returns list with amount of requested registers, see #25
Steps to be performed
Update imports
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 |
---|---|
|
|
|
|
Return values changed
The functions read_coils
, read_discrete_inputs
and read_holding_registers
return now a list with the same length as the requested register quantity.
Coil registers
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]
Discrete input registers
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]
Holding registers
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)