博途通过 PN 周期通信读写 G120 变频器参数:PKW 通道
前言
在基于 TIA Portal 的驱动系统集成中,SINAMICS G120 与 S7-1200/1500 之间的 PROFINET 通信通常以周期过程数据(PZD)为主——控制字、主设定值下发,状态字、实际转速上传。但在很多现场场景中,我们还需要在 PLC 程序里直接读写变频器参数,例如在线修改 P1210(自动再启动)、读取 r2902 组态数据、动态修改 BICO 互联 P845 等。
本文基于西门子官方教程(CS Drive team),以S7-1200 + CU250S-2 PN、标准报文 353为例,系统讲解 PROFINET 周期通信中的PKW 参数通道的数据结构、任务/应答机制与编程实现。
一、周期通信与参数访问的两种方式
G120 中带 PN 接口的控制单元(CU240E-2PN、CU250S-2PN 等)均支持基于 PROFINET 的周期过程数据交换和参数访问。
周期过程数据交换:IO 控制器周期性向变频器发送控制字和主设定值,并周期性读取状态字和实际转速。该通信使用 PZD 通道(过程数据区),不同报文类型定义不同数量的过程数据。
变频器参数访问有两种途径:
| 方式 | 说明 | 特点 |
|---|---|---|
| ① 周期性 PKW 通道 | 参数数据区嵌入周期报文 | 每次只能读/写一个参数,长度固定 4 个字 |
| ② 非周期性通信 | 访问变频器数据记录区 | 每次可读/写多个参数,单次任务最大 240 字节 |
本文聚焦第①种——周期 PKW 通信,以组态标准报文 353 为例。
二、PKW 通道的数据结构
2.1 工作模式
PKW 通信是请求—应答模式:主站(PLC)发出请求 → 变频器处理请求 → 将处理结果应答给主站。请求和应答数据总是包含 4 个字:
| 字段 | 字 | 内容 |
|---|---|---|
PKE |
第 1 个字 | 任务 ID / 应答 ID + 参数号(PNU) |
IND |
第 2 个字 | 子索引 + 分区索引 |
PWE1 / PWE2 |
第 3、4 个字 | 参数值(32 位双字) |
2.2 第 1 个字:PKE
位 15 … 12 | 位 11 | 位 10 … 0
AK | SPM | PNU
- AK(位 12~15):任务 ID(请求)或应答 ID(应答),见下文表 1-1 / 表 1-2。
- SPM(位 11):始终为 0。
- PNU(位 0~10):参数号。
- 参数号 < 2000:PNU = 参数号;
- 参数号 ≥ 2000:PNU = 参数号 − 偏移,偏移写入分区索引(IND 位 0~7)。
表 1-1 控制器发送给变频器的任务 ID:
| 任务 ID | 描述 |
|---|---|
| 0 | 无任务 |
| 1 | 请求参数值 |
| 2 | 修改参数值(单字) |
| 3 | 修改参数值(双字) |
| 4 | 请求描述性元素¹ |
| 6² | 请求参数值(数组)¹ |
| 7² | 修改参数值(数组、单字)¹ |
| 8² | 修改参数值(数组、双字)¹ |
| 9 | 请求数组元素数量 |
¹ 所需参数元素在 IND(第 2 个字)中规定。
² 任务 ID 1≡6、2≡7、3≡8,建议使用 ID 6、7、8。
表 1-2 变频器发送给控制器的应答 ID:
| 应答 ID | 描述 |
|---|---|
| 0 | 无应答 |
| 1 | 传送参数值(单字) |
| 2 | 传送参数值(双字) |
| 3 | 传送描述性元素 |
| 4 | 传送参数值(数组、单字) |
| 5 | 传送参数值(数组、双字) |
| 6 | 传送数组元素数量 |
| 7 | 变频器无法处理任务(错误号在 PWE1 高位字中返回) |
| 8 | 无主站控制权限 / 无权限修改参数通道接口 |
常见错误号(应答 ID = 7 时 PWE1 中的错误码):
| 编号 | 描述 |
|---|---|
| 00 hex | 参数号错误(参数不存在) |
| 01 hex | 参数值无法修改 |
| 02 hex | 超出数值下限或上限 |
| 03 hex | 错误的子索引 |
| 04 hex | 没有数组 |
| 05 hex | 错误的数据类型 |
| 0B hex | 没有操作权限(另见 p0927) |
| 0C hex | 缺少密码 |
| 11 hex | 因运行状态无法执行任务 |
| 6A hex | 没有收到任务 / 不支持任务 |
| 6B hex | 控制器使能时无修改权限 |
| 86 hex | 调试时仅允许写访问(p0010 = 15) |
| 87 hex | 专有技术保护生效,禁止访问 |
| C8/C9 hex | 修改任务低于/高于当前有效限值 |
| CC hex | 不允许执行修改任务(无访问口令) |
2.3 第 2 个字:IND
位 15 … 8 | 位 7 … 0
子索引 | 分区索引
- 子下标(子索引):标识参数的下标值,如 P840[1] 中的"1"。
- 分区下标(分区索引):配合 PNU 确定参数号。例如 P2902 的分区下标 = 0x80。
参数号 ≥ 2000 时的偏移对照表:
| 参数号 | 偏移 | 分区索引 Hex |
|---|---|---|
| 0000…1999 | 0 | 00 |
| 2000…3999 | 2000 | 80 |
| 6000…7999 | 6000 | 90 |
| 8000…9999 | 8000 | 20 |
| 10000…11999 | 10000 | A0 |
| 20000…21999 | 20000 | 50 |
| 30000…31999 | 30000 | F0 |
| 60000…61999 | 60000 | 74 |
2.4 第 3、4 个字:PWE
参数值 PWE 总是以双字(32 位)方式发送,一条报文只传送一个参数值:
- 32 位值:PWE1(高位字)+ PWE2(低位字);
- 16 位值:放在 PWE2 中,PWE1 = 0;
- 8 位值:放在 PWE2 的位 0…7,PWE2 高 8 位和 PWE1 为 0。
BICO 参数(CI/CO 互联参数)的编码方式:
- PWE1 = 参数号(CI/CO 编号);
- PWE2 位 10…15 全为 1(即 3F hex);
- PWE2 位 0…9 = 参数的索引或位号。
例:r722.1 → PWE1 = 722 = 2D2 hex;PWE2 = 3F hex << 10 | 1 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 |
3.2 硬件组态
在 TIA Portal 中组态 CU250S-2 PN,报文选择SIEMENS_telegram_353, _PKW+PZD-2_2(PKW 4 字 + PZD 2 字,共 12 字节)。
3.3 程序块:DPRD_DAT / DPWR_DAT
由于报文包含 PKW 区,I/O 数据长度超过 4 字节,不能用普通装载/传送指令,必须使用DPRD_DAT(SFC14 对应)和DPWR_DAT(SFC15 对应)进行一致性数据读写,该指令需成对使用:
DPRD_DAT(读取变频器应答数据):
| 参数 | 说明 |
|---|---|
| LADDR | 变频器组态起始地址(报文 353 的硬件标识符,如 284) |
| RECORD | 读取缓存区,如P#M100.0 BYTE 12(包含 PKW+PZD) |
| RET_VAL | 执行状态,如 MW10 |
DPWR_DAT(向变频器发送请求数据):
| 参数 | 说明 |
|---|---|
| LADDR | 变频器组态起始地址(同一报文硬件标识符) |
| RECORD | 发送缓存区,如P#M200.0 BYTE 12 |
| RET_VAL | 执行状态,如 MW20 |
3.4 数据布局
MB200/MB201 → PKE (如 16#74BA:写 P1210)
MB202/MB203 → IND (子索引 + 分区索引)
MB204/MB205 → PWE1 (高位字)
MB206/MB207 → PWE2 (低位字,如 16#001A)
MB208…MB211 → PZD (控制字/主设定值,本例不用可置 0)
读回应答在 MB100 开始的镜像区,校验应答 ID(PKE 位 12…15):1/2/4/5 表示成功,7 表示错误(错误号在 PWE1)。
3.5 实验任务
- 读参数 r2902[5](B56 hex);
- 写参数 P1210 = 26(4BA hex);
- 写 BICO 参数 P845 = 722.2(34D hex)。
3.5.1 读参数 r2902[5]
r2902 参数号 ≥ 2000,必须做偏移拆分:2902 − 2000 = 902 = 386 hex 写入 PNU,偏移 2000 对应分区索引 80 hex;下标 [5] 写入子索引。读取数组参数用任务 ID 6。
| 字 | 字段 | 取值 (Hex) | 位分配 | 说明 |
|---|---|---|---|---|
| 字1 | PKE | 6386 | 位 15…12 = 6(AK,任务 ID:请求参数值(数组));位 11 = 0(SPM);位 10…0 = 386(PNU) | PNU = 2902 − 2000 = 902 = 386 hex |
| 字2 | IND | 0580 | 位 15…8 = 05(子索引,即下标 [5]);位 7…0 = 80(分区索引,对应偏移 2000) | 查偏移对照表:2000…3999 → 80 hex |
| 字3 | PWE1 | 0000 | – | 读请求不携带参数值 |
| 字4 | PWE2 | 0000 | – | 读请求不携带参数值 |
完整报文:6386 0580 0000 0000
应答检查:应答 ID = 1(单字)或 2(双字)为成功,参数值在 PWE2/PWE1+PWE2 中;若返回 7,则错误号在应答 PWE1 中。
3.5.2 写参数 P1210 = 26
P1210 为 16 位参数(参数号 1210 < 1999,无需偏移,分区索引为 0),无下标。写单字参数用任务 ID 7(修改参数值,数组、单字)。
| 字 | 字段 | 取值 (Hex) | 位分配 | 说明 |
|---|---|---|---|---|
| 字1 | PKE | 74BA | 位 15…12 = 7(AK,任务 ID:修改参数值(数组、单字));位 11 = 0;位 10…0 = 4BA(PNU) | PNU = 1210 = 4BA hex,无偏移 |
| 字2 | IND | 0000 | 位 15…8 = 00(无子索引);位 7…0 = 00(分区索引,无偏移) | 参数无下标、参数号 < 2000 |
| 字3 | PWE1 | 0000 | 参数值位 16…31 | 16 位参数高位字恒为 0 |
| 字4 | PWE2 | 001A | 参数值位 0…15 | 26 = 1A hex |
完整报文:74BA 0000 0000 001A
应答检查:应答 ID = 1 表示写入成功。
3.5.3 写 BICO 参数 P845 = 722.2
BICO(CI/CO 互联)参数按 32 位双字编码,用任务 ID 8(修改参数值,数组、双字)。PWE1 填 CI/CO 参数号,PWE2 高 6 位置 3F hex 作为 BICO 标识,低 10 位填索引或位号。
| 字 | 字段 | 取值 (Hex) | 位分配 | 说明 |
|---|---|---|---|---|
| 字1 | PKE | 834D | 位 15…12 = 8(AK,任务 ID:修改参数值(数组、双字));位 11 = 0;位 10…0 = 34D(PNU) | PNU = 845 = 34D hex,无偏移 |
| 字2 | IND | 0000 | 位 15…8 = 00(无子索引);位 7…0 = 00(分区索引) | 参数无下标 |
| 字3 | PWE1 | 02D2 | CI/CO 编号 | 连接源参数号 722 = 2D2 hex |
| 字4 | PWE2 | FC02 | 位 15…10 = 111111b(3F hex,BICO 标识);位 9…0 = 2 | 位号 2(即连接 r722.2) |
完整报文:834D 0000 02D2 FC02
PWE2 计算:3F hex 左移 10 位 = FC00 hex,再或上位号 2 → FC02 hex。漏掉这个 3F 标识是最常见错误,会返回 05 hex(错误的数据类型)。
3.5.4 发送缓存区布局
| 地址 | 内容 | 任务1 | 任务2 | 任务3 |
|---|---|---|---|---|
| MW200 | PKE | 16#6386 | 16#74BA | 16#834D |
| MW202 | IND | 16#0580 | 16#0000 | 16#0000 |
| MW204 | PWE1 | 16#0000 | 16#0000 | 16#02D2 |
| MW206 | PWE2 | 16#0000 | 16#001A | 16#FC02 |
| MD208 | PZD(控制字/设定值) | 不用可置 0 | 不用可置 0 | 不用可置 0 |
每个任务写完后,通过 DPRD_DAT 读取 MB100 开始的应答区,先判 PKE 高 4 位应答 ID,再取参数值或错误号。三个任务不能同时下发——PKW 通道一次只能处理一个请求,需按"发送 → 等应答 → 再发下一个"的顺序轮询执行。
四、工程实践要点与排错
- 优先使用任务 ID 6/7/8:数组参数(带下标)必须配合 IND 子索引;单参数时下标填 0。
- 参数号 ≥ 2000 必须做偏移拆分:如 r2902 → PNU = 2902 − 2000 = 902(386 hex),分区索引 = 80 hex。漏写分区索引是最常见的错误,会返回 00 hex(参数号错误)。
- BICO 参数别忘了 PWE2 高 6 位置 3F hex 的标识,否则返回 05 hex(数据类型错误)。
- 错误号 6B / 86 / CC通常与运行状态有关:变频器使能运行中、处于调试模式(p0010=15)或未获得控制权时,部分参数禁止修改。
- 一次只传一个参数:如需批量读写,改用非周期通信(数据记录区,单次最大 240 字节)或 RDREC/WRREC。
- 一致性读写:PKW+PZD 共 12 字节,务必用 DPRD_DAT/DPWR_DAT 整体读写,避免数据撕裂。
结语
PKW 周期通道的优势在于无需额外通信资源、与过程数据同周期刷新,非常适合在 PLC 程序中在线修改少量参数或读取诊断值。掌握"任务 ID + PNU + 分区索引 + 双字参数值"这套 4 字结构,配合 DPRD_DAT/DPWR_DAT,即可在任意支持报文 353(或含 PKW 的报文)的 G120 PN 控制单元上快速实现参数读写。