目录
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( |