ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200_Modbus功能码0x10写多个寄存器

2022-11-05 16:38:42 钡铼技术

ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus

工业物联网关

功能码0x10(写多个寄存器)

此功能码用于写入多个远程设备中的连续保持寄存器。请求PDU指定起始寄存器的地址和寄存器的数量。响应消息中的寄存器数据被打包为每个寄存器两个字节,每个字节内的二进制内容靠右对齐。

1. 请求

表 1:功能码0x10-请求报文

字段名称

字节数

示例

说明

事务标识符

2 Byte

0x00 01

Modbus请求/响应事务处理的识别

协议标识符

2 Byte

0x00 00

0x00 00 Modbus协议

报文长度

2 Byte

0x00 17

后面数据的字节数

设备地址

1 Byte

0x01

从站的地址识别

功能码

1 Byte

0x10

写多个保持寄存器,用功能码0x10

起始地址

2 Byte

0x0F A0

地址详见Modbus 寄存器映射”章节

寄存器数量

2 Byte

0x00 08


数据字节数

1 Byte

0x10


数据

16 Byte

0x

3F 9D 70 A4 40 15 C2 8F 40 5C CC CD 40 91 EB 85


2. 响应


表 65:功能码0x10-响应报文

字段名称

字节(Byte

示例

说明

事务标识符

2 Byte

0x00 00

Modbus请求/响应事务处理的识别

协议标识符

2 Byte

0x00 00

0x00 00 Modbus协议

报文长度

2 Byte

0x00 13

后面数据的字节数

设备地址

1 Byte

0x01

从站的地址识别

功能码

1 Byte

0x10

写多个保持寄存器,用功能码0x10

起始地址

2 Byte

0x0F A0


寄存器数量

2 Byte

0x00 08


3. 异常


表 2:功能码0x10-异常

字段名称

字节(Byte

示例

说明




功能码

1 Byte

0x90

Modbus功能码 + 0x80

异常编码

1 Byte

0x01

0x01 0x02

4. 示例


从地址4000开始,写4个模拟输出的值。由于BL200耦合器节点寄存器映射数据类型是32Bit Float,即1个模拟输出数据 = 2个保持寄存器 = 4个字节 ,所以需要写入8个保持寄存器。


请求

0x00 01 00 00 00 17 01 10 0F A0 00 08 10 3F 9D 70 A4 40 15 C2 8F 40 5C CC CD 40 91 EB 85


表 3:功能码0x10-请求报文-示例

Byte

1

2

3

4

5

6

7

8

9

10

11

12

13

14…23

Data

00 01

00 00

00 17

01

10

0F A0

00 08

10

xxx

说明

事务标识符

协议标识符

报文长度

设备地址

功能码

起始地址

寄存器数量

字节数

数据

其中数据部分共16个字节,转换成十进制如下:

表 4:写入保持寄存器 - 转换数据十进制

Byte

14
















Data

3F 9D 70 A4

40 15 C2 8F

40 5C CC CD

40 91 EB 85

十进制

1.23

2.34

3.45

4.56

说明

第一个数据

第二个数据

第三个数据

第四个数据

响应


0x00 01 00 00 00 06 01 10 0F A0 00 08


表 5:功能码0x10-响应报文-示例

Byte

1

2

3

4

5

6

7

8

9

10

11

12

Data

00 01

00 00

00 06

01

10

0F A0

00 08

说明

事务标识符

协议标识符

报文长度

设备地址

功能码

起始地址

寄存器数量



标签: 远程IO
微信公众号

首页
产品
案例
联系钡铼