博途通过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(写数据记录,发送请求)

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(读数据记录,取回应答)

image

参数 说明
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

六、工程实践要点与排错

  1. REQ 必须用上升沿:WRREC/RDREC 是边沿触发的异步指令,电平触发会导致任务反复执行。
  2. 严格的两步流程:读参数也要先 WRREC 发请求、再 RDREC 取应答;WRREC 的 DONE 置位后再触发 RDREC。
  3. INDEX 固定 47:这是 PROFIdrive DPV1 参数通道的数据集号,填错会返回资源错误。
  4. 240 字节上限:单次任务报文(含报文头、参数地址、参数值)不能超过 240 字节,超长返回故障值 15 hex(应答过长),需拆分为多个任务。
  5. 请求参考用于配对:多任务轮询时给每个请求不同的请求参考号,通过应答中的映射值确认对应关系。
  6. 逐参数容错:应答 ID = 81/82(未完整执行)时,逐参数检查数据格式,为 44 hex 的参数对应的值即故障号——多参数任务中可能部分成功、部分失败。
  7. 运行状态限制:与 PKW 一样,使能运行中、调试模式(p0010 ≠ 0)下部分参数禁止修改(6B、70、86 hex 等)。
  8. 浮点数字节序:浮点值按 32 位 IEEE 754 大端存放(对应 MD 地址),解析时注意 PLC 侧数据类型匹配。

结语

周期 PKW 与非周期 DS47 并不是二选一的关系:少量、高频、与工艺联动的参数用 PKW 周期通道;批量、低频、调试备份类的参数用 WRREC/RDREC 非周期通信。掌握"请求参考 + 请求 ID + 参数地址列表 + 参数值列表"这套 DS47 结构,配合 INDEX = 47 和沿触发时序,即可在 G120 全系列 PN 控制单元上实现高效的参数批量读写。

纪小年

Jing

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。