Modbus协议整理

01 读线圈状态

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

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

描述 Hex
从机地址 11
功能码 01
寄存器起始地址(高) 00
寄存器起始地址(低) 13
寄存器数量(高) 00
寄存器数量(低) 14
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校验(低)

02 读输入位状态

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

用法同上

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

04 读输入寄存器

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

用法同上

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

06 写单个保持寄存器

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

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

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

响应:

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

15 写多个线圈

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

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

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

响应:

描述 Hex
从机地址 11
功能码 0f
寄存器起始地址(高) 00
寄存器起始地址(低) 13
寄存器数量(高) 00
寄存器数量(低) 0a
字节数 02
CRC校验(高)
CRC校验(低)

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校验(低)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章