kochedykov / jlibmodbus

JLibModbus - is an implementation of the Modbus protocol v1.1b in java language. Java modbus library. It works. Welcome.
http://kochedykov.github.io/jlibmodbus/
Apache License 2.0
307 stars 128 forks source link
android-things java java-modbus jlibmodbus jserialcomm jssc libmodbus modbus modbus-master modbus-rtu modbus-slave modbus-tcp purejavacomm rxtx

README

The MODBUS protocol implementation in pure java.

The main advantages of the library are following:

AUTHORS

Vladislav Y. Kochedykov, software engineer, technical expert.

CONTACT

If you have problems, questions or suggestions, please contact me at email address vladislav.kochedykov@gmail.com

To learn how to use the library you can either use examples in "examples\com\invertor\examples\modbus" folder or contact me at email.

Maven dependency:

The latest stable release.

com.intelligt.modbus jlibmodbus 1.2.9.11

WEB SITE

project homepage: http://jlibmodbus.sourceforge.net https://github.com/kochedykov/jlibmodbus

purejavacomm homepage: http://www.sparetimelabs.com/purejavacomm/purejavacomm.php https://github.com/nyholku/purejavacomm

jssc home page: https://code.google.com/p/java-simple-serial-connector https://github.com/scream3r/java-simple-serial-connector

rxtx home page: http://users.frii.com/jarvi/rxtx/index.html

jserialcomm homepage: https://github.com/Fazecast/jSerialComm


----Release version 1.2.9.11 -------------------------------------------------------------------------------

* NEWS
* Update library dependencies. jSerialComm v2.10.4, jssc v2.9.6.

----Release version 1.2.9.10 -------------------------------------------------------------------------------

* NEWS
* The release fixes issues #41, #64, #85, #91, 94

----Release version 1.2.9.9 -------------------------------------------------------------------------------

* NEWS
* The release contains a bug fix that do rollback changes by commit 010c95917c913c355bd9599cc2458094a311da2b

----Release version 1.2.9.8 -------------------------------------------------------------------------------

* NEWS
* The release contains several bug fixes and the latest pull requests including some new features 
* (see git log on github https://github.com/kochedykov/jlibmodbus).

----Release version 1.2.9.7 -------------------------------------------------------------------------------

* NEWS
* The automatic serial port connector selection is rolled back.

----Release version 1.2.9.6 -------------------------------------------------------------------------------

* NEWS
* IMPORTANTLY! Fixed the issue #22: MODBUS Master TCP - Socket left open.
* Fixed a bug with listening for incoming data on Android Things device.
* Add automatic selection of a serial port connector.
* Add Android Things support.

----Release version 1.2.9.5 -------------------------------------------------------------------------------

* Fixed a bug with an incorrect conversion from two integers to a long value.

----Release version 1.2.9.4 -------------------------------------------------------------------------------

* Fixed incoming frame logging.
* Fixed a bug in OutputStreamASCII - add unimplemented method write(byte[], int, int).
* Fixed the issue #17: Incorrect logic if lrc equals zero. Thanks to https://github.com/mlasevich

----Release version 1.2.9.3 -------------------------------------------------------------------------------

* Fixed hasNext() in ModbusValues iterator.
* Fixed error in JSerialComm implementation. https://sourceforge.net/p/jlibmodbus/bugs/2/

----Release version 1.2.9.2 -------------------------------------------------------------------------------

* Fixed a bug with setting timeout in SerialPortLoopback.
* Fixed a bug with setting a slave timeout.

----Release version 1.2.9.1 -------------------------------------------------------------------------------

* NEWS
* Experimental! Implemented RTU over TCP. Add a new serial port factories TcpClient and TcpServer. Usage: //server side SerialUtils.setSerialPortFactory(new SerialPortFactoryTcpServer(tcpParameters)); ModbusSlave slave = ModbusSlaveFactory.createModbusSlaveRTU(serialParameters);
* IMPORTANTLY! Fixed the issue #15: Bug in setRange method. Thanks to https://github.com/shdk
* Added ModbusSlaveSerialObserver and SerialPortInfo classes to notify if the com port was opened or closed.
* IMPORTANTLY! Added the jSerialComm library support.
* IMPORTANTLY! Fixed the issue #14:Bug in DataHolder class. Thanks to https://github.com/shdk
* Added API to retrieve information about a TCP client connected to the TCP slave.

----Release version 1.2.9.0 -------------------------------------------------------------------------------

* NEWS
* IMPORTANTLY! Renamed package from com.invertor.modbus to com.intelligt.modbus.jlibmodbus! 
* IMPORTANTLY! Change default read timeout to 1000 ms.
* Fixed a bug in GetCommEventLog.
* Added data frame events to Input/Output streams.
* Added the loopback serial port for testing applications without actual serial hardware. Author Kevin Kieffer.
* Added method ReadCoilsResponse#getModbusCoils that returns a ModbusCoils instance.
* Fixed a bug in ModbusValue#next().
* Fixed errors in data conversion operations.
* Added method ReadHoldingRegisters#getHoldingRegisters that returns a ModbusHoldingRegisters instance.
* Renamed getBytes -> getBytesBe.
* Renamed Coils->ModbusCoils, HoldingRegistors->ModbusHoldingRegisters.
* Added class ModbusValues.
* Renamed getValues -> getBytes, setValues -> setBytes.
* Added additional helpers.
* Added the BroadcastResponse class to avoid timeout exception while sending broadcast requests.
* Fixed an incorrect logic if crc equals zero. Thanks to flooduk (https://github.com/flooduk).
* Fixed handling of broadcast requests.
* Fixed handling of RestartCommunicationsOption.
* Optimized memory usage.
* Fixed the MIN_PDU_LENGTH value.
* Reduced copy operations number.

----Release version 1.2.8.4 -------------------------------------------------------------------------------

* NEWS
* Added basic maven pom file
* Thread safety. Thanks to Kevin Kieffer.
* HoldingRegisters and Coils is now observable. Thanks to Kevin Kieffer.
* Added a method to get a byte-buffer from ReadHoldingRegistersResponse.

----Release version 1.2.8.3 -------------------------------------------------------------------------------

* NEWS
* IMPORTANTLY! Fixed bug #1 Support of SlaveID=255 with ModbusTCP. Thanks to Francois DELOYE (https://sourceforge.net/u/sesa258801).
* Added broadcast support.

----Release version 1.2.8.2 -------------------------------------------------------------------------------

* NEWS
* Added a new method - SerialUtils#getConnectorVersion.
* Fixed bug in ModbusMaster#disconnectImpl. Thanks to dpozimski (https://github.com/dpozimski)!

----Release version 1.2.8.1 -------------------------------------------------------------------------------

* NEWS
* Fixed bug: setting of the "connected" status had no effect.
* Added ModbuMaster#connectImpl and ModbusMaster#disconnectImpl methods.

----Release version 1.2.8 ---------------------------------------------------------------------------------

* NEWS
* Added a new method ModbusMaster#isConnected that returns true if a master is connected to a remote slave.
* Added a new method ModbusSlave#isListening method that returns true if a slave is already listening for incoming connections.

----Release version 1.2.7 ---------------------------------------------------------------------------------

* NEWS
* IMPORTANTLY! Fixed bug with reading of multiple values in a request.

----Release version 1.2.6 ---------------------------------------------------------------------------------

* NEWS
* Fixed bug with a NPE thrown if setReadTimeout is invoked before port is opened.
* IMPORTANTLY! Added the PureJavaComm library support.

----Release version 1.2.5 ---------------------------------------------------------------------------------

* NEWS
* Added readTimeout to ModbusSlave. 
* API changes: Deleted a few factory-methods from ModbusMasterFactory and ModbusSlaveFactory.
* API changes: Renamed ModbusEvent to ModbusCommEvent.
* API changes: Added methods Coils#quantity() and HoldingRegisters#quantity().
* API changes: ModbusSlaver#open() -> ModbusSlaver#listen(), ModbusSlaver#close() -> ModbusSlaver#shutdown().
* API changes: ModbusMaster#open() -> ModbusMaster#connect(), ModbusMaster#close() -> ModbusMaster#disconnect().
* Fixed bug that type of quantity must be double or float before it'll be divided.

----Release version 1.2.4 ---------------------------------------------------------------------------------

* NEWS
* Fixed bug with address and quantity checking in ReadCoilsRequest#checkAddressRange.
* Improved search of a ModbusFunctionCode instance by value.
* Fixed issues found by FindBug utility(http://findbugs.sourceforge.net).
* Fixed bug with SerialPortJSSC#read(byte[] b, int off, int len) method.
* Fixed bug with setting readTimeout before opening a connection.

----Release version 1.2.3 ---------------------------------------------------------------------------------

* NEWS
* Added a class to obtain the version of the library.
* Improved logger output.
* Added method getPortIdentifiers to get a list of available port identifiers.

----Release version 1.2.2 ---------------------------------------------------------------------------------

* NEWS
* IMPORTANTLY! Added support for java communication api 3.0.
* IMPORTANTLY! Migrated to the apache license version 2.0.
* Methods "purgeRx", "purgeTx", "clear" are removed from SerialPort class.
* Method "reset" is removed from ModbusConnection.
* Fixed potential bug with infinite loop in ModbusMaster.readResponse.
* Added method ModbusConnection.getReadTimeout.
* Prevents a NullPointerException if master is used before it has been opened.

----Release version 1.2.1 ---------------------------------------------------------------------------------

* NEWS:
* IMPORTANTLY! Add the RXTX library support! Usage: SerialUtils.setSerialPortFactory(new SerialPortFactoryRXTX());
* Added checking if jssc library is available.
* Fixed potential bug with reading of byte array.
* Added avoiding some NPEs.
* IMPORTANTLY! Fixed bug with flushing of output buffers.
* Modbus RTU master is now able to connect via tcp socket (in case of rs232/rs485 to wifi adapters).

----Release version 1.2 -----------------------------------------------------------------------------------

* NEWS:
* Added extended logging.
* Add auto-increment of transaction id. See Modbus.setAutoIncrementTransactionId.

----Release version 1.1 -----------------------------------------------------------------------------------

* NEWS:
* IMPORTANTLY! Fixed bug with offset reading.
* IMPORTANTLY! Fixed data conversion issues.

----Release version 1.0 -----------------------------------------------------------------------------------

* Implemented MODBUS functions:
* 0x01 - Read Coils
* 0x02 - Read Discrete Inputs
* 0x03 - Read Holding Registers
* 0x04 - Read Input Registers
* 0x05 - Write Single Coil
* 0x06 - Write Single Register
* 0x07 - Read Exception Status(serial line only)
* 0x08 - Diagnostics(serial line only)
* 0x0B - Get Comm Event Counter(serial line only)
* 0x0C - Get Comm Event Log(serial line only)
* 0x0F - Write Multiple Coils
* 0x10 - Write Multiple Registers
* 0x11 - Report Slave Id(serial line only)
* 0x14 - Read File Record
* 0x15 - Write File Record
* 0x16 - Mask Write Register
* 0x17 - Read Write Multiple Registers
* 0x18 - Read Fifo Queue
* 0x2B - Encapsulated Interface Tansport(Read Device Identification interface, (0x2B / 0x0E))