博途通过PN非周期通信读写 G120 变频器参数:DS47 数据集
前言
上一篇我们讲了 S7-1200 通过周期 PKW 通道读写 G120 参数——每次只能读写一个参数,报文固定 4 个字。当需要一次性批量读写多个参数(例如调试备份、配方下发、成组读取 r2902 组态数据)时,周期通道就力不从心了。这时就该非周期通信登场。
本文基于西门子官方教程(CS Drive team),以 S7-1200 + CU250S-2 PN 为例,系统讲解基于 PROFIdrive 参数通道(DPV1)数据集 DS47 的非周期参数读写:数据结构、字段定义、故障诊断,以及 WRREC/RDREC 的完整编程实现。
一、两种参数访问方式对比与选型
G120 带 PN 接口的控制单元(CU240E-2PN、CU250S-2PN 等)支持两种参数访问途径:
| 对比项 | 周期 PKW 通道 | 非周期通信(DS47) |
|---|---|---|
| 数据通道 | 嵌入周期报文(报文 353 等) | 访问变频器数据记录区 |
| 指令 | DPRD_DAT / DPWR_DAT | WRREC / RDREC |
| 每次读写参数数 | 仅 1 个 | 多个,数量不限 |
| 单次任务数据量 | 固定 4 个字 | 最大 240 字节 |
| 适用场景 | 在线修改个别参数、与过程数据同周期 | 批量读写、参数备份、配方下载 |
非周期通信工作模式:S7-1500 主站调用 WRREC 指令将"参数请求"写入从站 → 从站内部处理 → 主站调用 RDREC 指令读取包含"参数应答"的数据记录。请求与应答的数据内容遵照 PROFIdrive 参数通道(DPV1)数据集 DS47(非周期参数通道结构)。
注意:无论读参数还是写参数,第一步都是 WRREC 写请求,第二步才是 RDREC 读应答。这是新手最容易困惑的地方。
二、DS47 数据结构详解
2.1 参数请求结构
| 区域 | 字节 n | 字节 n+1 | n 值 |
|---|---|---|---|
| 报文头 | 请求参考 | 请求 ID | 0 |
| 驱动对象 ID | 参数数量 m | 2 | |
| 参数 1 | 属性 | 索引的数量 | 4 |
| 参数号 | 6 | ||
| 第一个索引的编号 | 8 | ||
| 参数 2 … 参数 m | … | … | … |
| 参数 1 的值*(仅写任务) | 数据格式 | 参数值数量 | |
| 参数值 | |||
| 参数 2…m 的值* | … |
2.2 参数应答结构
| 区域 | 字节 n | 字节 n+1 | n 值 |
|---|---|---|---|
| 报文头 | 请求参考映射 | 应答 ID | 0 |
| 驱动对象 ID 映射 | 参数数量 m | 2 | |
| 参数 1 的值*(仅读任务) | 数据格式 | 参数值数量 | 4 |
| 参数值或错误值 | 6 | ||
| 参数 2 … 参数 m | … | … | … |
2.3 请求字段说明
| 字段 | 类型 | 取值 (Hex) | 说明 |
|---|---|---|---|
| 请求参考 | 8 位 | 01…FF | 主站为每个新请求分配的索引号,从站在应答中原样返回,用于请求-应答配对 |
| 请求 ID | 8 位 | 01 / 02 | 01 = 读任务;02 = 写任务 |
| 驱动对象 ID | 8 位 | 01 | 区分驱动对象,G120 固定为 01 hex |
| 参数数量 m | 8 位 | 01…27 | 本次访问的参数个数(最多 39 个) |
| 属性 | 8 位 | 10 / 20 | 访问类型:10 = 数值;20 = 描述(仅读任务) |
| 索引数量 | 8 位 | 00…EA | 要访问的索引数量(无索引参数填 00) |
| 参数号 | 16 位 | 0001…FFFF | 直接填写完整参数号,无需像 PKW 那样做 2000 偏移拆分 |
| 索引编号 | 16 位 | 0000…FFFF | 第一个索引的下标(无索引填 0000) |
| 数据格式 | 8 位 | 见下表 | 参数值的数据类型 |
| 参数值数量 | 8 位 | 00…EA | 随后的参数值个数 |
| 参数值 | 16 位 | 0000…FFFF | 参数值 |
数据格式编码:
| Hex | 类型 | Hex | 类型 |
|---|---|---|---|
| 02 | 8 位整型 | 08 | 浮点数 |
| 03 | 16 位整型 | 10 | 8 位数据串(16 bit) |
| 04 | 32 位整型 | 13 | 时间差(32 bit) |
| 05 | 8 位无符号数 | 41 | 字节 |
| 06 | 16 位无符号数 | 42 | 字 |
| 07 | 32 位无符号数 | 43 | 双字 |
2.4 应答字段说明
| 字段 | 取值 (Hex) | 说明 |
|---|---|---|
| 请求参考映射 | 01…FF | 与请求相同 |
| 应答 ID | 01 / 81 / 02 / 82 | 01 = 读任务成功;81 = 读任务未完整执行;02 = 写任务成功;82 = 写任务未完整执行 |
| 驱动对象 ID 映射 | 00…FF | 与请求相同 |
| 参数数量 m | 01…27 | 与请求相同 |
| 数据格式 | 同请求 + 44 = 错误 | 为 44 时,后续是错误号而非参数值 |
| 参数值或错误值 | 0000…00FF | 参数值或故障号 |
2.5 故障值说明
当应答数据格式 = 44 hex 时,参数值位置返回故障值 1:
| 故障值 | 含义 | 故障值 | 含义 |
|---|---|---|---|
| 00 hex | 参数号错误(参数不存在) | 15 hex | 应答过长(超出可传输最大长度) |
| 01 hex | 参数值无法修改 | 16 hex | 参数地址错误 |
| 02 hex | 超出数值下限或上限 | 17 hex | 格式错误 |
| 03 hex | 错误的子索引 | 18 hex | 值的数量不符 |
| 04 hex | 没有数组 | 19 hex | 传动对象不存在 |
| 05 hex | 错误的数据类型 | 6B hex | 控制器使能时无修改权限 |
| 06 hex | 不允许设置,只能复位 | 70/71 hex | 仅能在快速调试/运行就绪时修改(p0010) |
| 0B hex | 没有操作权限 | 83 hex | 无法实现所需 BICO 互联 |
| 11 hex | 因运行状态无法执行任务 | 86 hex | 调试数据组时仅允许写访问(p0010=15) |
| 14 hex | 数值错误 | 87 hex | 专有技术保护生效,禁止访问 |
| C8/C9 hex | 低于/高于当前有效限值 | ||
| CC hex | 无访问口令,不允许修改 |
三、TIA Portal 编程实现
3.1 实验环境
| 设备 | 订货号 | 版本 |
|---|---|---|
| CPU 1214C DC/DC/Rly | 6ES7214-1HH50-0XB0 | V1.0 |
| CU250S-2 PN | 6SL3246-0BA22-1FA0 | FW4.7 |
| PM240 | 6SL3224-0BE13-7UA0 | B01 |
| 电机 | 1LA7060-4AB10-Z | – |
| 软件 | TIA Portal + Startdrive | V20 |
同样需要组态353报文
3.2 WRREC(写数据记录,发送请求)
| 参数 | 说明 |
|---|---|
| REQ | 任务开始执行(上升沿触发,建议用沿指令) |
| ID | 变频器组态的硬件标识符(报文 353 的"SIEMENS_telegram_353, _PKW+PZD-2_2",如 284) |
| INDEX | 固定为 47(即 DS47) |
| LEN | 写数据记录的长度 |
| RECORD | 发送缓存区,如 P#M100.0 BYTE 40 |
| DONE / BUSY / ERROR / STATUS | 完成 / 进行中 / 错误 / 状态码 |
3.3 RDREC(读数据记录,取回应答)
| 参数 | 说明 |
|---|---|
| REQ | 任务开始执行 |
| ID | 同上,报文硬件标识符 |
| INDEX | 固定为 47 |
| MLEN | 读取数据记录的最大长度(如 40) |
| RECORD | 读取缓存区,如 P#M200.0 BYTE 40 |
| VALID / BUSY / ERROR / STATUS | 数据有效 / 进行中 / 错误 / 状态码 |
| LEN | 实际读取到的数据长度(建议由 VALID 上升沿保存到变量) |
执行时序:WRREC 上升沿触发 → 等 DONE → RDREC 上升沿触发 → 等 VALID → 解析应答。两步都必须用沿触发,且同一时刻只能有一个非周期任务在执行。
四、实例一:一次读取 P2900 和 r2902[2]~r2902[5]
这是非周期通信优势的典型体现:一个任务读 2 个参数,其中 r2902 连续读 4 个下标。
4.1 读请求
| 区域 | 字段 | 值 (Hex) | 地址 | 说明 |
|---|---|---|---|---|
| 报文头 | 请求参考 | 01 | MW100 | 本次请求编号 |
| 请求 ID | 01 | MW100 | 读任务 | |
| 驱动对象 ID | 01 | MW102 | 固定 01 | |
| 参数数量 m | 02 | MW102 | 读 2 个参数 | |
| 参数 1 | 属性 | 10 | MW104 | 访问数值 |
| 索引数量 | 00 | MW104 | P2900 无索引 | |
| 参数号 | 0B54 | MW106 | 2900 = B54 hex(直接写完整参数号) | |
| 索引编号 | 0000 | MW108 | 无索引 | |
| 参数 2 | 属性 | 10 | MW110 | 访问数值 |
| 索引数量 | 04 | MW110 | 连续读 4 个下标 | |
| 参数号 | 0B56 | MW112 | 2902 = B56 hex | |
| 索引编号 | 0002 | MW114 | 从下标 [2] 开始 |
对比周期 PKW:这里不需要对 2902 做"减 2000、分区索引 80"的拆分,参数号直接写 0B56,下标直接写 0002——DS47 的寻址直观得多。
4.2 读应答
| 区域 | 字段 | 值 | 地址 |
|---|---|---|---|
| 报文头 | 请求参考映射 | 01 hex | MW200 |
| 应答 ID | 01 hex(读任务成功) | MW200 | |
| 驱动对象 ID 映射 | 01 hex | MW202 | |
| 参数数量 m | 02 hex | MW202 | |
| 参数 1 值 | 数据格式 / 数量 | 08 hex / 01 hex | MW204 |
| 参数值 | 0.0(浮点数) | MD206 | |
| 参数 2 值 | 数据格式 / 数量 | 08 hex / 04 hex | MW210 |
| r2902[2] | 10.0(浮点数) | MD212 | |
| r2902[3] | 20.0(浮点数) | MD216 | |
| r2902[4] | 50.0(浮点数) | MD220 | |
| r2902[5] | 100.0(浮点数) | MD224 |
五、实例二:一次写入 P2900 = 11.0 和 P2901 = 22.0
5.1 写请求
| 区域 | 字段 | 值 (Hex) | 地址 | 说明 |
|---|---|---|---|---|
| 报文头 | 请求参考 | 01 | MW100 | |
| 请求 ID | 02 | MW100 | 写任务 | |
| 驱动对象 ID | 01 | MW102 | ||
| 参数数量 m | 02 | MW102 | 写 2 个参数 | |
| 参数 1 | 属性 / 索引数量 | 10 / 01 | MW104 | 数值,1 个值 |
| 参数号 | 0B54 | MW106 | P2900 | |
| 索引编号 | 0000 | MW108 | ||
| 参数 2 | 属性 / 索引数量 | 10 / 01 | MW110 | |
| 参数号 | 0B55 | MW112 | P2901 | |
| 索引编号 | 0000 | MW114 | ||
| 参数 1 数值 | 数据格式 / 数量 | 08 / 01 | MW116 | 浮点数,1 个 |
| 参数值 | 11.0(浮点) | MD118 | ||
| 参数 2 数值 | 数据格式 / 数量 | 08 / 01 | MW122 | |
| 参数值 | 22.0(浮点) | MD124 |
注意写任务的结构:先列出所有参数的地址(参数 1…m),再依次附所有参数的值。这是 DS47 与很多"参数-值交替排列"协议不同的地方。
5.2 写应答
写任务应答很短,只含报文头:
| 字段 | 值 | 地址 |
|---|---|---|
| 请求参考映射 | 01 hex | MW200 |
| 应答 ID | 02 hex(写任务成功;82 = 未完整执行) | MW200 |
| 驱动对象 ID 映射 | 01 hex | MW202 |
| 参数数量 m | 02 hex | MW202 |
六、工程实践要点与排错
- REQ 必须用上升沿:WRREC/RDREC 是边沿触发的异步指令,电平触发会导致任务反复执行。
- 严格的两步流程:读参数也要先 WRREC 发请求、再 RDREC 取应答;WRREC 的 DONE 置位后再触发 RDREC。
- INDEX 固定 47:这是 PROFIdrive DPV1 参数通道的数据集号,填错会返回资源错误。
- 240 字节上限:单次任务报文(含报文头、参数地址、参数值)不能超过 240 字节,超长返回故障值 15 hex(应答过长),需拆分为多个任务。
- 请求参考用于配对:多任务轮询时给每个请求不同的请求参考号,通过应答中的映射值确认对应关系。
- 逐参数容错:应答 ID = 81/82(未完整执行)时,逐参数检查数据格式,为 44 hex 的参数对应的值即故障号——多参数任务中可能部分成功、部分失败。
- 运行状态限制:与 PKW 一样,使能运行中、调试模式(p0010 ≠ 0)下部分参数禁止修改(6B、70、86 hex 等)。
- 浮点数字节序:浮点值按 32 位 IEEE 754 大端存放(对应 MD 地址),解析时注意 PLC 侧数据类型匹配。
结语
周期 PKW 与非周期 DS47 并不是二选一的关系:少量、高频、与工艺联动的参数用 PKW 周期通道;批量、低频、调试备份类的参数用 WRREC/RDREC 非周期通信。掌握"请求参考 + 请求 ID + 参数地址列表 + 参数值列表"这套 DS47 结构,配合 INDEX = 47 和沿触发时序,即可在 G120 全系列 PN 控制单元上实现高效的参数批量读写。