Modbus模式
类型 |
接口 |
特点 |
RTU |
串口 |
传输大量数据,适合工业 |
ASCII |
串口 |
传输少量数据,适合计算机 |
TCP |
网口 |
传输严谨,效率低 |
UDP |
网口 |
传输效率高 |
Modbus RTU/ASCII
存储区
存储区范围:
标准地址(5位) Y XXXX
扩展地址(6位) Y XXXXX
bool类型一般存于线圈,数值类型存于寄存器
输入寄存器、输入线圈中的数据为只读
存储区 |
标记 |
地址范围(以标准地址为例) |
输出线圈 |
0 |
00001~09999 |
输入线圈 |
1 |
10001~19999 |
输出寄存器 |
4 |
40001~49999 |
输入寄存器 |
3 |
30001~39999 |
报文格式
从站地址(设备编号) |
功能码 |
数据 |
校验码 |
1byte |
1byte |
N byte |
2byte |
功能码
即读写功能码
功能码 |
含义 |
功能码 |
含义 |
01 |
读输出线圈 |
05 |
写单个输出线圈 |
02 |
读输入线圈 |
06 |
写单个输出寄存器 |
03 |
读输出寄存器 |
15 |
写多个输出线圈 |
04 |
读输入寄存器 |
16 |
写多个输出寄存器 |
Modbus TCP
数据帧格式
MBAP |
功能码 |
数据 |
7 byte |
1byte |
n byte |
MBAP
事务处理标识 |
协议标识符 |
长度 |
单元标识符 |
2 byte |
2 byte |
2 byte |
1 byte |
报文序列号,一般每次通信后要加1 |
00 00 表Modbus TCP |
数据长度,单位字节 |
设备地址 |
映射寄存器
设备类型 |
读写属性 |
应用定义 |
功能码 |
Modbus协议地址 |
内部地址 |
0X |
读写 |
线圈(输出点) |
01 05 0F |
0000~FFFF |
000001~065536 |
1X |
读 |
离散量输入 |
02 |
0000~FFFF |
100001~165536 |
3X |
读 |
输入寄存器 |
04 |
0000~FFFF |
300001~365536 |
4X |
读写 |
保持寄存器 (写时 功能码多为10) |
03 06 10 |
0000~FFFF |
400001~465536 |
5X |
读写 |
保持寄存器(在32位数据类型时数据排放相反 ) |
03 06 10 |
0000~FFFF |
500001~565536 |
6X |
读写 |
保持寄存器 (在写时功能码为06) |
03 06 10 |
0000~FFFF |
600001~665536 |
功能码
功能码 |
名称 |
功能 |
对应地址类型 |
01 |
读线圈状态 |
读从机线圈寄存器n个bit (位操作) |
0x |
02 |
读输入离散量 |
读离散输入寄存器n个bit (位操作) |
1x |
03 |
读多个寄存器 |
读保持寄存器,整型 状态字 字符型 浮点型 n个words (字节操作) |
4x |
04 |
读输入寄存器 |
读输入寄存器,整型 状态字 浮点型 n个words (字节操作) |
3x |
05 |
写单个线圈 |
写线圈寄存器 写1个bit (位操作) |
0x |
06 |
写单个保持寄存器 |
写保持寄存器 整型 字符型 状态字 浮点型 1个word (字节操作) |
4x |
0F |
写多个线圈 |
强制一串连续逻辑线圈的判断 写n个bit (位操作) |
0x |
10 |
写多个保持寄存器 |
把具体的二进制值装入一串连续的保持寄存器 n个word |
4x |
示例
读输出线圈(01功能码)
|
事务处理标识 |
协议标识符 |
长度 |
单元标识符 |
功能码 |
起始地址 |
数据长度 |
hex |
00 00 |
00 00 |
00 06 |
01 |
01 |
00 13 |
00 10 |
写多个线圈(0F功能码)
|
事务处理标识 |
协议标识符 |
长度 |
单元标识符 |
功能码 |
起始地址 |
线圈数量 |
字节计数 |
写入值 |
hex |
00 00 |
00 00 |
00 09 |
01 |
0F |
00 0A |
00 10 |
02 |
1C A0 |