☰
Cadence原理图导出BOM全流程:从属性配置到Excel输出
2026/10/6 18:29:53 网站建设 项目流程

1. 为什么原理图导出BOM这件事值得单独写一篇

画完原理图只是完成了硬件设计的一半,真正把设计交到采购和焊接环节手里的是那份BOM表。我见过太多项目卡在"原理图没问题,但BOM导出来一堆乱码、缺料、封装对不上"这种低级环节上。Cadence作为主流EDA工具,它的BOM导出逻辑和Altium Designer、KiCad完全不是一回事——它默认走的是Report机制而不是直接生成Excel,很多人第一次用Cadence Capture CIS导出BOM时,面对那个"Bill of Materials"对话框里的各种选项,基本是懵的。

这篇内容面向的是已经能用Cadence画原理图、但每次导BOM都要折腾半天的硬件工程师,以及刚接手Cadence项目、需要快速产出规范BOM的嵌入式开发者。我会把从原理图属性配置到最终Excel落地的完整链路拆开讲,包括那些官方文档里一笔带过、但实际会卡住你半小时的细节。核心关键词覆盖:Cadence、BOM、原理图、Excel、PCB Footprint,以及导出过程中涉及的属性映射、分组规则、常见报错处理。

先说一个反直觉的结论:Cadence导BOM出问题,八成不是导出那一步的问题,而是原理图里器件属性从一开始就没填规范。导出操作本身只需要点几下,但属性字段的命名、PCB Footprint的填写方式、Value和Part Number的对应关系,这些在画图阶段埋下的雷,会在导BOM时集中爆发。所以这篇教程的顺序是:先讲清楚BOM需要哪些字段、这些字段在原理图里对应什么属性,再讲导出配置,最后集中处理那些高频报错。

2. 导出之前必须搞清楚的BOM字段与原理图属性映射

2.1 一份能直接给采购的BOM到底需要哪些列

很多人导出的BOM只有Item、Quantity、Reference、Value、Part Number这几列,拿去采购那边直接被退回来——因为没有封装信息、没有描述、没有制造商料号。一份合格的BOM至少应该包含以下字段:

字段名含义原理图对应属性是否必需
Item序号自动生成是
Quantity单板用量自动统计是
Reference位号Reference是
Value参数值Value是
PCB FootprintPCB封装PCB Footprint是
Part Number物料编号Part Number是
Description器件描述Description建议
Manufacturer制造商Manufacturer建议
Manufacturer Part Number制造商料号MPN建议

这张表不是随便列的。Quantity和Reference是Cadence自动从原理图里抓的,你不需要手动填;但Value、PCB Footprint、Part Number这三个字段,必须在画原理图时就写进器件的属性里,否则导出时那一列就是空的。我见过最离谱的情况是有人把封装信息写在Description里,导出后采购拿着Description去猜封装,直接导致贴片厂上错料。

2.2 属性字段的命名必须统一,大小写都不能错

Cadence Capture CIS的属性系统是大小写敏感的。如果你在原理图里写的是"PCB Footprint",导出配置里也必须写"PCB Footprint",写成"PCB footprint"或者"pcb_footprint"都抓不到数据。这一点和Altium的宽容度完全不同,AD里属性名差不多就能匹配,Cadence不行。

实际操作中,我建议在项目开始前就定好一套属性模板。具体做法是:在Capture CIS里打开一个空白原理图页,放置一个器件,右键Edit Properties,把上面表格里那些字段全部手动添加一遍,确认命名规范后,把这个器件存成模板或者直接复制到其他页。更稳妥的方式是用Capture的Part Manager或者CIS数据库来统一管理,但如果你只是做小项目,手动统一命名也够用。

注意:Value字段和Part Number字段不要混用。Value是给硬件工程师看的参数(比如10k、100nF),Part Number是给采购看的物料编号。有些团队图省事只填Value,结果采购拿到"10k"根本不知道买哪个封装的电阻。

2.3 PCB Footprint的填写规范直接决定后续能不能导入PCB

PCB Footprint这个字段是连接原理图和PCB的桥梁。在Cadence流程里,原理图里的PCB Footprint值必须和Allegro里实际存在的封装名完全一致,否则导入网表时会报"footprint not found"。导出BOM时虽然不校验封装是否存在,但如果这个字段填得乱七八糟,BOM到了PCB工程师手里就是一场灾难。

常见的填写错误包括:把封装名写成"0603"但实际Allegro里叫"R0603";多个器件共用一个封装但写法不统一(有的写"SOIC-8"有的写"SOIC8");还有人在这个字段里写中文描述。我的建议是建立一个封装命名对照表,所有器件的PCB Footprint值都从表里复制,不要手打。如果项目里用了CIS数据库,封装名应该由数据库统一推送,从源头上杜绝不一致。

3. Cadence Capture CIS导出BOM的完整操作链路

3.1 从原理图工程到BOM Report的入口在哪

打开你的DSN工程,在项目管理器里选中最顶层的设计文件(通常是.dsn文件),然后走菜单Tools → Bill of Materials。注意,如果你选中的是某个子图页而不是顶层设计,这个菜单项可能是灰的。这是第一个容易卡住的地方——很多人选中了某个page就去找Bill of Materials,找不到就以为软件有问题。

点击之后会弹出Bill of Materials对话框,这个对话框分几个区域:Header区域填表头信息,Line Item Definition区域定义每一行输出什么内容,Combined Property String区域是核心中的核心,它决定了每个器件的属性怎么拼成一行文本。

3.2 Combined Property String的写法与分组逻辑

Combined Property String的默认值通常是"{Item}\t{Quantity}\t{Reference}\t{Value}\t{PCB Footprint}\t{Part Number}",其中\t是制表符,用来分列。你可以根据需要增删字段,但要注意字段名必须和原理图属性名完全一致。

这里有个关键机制:Cadence会根据你选择的"Group By"字段来合并相同器件。默认是按Value和PCB Footprint分组,也就是说两个10k 0603的电阻会被合并成一行,Quantity显示2,Reference显示R1,R2。如果你希望按Part Number分组(同一物料号的不同值也合并),就把Group By改成Part Number。但要注意,如果Part Number字段有空值,这些空值器件会被分到同一组,导致BOM出现一行Quantity巨大但Reference混乱的记录。

我的经验是:Group By用"Value + PCB Footprint + Part Number"三个字段组合,这样既能合并相同物料,又不会把不同物料误合并。具体在对话框里就是把这些字段都勾上Group By。

3.3 输出格式选择:Excel、CSV还是HTML

Bill of Materials对话框底部有Output Format选项,常见的有Excel、CSV、HTML、PDF。如果你要直接给采购发Excel,选Excel格式最省事,Cadence会调用本地Excel生成.xls文件。但这里有个坑:如果你的机器上没装Excel或者装的版本和Cadence不兼容,导出会直接失败或者生成一个空文件。

更稳妥的做法是先导出CSV,然后用Excel打开另存为.xlsx。CSV是纯文本格式,不依赖Excel组件,导出成功率接近100%。导出CSV后,用Excel打开时注意选择正确的编码(通常选UTF-8或者GB2312,取决于你的系统区域设置),否则中文描述会变乱码。

输出格式优点缺点适用场景
Excel直接可用,格式保留好依赖本地Excel,可能失败本机有Excel且版本匹配
CSV稳定,不依赖外部组件需手动转Excel,编码需注意推荐首选
HTML浏览器可直接看不方便编辑快速预览
PDF适合归档无法编辑正式发布存档

3.4 导出后的Excel整理:从原始数据到可交付BOM

Cadence导出的CSV或Excel通常带有一些不需要的列,比如"Item"编号可能不连续,或者表头有多余的空行。拿到原始文件后,我一般做这几步整理:

第一步,删除空行和空列。Cadence有时会在末尾生成几个空行,直接删掉。第二步,检查Quantity列是否有异常值,比如某个器件的Quantity是0或者负数,这通常意味着原理图里有器件的属性没填完整。第三步,把Reference列按位号排序,方便焊接时核对。第四步,补充采购需要的列,比如"采购状态""替代料"等,这些Cadence不管,需要手动加。

如果你经常做这个整理动作,可以用Excel的Power Query或者写一个简单的Python脚本自动化。Python的pandas库读CSV、清洗、输出xlsx只需要十几行代码,比手动操作快得多,而且不会出错。

import pandas as pd # 读取Cadence导出的CSV df = pd.read_csv('bom_raw.csv', encoding='gb2312') # 删除全空行 df.dropna(how='all', inplace=True) # 按位号排序 df.sort_values(by='Reference', inplace=True) # 重置Item编号 df.reset_index(drop=True, inplace=True) df['Item'] = df.index + 1 # 输出整理后的Excel df.to_excel('bom_final.xlsx', index=False)

这段代码解决的是最基础的清洗需求。如果你的BOM字段更多、分组逻辑更复杂,可以在此基础上扩展。

4. 那些让BOM导出失败的常见问题与排查路径

4.1 导出后Quantity全是1,分组完全失效

这是最高频的问题。原因通常是Group By字段没选对,或者选中的字段在原理图里全是空值。比如你选了按Part Number分组,但所有器件的Part Number都没填,Cadence无法判断哪些器件相同,就只能每个器件单独一行。

排查路径:先打开原理图,随便选几个应该合并的器件(比如两个10k电阻),右键Edit Properties,确认它们的Value和PCB Footprint是否完全一致。如果一致但导出还是不合并,检查Bill of Materials对话框里的Group By设置,确保勾选的字段就是你想用来分组的字段。另外注意,Group By字段的值如果有前后空格,也会导致分组失败——"10k"和"10k "会被当成不同的值。

4.2 中文描述导出后变成乱码

这个问题出在编码上。Cadence默认用系统区域编码导出CSV,如果你的系统是中文Windows,默认可能是GB2312,但Excel打开时可能按UTF-8解析,就乱码了。解决办法有两个:一是导出时在Output Format旁边找Encoding选项,手动选UTF-8;二是导出后用记事本打开CSV,另存为时选UTF-8编码,再用Excel打开。

如果原理图里的Description字段有中文,我建议在导出前统一检查一遍,确保没有特殊字符(比如全角空格、中文引号),这些字符在某些Excel版本里会引发解析错误。

4.3 报错"Unable to find property"或导出文件为空

这个报错通常意味着Combined Property String里引用了原理图中不存在的属性名。比如你写了{MPN}但原理图里属性名是{Manufacturer Part Number},Cadence找不到就报错。解决方法是把Combined Property String里的字段名逐个和原理图属性对照,确保完全一致。

另一个可能是你选中的设计对象不对。Bill of Materials只能对顶层设计导出,如果你选中了某个Part或者某个Page,导出会失败。回到项目管理器,选中.dsn文件再试。

4.4 导出的BOM里混入了电源符号和测试点

电源符号(VCC、GND)和测试点(TP)在原理图里也是器件,默认会被导出到BOM里。但采购不需要买"GND",焊接厂也不需要焊"VCC"。解决办法是在这些符号的属性里加一个字段,比如"BOM_Ignore",值设为"YES",然后在Bill of Materials对话框的Filter选项里设置排除条件。

具体操作:在Combined Property String旁边有Filter按钮,点击后输入过滤条件,比如"BOM_Ignore != YES"。这样导出时就会自动跳过这些非实体器件。如果你用的是Cadence自带的电源符号库,可能需要手动给每个符号加这个属性,建议在项目初期就统一处理。

5. 让BOM导出一次成功的几个前置习惯

5.1 画原理图时就按BOM需求填属性

我现在的习惯是:放置任何一个器件时,第一时间把Value、PCB Footprint、Part Number、Description四个字段填完,再继续连线。这样虽然画图时多花几分钟,但导出BOM时零折腾。具体操作是放置器件后按Ctrl+E打开属性编辑器,或者直接在Place菜单里勾选"Place with Properties"。

对于电阻电容这类数量多的器件,可以用Capture的"Copy Properties"功能批量刷属性。先填好一个器件的属性,然后选中其他同类器件,右键Copy Properties,选择源器件,属性就批量复制过去了。这个功能比逐个手填快十倍。

5.2 用CIS数据库从源头保证属性一致性

如果你的团队有CIS(Component Information System)数据库,强烈建议所有器件都从数据库调用,而不是从自带库随便放。CIS数据库的好处是:每个物料的Part Number、Manufacturer、MPN、PCB Footprint都是预先审核过的,原理图工程师只能选不能改,从源头杜绝了属性填错的可能。

配置CIS需要IT和采购配合,把物料信息导入数据库,然后在Capture里配置ODBC连接。虽然前期投入大,但对于每年有多个项目的团队来说,这个投入很快就能通过减少BOM错误收回成本。

5.3 导出前跑一遍DRC和属性完整性检查

Cadence Capture有Design Rules Check功能,可以在Tools → Design Rules Check里运行。虽然DRC主要检查电气连接,但你可以在规则里勾选"Check Properties",让它顺便检查属性缺失。更直接的方式是导出BOM后,用Excel筛选空值:如果Part Number列有空单元格,说明有器件没填物料号;如果PCB Footprint列有空值,说明有器件没填封装。

我一般会在导出BOM后做三个筛选检查:Part Number为空的行、PCB Footprint为空的行、Quantity为0或空的行。这三个检查做完,BOM基本就是干净的。

6. 从BOM到采购与焊接的衔接细节

6.1 位号排序与焊接核对

Cadence导出的Reference列默认可能是按原理图放置顺序排列的,比如R1, R10, R100, R2这样。焊接厂核对位号时,这种排序很不友好。我通常会在Excel里把Reference列按自定义排序,让R1, R2, R3...R10这样顺序排列。具体操作是:选中Reference列,数据 → 分列 → 按逗号分隔,然后用Excel的排序功能按数值排序,最后再用TEXTJOIN合并回去。

如果位号数量多,手动操作太慢,可以用Python脚本处理:

def sort_refs(ref_str): refs = ref_str.split(',') # 提取字母前缀和数字 refs_sorted = sorted(refs, key=lambda x: (''.join(filter(str.isalpha, x)), int(''.join(filter(str.isdigit, x))) if any(c.isdigit() for c in x) else 0)) return ','.join(refs_sorted) df['Reference'] = df['Reference'].apply(sort_refs)

这段代码把"R10,R2,R1"整理成"R1,R2,R10",焊接厂拿到后核对效率明显提升。

6.2 替代料与多来源物料的标注

采购经常需要替代料信息。Cadence的BOM默认不包含替代料字段,但你可以自己在原理图属性里加一个"Alternative"字段,或者在导出的Excel里手动补充。我的做法是在BOM最终版里加两列:"替代料1"和"替代料2",由硬件工程师在导出后填写。这样采购在缺料时可以直接参考,不需要反复找工程师确认。

6.3 版本管理与变更记录

BOM不是导出一次就完事了。原理图每次改动,BOM都要重新导出并记录变更。我建议在BOM文件名里带上版本号和日期,比如"ProjectA_BOM_V1.2_20250115.xlsx"。同时在Excel里加一个"Change Log"工作表,记录每次变更的内容:哪个位号、改了什么、为什么改、谁改的。这个习惯在项目后期排查物料问题时特别有用。

7. 一些零散但实用的经验补充

关于Cadence版本差异:16.6和17.4的Bill of Materials对话框布局略有不同,但核心逻辑一样。17.4在Output Format里多了直接导出xlsx的选项,但底层还是调Excel组件,稳定性问题依旧。如果你用的是17.4,建议还是走CSV中转。

关于Allegro侧的BOM:有些团队习惯在Allegro里导BOM而不是在Capture里导。Allegro的BOM是基于PCB上的器件生成的,好处是能反映实际布局后的位号,坏处是如果PCB还没布局完,BOM就不完整。我的建议是:设计阶段用Capture导BOM给采购备料,生产前用Allegro导一次做最终核对。

关于Excel模板:如果你经常做BOM,可以做一个Excel模板,把表头、格式、公式都预设好,每次导出CSV后直接粘贴到模板里,省去重复排版的时间。模板里可以预设好筛选、排序、条件格式(比如Part Number为空时标红),打开就能用。

最后说一个我踩过的坑:有一次导出的BOM里,某个电容的Value显示为"0.1uF/16V",但Part Number字段是空的。采购拿着这个BOM去询价,供应商问"你要哪个品牌的0.1uF/16V",采购答不上来,因为BOM里没有制造商信息。后来发现是原理图里这个器件的Manufacturer字段没填。从那以后,我在导出BOM前一定会检查Manufacturer和MPN这两列,确保没有空值。这个检查只需要在Excel里筛选一下空单元格,花不了十秒钟,但能避免后面几天的来回沟通。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询