功能代码 16 — 预设多个寄存器

2021-08-02 浏览次数:271
功能代码 16 — 预设多个寄存器

函数

该函数代码使 MODBUS 主站系统能够在 SIMATIC CPU 的数据块中写入多个数据字。

请求消息帧

ADDR

FUNC

start_register

数量

Byte_count n

n-DATA(高字节、低字节)

CRC

响应消息帧

ADDR

FUNC

start_register

数量

CRC

start_register

驱动程序如下所示解释 MODBUS 寄存器地址“start_register”:



为了进一步生成地址,驱动程序将使用参数分配过程中在对话框“FC 03、06、16 的 MODBUS 寻址的转换”(Conversion of MODBUS addressing for FC 03, 06, 16) 中输入的“基本 DB 号”(开始于 DB xxxxx)。

访问地址(地址转换)的计算分如下两步:

访问 SIMATIC

转换公式

数据块 DB
(生成的 DB)

=

(基础 DB 编号 xxxxx + start_register-offset_DB_no.)

数据字 DBW

=

(start_register word_No.

∗ 2)

start_register 的计算公式

如果已知要写入所生成的 DB,则可以根据以下公式计算主站系统中所需的 MODBUS 地址 start_register:

start_register

=

((结果 DB – 基础 DB 编号) * 512) + (data word_DBW/2)

仅允许使用偶数的数据字数。

数量

对于数量(寄存器数),允许 1 和 127 之间的任何值(对于 ET 200S 1SI Modbus,寄存器数较多为 123)。 请遵守以下规则:

(数量)较大值

=

512 - start_register



提示

请注意 CPU 特定的限制。




DATA(高字节、低字节)

任何值都可以用作 DATA DATA(高字节、低字节)(寄存器值)。

应用示例

参数分配示例:

列表: 函数代码 FC 03、06、16 的 MODBUS 寻址的转换


传输消息帧中的 MODBUS 地址

SIMATIC 存储区

0

起始数据块
(基础 DB 编号)

DB 800

操作:

MODBUS 主站系统要将值 CD09 十六进制、DE1A 十六进制和 EF2B 十六进制写入 DB 800 的数据字 DBW 100、DBW 102 和 DBW 104。

请求消息帧 FUNCTION 16:

05H

从站地址 ADDR

10H

函数代码 FUNC

00H

start_register“高字节”

32H

start_register“低字节”DBW 100

00H

数量“高”

03H

数量“低”(3 个寄存器)

06H

bytecount

CDH

寄存器值 — 高 (DBW100)

09H

寄存器值 — 低

DEH

寄存器值 — 高 (DBW102)

1AH

寄存器值 — 低

EFH

寄存器值 — 高 (DBW104)

2BH

寄存器值 — 低

xxH

CRC 校验和“低字节”

xxH

CRC 校验和“高字节”

响应消息帧 FUNCTION 16:

05H

从站地址 ADDR

10H

函数代码 FUNC

00H

start_register“高字节”

32H

start_register“低字节”

00H

数量“高”

03H

数量“低”(3 个寄存器)

xxH

CRC 校验和“低字节”

xxH

CRC 校验和“高字节”

地址计算:

MODBUS 地址“start_register”0032 十六进制(50 十进制)的解释如下所示:


访问 DB 800,数据字 DBW 100。

更多示例

有关更多访问示例,请参见 FC 03。


shtxjd.cn.b2b168.com/m/
top