GitHub:https://github.com/infiniteautomation/modbus4j
由Infinite Automation Systems和Serotonin Software用Java编写的Modbus协议的高性能和易用性实现。支持ASCII,RTU,TCP和UDP传输作为从属或主用,自动请求分区和响应数据类型解析。
现在可以使用最新版本的公共Maven存储库,将其添加到pom.xml中
<repositories> <repository> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <id>ias-snapshots</id> <name>Infinite Automation Snapshot Repository</name> <url>https://maven.mangoautomation.net/repository/ias-snapshot/</url> </repository> <repository> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>ias-releases</id> <name>Infinite Automation Release Repository</name> <url>https://maven.mangoautomation.net/repository/ias-release/</url> </repository> </repositories>
依赖项信息为:
<dependency> <groupId>com.infiniteautomation</groupId> <artifactId>modbus4j</artifactId> <version>3.0.3</version> </dependency>
核心类
- 主机Master及其子类:主机的入口,数据流的起点和终点。
- 数据端口类StreamTransport:负责数据的写入和读出。
- Modbus消息类ModbusMessage及其子类:支持Modbus定义的各种方法(FunctionCode)
- 收发数据控制类MessageControl:支持 timeout、retries,默认200ms,1次。
- 收发等待室WaitingRoom:负责同步收发逻辑。
- 输出Request消息类:OutgoingRequestMessage 及其子类。
- 收到Response消息类:IncomingResponseMessage 及其子类。
- 解析类MessageParser:负责解析收到的消息。
- 协议数据类型定义:DataType
- 协议功能码定义:FunctionCode
- 协议寄存器范围:RegisterRange
数据流程
- 透过
ModbusFactory
创建对应的Master
对象。 - 封装需要发送的指令,比如
ReadHoldingRegistersRequest
,这是一个读寄存器指令,指定寄存器地址和长度即可。 Master
对象将这个ReadHoldingRegistersRequest
转化为OutgoingRequestMessage
对象,然后传输给MessageControl
。- 透过驱动层,
MessageControl
将这个OutgoingRequestMessage
写入对应的通讯硬件外设(串口、网口等),并等待返回数据IncomingResponseMessage
。 - 如果没有等到,就返回null,并提醒超时。
- 如果等到了有效返回,则
MessageControl
利用MessageParser
将IncomingResponseMessage
转化为对应ModbusResponse
返回给上层。
单元测试
在modbus4j/src_test/定义了一系列单元测试方法,跟踪其中相关方法,即可了解modbus协议的实际运作流程。