功能代码 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 编号 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 寻址的转换
| SIMATIC 存储区 | |
---|---|---|
0 | 起始数据块 | 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/