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.
- Allow unit ID to be in range of 0-255 #160
- Adds Function 11 (0x0b)
Get Communication Event Counter
and Function 17 (0x11)Report server ID
support #156
- Debug page for writing registers, similar to index.php which is for reading registers #148
- Fix undefined variable in example
- Fix deprecated string interpolation for PHP8.2 #153
- Endian fixes when
Endian::$defaultEndian
is set before request/response is created #145 - Add ability to delay receiving response after request is sent (useful for Serial devices) #144
- Improved
exmaples/index.php
with ability to read serial devices #144
- AddressSplitter can avoid unaddressable ranges when splitting read requests #141
- Made
Compose/*Builder
classes*AddressSplitter
field protected so extending classes can change that field. AddressSplitter
usesisFirstByte()
for byte sorting- Fixed parsing composer
WriteRegisterRequest
andWriteCoilRequest
requests - they should act as composerRead*Request
classes and return an array (empty in this case).Composer\Write\Register\WriteRegisterRequest
andComposer\Write\Coil\WriteCoilRequest
methodParse
now returnsarray|ErrorResponse
as interface implementation should.
- Fixed
Packet::isCompleteLengthRTU()
to differentiate fix sized function code responses from variable sized responses.
- Added
Packet::isCompleteLengthRTU()
to help checking if packet is complete RTU packet. Helps when receiving fragmented packets. - Example for RTU over TCP with higher level API examples/rtu_over_tcp_with_higherlevel_api.php
ResultContainer.offsetGet
was missing return type- Update Github CI flow to run on PRs
Breaking change - types for all arguments/return values
- Minimum version is now PHP 8.0
- All method arguments and returns values have types now
- Examples use now up-to-date React event loop
- Adds Function 22 (0x16) Mask Write Register support
- Use PHPStan for code static analysis in CI flow
- support for
double
(64bit double precision floating point) data type to API. This requires PHP 7.2+ as it uses https://www.php.net/manual/en/function.pack.phpE
ande
formats.
- Use PHP 8.1 in CI flow.
examples/index.php
now supports FC3 and FC4 requests.
- From PHP 8.1
Types::parseAsciiStringFromRegister()
fails to convert extended ASCII (8bit) characters to UTF-8. IntroducedCharset::$defaultCharset
to be able to set default charset used to convert strings.
- Allow high level API setting custom endian for
string
address withReadRegistersBuilder
andStringReadRegisterAddress
classes.
- Allow high level API setting custom endian for each address with
ReadRegistersBuilder
andReadRegisterAddress
classes.
BinaryStreamConnection
endless loop (CPU @ 100%) when stream is ready for reading but stream returns no data at all (#73)
- Example for Modbus server examples/example_response_server.php
- Changed examples to use
Packet::isCompleteLength()
- Added functions to check is received data is complete/error Modbus TCP packet (PR #63)
- Changed
StreamHandler
to read data until complete packet is received. Previously we read only once from stream and naively assumed that Modbus TCP packet can not be fragmented over multiple TCP packets/ multiple stream reads. This fixed #61.
- Escape stty command for SerialStreamCreator to avoid unescaped arguments (#54)
- Added high level API to compose Coil (fc1/2) requests. See:
ModbusTcpClient\Composer\Read\ReadCoilsBuilder
ModbusTcpClient\Composer\Write\WriteCoilsBuilder
- Added 'serial' protocol support to
BinaryStreamConnection
. See examples/rtu_usb_to_serial_stream.php how to use it. - Added example to read modbus RTU from Usb to rs-485 adapter and SHT20 sensor (#50)
- Adds Function 23 (0x17) Read/Write Multiple registers support (#47)
- Started changelog
- Adds request time on example request page
- (BREAKING change) abstract class
ModbusTcpClient\Composer\Address
changed to interface