DOCA0214ZH-04

Modbus 功能

一般说明

Modbus 协议提供了在 Modbus 网络上读写数据的众多功能。Modbus 协议还提供了诊断和网络管理功能。

这里仅介绍由 ATSE 处理的 Modbus 功能。

读功能

有以下读功能:

功能代码

子功能代码

名称

描述

3 (0x03)

读取保持寄存器

读取 n 个输出或内部寄存器

43 (0x2B)

14 (0x0E)

读取设备标识

读取服务器的标识数据

43 (0x2B)

15 (0x0F)

获取日期和时间

读取服务器的日期和时间

“读取寄存器”示例

下表显示了如何在寄存器 2000 中读取 SI 电压。寄存器 2000 的地址为 2000-1=1999 = 0x07CF。Modbus 服务器的 Modbus 地址为 47 = 0x2F。

客户端请求

服务器应答

字段名称

示例

字段名称

示例

Modbus 服务器地址

0x2F

Modbus 服务器地址

0x2F

功能代码

0x03

功能代码

0x03

要读取的寄存器地址(最高有效位)

0x07

数据长度(字节)

0x02

要读取的寄存器地址(最低有效位)

0xCF

寄存器值(最高有效位)

0x02

寄存器数量(最高有效位)

0x00

寄存器值(最低有效位)

0x2B

寄存器数量(最低有效位)

0x01

CRC(最高有效位)

0xXX

CRC(最高有效位)

0xXX

CRC(最低有效位)

0xXX

CRC(最低有效位)

0xXX

“获取日期和时间”示例

下表显示了如何获取 Modbus 服务器的日期和时间。Modbus 服务器的 Modbus 地址为 47 = 0x2F。

客户端请求

服务器应答

字段名称

示例

字段名称

示例

Modbus 服务器地址

0x2F

Modbus 服务器地址

0x2F

功能代码

0x2B

功能代码

0x2B

子功能代码

0x0F

子功能代码

0x0F

保留

0x00

保留

0x00

日期和时间

请参阅 DATETIME 数据类型

“设置日期和时间”示例

下表显示了如何设置 Modbus 服务器的日期和时间。Modbus 服务器的 Modbus 地址为 47 = 0x2F,最新日期为 2014 年 10 月 2 日,最新时间为下午 2:32:03:500。

注: 利用广播模式(Modbus 服务器地址 = 0)设置所有 Modbus 服务器的日期和时间。

客户端请求

服务器应答

字段名称

示例

字段名称

示例

Modbus 服务器地址

0x2F

Modbus 服务器地址

0x2F

功能代码

0x2B

功能代码

0x2B

子功能代码

0x10

子功能代码

0x10

Reserved1

0x00

Reserved1

0x00

未使用

0x00

未使用

0x00

年份 = 2014

0x0E

年份 = 2014

0x0E

月份 = 10 月

0x0A

月份 = 10 月

0x0A

日期 = 2 日

0x02

日期 = 2 日

0x02

小时 = 14

0x0E

小时 = 14

0x0E

分钟 = 32

0x20

分钟 = 32

0x20

3 秒 500 毫秒

0x0DAC

3 秒 502 毫秒

0x0DAE

正常回应是应答该请求,在远程设备更新日期时间后返回。如果日期时间结构内容与正确的日期时间不符(即无效日期时间),则设备会将返回日期时间字段的数值设置为 0。

如果断开 24 VDC 的电源,则不再刷新没有电池的 Modbus 服务器的日期和时间。因此在接通 24 VDC 电源后,必须设置所有 Modbus 服务器的日期和时间。

另外,因为每个 Modbus 服务器都有时钟漂移,因此必须定期设置所有 Modbus 服务器的日期和时间。建议至少每 15 分钟设置一次。

分散保持寄存器读功能

提供了以下分散保持寄存器读功能:

功能

子功能代码

名称

描述

100 (0x64)

4 (0x04)

读取分散保持寄存器

读取 n 个非连续寄存器

借助分散保持寄存器读功能,用户可以:

  • 避免在只需要少数寄存器的情况下读取大量连续寄存器

  • 避免多次使用功能 3 和 4,以读取非连续寄存器

“读取分散保持寄存器”示例

下表显示了如何读取 Modbus 服务器寄存器 1022(地址 0x03FD)和寄存器 1100(地址 0x044B)的地址。Modbus 服务器的 Modbus 地址为 47 = 0x2F。

客户端请求

服务器应答

字段名称

示例

字段名称

示例

Modbus 服务器地址

0x2F

Modbus 服务器地址

0x2F

功能代码

0x64

功能代码

0x64

数据长度(字节)

0x06

数据长度(字节)

0x06

子功能代码

0x04

子功能代码

0x04

传输数 (1)

0xXX

传输数 (1)

0xXX

要读取的第一个寄存器的地址(最高有效位)

0x03

要读取的第一个寄存器的数值(最高有效位)

0x12

要读取的第一个寄存器的地址(最低有效位)

0xFD

要读取的第一个寄存器的数值(最低有效位)

0x0A

要读取的第二个寄存器的地址(最高有效位)

0x04

要读取的第二个寄存器的数值(最高有效位)

0x74

要读取的第二个寄存器的地址(最低有效位)

0x4B

要读取的第二个寄存器的数值(最低有效位)

0x0C

CRC(最高有效位)

0xXX

CRC(最高有效位)

0xXX

CRC(最低有效位)

0xXX

CRC(最低有效位)

0xXX

(1) 客户端在请求中给出传输编号。服务器在应答中返回同样的传输编号。

写功能

提供了以下写功能:

功能代码

子功能代码

名称

描述

6 (0x06)

预置一个寄存器

写入 1 个寄存器

16 (0x10)

预置多个寄存器

写入 n 个寄存器

43 (0x2B)

16 (0x10)

设置日期和时间

写入服务器的日期和时间

QR Code is a registered trademark of DENSO WAVE INCORPORATED in Japan and other countries.

这有帮助吗?