标签:title 操作 htm 数据请求 响应 pad row jpg ODB
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
在 TCP/IP 上使用一种专用报文头识别 MODBUS 应用数据单元。将这种报文头称为 MBAP 报文头(MODBUS 协议报文头)。这种报文头提供一些与串行链路上使用的 MODBUS RTU 应用数据单元比较的差别 :
原文链接:https://www.cnblogs.com/ioufev/articles/10830028.html
MBAP的长度为7个字节,组成如下:
事务处理标识 | 协议标识 | 长度 | 单元标识符 |
---|---|---|---|
2字节 | 2字节 | 2字节 | 1字节 |
内容 | 解释 |
---|---|
事务处理标识 | 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。 |
协议标识符 | 00 00表示ModbusTCP协议。 |
长度 | 表示接下来的数据长度,单位为字节。 |
单元标识符 | 可以理解为设备地址。 |
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
功能码
Modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
对象 | 含义 |
---|---|
线圈 | PLC的输出位,开关量,在Modbus中可读可写 |
离散量 | PLC的输入位,开关量,在Modbus中只读 |
输入寄存器 | PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读 |
保持寄存器 | PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写 |
根据对象的不同,常用的Modbus的功能码有:
功能码 | 含义 |
---|---|
0x01 | 读线圈 |
0x05 | 写单个线圈 |
0x0F | 写多个线圈 |
0x02 | 读离散量输入 |
0x04 | 读输入寄存器 |
0x03 | 读保持寄存器 |
0x06 | 写单个保持寄存器 |
0x10 | 写多个保持寄存器 |
0x01:读线圈
在从站中读1~2000个连续线圈状态,ON=1,OFF=0
0x05:写单个线圈
将从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF
0x0F:写多个线圈
将一个从站中的一个线圈序列的每个线圈都强制为ON或OFF,数据域中置1的位请求相应输出位ON,置0的位请求响应输出为OFF
0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态
0x04:读输入寄存器
从一个远程设备中读1~2000个连续输入寄存器
0x03:读保持寄存器
从远程设备中读保持寄存器连续块的内容
0x06:写单个保持寄存器
在一个远程设备中写一个保持寄存器
0x10:写多个保持寄存器
在一个远程设备中写连续寄存器块(1~123个寄存器)
ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文。
原文链接:https://blog.csdn.net/mikasoi/article/details/81782159
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、数据请求回复
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---- |
|
数据 |
||
校验 |
|
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 |
目标值 |
|
|
校验 |
|
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 |
寄存器个数 |
|
|
校验 |
|
标签:title 操作 htm 数据请求 响应 pad row jpg ODB
原文地址:https://www.cnblogs.com/wenhao-Web/p/12993675.html