文章目录
- 概念
- 一、工具准备
- 二、协议分析
- 1.报文格式
- 2.寄存器
- 3.功能码
- 三、协议测试
- 1.读取保持寄存器
- 2.读取输出线圈
概念
Modbus是工控行业广泛应用的一种通讯协议,与物理层无关,其支持多种电气接口,包括RS232、RS485、TCP/IP。Modbus协议为应用层报文传输协议,定义了一个控制器能够认识使用的消息结构,,包括ASCII、RTU、TCP三种报文类型。其中 Modbus-RTU 最常用,本章主要分析ModbusRTU协议。
一、工具准备
为了更加直观的分析ModbusRTU通信协议报文格式,本章采用了如下调试工具。
VSPD(全称Configure Virtual Serial Port Driver):在没有物理串口的情形下,用来给电脑创建虚拟串口使用。
ModbusPoll软件:主要用于仿真Modbus主站或Modbus客户端,选择虚拟串口软件配对的串口之一,并设置好参数,便可连接。
ModbusSlave软件:主要用于仿真Modbus从站或Modbus服务器,选择虚拟串口软件配对的另一个串口,并设置好参数,便可连接。
二、协议分析
1.报文格式
Modbus协议在串行链路上的报文格式如下所示:
2.寄存器
Modbus协议规定了4个寄存器,如下表所示:
3.功能码
Modbus协议采用功能码,用于针对上述寄存器的读写,如下表所示:
三、协议测试
1.读取保持寄存器
如上图所示:主站发送报文: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.读取输出线圈
如上图所示:主站发送报文: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线圈对应的状态值。