Modbus协议整理

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校验(低)
0101000000083DCC

回复 00到07的线圈的状态都是off

从机地址功能码返回字节数数据1CRC校验(高)CRC校验(低)
010101005188

Tx: 01 01 00 00 00 08 3D CC
Rx: 01 01 01 00 51 88


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

从机地址功能码起始地址(高)起始地址(低)线圈数量(高)线圈数量(低)CRC校验(高)CRC校验(低)
0101000100046C09

回复 01到04的线圈的状态分别是on on on off

从机地址功能码返回字节数数据1CRC校验(高)CRC校验(低)
01010107104A

Tx: 01 01 00 01 00 04 6C 09
Rx: 01 01 01 07 10 4A


02 读输入位状态

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

用法同上

示例

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

从机地址功能码起始地址(高)起始地址(低)输入位数量(高)输入位数量(低)CRC校验(高)CRC校验(低)
01020000000879CC

回复 00到07的输入位的状态都是off

从机地址功能码返回字节数数据1CRC校验(高)CRC校验(低)
01020100A188

Tx: 01 02 00 00 00 08 79 CC
Rx: 01 02 01 00 A1 88


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

从机地址功能码起始地址(高)起始地址(低)输入位数量(高)输入位数量(低)CRC校验(高)CRC校验(低)
0102000100042809

回复 01到04的输入位的状态分别是on on on off

从机地址功能码返回字节数数据1CRC校验(高)CRC校验(低)
01020107E04A

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校验(低)
010300000008440C

回复 00到07的保持寄存器的值都为0x0000

从机地址功能码返回字节数数据数据数据数据数据数据数据数据数据数据数据数据数据数据数据数据CRC校验(高)CRC校验(低)
01031000000000000000000000000000000000E459

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校验(低)
010400000008F1CC

回复 00到07的寄存器的值都为0x0000

从机地址功能码返回字节数数据数据数据数据数据数据数据数据数据数据数据数据数据数据数据数据CRC校验(高)CRC校验(低)
01041000000000000000000000000000000000552C

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校验(低)
0105000100009C0A

响应

从机地址功能码寄存器起始地址(高)寄存器起始地址(低)线圈值(高)线圈值(低)CRC校验(高)CRC校验(低)
0105000100009C0A

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校验(低)
01060001000119CA

响应

从机地址功能码寄存器起始地址(高)寄存器起始地址(低)寄存器值(高)寄存器值(低)CRC校验(高)CRC校验(低)
01060001000119CA

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校验(低)

示例

发送

从机地址功能码起始地址(高)起始地址(低)线圈数量(高)线圈数量(低)字节数数据1CRC校验(高)CRC校验(低)
010F0001000801378283

响应

从机地址功能码起始地址(高)起始地址(低)线圈数量(高)线圈数量(低)CRC校验(高)CRC校验(低)
010F0001000805CD

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校验(低)
01100001000204112233448396

响应

从机地址功能码寄存器起始地址(高)寄存器起始地址(低)寄存器数量(高)寄存器数量(低)CRC校验(高)CRC校验(低)
0110000100021008

Tx: 01 10 00 01 00 02 04 11 22 33 44 83 96
Rx: 01 10 00 01 00 02 10 08


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值