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.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 #34

  • A 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 file

  • Enable 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 and data_as_bits of common.py removed

  • Send illegal function code 0x01 if a register other than coil or holding register is requested to be set

  • Simplified _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 provided signed flag in serial.py and tcp.py, see #23

  • Enable 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 correctly

  • Only 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 run

  • Add 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 #16

  • Define all Modbus function codes as const() to avoid external modifications, contributes to #18

  • Remove dependency to Serial and requests from umodbus.modbus, see #18

  • ModbusRTU class is part of serial.py, see #18

  • ModbusTCP class is part of tcp.py, see #18

  • ModbusRTU and ModbusTCP classes and related functions removed from modbus.py, see #18

  • Imports changed from:

    • from umodbus.modbus import ModbusRTU to from umodbus.serial import ModbusRTU

    • from umodbus.modbus import ModbusTCP to from umodbus.tcp import ModbusTCP

  • read_coils and read_discrete_inputs return a list with the same length as the requested quantity instead of always 8, see #12 and #25

  • Common functions bytes_to_bool and to_short moved to functions.py

  • Use 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 or 0 as default values for registers without a specific initial value in modbus.py

Fixed

  • read_coils returns list with amount of requested coils, see #12

  • read_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

  • USAGE and SETUP files with more details

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 file

  • Scope 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 parameter use_default_vals changed to False to avoid confusion behaviour if not explicitly defined, see issue 13

  • Missing function docstring added to setup_registers function

  • write_single_coil allows 0, 1, False, True, 0x0 or 0xFF00 instead of 0x0 and 0xFF00 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 to umodbus/functions.py

  • Deploy to Test Python Package Index on every PR build with a PEP440 compliant -rc<BUILDNUMBER>.dev<PR_NUMBER> meta data extension

  • Test 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 in version.py but no longer available with autodeploy.

Fixed

  • All uncovered flake8 warnings of umodbus

1.0.0 - 2022-02-26

Added

  • setup.py and sdist_upip.py taken from pfalcon’s picoweb repo and PEP8 improved

  • MIT License

  • version.py storing current library version

  • typing.py enabling type hints

Changed

  • Moved all uModbus files from lib/uModbus into umodbus

  • Update import statements of all files of umodbus

  • Update README usage description of MicroPython lib deploy to PyPi

  • Usage examples in README updated with new import path

  • Update boot and main files to use be_helpers

  • Enable setting of max_connections to TCP socket in modbus ModbusTCP bind function and tcp 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 file

  • requirements.txt file to setup tools for board interactions

  • Creation header to all files of lib/uModbus in order to provide proper credits to Pycom

  • get_is_bound() function added to lib/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 and main.py for simple usage

  • README file with usage examples

  • Replaced WiPy specific calls in lib/uModbus files with MicroPython 1.16 or higher calls

  • Limit number of concurrent socket connections to the Modbus TCP Server (host) to 10

  • Return on _accept_request() in case of an OSError 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