通讯协议|MODBUS协议整理(功能码简述 报文分析)

1.MODBUS功能码简述 下表列出MODBUS支持的部分功能代码:以十进制表示。
表1.1 MODBUS部分功能码

代码
中文名称
寄存器PLC地址
位操作/字操作
操作数量
01
读线圈状态
00001-09999
位操作
单个或多个
02
读离散输入状态
10001-19999
位操作
单个或多个
03
读保持寄存器
40001-49999
字操作
单个或多个
04
读输入寄存器
30001-39999
字操作
单个或多个
05
写单个线圈
00001-09999
位操作
单个
06
写单个保持寄存器
40001-49999
字操作
单个
15
写多个线圈
00001-09999
位操作
多个
16
写多个保持寄存器
40001-49999
字操作
多个
1.1功能码说明 功能码可以分为位操作和字操作两类。位操作的最小单位为BIT,字操作的最小单位为两个字节。
【位操作指令】读线圈状态01H,读(离散)输入状态02H,写单个线圈06H和写多个线圈0FH。
【字操作指令】读保持寄存器03H,写单个寄存器06H,写多个保持寄存器10H。


1.2寄存器地址分配 表1.2 MODBUS寄存器地址分配
寄存器PLC地址
寄存器协议地址
适用功能
寄存器种类
读写状态
00001-09999
0000H-FFFFH
01H 05H 0FH
线圈状态
可读可写
10001-19999
0000H-FFFFH
02H
离散输入状态
可读
30001-39999
0000H-FFFFH
04H
输入寄存器
可读
40001-49999
0000H-FFFFH
03H 06H 0FH
保持寄存器
可读可写

1.3寄存器种类说明
表1.3 MODBUS寄存器种类说明
寄存器种类
说明
PLC类比
举例说明
线圈
状态
输出端口。可设定端口的输出状态,也可以读取该位的输出状态。可分为两种不同的执行状态,例如保持型或边沿触发型。
DO
数字量输出
电磁阀输出,MOSFET输出,LED显示等。
离散
输入状态
输入端口。通过外部设定改变输入状态,可读但不可写。
DI
数字量输入
拨码开关,接近开关等。
保持
寄存器
输出参数或保持参数,控制器运行时被设定的某些参数。可读可写。
AO
模拟量输出
模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限。
输入
寄存器
输入参数。控制器运行时从外部设备获得的参数。可读但不可写。
AI
模拟量输入
模拟量输入

1.4 PLC地址和协议地址区别 PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛。
1.4.1 寄存器PLC地址 寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
1.4.2 寄存器协议地址 寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然两个PLC寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。
2.报文解析

ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文。
2.1、数据请求
97 76 00 00 00 06 04 04 00 7D 00 7D

示例
长度
说明
备注
Map报文头
0x97
1
事务处理标识符Hi
客户机发起,服务器复制,用于事务处理配对
0x96
1
事务处理标识符Lo
0x0000
2
协议标识符号
客户机发起,服务器复制
Modbus协议 = 0.
0x0006
2
长度
从本字节下一个到最后

0x04
1
单元标识符
客户机发起,服务器复制
串口链路或其他总线上远程终端标识
功能码
0x04
1
功能码,读寄存器
参考标准modbus协议
数据
0x007D
2
起始地址

0x 007D
2
寄存器数量

校验


2.2、数据请求回复
97 76 00 00 00 FD 04 04 FA AB 9E 41 18 7A E1 3F 94 7A E1 3F 94 0A 3D 3F 97 51 EC 3F 98 CC CD C0 6C 33 33 C0 E3 CC CD C0 EC EB 85 41 F1 D7 0A 41 E9 47 AE 41 ED EB 85 41 F1 19 9A 43 D0 E6 66 43 C9 4C CD 43 CF EB 85 41 F3 66 66 42 0F CC CD 41 C2 E6 66 44 0A 1E B8 41 FB A3 D7 42 0C CC CD 41 BC C0 00 44 0A B8 52 41 F6 5C 29 42 0F 47 AE 41 D1 C6 66 44 0A 00 00 00 00 C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 0A 00 0A 00 0A 00 04 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F

示例
长度
说明
备注
Map报文头
0x97
1
事务处理标识符Hi
客户机发起,服务器复制,用于事务处理配对
0x96
1
事务处理标识符Lo
0x0000
2
协议标识符号
客户机发起,服务器复制
Modbus协议 = 0.
0x00FD
2
长度
从本字节下一个到最后

0x04
1
单元标识符
客户机发起,服务器复制
串口链路或其他总线上远程终端标识
功能码
0x04
1
功能码,读寄存器
参考标准modbus协议
数据
0x FA
1
字节个数

0x----

数据
校验



2.3、写多个寄存器
97 79 00 00 00 09 04 10 00 00 00 01 02 00 01

示例
长度
说明
备注
Map报文头
0x97
1
事务处理标识符Hi
客户机发起,服务器复制,用于事务处理配对
0x79
1
事务处理标识符Lo
0x0000
2
协议标识符号
客户机发起,服务器复制
Modbus协议 = 0.
0x0009
2
长度
从本字节下一个到最后

0x04
1
单元标识符
客户机发起,服务器复制
串口链路或其他总线上远程终端标识
功能码
0x10
1
功能码,读寄存器
参考标准modbus协议
数据
0x0000
2
起始地址

0x 0001
2
写寄存器数量

0x 02
1
写字节的个数

00 01
2
目标值

校验



2.4、写多个寄存器响应
97 79 00 00 00 06 04 10 00 00 00 01

示例
长度
说明
备注
Map报文头
0x97
1
事务处理标识符Hi
客户机发起,服务器复制,用于事务处理配对
0x79
1
事务处理标识符Lo
0x0000
2
协议标识符号
客户机发起,服务器复制
Modbus协议 = 0.
0x0006
2
长度
从本字节下一个到最后

0x04
1
单元标识符
客户机发起,服务器复制
串口链路或其他总线上远程终端标识
功能码
0x10
1
功能码,读寄存器
参考标准modbus协议
数据
0x0000
2
起始地址

0x 0001
2
寄存器个数

校验

【通讯协议|MODBUS协议整理(功能码简述 报文分析)】

    推荐阅读