STM32F1之RS485通讯协议·MODBUS-RTU超详细解析

目录

1.  简介

2.  Modbus RTU功能码简述

2.1  功能码说明

2.2  寄存器地址分配

2.4  寄存器种类说明

2.5  PLC地址和协议地址区别

2.5.1  寄存器 PLC 地址

2.5.2  寄存器协议地址

3.  Modbus RTU指令说明

3.1  读线圈寄存器01H

3.1.1  描述

3.1.2  查询

3.1.3  响应

3.2  读离散输入寄存器02H

3.2.1  说明

3.2.2  查询

3.2.3  响应

3.3  读保持寄存器03H

3.3.1  说明

3.3.2  查询

3.3.3  响应

3.4  读输入寄存器04H

3.4.1  说明

3.4.2  查询

3.4.3  响应

3.5  写单个线圈寄存器05H

3.5.1  说明

3.5.2  请求

3.5.3  响应

3.6  写单个保持寄存器06H

3.6.1  说明

3.6.2  请求

3.6.2  响应

3.7  写多个线圈寄存器0FH

3.7.1  说明

3.7.2  请求

3.7.3  响应

3.8  写多个保持寄存10H

3.8.1  说明

3.8.2  请求

3.8.3  响应


1.  简介

        Modbus 是一种串 行通信协议,是Modicon 于 1979年,为使用可编程逻辑控制器(PLC)而发表的。Modbus是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus 比其他通信协议使用的更广泛的主要原因有:

(1)公开发表并且无版税要求;

(2)相对容易的工业网络部署;

(3)对供应商来说,修改移动原生的位元或字节限制较少。

Modbus网络示意图:

2.  Modbus RTU功能码简述

功能码 功能 寄存器PLC地址 位操作/字操作 操作数量
01H 读线圈状态 00001-09999 位操作(1字节) 单个或多个
02H 读离散输入状态 10001-19999 位操作(1字节) 单个或多个
03H 读保持寄存器 40001-49999 字操作(2字节) 单个或多个
04H 读输入寄存器 30001-39999 字操作(2字节) 单个或多个
05H 写单个线圈 00001-09999 位操作(1字节) 单个
06H 写单个保持寄存器 40001-49999 字操作(2字节) 单个
0FH 写多个线圈 00001-09999 位操作(1字节) 多个
10H 写多个保持寄存器 40001-49999 字操作(2字节) 多个

2.1  功能码说明

        功能码可以分为位操作和字操作两类。位操作的最小单位为BIT,字操作的最小单位为两个字节。

(1)位操作指令

        读线圈状态 01H,读(离散)输入状态 02H,写单个线圈 05H 和写多个线圈OFH.

(2)字操作指令

        读保持寄存器 03H,写单个寄存器 06H,写多个保持寄存器 10H。

2.2  寄存器地址分配

寄存器PLC地址 寄存器协议地址 功能码 位操作/字操作 操作数量
00001-09999 0000H-FFFFH 01H、05H、0FH 线圈状态 可读可写
10001-19999 0000H-FFFFH 02H 离散输入状态 可读
30001-39999 0000H-FFFFH 04H 输入寄存器 可读
40001-49999 0000H-FFFFH 03H、06H、10H 保持寄存器 可读可写

2.4  寄存器种类说明

寄存器种类 说明 PLC 类比 举例说明
线圈状态 输出端口。可设定端口的输出状态,也可以读取该位的输出状态 DO 数字量输出 继电器输出,MOSFET(晶体管)输出等
离散输入状态 输入端口。通过外部设定改变输入状态,可读但不可写 DI 数字量输入 按钮开关,光电开关等
保持寄存器 输出参数或保持参数。控制器运行时被设定的某些参数。可读可写 AO 模拟量输出

模拟量输出设定值,PID 运行参数,变量阀输出大小,传感器报警上限下限

输入寄存器 输入参数。控制器运行时从外部设备获得的参数。可读但不可写 AI 模拟量输入 模拟量输入

2.5  PLC地址和协议地址区别

        PLC地址可以理解为协议地址的变种,在触摸屏的PLC编程中应用较为广泛。

2.5.1  寄存器 PLC 地址

        寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以是触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1 所示。PLC地址例如 40001、30002等。

2.5.2  寄存器协议地址

        寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0000H, 40002对应寻址地址 0001H,寄存器寻址地址一般使用 16进制描述。再如,PLC寄存器地址 40003 对应协议地址 0002,PLC 寄存器地址 30003 对应协议地址 0002,虽然两个PLC 寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。

3.  Modbus RTU指令说明

3.1  读线圈寄存器01H

3.1.1  描述

        读线圈寄存器当前状态。

3.1.2  查询

假设一个例子:

        例如从机地址位01H,线圈寄存器的起始地址位0013H,结束地址位0037H,该次查询总共访问37个线圈寄存器。

线圈寄存器01H-主机发送:

字节序号 功能 16进制数据
1 从机地址 01
2 功能码 01
3 寄存器起始地址高字节 00
4 寄存器起始地址低字节 13
5 寄存器数量高字节 00
6 寄存器数量低字节 25
7 CRC校验低字节 0C
8 CRC校验高字节 14

3.1.3  响应

        响应负载中的各线圈状态与数据内容每位相对应,1代表ON,0代表OFF。若返回的线圈数部位8的倍数,则在最后数据字节末尾使用0代替。

读线圈寄存器01H-模块返回:

字节序号 功能 16进制数据
1 从机地址 01
2 功能码 01
3 返回字节数 05
4 数据1(线圈0013H-线圈001AH) CD
5 数据2(线圈001BH-线圈0022H) 6B
6 数据3(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时光の尘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值