物联网/嵌入式开发

Modbus协议Java库 modbus4j 的代码解析

2018-12-04  本文已影响28人  沉思的Panda

首先,简单介绍一下Modbus协议。这是一个通讯协议,用于工业设备之间传输信息,地位类似于互联网领域中的http协议。

简单理解,通讯协议可以分为两层:硬件层和软件层。硬件层负责传输数据,如 232/485串口协议、tcp协议等。软件层则在硬件层的基础上定义了传输数据的格式。

Modbus采用主-从结构,主机会不断地发送指令给从机,从机执行指令,并返回执行结果。

以一条Modbus报文数据举例,其传输原始数据如下 01 06 00 01 00 17 98 04,对应的解析为:
01——从机地址
06——功能号
00 01——数据地址
00 17——数据
98 04——CRC校验
翻译成人话就是:主机对1号从机说“把数据 0x0017(十进制23) 写入 0x0001寄存器”

Modbus4j——Java版本modbus协议实现

支持的从机transports类型有:ASCII, RTU, TCP, and UDP。

核心类

数据流程

  1. 透过ModbusFactory创建对应的Master对象。
  2. 封装需要发送的指令,比如ReadHoldingRegistersRequest,这是一个读寄存器指令,指定寄存器地址和长度即可。
  3. Master对象将这个ReadHoldingRegistersRequest转化为OutgoingRequestMessage对象,然后传输给MessageControl
  4. 透过驱动层,MessageControl将这个OutgoingRequestMessage写入对应的通讯硬件外设(串口、网口等),并等待返回数据IncomingResponseMessage
  5. 如果没有等到,就返回null,并提醒超时。
  6. 如果等到了有效返回,则MessageControl利用MessageParserIncomingResponseMessage转化为对应ModbusResponse返回给上层。

单元测试

modbus4j/src_test/定义了一系列单元测试方法,跟踪其中相关方法,即可了解modbus协议的实际运作流程。

参考:

  1. ModBus-RTU详解
上一篇 下一篇

猜你喜欢

热点阅读