Modbus_RTU理解笔记

基础信息

1.物理层信息

1.硬件支持:RS485/RS232/RS422
2.字符通信格式:11位(起始位1,数据位8,校验位1,停止位1/2)
3.一个字符11位
4.一帧数据不超过255个字节
5.字节为16进制
6.校验方法:CRC(查表法/计算法)

2.通讯协议数据格式

1.起始符
≥3.5个字符时间(根据硬件通信速率):计算方式3.511位=38.5位,例波特率为9600,1000ms/960038.5≈4ms
2.地址码
8位
3.功能码
8位
4.数据区
N*8位 (N个字节)
5.校验码
16位
6.结束符
≥3.5个字符时间

3.寄存器种类及对应功能码说明

寄存器种类 说明 实际应用 支持功能码
线圈状态: 数字量输出/内部读写位变量---------------->继电器电磁阀控制 01读05写15写单个或多个
离散输入状态:数字量输入/内部只读位变量---------------->按键开关检测 02读
保持寄存器: 内部读写寄存器-------------------------------->模拟量输出设置 03读06写16写单个或多个23同时读写单个或多个
输入寄存器: 内部只读寄存器-------------------------------->模拟量输入采集 04读

03功能码报文格式详解(单路读读写寄存器操作)

例:
----------主站发送------------------(字节高前低后,CRC相反)
从站地址 功能码 寄存器地址 寄存器数量 CRC校验
09 03 00 04(第五路)00 02 84 82
----------从站正确返回------------
从站地址 功能码 字节计数 第一路寄存器数据 第二路寄存器数据 CRC校验
09 03 00 04 00 01 00 12 A3 FB
----------从站异常返回------------
从站地址 功能码 错误代码 CRC校验
09 83(功能码最高位置1) 02(寄存器数量超限) 41 33
----------总结------------------------
总结:主站通过03功能码可发送需要读取的从站ID,读取其相应数量的寄存器地址,从站收到后返回主站需要读取的寄存器内容已确认读取操作成功

具体描述

06功能码报文格式详解(单路写读写寄存器操作)

例:
----------主站发送------------------
从站地址 功能码 寄存器地址 寄存器数据 CRC校验
07 06 00 04 13 88 C5 38
----------从站正确返回------------
从站地址 功能码 字节计数 寄存器数据 CRC校验
07 06 00 04 13 88 C5 38
----------从站异常返回------------
从站地址 功能码 错误代码 CRC校验
07 86(功能码最高位置1) 02(寄存器数量超限) A0
----------总结------------------------
总结:主站通过06功能码可发送需要修改的从站ID,修改其寄存器地址的寄存器数据,从站收到后返回主站修改的数据已确认修改写入操作成功

16功能码报文格式详解(写单个或多个读写寄存器操作)

例:
----------主站发送------------------
从站地址 功能码 寄存器地址 写寄存器数量 字节计数 第一路寄存器数据…第n路寄存器数据 CRC校验
0D 10 00 01 00 07(连续写7路) 0E(7路14个字节) 00 01 00 07 AD 95
----------从站正确返回------------(固定8字节)
从站地址 功能码 寄存器地址 写寄存器数量 CRC校验
0D 10 00 01 00 07 D0 C7
----------从站异常返回------------
从站地址 功能码 错误代码 CRC校验
0D 90(功能码最高位置1) 02(寄存器数量超限) 0D C2
----------总结------------------------
总结:主站通过16功能码可发送需要修改的从站ID,修改的首位寄存器地址及寄存器数量,字节计数,每一路的数据。从站收到后返回主站修改的首位寄存器地址及修改完成的寄存器数量已确认多个修改写入操作成功

23功能码报文格式详解(同时读写单个或多个读写寄存器操作)

例:
----------主站发送------------------
从站地址 功能码 读寄存器地址 读寄存器数量 写寄存器地址 写寄存器数量 写字节计数 第一路寄存器数据…第n路寄存器数据 CRC校验
10 17 00 00 00 04 00 05 00 05 0A 00 11 00 15 1D 68
----------从站正确返回------------(固定8字节)
从站地址 功能码 读字节计数 读第1路寄存器数据…读第n路寄存器数据 CRC校验
10 17 08 00 01 00 04 1D 68
----------从站异常返回------------
从站地址 功能码 错误代码 CRC校验
10 97(功能码最高位置1) 02(寄存器数量超限) 9F F4
----------总结------------------------
总结:主站通过23功能码可同时读写单个或多个从站寄存器地址,发送需要修改的从站ID,修改需要读取的首位寄存器地址及寄存器数量,需要写入的寄存器地址及寄存器数量,写入的字节计数,每一路的数据。从站收到后返回主站读取的字节计数与每一路读取的寄存器内容已确认多个修改写入操作成功

04功能码报文格式详解(读取只读寄存器操作)

例:
----------主站发送------------------
从站地址 功能码 寄存器地址 寄存器数量 CRC校验
06 04 00 02 00 04 51 BE
----------从站正确返回------------
从站地址 功能码 字节计数 第一路寄存器数据…第n路寄存器数据 CRC校验
06 04 08 00 01 00 04 A6 BA
----------从站异常返回------------
从站地址 功能码 错误代码 CRC校验
06 84(功能码最高位置1) 02(寄存器数量超限) 73 00
----------总结------------------------
总结:主站通过04功能码可发送需要读取的从站ID,读取其寄存器地址的寄存器数据,从站收到后返回主站需要读取寄存器的数据已确认读取操作成功,发现04与23的区别在于可以使从站返回需要读取的寄存器内容

注意事项

1.主站发送功能码:01/02/03/04/05/06功能码发送都是8个字节

参考:
推荐,讲的特别清晰Modbus RTU串口通信协议

猜你喜欢

转载自blog.csdn.net/weixin_49048045/article/details/122942740
今日推荐