Modbus协议整理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kangweijian/article/details/87184619
01 读线圈状态

读取从机的线圈状态(ON/OFF),位操作。

例:请求从机设备17读00020-00056线圈。其中00020-00056为线圈的寄存器信息地址,这些线圈的寄存器寻址地址为0019 – 0055,共访问37个线圈。

描述 Hex
从机地址 11
功能码 01
起始地址(高) 00
起始地址(低) 13
线圈数量(高) 00
线圈数量(低) 25
CRC校验(高)
CRC校验(低)
响应:响应信息中的各线圈的状态与数据区的每一位的值相对应,1代表ON;0代表OFF。若返回的线圈数不是8的倍数,则在最后的数据字节未使用的位中全部填充0,字节数区说明全部数据的字节数。

描述 Hex
从机地址 11
功能码 01
返回字节数 05
数据1(线圈00027-线圈00020) CD
数据2(线圈00035-线圈00028) 6B
数据3(线圈00043-线圈00036) B2
数据4(线圈00051-线圈00044) 0E
数据5(线圈00056-线圈00052) 1B
CRC校验(高)
CRC校验(低)
使用Modbus Slave、Modbus Slave和Virtual Serial Port Driver,三个工具进行modbus通信模拟

示例

发送 读取从00地址开始后8个线圈的状态

从机地址 功能码 起始地址(高) 起始地址(低) 线圈数量(高) 线圈数量(低) CRC校验(高) CRC校验(低)
01 01 00 00 00 08 3D CC
回复 00到07的线圈的状态都是off

从机地址 功能码 返回字节数 数据1 CRC校验(高) CRC校验(低)
01 01 01 00 51 88
Tx: 01 01 00 00 00 08 3D CC
Rx: 01 01 01 00 51 88

发送 读取从01地址开始后4个线圈的状态

从机地址 功能码 起始地址(高) 起始地址(低) 线圈数量(高) 线圈数量(低) CRC校验(高) CRC校验(低)
01 01 00 01 00 04 6C 09
回复 01到04的线圈的状态分别是on on on off

从机地址 功能码 返回字节数 数据1 CRC校验(高) CRC校验(低)
01 01 01 07 10 4A
Tx: 01 01 00 01 00 04 6C 09
Rx: 01 01 01 07 10 4A

02 读输入位状态

读取从机的输入状态(ON/OFF),位操作。

用法同上

示例

发送 读取从00地址开始后8个输入位的状态

从机地址 功能码 起始地址(高) 起始地址(低) 输入位数量(高) 输入位数量(低) CRC校验(高) CRC校验(低)
01 02 00 00 00 08 79 CC
回复 00到07的输入位的状态都是off

从机地址 功能码 返回字节数 数据1 CRC校验(高) CRC校验(低)
01 02 01 00 A1 88
Tx: 01 02 00 00 00 08 79 CC
Rx: 01 02 01 00 A1 88

发送 读取从01地址开始后4个的状态

从机地址 功能码 起始地址(高) 起始地址(低) 输入位数量(高) 输入位数量(低) CRC校验(高) CRC校验(低)
01 02 00 01 00 04 28 09
回复 01到04的输入位的状态分别是on on on off

从机地址 功能码 返回字节数 数据1 CRC校验(高) CRC校验(低)
01 02 01 07 E0 4A
Tx: 01 02 00 01 00 04 28 09
Rx: 01 02 01 07 E0 4A

03 读保持寄存器

读取从机的保持寄存器,一个寄存器两个字节,字操作。

例:请求从机设备17的0x13,0x14,0x15三个寄存器的数据

描述 Hex
从机地址 11
功能码 03
寄存器起始地址(高) 00
寄存器起始地址(低) 13
寄存器数量(高) 00
寄存器数量(低) 03
CRC校验(高)
CRC校验(低)
响应:

描述 Hex
从机地址 11
功能码 03
返回字节数 06
数据1(寄存器0x13高位) CD
数据1(寄存器0x13低位) 6B
数据2(寄存器0x14高位) 6B
数据2(寄存器0x14低位) 6B
数据3(寄存器0x15高位) 6B
数据3(寄存器0x15低位) 6B
CRC校验(高)
CRC校验(低)
示例

发送 读取从00地址开始后8个保持寄存器的值

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器数量(高) 寄存器数量(低) CRC校验(高) CRC校验(低)
01 03 00 00 00 08 44 0C
回复 00到07的保持寄存器的值都为0x0000

从机地址 功能码 返回字节数 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 CRC校验(高) CRC校验(低)
01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59
Tx: 01 03 00 00 00 08 44 0C
Rx: 01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59

04 读输入寄存器

读取从机的输入寄存器,一个寄存器两个字节,字操作。

用法同上

示例

发送 读取从00地址开始后8个寄存器的值

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器数量(高) 寄存器数量(低) CRC校验(高) CRC校验(低)
01 04 00 00 00 08 F1 CC
回复 00到07的寄存器的值都为0x0000

从机地址 功能码 返回字节数 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 数据 CRC校验(高) CRC校验(低)
01 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 2C
Tx: 01 04 00 00 00 08 F1 CC
Rx: 01 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 2C

05 写单个线圈

ff00h为写1,0000h为写0。

例:把地址为0的线圈写1

描述 Hex
从机地址 11
功能码 05
寄存器起始地址(高) 00
寄存器起始地址(低) 00
线圈值(高) ff
线圈值(低) 00
CRC校验(高)
CRC校验(低)
响应:

描述 Hex
从机地址 11
功能码 05
寄存器起始地址(高) 00
寄存器起始地址(低) 00
线圈值(高) ff
线圈值(低) 00
CRC校验(高)
CRC校验(低)
示例

发送 把地址为1的线圈写0

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 线圈值(高) 线圈值(低) CRC校验(高) CRC校验(低)
01 05 00 01 00 00 9C 0A
响应

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 线圈值(高) 线圈值(低) CRC校验(高) CRC校验(低)
01 05 00 01 00 00 9C 0A
Tx: 01 05 00 01 00 00 9C 0A
Rx: 01 05 00 01 00 00 9C 0A

06 写单个保持寄存器

写从机的保持寄存器,一个寄存器两个字节,字操作。

例:往地址为0的寄存器写1

描述 Hex
从机地址 11
功能码 06
寄存器起始地址(高) 00
寄存器起始地址(低) 00
寄存器值(高) 00
寄存器值(低) 01
CRC校验(高)
CRC校验(低)
响应:

描述 Hex
从机地址 11
功能码 06
寄存器起始地址(高) 00
寄存器起始地址(低) 00
寄存器值(高) 00
寄存器值(低) 01
CRC校验(高)
CRC校验(低)
示例

发送 把地址为1的线圈写1

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器值(高) 寄存器值(低) CRC校验(高) CRC校验(低)
01 06 00 01 00 01 19 CA
响应

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器值(高) 寄存器值(低) CRC校验(高) CRC校验(低)
01 06 00 01 00 01 19 CA
Tx: 01 06 00 01 00 01 19 CA
Rx: 01 06 00 01 00 01 19 CA

15 写多个线圈

写从机的多个线圈,位操作。

例:请求从机设备17写00020-00030线圈,未使用位补0。

描述 Hex
从机地址 11
功能码 0f
起始地址(高) 00
起始地址(低) 13
线圈数量(高) 00
线圈数量(低) 0a
字节数 04
数据1(线圈27-20) 00
数据2(线圈29-28) 00
CRC校验(高)
CRC校验(低)
响应:

描述 Hex
从机地址 11
功能码 0f
起始地址(高) 00
起始地址(低) 13
线圈数量(高) 00
线圈数量(低) 0a
CRC校验(高)
CRC校验(低)
示例

发送

从机地址 功能码 起始地址(高) 起始地址(低) 线圈数量(高) 线圈数量(低) 字节数 数据1 CRC校验(高) CRC校验(低)
01 0F 00 01 00 08 01 37 82 83
响应

从机地址 功能码 起始地址(高) 起始地址(低) 线圈数量(高) 线圈数量(低) CRC校验(高) CRC校验(低)
01 0F 00 01 00 08 05 CD
Tx: 01 0F 00 01 00 08 01 37 82 83
Rx: 01 0F 00 01 00 08 05 CD

16 写多个保持寄存器

写从机的保持寄存器,一个寄存器两个字节,字操作。
例:往地址0x13,0x14的寄存器写值

描述 Hex
从机地址 11
功能码 10
寄存器起始地址(高) 00
寄存器起始地址(低) 13
寄存器数量(高) 00
寄存器数量(低) 02
字节数 04
数据1(高位) 00
数据1(低位) 00
数据2(高位) 00
数据2(低位) 00
CRC校验(高)
CRC校验(低)
响应:

描述 Hex
从机地址 11
功能码 10
寄存器起始地址(高) 00
寄存器起始地址(低) 13
寄存器数量(高) 00
寄存器数量(低) 02
CRC校验(高)
CRC校验(低)
示例

发送 往01 02地址分别写入0x1122 0x3344

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器数量(高) 寄存器数量(低) 字节数 数据1(高位) 数据1(高位) 数据2(高位) 数据2(高位) CRC校验(高) CRC校验(低)
01 10 00 01 00 02 04 11 22 33 44 83 96
响应

从机地址 功能码 寄存器起始地址(高) 寄存器起始地址(低) 寄存器数量(高) 寄存器数量(低) CRC校验(高) CRC校验(低)
01 10 00 01 00 02 10 08
Tx: 01 10 00 01 00 02 04 11 22 33 44 83 96
Rx: 01 10 00 01 00 02 10 08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值