简介:全系列丹佛斯GSD文件是一套配置通信文件合集,面向工业自动化集成商、电气工程师和变频器调试人员,主要解决丹佛斯变频器接入PLC、SCADA等控制系统时设备描述与联网配置的问题。压缩包共收录45个文件,以18个gsd描述文件为主,另含bmp设备图示、db数据库文件和xml设备描述,合计约97KB;内容覆盖FCD 302、FC 100/200/300、FCM 300、VLT 2800/5000/6000/8000等系列,便于定位对应机型的通信参数、I/O端子定义与参数默认值。已有3610人学习下载,说明它在现场调试与系统集成中具有不错的参考价值。读者可以据此完成变频器与控制系统的兼容性核对、通信协议选型及驱动程序生成,并借助文件中的错误代码信息辅助故障排查;对于多台同型号设备的批量配置,这些文件也能提供统一依据,适合作为日常调试与项目交付的随身资料。
1. 变频器上了总线却读不到数:这套 GSD 文件补的是哪个位置
上个月协助排查一条老线,控制器挂在 PROFIBUS 上,六台丹佛斯变频器,硬件组态里从站节点全部在线,在线监控一打开,PCD 那八个字全是 0。接线、终端电阻、屏蔽接地都过了一遍,最后问题出在一份三年前拷贝的 GSD 文件上:型号名对得上,可组态里插的模块和变频器侧选的 PPO 类型根本不是一个东西,PLC 发下去的控制字落在“空槽”上,当然没反应。
这套全系列丹佛斯 GSD 文件解决的就是这件事。它把 VLT 系列变频器、MCD 系列软启动器这些从站在 PROFIBUS DP 和 PROFINET 上的通信能力,写成了组态软件能直接读的描述文件:支持哪些波特率、站地址能不能软设、输入输出各多少字节、有哪些可选模块、诊断报文多长。没有它,或者版本对不上,变频器在博途、STEP 7、CODESYS 这些软件里就是一台“不认识”的设备。
适合三类人:做老线改造要复用存量变频器的、备件替换后型号后缀变了要重新组态的、以及刚接手一套进口设备、手里只有 PLC 程序没有原始工程文件的。前者是救命,后两者是省时间。
2. GSD 文件里的四个关键字段:从 Ident_Number 到 PPO 长度
GSD 是纯文本,Windows 记事本就能打开,很多人第一次看到那一堆等号和分号会以为是乱码。其实它的结构很规整,读懂四五个字段,剩下的都是重复劳动。GSDML 是 PROFINET 的版本,XML 格式,逻辑一样,只是换了一套标签。
2.1 文件骨架:通用参数、从站参数、模块定义三段
一份标准 GSD 文件,第一行必须是#Profibus_DP,组态软件靠这行判断文件类型,改成别的前缀直接就装不进去。往下大致分三段:第一段是设备身份,厂商名、型号名、硬件软件版本、Ident_Number;第二段是通信能力,支持哪些波特率、每个波特率下的最大响应时间 Tsdr、地址是否支持软件修改;第三段是模块表,用Module=开头、EndModule收尾,一个模块一段,每一段对应一个可插拔的 I/O 组合。
#Profibus_DP GSD_Revision = 1 Vendor_Name = "Vendor" Model_Name = "FC Series PROFIBUS" Revision = "1.0" Ident_Number = 0x0D00 ; 设备识别码,组态时靠它区分同厂商不同型号 Protocol_Ident = 0 Station_Type = 0 FMS_supp = 0 ; 不支持 FMS,纯 DP Hardware_Release = "1.0" Software_Release = "1.0" ; ---- 支持的波特率,_supp = 1 表示支持 ---- 9.6_supp = 1 19.2_supp = 1 93.75_supp = 1 187.5_supp = 1 500_supp = 1 1.5M_supp = 1 3M_supp = 1 6M_supp = 1 12M_supp = 1 MaxTsdr_9.6 = 60 ; 该波特率下从站最长响应时间,单位 bit time MaxTsdr_1.5M = 100 MaxTsdr_12M = 800 Auto_Baud_supp = 1 ; 支持自动波特率识别 Set_Slave_Add_supp = 1 ; 支持由主站下发站地址 Min_Slave_Intervall = 1 Modular_Station = 1 ; 模块化从站,组态时必须插模块 Max_Module = 8 Max_Input_Len = 32 Max_Output_Len = 32 Max_Data_Len = 64 Module = "PPO-Type 3" 0x00,0x00 ; 模块名 + 标识字节 + 输入输出长度 EndModule Module = "PPO-Type 4" 0x00,0x00 EndModule上面这段是骨架示意,实际文件里的Ident_Number、MaxTsdr_*、模块标识字节都必须以厂家原始文件为准,不要手改。改Ident_Number的后果是组态软件能装上,但主站一上电就报“从站类型不匹配”,比装不上更难查。
Modular_Station = 1是最容易被忽略的一行。它意味着这台从站不是固定 I/O 长度,而是要在组态里手动插入模块,插哪个、插几个,决定了主站实际分配多少字节。丹佛斯的变频器基本都是这种模式,所以“文件装好了但设备显示灰色”或者“插槽列表里一堆陌生模块”都是正常现象,不是文件坏了。
Auto_Baud_supp和Set_Slave_Add_supp这两个开关直接决定现场调试方式。前者为 1,变频器会跟着主站的波特率走,不用手动设;后者为 1,可以在组态里直接下发站地址,省得爬进电柜按 LCP 面板。老一点的固件可能不支持软设地址,这时候只能现场改拨码或者改参数,别指望软件里改一下就行。
2.2 型号和文件的对应关系:先看选件卡,再看系列名
丹佛斯的变频器不是天生带 PROFIBUS 的,绝大多数型号要靠现场总线选件卡接入。所以挑文件的第一步不是看变频器铭牌上的系列名,而是看电柜里插的是哪张卡。常见的组合是:PROFIBUS DP 走 MCA 101 一类的选件卡,PROFINET 走 MCA 120 一类的选件卡,同一台变频器换张卡就换一套文件,型号名里的后缀也会跟着变。
| 设备类型 | 总线 | 文件类型 | 需要确认的点 |
|---|---|---|---|
| VLT 变频器(FC 系列) | PROFIBUS DP | .gsd | 选件卡型号、固件版本、支持的 PPO 类型 |
| VLT 变频器(FC 系列) | PROFINET | .xml(GSDML) | GSDML 版本号,需与组态软件版本匹配 |
| MCD 软启动器 | PROFIBUS DP | .gsd | 与变频器文件不通用,模块表不同 |
| 带内置总线接口的型号 | 视型号而定 | .gsd/.xml | 内置接口不占选件槽,参数组位置也不同 |
表格里最关键的一条是第二列和第三列的组合关系:同一台设备,走 DP 用.gsd,走 PN 用.xml,两套文件的模块命名规则完全不一样,别指望把 DP 的 PPO 概念照搬到 PROFINET 上。PROFINET 侧是槽位和子槽位模型,组态时插的是“模块 + 子模块”,报文长度由 GSDML 里的ModuleItem和SubslotItem定义,和 PPO 编号没有一一对应关系。
还有一类容易出错的场景:变频器换了主板或者升级了固件,原来的 GSD 文件虽然还能装、还能组态,但设备实际支持的模块数量变了。表现是组态里能插满八个模块,下载后从站直接报配置错误。这种情况只能换对应固件版本的文件,硬扛没用。
顺便提一句检索技巧:这个词在网上被拼成 danfass 的情况非常多,两种拼写都试一遍,能多捞出一些早年归档的文件包,尤其是那些没有正式文档页、只在论坛附件里流传的老版本。
2.3 用一段脚本把整个文件包扫一遍
拿到一套几十份的 GSD 文件,手工一个个打开看型号名和识别码不现实,更麻烦的是不同系列的文件名可能高度相似,装错一个就埋一个雷。写个十几行的脚本,把目录里所有.gsd的型号、识别码、支持波特率、输入输出长度一次性列出来,重复的识别码直接标红,比肉眼翻快得多。
import re from pathlib import Path # GSD 里的键值行:KEY = VALUE,行尾可能有 ; 注释 KV = re.compile(r'^\s*([A-Za-z0-9_]+)\s*=\s*(.+?)\s*$') BAUD_KEYS = ["9.6", "19.2", "45.45", "93.75", "187.5", "500", "1.5M", "3M", "6M", "12M"] WANT = ("Model_Name", "Ident_Number", "Revision", "Max_Input_Len", "Max_Output_Len", "Max_Data_Len") def parse_gsd(path: Path) -> dict: info = {"file": path.name, "baud": [], "modules": []} # 老 GSD 是单字节编码,用 utf-8 会直接抛异常 for raw in path.read_text(encoding="latin-1").splitlines(): line = raw.split(";", 1)[0].strip() if not line: continue if line.lower().startswith("module"): info["modules"].append(line) continue m = KV.match(line) if not m: continue key, val = m.group(1), m.group(2).strip('"') if key.endswith("_supp") and key[:-5] in BAUD_KEYS: info["baud"].append(key[:-5]) elif key in WANT: info[key] = val return info rows = [parse_gsd(p) for p in sorted(Path("gsd").glob("*.gsd"))] seen = {} for r in rows: ident = r.get("Ident_Number", "?") dup = "重复" if ident in seen else "" seen.setdefault(ident, r["file"]) print(f'{r["file"]:<28} {r.get("Model_Name",""):<32} ' f'{ident:<10} in={r.get("Max_Input_Len","?"):<3} ' f'out={r.get("Max_Output_Len","?"):<3} {dup}')这段脚本有三个参数值得改。encoding="latin-1"不能换成 utf-8,早期 GSD 里常有带重音的厂商注释,utf-8 解码会中断;line.split(";", 1)只切第一个分号,避免把值里的分号也切掉;WANT里的字段名按需增减,比如想核对诊断长度就加上Max_Diag_Data_Len。
输出结果里,in和out两列是模块化从站的上限,不是实际分配值,真正决定通信字节数的是组态里插了哪几个模块。所以这个脚本的用途是“排重和初筛”,不是“定配置”。我一般还会加一步:把modules列表也打出来,同一个系列不同固件的模块名往往只差几个字符,肉眼很难发现。
3. 从文件到在线:把丹佛斯变频器挂上 PROFIBUS/PROFINET 的完整链路
文件找对了只是第一步,真正让人返工的是组态侧和设备侧的参数没对齐。整条链路可以拆成三段:型号确认、文件安装与模块组态、变频器参数与 PCD 配置。任何一段错位,现象都是“在线但没数据”,看起来一模一样,排查方向完全不同。
3.1 三对齐:型号、选件卡、固件
动手之前先做三件事,顺序不能反。第一,断电后打开柜门看选件卡丝印,确认是 DP 还是 PN,这一步决定用.gsd还是.xml;第二,用 LCP 面板进参数菜单看固件版本号和选件卡识别状态,有些卡插上了但没被识别,参数组里根本看不到总线相关菜单;第三,对照文件包里的版本说明,挑型号名、选件卡类型、固件版本三者都匹配的那一份。
常见做法是先在 LCP 上翻一遍通信参数组,确认站地址、协议选择这些参数存在且可改。如果整个通信参数组都是灰的,说明选件卡没被识别,这时候装什么 GSD 都没用,先解决硬件识别问题。识别正常的话,站地址参数应该能读到当前值,出厂一般是某个固定数字,需要改成主站规划的空闲地址。
固件版本这一项最容易被跳过。同一系列变频器,固件从早期版本升到后期版本,支持的模块数量、PPO 类型范围都可能变。文件包里的文件如果按固件分目录存放,就按目录挑;如果混在一起,就用上一节的脚本把Revision和Software_Release打出来对照,别只看文件名。
3.2 组态软件里安装文件与插入模块
以常见的博途为例,路径是“选项 → 管理通用站描述文件(GSD)”,选源目录,勾选要装的文件,安装。装完在硬件目录的“其他现场设备”下会多出厂商节点,展开就能看到设备。这里有个版本兼容的硬限制:GSDML 的版本号必须低于或等于组态软件支持的版本,V2.4 的 GSDML 装进只支持 V2.3 的老版本软件里,要么直接报错,要么装上了但设备描述不完整,组态时缺模块。
装好之后拖动设备到网络视图,分配站地址。如果 GSD 里Set_Slave_Add_supp = 1,这里的地址会随配置下发;如果是 0,就得回到变频器面板手动设成一样的值,两边不一致的表现是主站报“从站无响应”,但变频器自己的面板上看不出任何异常。
接下来是插模块,这是整个流程里最容易错的一步。设备拖进来默认是空的,必须从右侧硬件目录里把 PPO 类型模块拖到第一个插槽。插几个、插哪种,取决于变频器侧准备用哪种 PPO。组态里插 PPO 3,变频器侧就必须选 PPO 3;插了两个模块而设备侧只配了一个,下载后从站直接报配置不一致。模块顺序也有讲究,第一个模块决定输入输出的起始地址偏移,顺序反了数据整体错位。
提示:装完 GSD 后在硬件目录里搜不到设备,先检查文件是不是放进了带中文或空格的路径,再检查文件扩展名有没有被浏览器改成
.txt。这两个原因占了我遇到的安装失败的一大半。
3.3 变频器侧参数:协议、站地址、PCD 配置
组态侧插好模块,回到变频器面板改参数。核心是三项:通信协议选择、站地址、PCD 读写配置。协议选择决定变频器按哪种报文格式解释收到的数据,选错了主站发下来的控制字会被当成别的含义;站地址必须和组态里分配的一致;PCD 读写配置决定哪几个参数被映射到过程数据通道里。
PCD 配置是整个链条里最需要耐心的地方。它是一组列表参数,每一项对应过程数据里的一个字,顺序就是报文的字序。比如读回侧第一个字配成状态字、第二个字配成实际转速,那 PLC 侧解析时第一个字就是状态字,第二个字是转速,不能颠倒。写下去的控制字和给定值同理,第一个字是控制字,第二个字是给定。
实际操作时,我一般先在纸上列一张两行的表,一行写“主站 → 变频器”的字段顺序,一行写“变频器 → 主站”的字段顺序,然后照着表在 LCP 上一项一项填。填完再回头看组态里插的模块长度,两个方向各几个字,必须和 PCD 配置的项数一致。这一步多花五分钟,能省掉后面半小时的在线排查。
参数编号在不同固件里会有些微调,所以不建议死记编号,而是按菜单名找。通信参数一般在专门的参数组里,PCD 读写配置在总线相关的那一组,进去以后按“读配置”“写配置”这样的名字定位,比记数字可靠。
3.4 下载、上线与第一帧数据验证
下载前先确认主站侧的波特率和从站一致。GSD 里声明支持自动波特率的设备,从站会自己跟上;不支持的就必须在两边设成同一个值。波特率不匹配的典型现象是设备时而在线时而不在,或者干脆连不上,诊断缓冲区里刷一堆总线错误。
下载完成、总线进入数据交换状态后,别急着看变频器转不转,先验证第一帧数据。做法是打开监控表,直接读输入区的第一个字,看它是不是一个合理的状态字值,而不是 0 或者 0xFFFF。0 通常意味着没有数据交换,0xFFFF 通常是模块没插或者长度不对。
验证状态字的位定义,可以写一小段解析逻辑,把常用位拆出来单独看:
// 状态字位解析示例:位定义以对应固件手册为准,不同 profile 有差异 FUNCTION "FC_StatusDecode" : Void VAR_INPUT stw : Word; // 从站上传的状态字 END_VAR VAR_OUTPUT ready : Bool; // 就绪 running : Bool; // 运行中 fault : Bool; // 故障 warning : Bool; // 报警 END_VAR BEGIN #ready := (#stw AND 16#0001) <> 0; #running := (#stw AND 16#0004) <> 0; #fault := (#stw AND 16#0008) <> 0; #warning := (#stw AND 16#0080) <> 0; END_FUNCTION这段逻辑本身很简单,关键在于位定义必须对着本型号的手册核对,不能凭印象。不同 profile 下同一个位可能是“就绪”也可能是“电压使能”,混用会导致判断完全反过来。参数stw是从站上传的第一个字,如果你的 PCD 配置把状态字放在第二位,那这里要跟着改成第二位。
状态字有合理值之后,再验证写通道:给一个很小的给定值,看变频器面板上的频率给定是否跟着变。跟着变说明写通道通了;不变就回到 3.3 检查写配置和模块长度。这一步过了,才算通信链路真正打通。
4. 排查:五个在现场让我返工的 GSD 组态问题
下面这五个问题,现象高度相似,都是“在线但数据不对”,但根因分布在文件、组态、参数三层。我按排查成本从低到高排,遇到问题时按这个顺序过一遍,能少走不少弯路。
4.1 PPO 类型对不上,PCD 全是 0
现象:从站在线,诊断缓冲区没有报错,监控表里输入区八个字全是 0,PLC 写下去的控制字没有任何反应,变频器面板也看不到给定变化。
原因:组态里插的模块和变频器侧选的 PPO 类型不一致。比如组态插的是三字进三字出的类型,设备侧配的是两字进两字出,主站按三个字发,设备只认前两个,第三个字落在空处,而设备上传的两个字因为长度不匹配被丢弃。
解决:先数长度。组态里模块的输入输出字节数,除以 2 得到字数,和设备侧 PCD 读写配置的项数逐项对比,必须完全相等。不相等就统一到一种类型,改完重新下载,两边都要重新上电一次,别指望热改生效。
4.2 文件版本与固件错位,模块插不进去
现象:设备能拖进网络视图,站地址能分配,但硬件目录里可用的模块数量和预期对不上,有的模块拖进去报“模块不适用于该设备”,或者插满之后下载报配置错误。
原因:用的 GSD 文件对应的是另一个固件版本,模块表的数量和标识字节不同。老固件可能只支持两三种模块,新文件里列了七八种,组态软件按文件来校验,自然拒绝。
解决:按 3.1 的三对齐重新挑文件。如果实在找不到对应版本的,退而求其次用相邻版本,但要接受模块数量可能减少,功能上做取舍,别硬凑。
4.3 同一识别码装了多份,组态选错设备
现象:一切正常,就是某个参数读不上来,或者切换控制源之后不生效,查参数组发现设备行为和手册对不上。
原因:文件包里同一个识别码存在多份不同 Revision 的文件,先装的旧版本没卸载,组态时从硬件目录里挑中的是旧那份。组态软件按识别码匹配设备,但组态内容来自文件,文件错则行为错。
解决:装之前先用 2.3 的脚本排重,同一个识别码只保留一份。已经装乱的,在组态软件的 GSD 管理里删掉重新装,别在原基础上覆盖。
4.4 字序颠倒,频率读出离谱值
现象:状态字正常,转速读出来是一个明显不合理的数,比如几万转或者负数。
原因:过程数据是 16 位字组成,变频器侧和 PLC 侧的高低字顺序不一致。两个字拼成一个 32 位值时,顺序反了就会出现这种数量级错误,而且不报任何错。
解决:先确认实际值是 16 位还是 32 位。16 位值不存在字序问题,出现离谱值说明读的字段位置本身错了;32 位值要用交换指令把高低字对调后再拼,或者在解析函数里统一处理。
4.5 中文路径导致安装失败或组态丢失
现象:GSD 安装时提示文件读写错误,或者装完之后重启软件,设备从硬件目录里消失。
原因:文件放在带中文或空格的路径下,部分组态软件在解析 XML 描述时会因为路径编码问题读不全。
解决:把 GSD 文件统一放到纯英文、无空格的目录,比如盘符根目录下的一个短名文件夹。这个坑我在不同软件上遇到过不止一次,属于典型的浪费时间,改了路径就好。
5. 通信体检:用状态字和 PKW 通道判断链路是否真的通了
组态下载成功、从站在线,只能说明总线层面的握手完成了,不代表过程数据真的在正确交换。我习惯用三层体检法,从便宜到贵依次是:看状态字、看诊断长度、看参数通道。
第一层看状态字。把输入区第一个字按位拆开,对照手册确认每一位的含义,重点看就绪位和故障位。如果状态字是一个固定值且不随设备状态变化,说明数据通道是死的,别再往下查参数通道,先回去看模块和长度。
第二层看诊断。模块化从站在组态里一般会分配一个诊断字节,设备侧有异常时这个字节会变化,主站侧读到的诊断报文长度也会跟着变。如果 GSD 里声明的诊断长度是固定值,而实际读到的字节数不对,基本可以判定文件版本和设备不匹配。这一层比状态字更能定位问题,但需要组态软件支持查看原始诊断报文。
第三层是参数通道。大多数 PROFIBUS 变频器的报文里,除了过程数据还有一段参数通道,用来按需读写设备参数,不需要停机。判断方法很简单:用参数通道去读一个只读的实时量,比如直流母线电压或者电机实际电流,读回来的值在一个合理范围内,说明整条链路从物理层到应用层都是通的。读回来是 0 或者固定不变,说明参数通道没配好,通常是报文头里参数通道的长度和 GSD 声明的不一致。
| 体检层 | 观察对象 | 正常判据 | 异常指向 |
|---|---|---|---|
| 状态字 | 输入区首字 | 随设备状态变化 | 模块长度或 PCD 配置 |
| 诊断 | 诊断字节与报文长度 | 与 GSD 声明一致 | 文件版本与固件 |
| 参数通道 | 只读实时量 | 数值合理且刷新 | 报文头长度配置 |
三层都过完之后,还有一个我几乎每次都会做的小动作:把这套配置的 GSD 文件名、固件版本、PPO 类型、PCD 读写配置项数记在一个文本文件里,和设备编号一起贴在电柜门内侧。听起来很土,但下一次有人来维护,或者三年后自己再来一次,这几行字能省掉一整个下午。
血泪经验是,我早年吃过一次亏:同一批六台设备,最后一台的 PCD 写配置少填了一项,前五台跑得好好的,就那一台给定不变,查了整整一天。从那以后我每次上电前都强制走一遍“数长度”这一步,组态字节数除以二,和设备侧项数逐项对,对不上就不下载。这套动作花不了两分钟,但能挡住绝大多数在线不通信的问题。希望帮到你。
本文还有配套的精品资源,点击获取