赞
踩
1.什么是Modbus协议
Modbus协议是应用在电子控制器上的一种通用语言,使用该协议,控制器相互之间,控制器经网络和设备之间可以相互通信,这样可以将不同厂家制造的设备连成工业网络,进行集中监控。
2.协议特点
3.寄存器
包含4类寄存器,
4.功能码
5.报文格式
主站询问报文格式 | ||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] byte[9] | byte[10] byte[11] |
消息编号 | Modbus标识,0 | 后面的字节数 | 站号 | 功能码 | 起始地址 | 寄存器数量 |
从站响应报文格式 | ||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] byte[9] | byte[10] byte[11]...... |
消息编号 | Modbus标识,0 | 后面的字节数 | 站号 | 功能码 | 起始地址 | 写:寄存器数量 读:字节数量,byte11之后跟具体的数据 |
6.功能码03报文解析
Rx:000000-00 01 00 00 00 06 01 03 00 00 00 06
主站询问报文格式 | ||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] byte[9] | byte[10] byte[11] |
00 01 | 00 00 | 00 06 | 01 | 03 | 00 00 | 00 06 |
消息编号1 | 0 | 后面有6个字节 | 站号1 | 功能码03 | 起始地址0 | 寄存器数量6 |
从站号1的起始地址0处开始读取6个寄存器的数据
Tx:000001-00 01 00 00 00 0F 01 03 0C 00 24 00 00 00 0A 00 00 00 00 00 00
从站响应报文格式 | ||||||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] | byte[9] byte[10] | byte[11] byte[12] | byte[13] byte[14] | byte[15] byte[16] | ... |
00 01 | 00 00 | 00 0F | 01 | 03 | 0C | 00 24 | 00 00 | 00 0A | 00 00 | ... |
消息编号1 | 0 | 后面有15个字节 | 站号1 | 功能码03 | 从站返回12字节数 | 36 | 0 | 10 | 0 | ... |
从站返回数据36,0,10,0,0,0
7.功能码03报文解析
Rx:000002-00 01 00 00 00 06 01 06 00 02 00 64
主站询问报文格式 | ||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] byte[9] | byte[10] byte[11] |
00 01 | 00 00 | 00 06 | 01 | 06 | 00 02 | 00 64 |
消息编号1 | 0 | 后面有6个字节 | 站号1 | 功能码06 | 起始地址2 | 数据100 |
从站号1的起始地址2处,将数据100写入单个保持寄存器中
Tx:000003-00 01 00 00 00 06 01 06 00 02 00 64
从站响应报文与主站询问报文一致。
8.功能码10报文解析
Rx:000004-00 01 00 00 00 0F 01 10 00 02 00 04 08 00 37 00 42 00 4D 00 58
主站询问报文格式 | |||||||||
byte[0] byte[1] | byte[2] byte[3] | byte[4] byte[5] | byte[6] | byte[7] | byte[8] byte[9] | byte[10] byte[11] | byte[12] | byte[13] byte[14] | ... |
00 01 | 00 00 | 00 0F | 01 | 10 | 00 02 | 00 04 | 08 | 00 37 | ... |
消息编号1 | 0 | 后面有15个字节 | 站号1 | 功能码10 | 起始地址2 | 写4个寄存器 | 写8个字节 | 数据55 | ... |
在从站号1的起始地址2处开始写入8个字节的数据“55,66,77,88”到4个连续的保持寄存器中。
Tx:000005-00 01 00 00 00 06 01 10 00 02 00 04
从站响应报文与主站询问报文一致
9.Mobus TCP的实现
可参考文档:https://www.cnblogs.com/pandefu/p/10824848.html
10.总结
不同的功能码,对应的报文格式略有差别,但总体前面10个字节格式固定,“2字节消息编号+2字节协议号+2字节长度+1字节从站号+1字节功能码+2字节起始地址+后续字节依据功能码不同而异”。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。