ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

丹佛斯FC360变频器PROFINET集成:GSDML文件解析与博途组态实战

丹佛斯FC360变频器PROFINET集成:GSDML文件解析与博途组态实战

简介:这份资源是丹佛斯FC360变频器的GSDML设备描述文件,版本为V2.3,发布日期2015年12月12日,面向从事工业自动化系统集成、现场总线组态与变频器调试的工程师及技术人员。GSDML基于XML标准,用于向控制系统提供设备的通信协议、参数设置与功能信息,是FC360接入上位机或PLC网络时不可或缺的配置依据。压缩包内共2个文件,包含1个xml描述文件和1个bmp位图文件,前者承载设备技术规格与通信参数,后者用于组态软件中的设备图标显示,整体约5KB,体积轻巧便于随项目分发。目前已有1007人学习下载,说明其在丹佛斯驱动产品调试场景中具有实际参考价值。借助该文件,读者可快速完成FC360在自动化网络中的设备识别、参数配置与故障排查,缩短系统集成与调试周期,适合需要对接丹佛斯变频器的项目人员留存备用。

1. 从一份 GSDML 文件说起:变频器接入 PROFINET 的底层逻辑

很多做自动化集成的朋友第一次拿到GSDML-V2.3-Danfoss-FC360-20151212.xml这种文件时,反应往往是“这不就是个 XML 吗,丢给博途不就完了”。结果真丢进去,要么设备目录里找不到,要么组态完下载报错,要么连上了但 PZD 数据对不上号。这份文件本质上是 PROFINET 设备的“身份证 + 说明书”,它用 GSDML(General Station Description Markup Language)描述了一台变频器在 PROFINET 网络里长什么样、支持哪些模块、每个模块的输入输出数据长度是多少、参数怎么访问。FC360 系列变频器在 PROFINET 场景下的集成,核心就靠这份文件把设备“翻译”给 PLC 听。适合谁看?做产线改造的电气工程师、搞驱动调试的现场人员、以及需要把丹佛斯变频器挂到西门子或倍福 PLC 下面的系统集成商。这篇笔记不扯虚的,直接拆文件结构、讲导入步骤、说清楚 PZD 和 PKW 怎么配、最后把几个我踩过的坑摆出来。

2. 拆开 GSDML:DeviceAccessPoint 与 ModuleItem 到底在描述什么

2.1 文件头与设备标识:谁在定义这台变频器的“户口”

GSDML 文件的开头部分定义了设备家族、版本号和供应商信息。用文本编辑器打开这份 XML,前几十行能看到<GSDML>根节点带着Version="2.3",下面紧跟<DeviceIdentity>和<DeviceFamily>。这些字段决定了博途或其它工程软件在硬件目录里怎么归类这台设备。DeviceIdentity里的VendorID和DeviceID是 PROFINET 通信建立时的硬匹配项,PLC 拿这两个值去和实际设备广播的标识比对,对不上就直接拒绝。我一般会先扫一眼<DeviceAccessPointList>,里面每个DeviceAccessPointItem代表一种通信接口形态,比如有的支持 RT 实时通信,有的支持 IRT 等时同步。FC360 这份文件里通常只有一个 DAP,ID 类似DAP-1,它规定了设备支持的最小通信周期和接口类型。如果你在博途里看到设备描述有多个“型号”可选,那就是 DAP 在起作用。改设备名称、分配 IP 这些操作,底层都是在匹配 DAP 定义的通信参数。

2.2 模块清单与 IO 数据长度:PZD 和 PKW 的映射规则

往下翻到<ModuleItemList>,这是整份文件最需要细看的地方。每个ModuleItem对应一个可插拔的模块,FC360 常见的模块包括“PZD 基本模块”“PKW 参数通道模块”“过程数据模块”等。每个模块里用<IODataItem>定义输入和输出数据长度,单位是字节。比如一个典型的 PZD 模块,输出 4 字节、输入 4 字节,对应两个过程数据字(PZD1 和 PZD2)。PZD 用来传控制字、状态字、频率设定值和实际值;PKW 用来读写变频器参数,比如加减速时间、电流限幅。关键点在于:模块的排列顺序和数量决定了 PLC 侧组态时的槽位分配。你选了哪些模块,PLC 的输入输出地址就按顺序往后排。常见做法是第一个槽放 PKW 模块(4 字输入/4 字输出),第二个槽放 PZD 模块(2 字输入/2 字输出),这样既能读参数又能控转速。如果只放 PZD 不放 PKW,参数就只能靠本地面板或其它工具改,现场调试会很不方便。

2.3 参数通道与诊断:Subslot 和 ParameterRecord 的用途

再往深处看,<ParameterRecord>和<SubslotItem>定义了参数访问的通道。PROFINET 除了周期性 IO 数据,还支持非周期性的记录数据读写,用来传参数和诊断信息。GSDML 里用ParameterRecord描述每个参数记录的索引号、数据长度和访问权限。FC360 的这份文件里,参数记录通常按功能分组,比如“电机数据”“控制参数”“报警历史”。现场用 PLC 的RDREC和WRREC指令读写这些记录时,索引号必须和 GSDML 里定义的一致,否则返回错误码。诊断部分则通过<ChannelDiag>和<Alarm>定义报警文本和严重等级。我见过有人组态完发现变频器报故障但 PLC 侧没有任何提示,就是因为 GSDML 里的诊断模块没被正确实例化。把诊断模块加到槽位里,PLC 才能收到设备的报警报文,在 HMI 上显示具体故障码。

3. 导入与组态:把 XML 变成博途里能拖拽的设备

3.1 导入 GSDML 到工程软件:路径、版本与刷新

导入操作本身不复杂,但版本匹配是第一个门槛。博途不同版本对 GSDML 版本的支持范围不一样,V2.3 的 GSDML 在较老的博途 V13 上可能提示“不支持的文件版本”,在 V15 及以上通常没问题。操作路径是:选项 → 管理通用站描述文件 → 选择源目录 → 勾选文件 → 安装。安装完成后,硬件目录里会出现“其他现场设备 → PROFINET IO → Drives → Danfoss”这样的层级。如果装完没看到,先检查文件是否放在不含中文和空格的路径下,再确认博途的硬件支持包是否更新到对应版本。我一般会先把 GSDML 文件单独放一个英文目录,比如D:\GSDML\FC360,避免路径问题导致的玄学失败。安装后建议重启一次博途,让硬件目录缓存刷新。

3.2 设备视图里的槽位分配:模块顺序决定地址

从硬件目录拖入 FC360 后,设备视图里会显示一个导轨,上面有 DAP 和若干空槽。接下来要把 GSDML 里定义的模块拖到槽里。顺序很关键:第一个槽通常放 PKW 模块,第二个槽放 PZD 模块,第三个槽放诊断模块。每放一个模块,下面的“设备概览”里就会显示对应的输入输出地址。比如 PKW 模块占 4 字节输入和 4 字节输出,PZD 模块占 2 字节输入和 2 字节输出,那么 PLC 的输入地址可能是I 68.0~I 73.7,输出地址是Q 68.0~Q 73.7。这些地址在写程序时直接引用。如果模块顺序放反了,PLC 读到的 PZD 值就会错位,比如把状态字当成实际频率读,数值完全对不上。常见做法是先在纸上画好槽位表,再往博途里拖,避免反复调整。

3.3 设备名称与 IP 分配:在线访问前的最后一步

组态完成后,需要给设备分配设备名称和 IP 地址。PROFINET 靠设备名称来识别节点,IP 地址只是辅助。在博途里右键设备 → 分配设备名称 → 在线访问 → 选择网卡 → 刷新列表 → 选中实际设备 → 分配名称。名称必须和组态里的一致,大小写敏感。IP 地址可以手动设,也可以用博途自动分配。我习惯把设备名称设成和位号一致,比如FC360-Line1-Conveyor,这样后期维护时一眼能看出是哪台。分配完名称后,设备上的 BF 灯应该从闪烁变为常亮或熄灭,表示通信建立。如果 BF 灯一直闪,先检查网线是否插在变频器的 PROFINET 口上(FC360 通常有两个网口,支持交换机模式),再确认设备名称是否分配成功。

4. 避坑与排查:PZD 错位、版本冲突和诊断丢失

4.1 现象:PLC 读到的频率值始终为 0 或跳变

原因通常是 PZD 模块的输入输出长度和实际组态不匹配。GSDML 里定义的 PZD 模块可能是 2 字输入,但你在博途里选了 4 字输入的模块,地址偏移就乱了。解决方法是回到设备概览,核对每个模块的“I 地址”和“Q 地址”长度,确保和 GSDML 里IODataItem的DataLength一致。另外,变频器侧的 PZD 映射也要检查,FC360 的参数里有一组“过程数据配置”,默认 PZD1 是控制字、PZD2 是频率设定,如果被改过,PLC 发的值就对应不上。

4.2 现象:导入 GSDML 时提示“文件版本不受支持”

这是博途版本和 GSDML 版本不匹配的典型表现。V2.3 的 GSDML 需要博途 V14 及以上,如果用的是 V13 或更早,要么升级博途,要么找供应商要低版本的 GSDML 文件。另一个可能原因是文件被修改过,比如用文本编辑器保存时改了编码格式。GSDML 文件必须是 UTF-8 无 BOM 格式,用记事本另存为时容易带上 BOM 头,导致解析失败。我一般用 Notepad++ 打开,确认编码是“UTF-8”而不是“UTF-8-BOM”,再重新导入。

4.3 现象:变频器报故障但 PLC 侧无报警显示

诊断模块没实例化是常见原因。GSDML 里定义了诊断报警的通道和文本,但如果在设备视图里没有把诊断模块拖到槽位里,PLC 就收不到报警报文。解决方法是把 GSDML 里的诊断模块(通常叫“Alarm”或“Diagnosis”)加到槽位中,并在 OB82 里写诊断中断处理程序。另外,变频器侧的报警参数需要使能“PROFINET 报警”,否则故障只显示在本地面板上,不会上传。

4.4 现象:设备名称分配成功但通信时断时续

先看网线屏蔽层是否接地良好,PROFINET 对屏蔽要求比普通以太网高。再看通信周期设置,FC360 支持的最小周期通常是 1ms 或 2ms,如果 PLC 侧设的周期小于设备支持的最小值,通信会不稳定。在博途的设备属性里把“发送时钟”改成 2ms 或 4ms 试试。还有一个容易忽略的点:如果网络里有多个 PROFINET 设备,检查设备名称是否有重复,重名会导致通信冲突。

4.5 现象:PKW 读写参数返回错误码 0xDE 或 0xDF

这两个错误码通常表示参数索引不存在或访问权限不够。先核对 GSDML 里ParameterRecord定义的索引号,确认你写的索引和文件里一致。再检查变频器参数里是否禁用了 PROFINET 参数访问,FC360 有个参数叫“参数访问 via PROFINET”,必须设为“开”。如果索引号对、权限也开了,还是报错,试试降低读写频率,PKW 通道不适合高频轮询,两次读写之间至少间隔 100ms。

5. 进阶技巧:用 TIA Portal 的 Watch Table 快速验证 PZD 映射

组态完成后,怎么快速确认 PZD 映射是对的?我一般用 TIA Portal 的监控表配合强制功能来验证。先在监控表里插入 PLC 的输入地址(比如IW68和IW70),在线后观察数值。然后手动改一个输出值,比如把控制字写成0x047F(启动命令),看变频器是否启动。如果启动,说明 PZD1 映射正确;如果不启动,把控制字改成0x047E(停止),再试0x047F,同时观察状态字的变化。状态字的 bit 2 是“运行使能”,bit 3 是“故障”,bit 6 是“禁止合闸”。这些位定义在 FC360 的手册里有,但 GSDML 里不会写,需要对照文档。

下面这段 SCL 代码是我常用的 PZD 读写封装,把控制字和频率设定值打包成输出,再把状态字和实际频率解包成输入:

// FC360 PZD 读写封装 // 输入:StartCmd (BOOL) 启动命令, SpeedSet (REAL) 频率设定 Hz // 输出:StatusWord (WORD) 状态字, ActualSpeed (REAL) 实际频率 Hz FUNCTION_BLOCK "FC360_PZD" VAR_INPUT StartCmd : BOOL; // 启动命令 SpeedSet : REAL; // 频率设定,单位 Hz END_VAR VAR_OUTPUT StatusWord : WORD; // 状态字 ActualSpeed : REAL; // 实际频率,单位 Hz END_VAR VAR ControlWord : WORD; // 控制字 SpeedRaw : INT; // 频率设定原始值 ActualRaw : INT; // 实际频率原始值 END_VAR BEGIN // 控制字 bit 10 = 1 表示由 PLC 控制 // bit 0 = 1 启动,bit 0 = 0 停止 IF #StartCmd THEN #ControlWord := 16#047F; // 启动命令 ELSE #ControlWord := 16#047E; // 停止命令 END_IF; // 频率设定值归一化:FC360 通常 16384 对应 100% 额定频率 // 假设额定频率 50Hz,则 16384 对应 50Hz #SpeedRaw := REAL_TO_INT(#SpeedSet / 50.0 * 16384.0); // 输出到 PLC 的 Q 地址(需在硬件组态里确认地址) // 这里用符号地址示意,实际使用时替换为 %QW 地址 // %QW68 := #ControlWord; // %QW70 := #SpeedRaw; // 从 PLC 的 I 地址读取状态字和实际值 // #StatusWord := %IW68; // #ActualRaw := %IW70; // 实际频率反归一化 #ActualSpeed := INT_TO_REAL(#ActualRaw) / 16384.0 * 50.0; END_FUNCTION_BLOCK

这段代码的逻辑说明:控制字0x047F是 PROFIdrive 标准里的启动命令,包含“运行使能”和“由 PLC 控制”两个关键位。频率设定值用16384对应50Hz的线性关系归一化,这是丹佛斯变频器常见的标定方式,但具体要看 FC360 的参数设置,有的场合16384对应的是最大频率而不是额定频率。参数说明:SpeedSet传入的是实际频率值,单位 Hz,代码里按 50Hz 满量程换算;如果现场额定频率是 60Hz,把50.0改成60.0即可。StatusWord的位定义需要对照手册解析,比如 bit 2 是运行使能,bit 3 是故障。实际使用时,把注释掉的%QW和%IW地址替换成博途里实际分配的地址,再在线监控。

验证完 PZD 映射后,我习惯把整个验证过程录屏或截图存档,下次换设备时直接对照。从那以后我每次导入新的 GSDML 文件,都强制走一遍“先看 DeviceAccessPoint → 再核对 ModuleItem 的 IO 长度 → 最后用监控表验证 PZD”这个流程,再也没出现过地址错位导致设备飞车的情况。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进