Modbus TCPdatamessage结构详解

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

Modbus TCPdatamessage结构详解缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 读取输出线圈
  2. 2. 读取输入线圈
  3. 3. Read and hold register
  4. 4. Read input register
  5. 5. 预置单线圈
  6. 6. 预置单register
  7. 7. 预置多线圈
  8. 8. 预置多register

ModbusTCP与Modbus UDP的messageformat是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,Modbus TCP与Modbus Rtu(ModbusASCII)之间的区别如下图:

Modbus TCPdatamessage结构详解插图

从上图可以看出,ModbusTCP在Modbus串行通信的基础上,去除了校验(由于TCP本身就带有checksum)和Device address(ModbusTCP弱化了Device address,用IPaddress来取代),再加上MBAPmessage头(占7 bytes),下面针对MBAP进行分析说明:

Length说明客户机服务器
事务处理标识符2byteModbusRequest/Response事务处理的标识客户机启动CopyResponse
Protocol Identifier2byte0=Modbus协议客户机启动CopyResponse
Length2byteLength之后的byte总数客户机启动服务器启动
Unit identifier1byte串行链路或其它总线的从站识别客户端启动CopyResponse

下面针对具体message进行分析,Modbus协议在以太网链路上的messageformat如下所示:

事务处理标识符Protocol IdentifierLengthUnit identifierfunction codedata
2 bytes2 bytes2 bytes1 byte1 byteN bytes

有了以上理论基础之后,下面针对各个function code进行详细分析:

读取输出线圈

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图1

sendmessage含义:读取服务器1号从站输出线圈,starting address为0x13=19,对应address为00020,线圈quantity为0x1B=27,即读取1号从站输出线圈,address从00020-00046,共27个线圈的状态值。

这里值得注意一下,协议中的starting address指的是索引,后面的address指的是具体address,对于任意一个存储区,索引都是从0开始的,但是对应的具体address,与存储区是Related的,比如输出线圈,0对应00001;输入线圈,0对应10001;输入register,0对应30001;保持register,0对应40001。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图2

返回message含义:返回服务器1号从站输出线圈00020-00046,共27个线圈的状态值,返回byte count为4个,分别为CD 6B B2 05。

CD=1100 1101 对应 00020-00027

6B=0110 1011 对应 00028-00035

B2=1011 0010 对应 00036-00043

05=0000 0101 对应 00044-00046

读取输入线圈

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图3

sendmessage含义:读取服务器1号从站输入线圈,starting address为0xC4=196,对应address为10197,线圈quantity为0x1D=29,即读取1号从站输入线圈,address从10197-10225,共29个线圈的状态值。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图4

返回message含义:返回服务器1号从站输入线圈10197-10225,共29个线圈的状态值,返回byte count为4个,分别为CD 6B B2 05。

CD=1100 1101 对应 10197-10204

6B=0110 1011 对应 10205-10212

B2=1011 0010 对应 10213-10220

05=0000 0101 对应 10221-10225

Read and hold register

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图5

sendmessage含义:读取服务器1号从站保持register,starting address为0x6B=107,对应address为40108,number of registers为0x02=2,即读取1号从站保持register,address从40108-40109,共2个register的numerical value。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图6

返回message含义:返回服务器1号从站保持register40108-40109,共2个register的numerical value,返回byte count为4个,分别为02 2B 01 06,40108对应numerical value为0x022B,40109对应numerical value为0x0106。

Read input register

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图7

sendmessage含义:读取服务器1号从站输入register,starting address为0x6B=107,对应address为30108,number of registers为0x02=2,即读取1号从站保持register,address从30108-30109,共2个register的numerical value。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图8

返回message含义:返回服务器1号从站输入register30108-30109,共2个register的numerical value,返回byte count为4个,分别为02 2B 01 06,30108对应numerical value为0x022B,30109对应numerical value为0x0106。

预置单线圈

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图9

sendmessage含义:预置服务器1号从站单个线圈的值,Coil address为0x00AC=172,对应address为00173,断通标志0xFF00表示置位,0x000表示复位,即置位1号从站输出线圈00173。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图10

返回message含义:预置单输出线圈原message返回。

预置单register

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图11

sendmessage含义:预置服务器1号从站单个保持register的值,register address为0x0087=135,对应address为40136,写入值为0x039E,即预置1号从站保持register40136值为0x039E。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图12

返回message含义:预置单保持register原message返回。

预置多线圈

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图13

sendmessage含义:预置服务器1号从站多个线圈的值,Coil address为0x0013=19,对应address为00020,线圈数为0x0A=10,写入值为0xCD00,即预置1号从站线圈00020-00027=0xCD=1100 1101,00028-00029=0x00=0000 0000。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图14

返回message含义:预置多输出线圈返回message是在原message基础上除去byte count及具体byte后返回。

预置多register

sendmessageformat如下:

Modbus TCPdatamessage结构详解插图15

sendmessage含义:预置服务器1号从站多个register的值,register address为0x0087=135,starting address为40136,number of registers为0x02=2,Endaddress为40137,写入值为0xCD00和0x0A10,即预置1号从站register40136=0x0105,40137=0x0A10。

返回messageformat如下:

Modbus TCPdatamessage结构详解插图16

返回message含义:预置多保持register返回message是在原message基础上除去byte count及具体byte后返回。

技术术语(共 6 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus protocol标准 字数 2290 字 · 阅读约 6 分钟 更新 2026-06-30 永久链接 https://www.modbus.cn/27847.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注