Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Released
2.3.3 - 2023-01-29
Fixed
Add link to RTU documentation examples from RTU examples files and root README, relates to #7
Add missing ESP32, RP2 and pyboard pin usage for RTU in examples and documentation, relates to #7 and #17
Add missing issue template file, see #46
2.3.2 - 2023-01-09
Added
Installation instructions for
mip
usage on MicroPython 1.19.1 or newer, see #44Manual testing Dockerfile
INSTALLATION, TESTING and EXAMPLES files for simpler docs structure
Changed
Split SETUP into INSTALLATION
Split USAGE into TESTING and EXAMPLES
Use callback to reset register data in RTU client example
Update docs copyright year to 2023
Use fakes machine module instead of classic Mock in docs config file
Fixed
Basic RTU host example in root README uses correct init values, optional parameters are listed after mandatory ones
Remove outdated warning sections about #35 bug from USAGE
2.3.1 - 2023-01-06
Added
Unittest to read multiple coils at any location if defined as list, verifies #35
Unittests to write a single coil or multiple coils at any location if defined as list, verifies fix #15 and #24
Fixed
All configured register of a client can be accessed and modified individually, see #35
Resolved overlapping register positions in example JSON file
Register length of
EXAMPLE_IREG
in TCP and RTU examples corrected to 1 instead of 2
2.3.0 - 2023-01-03
Added
Custom callback functions can be registered on client (ModbusRTU or ModbusTCP) side with new parameters
on_set_cb
andon_get_cb
available from modbus.py functionsadd_coil
andadd_hreg
. Functionsadd_ist
andadd_ireg
support onlyon_get_cb
, see #31Example callback usage shown in TCP client example
Documentation for callback functions in USAGE
Changed
Typing hint
Callable
is now subscriptable
2.2.0 - 2023-01-03
Added
Fake machine module with UART and Pin class to be used on Unix MicroPython container for RTU tests and examples, see #47
RTU host example script
RTU docker compose file and RTU docker compose file test based in MicroPython 1.18 image
RTU client Dockerfile and RTU host Dockerfile based on MicroPython 1.18 image
Initial RTU examples unittest
RTU example section for Client and Host in USAGE
Changed
Outsourced the following common functions of serial.py and tcp.py into
CommonModbusFunctions
of common.py:read_coils
read_discrete_inputs
read_holding_registers
read_input_registers
write_single_coil
write_single_register
write_multiple_coils
write_multiple_registers
Inherit from
CommonModbusFunctions
inSerial
of serial.py and inTCP
of of tcp.pyExtended RTU client example for Docker usage to load all registers from example JSON file
Update internal functions parameter name from
slave_id
toslave_addr
of TCP’s_create_mbap_hdr
and_validate_resp_hdr
function to be the same as in SerialUpdate Modbus function documentation from TCP specific to common module in USAGE file
Renamed docker files:
Dockerfile.client
->Dockerfile.client_tcp
Dockerfile.host
->Dockerfile.host_tcp
Dockerfile.test_tcp_example
->Dockerfile.test_examples
2.1.3 - 2022-12-30
Fixed
uart_id
can be specified during init ofModbusRTU
andSerial
class and is no longer hardcoded to1
, but set as1
by default to ensure backwards compability, see #7 and #43RTU Client example and USAGE documentation updated with new
uart_id
parameter
2.1.2 - 2022-12-28
Changed
Baudrate specific inter frame time is used at Modbus RTU internal function
_uart_read
of serial.py instead of constant value of 5ms
Fixed
ESP32 port specific
wait_tx_done
function replaced by generic wait time calculation in_send
function of serial.py, see #34A 1ms delay has been added between turning the RS485 control pin on and sending the Modbus PDU in
_send
function of serial.py
2.1.1 - 2022-12-27
Fixed
Removed unnecessary dependency to
micropython-urequests
from Docker files, setup guide and package setup fileEnable Modbus Client mode for RTU implementation, see #40, removed during #33
2.1.0 - 2022-12-27
Added
Typing hints available for all functions of umodbus, see #27
Docstrings available for all constants, functions and classes of umodbus, see #27
Test for reading more than 8 coils in a row to verify fix of #36
Test for reading single negative holding register value
Test for writing multiple coils to verify fix of #22
Test for writing multiple registers to verify fix of #23
Usage documentation for coil, discrete inputs, holding register and input register usage
Modbus TCP IP and port binding can be checked with
is_bound
property in tcp.py
Changed
Reordered modules of API documentation
data_as_registers
anddata_as_bits
of common.py removedSend illegal function code
0x01
if a register other than coil or holding register is requested to be setSimplified
_process_write_access
logic of tcp.py
Fixed
Typing hints of function input parameters and return values
Response data of multiple changed registers (
write_multiple_registers
) is validated with respect to the providedsigned
flag in serial.py and tcp.py, see #23Enable reading more than 8 coils in a row, see #36
Writing multiple coils in TCP, see #22
Writing multiple registers in TCP, see #23
Unit test
test_bytes_to_bool
uses MSB and LSB data correctlyOnly requested amount of registers are returned by
_process_read_access
logic of tcp.py, see #35
2.0.0 - 2022-12-03
Added
Perform MicroPython based unittests on every
Test
workflow runAdd usage description of docker based MicroPython unittest framework in USAGE
Add docker compose file based in MicroPython 1.18 image
Add TCP client Dockerfile, TCP host Dockerfile, unittest Dockerfile and TCP unittest specific Dockerfile. All based on MicroPython 1.18 image
Add initial test, testing the unittest itself
Add unittest implementation based on pfalcon’s micropython-unittest
Docstrings available for all functions of functions.py, see #27
Typing hints available for all functions of functions.py, serial.py and tcp.py, see #27
Unittest for functions.py, see #16
Unittest for const.py, see #16
.readthedocs.yaml for Read The Docs, contributes to #26
Changed
Use default values for all registers defined in the example JSON
TCP host example and TCP client example define a static IP address and skip further WiFi setup steps in case a Docker usage is detected by a failing import of the
network
module, contributes to #16Define all Modbus function codes as
const()
to avoid external modifications, contributes to #18Remove 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 #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 #25Common functions
bytes_to_bool
andto_short
moved to functions.pyUse HTTPS URL instead of SSH for submodule
Cleanup of root README, content moved to SETUP and USAGE, contributes to #30
Moved SETUP and USAGE into docs folder, see #26 contributes to #30
Use
False
or0
as default values for registers without a specific initial value in modbus.py
Fixed
read_coils
returns list with amount of requested coils, see #12read_holding_registers
returns list with amount of requested registers, see #25
1.2.0 - 2022-11-13
Added
TCP host example script
JSON file to set registers on TCP/RTU device
Bash script to wrap manipulation of TCP modbus register data
Example boot script
TOC in README
Use changelog-based-release action to create a draft release with every merge to develop
Use changelog-based-release action to create a drafted prerelease release with every PR build, see #20
Changed
Add more info to TCP client example script
Update modules submodule to
1.3.0
Line breaks are no longer used in this changelog for enumerations
Issues are referenced as
#123
instead of[#123][ref-issue-123]
to avoid explicit references at the bottom or some other location in the fileScope of contents permissions in release and test release workflow is now
write
to use auto release creation
Fixed
Typo in RTU client example script
1.1.1 - 2022-11-09
Fixed
Default value of
setup_registers
function parameteruse_default_vals
changed toFalse
to avoid confusion behaviour if not explicitly defined, see issue 13Missing function docstring added to
setup_registers
functionwrite_single_coil
allows0
,1
,False
,True
,0x0
or0xFF00
instead of0x0
and0xFF00
only as set value, see issue 14
1.1.0 - 2022-11-03
Added
float_to_bin
,bin_to_float
,int_to_bin
functions added toumodbus/functions.py
Deploy to Test Python Package Index on every PR build with a PEP440 compliant
-rc<BUILDNUMBER>.dev<PR_NUMBER>
meta data extensionTest release workflow running only on PRs is archiving and uploading built artifacts to Test Python Package Index
Changed
Author is explicitly mentioned in
setup.py
instead of used by__author__
variable which has been previously defined inversion.py
but no longer available with autodeploy.
Fixed
All uncovered flake8 warnings of
umodbus
1.0.0 - 2022-02-26
Added
setup.py
andsdist_upip.py
taken from pfalcon’s picoweb repo and PEP8 improvedMIT License
version.py
storing current library versiontyping.py
enabling type hints
Changed
Moved all uModbus files from
lib/uModbus
intoumodbus
Update import statements of all files of
umodbus
Update
README
usage description of MicroPython lib deploy to PyPiUsage examples in
README
updated with new import pathUpdate
boot
andmain
files to usebe_helpers
Enable setting of
max_connections
to TCP socket inmodbus ModbusTCP bind function
andtcp TCPServer bind function
Removed
MicroPython helpers module no longer used
MicroPython ESP WiFi Manager module no longer used
Lib folder of dependency modules no longer used
Commented print debug messages in several files of umodbus
0.1.0 - 2022-02-20
Added
This changelog file
.gitignore
filerequirements.txt
file to setup tools for board interactionsCreation header to all files of
lib/uModbus
in order to provide proper credits to Pycomget_is_bound()
function added tolib/uModbus/tcp.py
to check status of socket binding for the Modbus TCP Server (host)Example register files to show basic usage with a MyEVSE board
Changed
Reworked
boot.py
andmain.py
for simple usageREADME
file with usage examplesReplaced WiPy specific calls in
lib/uModbus
files with MicroPython 1.16 or higher callsLimit number of concurrent socket connections to the Modbus TCP Server (host) to 10
Return on
_accept_request()
in case of anOSError
as MicroPython raises this type of error in case a socket timeout occured.TimeoutError
is not available on MicroPython compared to WiPy
Fixed
PEP8 style issues on all files of
lib/uModbus