Modbus Tcp协议笔记

1.什么是Modbus协议

Modbus协议是应用在电子控制器上的一种通用语言,使用该协议,控制器相互之间,控制器经网络和设备之间可以相互通信,这样可以将不同厂家制造的设备连成工业网络,进行集中监控。

2.协议特点

  • 标准,开放,可免费使用,无版权问题。
  • 物理接口支持RS232,RS485
  • 帧格式简单,容易理解,开发方便

3.寄存器

包含4类寄存器,

  • 线圈状态:开关量,1个bit对应一种开关状态,可读可写,功能支持写单个,写多个线圈
  • 离散输入寄存器:只能读取的开关量,比如外部按键的开关状态
  • 保持寄存器:具体的数据,单位是2个byte,可读可写,功能支持写单个,写多个保持寄存器
  • 输入寄存器:和保持寄存器类似,只有读模式

4.功能码

  • 01功能码:读单个线圈状态
  • 02功能码:读线圈离散输入状态(只有读模式)
  • 03功能码:读单个保持寄存器
  • 04功能码:读输入寄存器(只有读模式)
  • 05功能码:写单个线圈状态
  • 06功能码:写单个保持寄存器
  • 0F功能码:写多个线圈状态
  • 10功能码:写多个保持寄存器

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 0100 0000 06010300 0000 06
消息编号10后面有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 0100 0000 0F01030C00 2400 0000 0A00 00...
消息编号10后面有15个字节站号1功能码03从站返回12字节数360100...

从站返回数据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 0100 0000 06010600 0200 64
消息编号10后面有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 0100 0000 0F011000 0200 040800 37...
消息编号10后面有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字节起始地址+后续字节依据功能码不同而异”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值