ModbusTCP报文详解
Modbus TCP与Modbus Rtu(ASCI)数据帧的区别
总结:Modbus TCP就是在Modbus Rtu(ASCI)基础上去掉CRC,再加上六个0一个6
Modbus TCP MBAP报文头
域 | 长度 | 描述 | 客户机 | 服务器 |
---|---|---|---|---|
事务处理标识符 | 2字节 | Modbus请求/响应事务处理的识别 | 客户机启动 | 服务器从接收的请求中重新复制 |
协议标识符 | 2字节 | 0=Modbus协议 | 客户机启动 | 服务器从接收的请求中重新复制 |
长度 | 2字节 | 随后字节的数量 | 客户机启动(请求) | 服务器(响应)启动 |
单元标识符 | 1字节 | 串行链路或其它总线上连接的远程从站的识别 | 客户机启动 | 服务器从接收的请求中重新复制 |
功能码01H
读取输入线圈 功能码:01H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始地址(高位) | 起始地址(低位) | 线圈地址(高位) | 线圈数量(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x01 | 0x00 | 0x13 | 0x00 | 0x1B |
含义: 读服务器单元标识符(0x11)输出线圈,起始地址 =0013H=19,对应地址 00020;
线圈数 =001BH=27; 结束地址 =00020+27-1=00046,即读服务器输出线圈 00020-00046,共 27个线圈状态。
从站应答报文格式:
含义:返回服务器单元标识符(0x11)输出线圈 00020-00046,共 27个线圈状态,分别为CD 6B B2 05
CD=1100 1101 对应00020-00027 B2=1011 0010 对应00036-00043
6B=0110 1011 对应00028-00035 05=0000 0101 对应00044-00046
功能码02H
读取输入线圈 功能码:02H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始地址(高位) | 起始地址(低位) | 线圈地址(高位) | 线圈数量(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x02 | 0x00 | 0x13 | 0x00 | 0x1B |
含义: 读服务器单元标识符(0x11)输出线圈,起始地址 =0013H=19,对应地址 00020;
线圈数 =001BH=27; 结束地址 =10020+27-1=10046,即读服务器输出线圈 10020-10046,共 27个线圈状态。
从站应答报文格式:
含义:返回服务器单元标识符(0x11)输出线圈 10020-10046,共 27个线圈状态,分别为CD 6B B2 05
CD=1100 1101 对应10020-10027 B2=1011 0010 对应10036-10043
6B=0110 1011 对应10028-10035 05=0000 0101 对应10044-10046
功能码03H
读取保持寄存器 功能码:03H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 寄存器数量(高位) | 寄存器数量(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x03 | 0x00 | 0x6B | 0x00 | 0x02 |
含义:读服务器单元标识符(0x11)保持寄存器,起始地址=006BH=107,对应地址 40108;
寄存器数=0002H=2;结束地址=40108+2-1=40109,即读服务器保存寄存器40108-40109,共2个寄存器的值。
从站应答报文格式:
含义:返回服务器单元标识符(0x11)保存寄存器40108-40109 ,共 2个寄存器的值,分别为02 2B 01 06
因此40108寄存器对应值为022BH 40109寄存器对应值为0106H
功能码04H
读取输入寄存器 功能码:04H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 寄存器数量(高位) | 寄存器数量(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x04 | 0x00 | 0x6B | 0x00 | 0x02 |
含义:读服务器单元标识符(0x11)输入寄存器,起始地址=006BH=107,对应地址 30108;
寄存器数=0002H=2;结束地址=30108+2-1=30109,即读服务器输入寄存器30108-30109,共2个寄存器的值。
从站应答报文格式:
含义:返回服务器单元标识符(0x11)输入寄存器30108-30109,共 2个寄存器的值,分别为02 2B 01 06
因此30108寄存器对应值为022BH 30109寄存器对应值为0106H
ModbusTCP报文详解
功能码05H
强制单个线圈 功能码:05H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 线圈地址(高位) | 线圈地址(低位) | 断通标志 | 断通标志 |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x05 | 0x00 | 0xAC | 0xFF | 0x00 |
含义:强制服务器单元标识符(0x11)某个线圈的值,线圈地址=00ACH=172,对应地址 00173;
断通标志为FF00H表示置位,断通标志为0000H表示复位,即置位服务器输出线圈00173。
从站应答报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 线圈地址(高位) | 线圈地址(低位) | 断通标志 | 断通标志 |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x05 | 0x00 | 0xAC | 0xFF | 0x00 |
含义:强制服务器单元标识符(0x11)输出线圈00173为ON后原文返回。
功能码06H
预置单个寄存器 功能码:06H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 寄存器地址(高位) | 寄存器地址(低位) | 写入值(高位) | 写入值(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x06 | 0x00 | 0x87 | 0x03 | 0x9E |
含义: 预置服务器单元标识符(0x11)某个寄存器的值,寄存器地址=0087H=135,对应地址 40136;写入值为0x039E,即预置服务器保存寄存器40136值为0x039E。
从站应答报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 寄存器地址(高位) | 寄存器地址(低位) | 写入值(高位) | 写入值(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x06 | 0x00 | 0x87 | 0x03 | 0x9E |
含义:预置服务器单元标识符(0x11)保存寄存器40136值为0x039E后原文返回。
功能码0FH
强制单个线圈 功能码:0FH
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始线圈(高位) | 起始线圈(低位) | 字节统计 | 字节1 | 字节2 |
---|---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x0F | 0x00 | 0x0A | 0x02 | 0xCD | 0X00 |
含义:预置服务器单元标识符(0x11)多个线圈的值,线圈起始地址=0013H=19,对应地址 00020;线圈数=0x000A=10,结束地址为00020+10-1=00029,写入值为0xCD00,即预置服务器从站线圈:
00020-00027=0xCD=1100 1101 00028-00029=0x00=0000 0000
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始线圈(高位) | 起始线圈(低位) | 线圈数(高位) | 线圈数(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x0006 | 0x11 | 0x0F | 0x00 | 0x13 | 0x00 | 0x0A |
含义:预置服务器单元标识符(0x11)线圈:
00020-00027=0xCD=1100 1101
00028-00029=0x00= 0000 0000
功能码10H
预置多个寄存器 功能码:10H
主站询问报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始地址(高位) | 起始地址(低位) | 数量(高位) | 数量(低位) | 字节统计 | 字节1 | 字节2 | 字节3 | 字节4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00000000 | 0x000B | 0x11 | 0x10 | 0x00 | 0x87 | 0x00 | 0x02 | 0x04 | 0x01 | 0x05 | 0x0A | 0X10 |
含义:预置服务器单元标识符(0x11)多个寄存器的值,寄存器起始地址=0087H=135,对应地址 40136;寄存器数=0x0002=2,结束地址为40136+2-1=40137,写入值为0x0105,0x0A10,即预置服务器寄存器:40136=0x0105 40137=0x0A10
从站应答报文格式:
事务/协议(4个字节) | 字节长度 | 单元标识符 | 功能码 | 起始(高位) | 起始(低位) | 数量(高位) | 数量(低位) |
---|---|---|---|---|---|---|---|
0x00000000 | 0x000B | 0x11 | 0x10 | 0x00 | 0x87 | 0x00 | 0x02 |
含义:预置服务器单元标识符(0x11)寄存器:
40136=0x0105
40137=0x0A10