文章目录

  • 概念
  • 一、工具准备
  • 二、协议分析
  • 1.报文格式
  • 2.寄存器
  • 3.功能码
  • 三、协议测试
  • 1.读取保持寄存器
  • 2.读取输出线圈



概念

Modbus是工控行业广泛应用的一种通讯协议,与物理层无关,其支持多种电气接口,包括RS232、RS485、TCP/IP。Modbus协议为应用层报文传输协议,定义了一个控制器能够认识使用的消息结构,,包括ASCII、RTU、TCP三种报文类型。其中 Modbus-RTU 最常用,本章主要分析ModbusRTU协议。

一、工具准备

为了更加直观的分析ModbusRTU通信协议报文格式,本章采用了如下调试工具。

VSPD(全称Configure Virtual Serial Port Driver):在没有物理串口的情形下,用来给电脑创建虚拟串口使用。

Java 对modbus报文解析 modbus报文解析软件_网络

ModbusPoll软件:主要用于仿真Modbus主站或Modbus客户端,选择虚拟串口软件配对的串口之一,并设置好参数,便可连接。

Java 对modbus报文解析 modbus报文解析软件_modbus_02


ModbusSlave软件:主要用于仿真Modbus从站或Modbus服务器,选择虚拟串口软件配对的另一个串口,并设置好参数,便可连接。

Java 对modbus报文解析 modbus报文解析软件_网络_03

二、协议分析

1.报文格式

Modbus协议在串行链路上的报文格式如下所示:

Java 对modbus报文解析 modbus报文解析软件_modbus_04

2.寄存器

Modbus协议规定了4个寄存器,如下表所示:

Java 对modbus报文解析 modbus报文解析软件_Java 对modbus报文解析_05

3.功能码

Modbus协议采用功能码,用于针对上述寄存器的读写,如下表所示:

Java 对modbus报文解析 modbus报文解析软件_Java 对modbus报文解析_06

三、协议测试

1.读取保持寄存器

Java 对modbus报文解析 modbus报文解析软件_网络_07


Java 对modbus报文解析 modbus报文解析软件_网络通信_08


如上图所示:主站发送报文:01 03 00 00 00 0A C5 CD.

从站回复报文:01 03 14 00 11 00 16 00 21 00 2C 04 83 12 34 33 FF EE FF 11 23 EE 36 DC 4B.

主站发送报文含义:0x01:从站地址,0x03:功能码, 00 :地址起始(高),0x00:地址起始(低),0x00:数量(高),0A:数量(低),2C 04 :校验。即读取1号从站保持寄存器,起始地址为0,数量为0x0A=10,共10个保持寄存器的值。(注:报文表示的地址都为相对地址)

从站回复报文含义:01:从站地址,03:功能码,0x14:字节计数, 00 11 00 16 00 21 00 2C 04 83 12 34 33 FF EE FF 11 23 EE 36 :每两个字节分别对应每个保持寄存器的值的高低位。 DC 4B:校验。

2.读取输出线圈

Java 对modbus报文解析 modbus报文解析软件_串口通信_09


如上图所示:主站发送报文:01 01 00 00 00 0A BC 0D.

从站回复报文:01 01 02 A2 00 C0 9C

主站发送报文含义:0x01:从站地址,0x01:功能码,读取输出线圈的状态值, 00 :地址起始(高),00:地址起始(低),00:数量(高),0A:数量(低),2C 04 :校验。即读取1号从站保持寄存器,起始地址为0,数量为0x0A=10,共10个保持寄存器的状态值。

从站回复报文含义:0x01:从站地址,0x01:功能码,读取输出线圈的状态值 ,0x02: 字节计数,0xA2 = 1010 0010 地址0-7线圈分别对应的状态值。0x00 = 0000 0000 地址8-9线圈对应的状态值。