MODBUS TCP




读寄存器

请求

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x03

6

起始寄存器地址

2个字节

高字节在前

7

寄存器个数

2个字节

高字节在前





读寄存器

回应

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x03

6

数据长度

1个字节

寄存器个数*2

7

数据

寄存器个数

*2个字节

每个寄存器

高字节在前




写单个

寄存器

请求

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x10

6

寄存器地址

2个字节

高字节在前

7

寄存器数值

2个字节

高字节在前




写单个

寄存器

回应

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x10

6

寄存器地址

2个字节

高字节在前

7

寄存器数值

2个字节

高字节在前





写多个

寄存器

请求

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x10

6

起始寄存器地址

2个字节

高字节在前

7

寄存器个数

2个字节

高字节在前

8

数据长度

1个字节

寄存器个数*2

9

数据

寄存器个数

*2个字节

每个寄存器

高字节在前



写多个

寄存器

回应

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

0x10

6

起始寄存器地址

2个字节

高字节在前

7

寄存器个数

2个字节

高字节在前




错误返回

序号

意义

所占字节

字节存放格式

1

事务处理标识

2个字节

高字节在前

2

协议标识

2个字节

高字节在前

3

长度

2个字节

高字节在前

4

单元标识

1个字节

0x00-0xff

5

功能码

1个字节

请求功能码+0x80

6

错误码

1个字节

其代号见表格



错误代码

错误代号

意义

0x01

不支持该功能码

0x02

越界

0x03

寄存器数量超出范围

0x04

读写错误

MODBUS RTU



读寄存器

请求

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x03

3

起始寄存器地址

2个字节

高字节在前

4

寄存器个数

2个字节

高字节在前

5

CRC校验码

2个字节

低字节在前



读寄存器

回应

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x03

3

数据长度

1个字节

寄存器个数*2

4

数据

寄存器个数

*2个字节

每个寄存器

高字节在前

5

CRC校验码

2个字节

低字节在前



写单个

寄存器

请求

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x10

3

起始寄存器地址

2个字节

高字节在前

4

寄存器数值

2个字节

高字节在前

5

CRC校验码

2个字节

低字节在前



写单个

寄存器

回应

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x10

3

起始寄存器地址

2个字节

高字节在前

4

寄存器数值

2个字节

高字节在前

5

CRC校验码

2个字节

低字节在前




写多个

寄存器

请求

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x10

3

起始寄存器地址

2个字节

高字节在前

4

寄存器个数

2个字节

高字节在前

5

数据长度

1个字节

寄存器个数*2

6

数据

寄存器个数

*2个字节

每个寄存器

高字节在前

7

CRC校验码

2个字节

低字节在前



写多个

寄存器

回应

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

0x10

3

起始寄存器地址

2个字节

高字节在前

4

寄存器个数

2个字节

高字节在前

5

CRC校验码

2个字节

低字节在前



错误返回

序号

意义

所占字节

字节存放格式

1

从设备地址

1个字节

0x00-0xff

2

功能码

1个字节

请求功能码+0x80

3

错误码

1个字节

其代号见表格

4

CRC校验码

2个字节

低字节在前



错误代码

错误代号

意义

0x01

不支持该功能码

0x02

越界

0x03

寄存器数量超出范围

0x04

读写错误

MODBUS RTU 功能码

下面“线圈”,“寄存器”其实分别为“位变量”,“16位变量”。

功能码

意义

0x01

读线圈

0x02

读离散量输入

0x03

读保持寄存器

0x04

读输入寄存器

0x05

写单个线圈

0x06

写单个寄存器

0x0F

写多个线圈

0x10

写多个寄存器

Modbus RTU与Modbus TCP读指令对比


MBAP报头文

地址码

功能

寄存器

地址

寄存器

数量

CRC校验

RTU

01

03

01 8E

00 04

25 DE

TCP

00 00 00

00 00 06 00

03

01 8E

00 04

指令的涵义:从地址码为01(TCP协议单元标志为00)的模块0x18E(01 8E)寄存器地址开始读(03)四个(00 04)寄存器。

Modbus RTU与Modbus TCP写指令对比


MBAP报头文

地址码

功能

寄存器

地址

寄存器

数量

数据

长度

正文

CRC校验

 RTU

01

10

01 8E

00 01

02

00 00

A8 7E

 TCP

00 00 00

00 00 09 00

10

01 8E

00 01

02

00 00

指令的涵义:从地址码为01(TCP协议单元标志为00)的模块0x18E(01 8E)寄存器地址开始写(10)一个(00 01)寄存器,具体数据长度为2个字节(02),数据正文内容为00 00(00 00)。