☰
Altium Designer BOM 整理与导出:参数治理、模板配置与交付对账
2026/9/29 5:15:22 网站建设 项目流程

画完板子、DRC 跑绿、Gerber 打包发走,很多人以为项目就结束了。等采购那边回消息说"BOM 里少了两个 0.1uF,还有三个料号是空的",你才回头翻原理图,发现导出的是两天前那版、而且封装列里躺着几个空值。这类返工我干过不止一次,后来才明白一件事:BOM 不是原理图的副产品,它是一份独立的交付物,得当成产品来做。

这篇就把 Altium Designer 里整理并导出 BOM 这件事完整拆一遍。从元件参数怎么治理、Bill of Materials 对话框里哪几个开关真正决定成败、Excel 模板的字段映射怎么玩、一直到 PCB 侧的 BOM 和坐标文件怎么配套交付。不管你是刚画完第一块两层板的新手,还是被贴片厂催过料的老手,下面这些操作都能直接照着跑。

1. 交付前夜才发现缺料:先搞清楚这份 BOM 到底给谁看

BOM 这个词在项目里出现的频率极高,但真正被认真对待的次数很少。多数人的做法是:画完原理图,转完 PCB,顺手 Reports 里导出一下,Excel 打开看一眼位数对不对,保存,发出去。问题在于,"看一眼位数对不对"这个动作,能覆盖的检查项不到实际风险的三成。

1.1 采购、贴片厂、维修工程师看的是同一份表,关注点完全不同

采购拿到 BOM 第一眼看的是料号和数量。他需要知道每一行能不能买到、有没有替代、最小包装量(MPQ)是多少。你的表里如果只有 Comment(比如写着100nF)而没有厂牌和料号,采购就得拿着封装和容值去猜,猜错就是买错。

贴片厂(SMT)拿到 BOM 第一眼看的是位号和封装。他要跟自己的坐标文件(Pick and Place)做匹配,位号对不上就贴不上。他还在意位号的排序方式——按位置排还是按字母排,直接影响上料和核对效率。

维修工程师或者一年后的你自己,看的是描述和版本。R23到底是 10K 还是 4.7K、是 1% 还是 5%、0603 还是 0805,这些信息如果只存在于你的脑袋里,那这份 BOM 就是废的。

所以一份能直接交付的 BOM,最少要有这几类字段:

字段类别典型列名作用
标识Designator(位号)唯一识别,贴片厂对坐标用
规格Comment、Value、Description人看的规格描述
物理Footprint、Package决定焊接和库存
数量Quantity采购下单依据
溯源Manufacturer、MPN、Supplier、SPN采购下单的直接输入
状态Fitted / DNP区分装配与不装配

这六类字段里,前三类 AD 默认就有,后三类必须自己建参数补进去。这就引出了后面第二章要讲的核心工作——元件参数治理。

提示:不要指望一个 Comment 字段同时承担"人能看懂"和"采购能下单"两个职责。Comment 是给人看的,MPN 是给系统用的,这两个从设计一开始就应该分开。

1.2 原理图 BOM 和 PCB BOM 的差别,比你想的大

AD 里导出 BOM 有两条完全不同的路径,一条在原理图编辑器(Reports » Bill of Materials),一条在 PCB 编辑器(Reports » Bill of Materials)。新手最容易犯的错是把两条路径当成同一件事的两种入口,实际上它们的输出结果可能差很多。

原理图侧导出的是"设计意图":只要原理图上画了,哪怕还没转 PCB、哪怕 PCB 上被删了,它都会出现在 BOM 里。PCB 侧导出的是"实际布局":只统计真正放在板子上的元件,原理图上画了却没导入的元件不会出现。

对比项原理图侧 BOMPCB 侧 BOM
数据来源工程编译后的元件数据库当前 PCB 文档中的元件实例
是否含未转 PCB 的元件含不含
多子件元件的位号显示 U1A、U1B、U1C、U1D通常显示为 U1
是否反映变体支持,可选变体导出只反映主变体
主要用途采购、备料、正式 BOM快速核对板上有哪些料

那到底该用哪个?我的习惯是:正式交付给采购和贴片厂的 BOM,一定用原理图侧导出。原因是原理图侧能带变体、能带完整参数、能按图纸筛选,而且它的分组逻辑是可控的。PCB 侧的 BOM 更适合自己核对——比如怀疑某个料在转 PCB 的时候掉了,PCB 侧导一份出来一比就知道。

有一种情况例外:如果这块板子是别人给你的 PCB 文件、你没有原理图(只有 .PcbDoc),那 PCB 侧导出就是唯一选择。这时候要额外注意位号后缀和封装来源的准确性,因为 PCB 里的封装信息是直接从封装库实例带的,跟原理图的库引用可能已经脱节。

1.3 导出之前先 Compile,Message 面板里的红字一个都别放过

这一步被跳过的概率极高,但它是所有 BOM 问题的源头。AD 是"编译驱动"的工具,元件数据库不是实时同步的,而是在你执行编译(Project » Compile PCB Project)时重建的。如果你改完原理图参数没编译就导出 BOM,导出来的很可能是上一次的旧数据。

编译之后打开 Message 面板,重点看三类消息:

  • Duplicate Component Designators(位号重复):这是 Warning 级别,但它是致命的。两个元件都叫 R5,BOM 里就会出现两个 R5 行,贴片厂直接懵。处理方式是 Tools » Annotation » Annotate Schematics Quietly,或者先 Reset Duplicate Schematic Designators 再重新标注。
  • Component has no footprint(元件没有封装):导出的 BOM 里封装列是空的,采购拿到手不知道买 0603 还是 0805。这个要靠 Tools » Footprint Manager 一次性排查,面板里可以按封装排序,空封装会集中排在前面。
  • Net has no driving source 之类的电气告警:跟 BOM 关系不大,但编译不干净的时候偶尔会影响元件信息的完整性,顺手清掉没坏处。

还有一个容易被忽略的:新放置的元件默认位号是R?C?U?。如果没执行标注,这些问号会原样进 BOM。判断方法很简单,导出后在 Excel 里搜一个?就全露出来了。

2. 元件参数治理:BOM 好不好用,八成取决于这一步

导出 BOM 这个动作本身只花两分钟,真正花时间的是它之前的准备工作。我见过太多项目,导出对话框点了十几次、模板改了七八版,最后发现问题根本不在导出环节,而是元件库里压根没有这些参数。

2.1 Comment、Description、LibRef 三者到底谁该放什么

AD 里每个元件天然带三个"名字"类字段,很多人分不清它们的职责,结果 BOM 里三列内容混在一起。

Comment是原理图上显示的那串字,也是 BOM 里最常被当作规格列的字段。对电阻电容来说,放10K、100nF是合理的;对 IC 来说,放型号比如STM32F103C8T6也说得过去。

LibRef(Library Reference)是元件在库里的符号名。它会自动进 BOM,但内容往往是RES-0603这种库内部命名。这一列对采购没意义,建议在 BOM 配置里去掉,或者把它作为辅助列放在最后。

Description是自由文本描述,很多人懒得填。但恰恰是这一列,在维修和替换的时候最有用。比如一个MOLEX 53398-0471的连接器,Comment 是料号,Description 写"4Pin 1.25mm 立贴座",采购和维修都能一眼对上。

我的实践是:Comment 只放最核心的规格或型号,Description 放完整的中文/英文描述,LibRef 不进正式 BOM。这样做的好处是 BOM 表头干净,每列职责单一,后面要按 Comment 分组也不容易出岔子。

2.2 用 Parameter Manager 一次性补齐 MPN 和供应商信息

一个一个双击元件改参数,五十个元件能耗掉一下午。AD 里真正好用的工具是Tools » Parameter Manager(在原理图编辑器菜单下),它会把整个工程所有元件的所有参数拉成一张大表,按行按列随便改。

打开之后你会看到几个下拉框:上面的 "Parameter" 下拉可以筛选只显示某一类参数,比如只看Manufacturer Part Number;下面的 "Component" 下拉可以限定范围,比如只看某个图纸的元件。表格里双击单元格就能编辑,改完点 OK,AD 会把修改写回所有元件——注意这一步会影响所有被改动的元件,操作前最好先存一份备份或者确认在版本控制下。

Parameter Manager 还有一个非常实用的功能:导出到 Excel 和从 Excel 导入。它的对话框里有 Export 按钮,可以把当前参数表导出成 Excel 文件,你在 Excel 里用查找替换、VLOOKUP 批量填好 MPN 和供应商信息,再 Import 回来。这个过程需要小心两点:导出文件不要改动行顺序和元件唯一标识列,否则导入时会错位;导入前先把工程备份一份,因为这是批量写操作,没有撤销。

提示:Parameter Manager 的导入是按"元件唯一 ID + 参数名"匹配的,所以你新增一个参数列的时候,所有元件都会新增这一列(值为空),这是正常的。不要手动去删空值,删不干净反而容易留下隐患。

2.3 批量修改的三种姿势:Find Similar Objects、SCH List、Parameter Manager

不同场景用不同工具,选错了会平白多花几倍时间。

Find Similar Objects(右键元件 » Find Similar Objects)适合"改一批同类元件的同一个属性"。比如你想把所有 0603 电阻的Tolerance参数统一设成1%,就可以先用它筛选出所有Comment以R开头的元件,然后在 Properties 面板里一次性修改。注意筛选条件要慎用 "Any" 和 "Same",选错范围会误伤全图元件。

SCH List 面板适合"在一大片元件里逐行核对"。它把选中元件的关键属性列成表格,支持排序和多列编辑。配合 SCH Filter 面板写过滤表达式(比如IsComponent加上参数条件),可以快速定位"没有填 MPN 的元件"这类目标。

Parameter Manager适合"整体性的参数治理",也就是前面说的那种场景——一次性给全工程补齐某一类参数。

三者不是互斥的,实际项目里我一般是这个顺序:先用 SCH Filter 加 SCH List 找出所有缺失参数的元件,再用 Find Similar Objects 做小批量修正,最后用 Parameter Manager 做全局的 MPN 补齐和导出核对。

2.4 多子件元件(U1A/U1B)在 BOM 里的正确表现

这是 BOM 里最隐蔽的一个坑。一颗 LM324 在原理图上会被拆成 U1A、U1B、U1C、U1D 四个门,如果库里做成了四个独立元件(而不是一个多子件元件的四个 Part),BOM 里就会堂堂正正地出现四行 LM324,数量各为 1。采购按这个下单,你就多买三颗芯片。

判断方法很直接:看位号有没有 A/B/C/D 后缀。有后缀说明是多子件元件,没有后缀的独立元件数量就是真实数量。

如果你发现多子件元件的数量算成了 4,排查方向有两个:一是分组键里混进了跟 Part 相关的字段(比如把Designator当成了唯一分组键),二是这颗料在库里确实被拆成了四个独立元件,需要重新做库。

正确的做法是:分组键里用Comment或者Manufacturer Part Number,让 U1A~U1D 落到同一组里,这样 BOM 里位号列会显示成U1A, U1B, U1C, U1D,而数量列只算 1。这个规则在下一章的 Group By 里会详细展开。

3. Bill of Materials 对话框里那几个真正决定成败的开关

打开 Reports » Bill of Materials,弹出来的对话框左右两栏看着挺唬人,但真正需要动的只有几个地方。剩下的大部分选项,默认值就是对的,乱动反而出事。

3.1 Group By 怎么组合才不会把 0603 和 0805 混在一起

对话框上方是分组区,默认可能什么都不分,也可能已经按Comment分好了。这里的选择直接决定 BOM 有多少行、每行代表什么。

先说一个绝对不能用的组合:只按 Comment 分组。原因很直接——100nF这个 Comment 在板子上往往同时存在 0402、0603、0805 三种封装版本。只按 Comment 分组,这三种会被合并成一行,数量加起来是总数,位号混在一起。采购按这一行下单,买回来的封装对不上,贴片厂上不了料。

那该怎么组合?我的默认方案是Comment + Footprint两列分组。这个组合能保证:同容值同封装的料合成一行,不同封装自动分家。对于绝大多数电阻电容电感,这个方案就够了。

对 IC 和连接器这类"一品一料"的器件,Comment + Footprint也能用,但如果你的 Comment 命名不太规范(有的写型号有的写功能),建议再加一个Manufacturer Part Number作为分组键。加了 MPN 之后,分组粒度最细,绝不会误合,代价是 BOM 行数会多一些——但只要 MPN 填得全,行数多不是问题,漏料才是问题。

分组键加得越多,BOM 越"保险"但也越"碎"。我的建议是分场景:打样阶段用 Comment + Footprint 就够了,重点是快速看清板上有哪些料;量产阶段加上 MPN,确保采购下单不出歧义。

3.2 Columns 配置与 Quantity 的算法真相

对话框右边的列配置区域决定了 BOM 里出现哪些列。这里建议做一次减法:把所有默认列看一遍,用不到的删掉。LibRef、Physical Designator、Source Designator这类列,对采购和贴片厂都没有价值,留着只会增加误读概率。

重点说 Quantity 这一列,它的算法有几种情况需要搞明白。

  • 分组后的 Quantity,本质上是这一组里有多少个可装配单元。
  • 对于普通元件(一个位号一颗料),Quantity 就是组内元件数。
  • 对于多子件元件,Quantity 应该是 1(因为只有一颗物理芯片),但位号列会列出所有子件。如果这里算成了 4,回到 2.4 节排查。
  • 如果工程里存在 Not Fitted(不装配)的元件,而你又没有把 Fitted 状态加进分组键,Quantity 会把不装的也算进去,导致多买料。

第二种和第三种情况是最常见的数量错误来源。我的处理习惯是:永远把 Fitted 状态单独作为一列输出,而不是塞进分组键。输出之后在 Excel 里用公式统计真实需求量(比如=IF(Fitted="Yes", Quantity, 0)),这样既保留了不装配元件的完整信息,又能得到准确的采购数量。

还有一个细节:在对话框的 Options 区域有一个"Include only components from this sheet"(只包含当前图纸的元件)选项。多图纸工程导出整机 BOM 的时候,这个选项绝对不能勾,勾了之后你只会得到当前打开那一张图纸的元件。这个坑我踩过,导出后行数只有预期的三分之一,排了半天以为是编译问题,最后发现是这个勾。

3.3 虚拟元件、机械件、测试点怎么排除

板子上总有一些"不是料"的东西出现在 BOM 里,典型的有几类:

  • 测试点(Test Point):位号 TP1、TP2,实际是焊盘,不需要采购。
  • 安装孔、定位柱、Logo 图形:这些通常是以机械元件或自由焊盘形式存在,如果被做成了原理图元件,就会混进 BOM。
  • 螺丝孔、屏蔽罩框架:这类属于结构件,有些公司需要单独一份"结构件 BOM",和电子料分开。

处理方式有三种,按场景选:

第一种是在原理图里就做隔离。给这些虚拟元件加一个专属参数,比如BOM_Exclude = Yes,然后在 BOM 对话框里用过滤条件排除。这种方式最干净,缺点是依赖于设计规范。

第二种是在 BOM 对话框里临时排除。在列配置里把这类元件的分组行手动去掉(有些版本支持取消包含)。缺点是每次导出都要重新做一遍,无法固化。

第三种是在 Excel 里删。导出之后按位号前缀(TP、MH、LOGO)筛一遍,手工删掉。这是最土但最快的方式,样机阶段我一直这么干。

真正省事的是把第一种做成规范。我在自己的元件库模板里,给所有非采购件都预置了BOM_Exclude参数,默认值为空,需要排除的填Yes。这样一套模板走下来,后面的导出环节几乎不用动脑子。

3.4 Fitted 与 DNP:同一块板子的两种装配状态

DNP(Do Not Populate,不贴装)在项目里出现的场景很多:做兼容设计的时候,同一块 PCB 通过贴不贴某些料来区分型号;或者调试阶段想留几个位置先不焊,方便后面改。

AD 里给元件设置 DNP 有两种方式:一是在元件的 Properties 面板里把 Fitted 改成 Not Fitted;二是通过变体管理(Variant),在某个变体下把指定元件设为 Not Fitted。这两者的区别是:Properties 里改的是元件本身的属性,对所有变体生效;变体里改的只影响那个变体。

BOM 导出的时候,这两种情况都要处理对:

  • 元件本身 Not Fitted 的,Quantity 不应该计入采购数量,但位号最好保留在表里,加个标记说明。
  • 变体里的 Not Fitted,只在该变体的 BOM 里体现,导另一个变体的时候它又是装配的。

实操建议是:永远在 BOM 里输出一列 Fitted 状态,列名可以叫Fitted或者装配。然后在 Excel 里生成两张表——一张是完整 BOM(含不装配项,用于技术归档),一张是采购 BOM(只用装配项,数量准确)。两张表都从同一个源导出,避免版本撕裂。

4. 用 Excel 模板把排版工作一次性干掉

AD 默认导出的 Excel 是"裸数据",表头是英文列名,列顺序按对话框里的排列,没有公司抬头、没有页脚、没有合并单元格。如果每次导出都要手工调整格式,那这部分工作应该被模板化。

4.1 AD 模板的字段映射机制拆解

AD 的 BOM 模板本质上是一个 Excel 文件,里面用"占位符"标出哪些位置该填哪个字段。AD 导出时会扫描模板里的占位符,用实际数据替换。

占位符的识别机制是Excel 的命名区域(Named Range)。具体操作是:在模板里选中一个单元格,然后在 Excel 左上角的"名称框"里输入字段名(比如Designator),回车。这个单元格就被命名为Designator。AD 导出时会把 BOM 数据里 Designator 这一列的内容,从这一行开始逐行填下去。

单元格里同时保留字段名文本(比如直接写上Designator),一方面是可读性,另一方面部分版本的 AD 也会识别单元格内容作为兜底。不同版本的 AD(17、19、20、21、23、24)在模板解析上有细微差异,所以最稳妥的做法是:从 AD 自带的模板复制一份改,而不是从零新建。

AD 自带的 BOM 模板一般在安装目录或公共文档目录下的Templates\BOM Templates\里,文件名类似BOM - Default.xlt。找到它,复制到你的工程目录或者一个固定的模板目录下,再改。

4.2 从 AD 自带模板改起:一步步做出自己的模板

具体步骤我按顺序列一遍,都是实打实能跑的:

  1. 找到 AD 自带模板文件,复制一份到工程同级的Templates文件夹,重命名为BOM-Template-公司名.xlt或.xlsx。
  2. 用 Excel 打开,把第一行改成你想要的中文表头(比如"位号""规格""封装""数量""料号")。注意:中文表头只是显示文本,真正起作用的是单元格的命名区域,不要为了改表头把命名删掉。
  3. 逐列检查命名区域。选中 BOM 数据区的第一行单元格,看名称框里是不是Designator、Comment、Footprint这类字段名。缺哪个补哪个,多的删掉。
  4. 设置数据行的格式。比如料号列设为"文本"格式,防止1E10这种被 Excel 当成科学计数法;位号列设为自动换行、左对齐。
  5. 在数据区上方加表头行(公司名、项目名、版本、日期),这些是静态文本,AD 不会动它们。如果想让它们动态,可以用 AD 的项目参数(比如=ProjectName)做命名映射,但这一步对新手来说可以跳过。
  6. 保存为.xlt或.xlsx。注意.xltx(Excel 2007 之后的模板格式)在部分 AD 版本里不识别,用.xls系列的兼容性最好。
  7. 回到 AD 的 Bill of Materials 对话框,在底部的 "Export With Template" 下拉里选择你的模板(如果没有,点旁边的浏览按钮指定文件路径),然后点 Export 导出验证。

导出之后打开文件,重点验证三件事:数据行是否从正确的行开始填充、字段是否落到了正确的列、多行数据是否自动扩展。这三件事过了,模板就基本可用。

注意:模板里的数据区不要预先填满格式化的空行,让 AD 按需扩展即可。如果预先填了 100 行边框,AD 填了 20 行数据,剩下的 80 行空边框也会被保留,导出文件看着很怪。

4.3 模板导出踩到的几个典型报错与排查

模板用起来之后,常见的问题其实就那几个,我列一张表方便对照排查:

现象大概率原因处理方式
导出后是空白表模板里没有命名区域,或命名区域与字段名大小写不一致检查名称框,字段名必须与 AD 列名完全一致
只有一行数据数据区第一行之外没有可扩展空间,或模板被识别成了单行确保数据区下方为空,不要有合并单元格
中文字段名不识别AD 只认英文内部字段名中文只做显示表头,命名区域仍用英文
料号列变成1E+10Excel 把文本当数字模板里把该列格式设为"文本"
导出的文件打不开模板保存格式与 AD 版本不兼容另存为.xls或.xlsx再试
数量列出现小数分组键里有浮点型参数字符串被错误解析检查是否有参数值被写成数字格式

这些问题的根子基本都在"命名区域"和"单元格格式"两处。我的经验是:模板做好之后先导三次验证——一次小批量(改几个元件参数再导一次,看数据有没有更新)、一次大批量(用完整的板子导,看行数对不对)、一次换变体导(如果有变体,看状态列对不对)。三次都过,模板才算稳。

4.4 不做模板的懒人方案:CSV + Power Query

说实话,如果项目节奏特别快、每个项目的 BOM 格式要求还不一样,做模板的性价比不高。这时候我更倾向直接导出 CSV 裸数据,然后用 Excel 的 Power Query 或者一套固定公式来做整理。

基本流程是:导出 CSV(或者 Excel 裸数据)→ 用 Power Query 导入 → 做分组聚合、位号合并、数量求和 → 输出到固定格式的工作表。Power Query 的好处是处理步骤被记录下来了,下次换个项目的 CSV,只需要改数据源路径,点一下刷新,所有整理动作自动重跑。

位号合并用TEXTJOIN或者 Power Query 的"分组依据"里的"所有行",把同一组里的多个位号拼成一个字符串;数量用"计数行"或者"求和";封装一致性用CONCAT生成匹配键来交叉检查。这套方案对新手更友好的一点是:不需要动 AD 的模板机制,所有逻辑都在 Excel 里,出错了也好排查。

5. 从 PCB 侧导出 BOM,并和坐标文件一起交付

前面说了原理图侧 BOM 是正式交付的主路径,但 PCB 侧的输出同样有它的位置——尤其是当你要做板级核对、输出装配文件的时候。

5.1 PCB 的 Reports » Bill of Materials 能给你什么

在 PCB 编辑器里执行 Reports » Bill of Materials,弹出来的对话框和原理图侧的很像,但数据源完全不同。它统计的是当前 PCB 文档里实际存在的元件实例,包含位号、所在层、封装、位置信息。

这个输出的典型用途有三个:一是核对,跟原理图侧 BOM 比对,看有没有元件在转 PCB 的时候掉了;二是排查,找那些"板上不存在的料";三是应急,只有 PCB 文件没有原理图的时候,靠它出 BOM。

需要注意的是,PCB 侧 BOM 的位号对多子件元件通常会合并成主位号(U1 而不是 U1A),数量和原理图侧可能对不上。比对的时候要把这个差异考虑进去,否则会误以为"数量不一致说明出问题了"。

5.2 位号图与 Pick and Place 坐标文件的配套输出

BOM 从来不是单独交付的。给贴片厂的文件包里,至少还要包含坐标文件。AD 里对应的功能是File » Assembly Outputs » Generates pick and place files(不同版本菜单名可能是 Generates Pick and Place Files)。

生成的坐标文件一般是 CSV 格式,包含这些列:Designator、Comment、Layer(Top/Bottom)、Footprint、Mid X、Mid Y、Rotation。其中几个点需要跟贴片厂确认清楚:

Rotation 的基准。AD 输出的角度是基于元件封装原点的旋转角,而不同贴片机的角度基准不一样(有的以元件第一个脚为 0 度,有的以带极性标记的一侧为 0 度)。这个差异会造成极性器件贴反。第一次合作的厂,建议先发一小批样品确认角度。

坐标单位。AD 可以输出 mm 或 mil,默认常见是 mm。确认清楚,否则贴片机会偏得离谱。

Mid X / Mid Y 的含义。这是元件中心坐标,不是第一个焊盘坐标。有些老式贴片机需要的是引脚坐标,需要预处理。

Layer 列的写法。Top 和 Bottom 的写法各厂有差异,导出前问一下对方习惯的形式。

位号图(Assembly Drawing)则是在 PCB 里输出一层装配图,标出每个位号的位置,用于人工核对和返修定位。这个通常用 File » Smart PDF 或者 Output Job 里的装配图输出功能来做。

5.3 变体(Variant)项目的 BOM 处理

变体这个概念,很多画板子的人用了好几年 AD 都没碰过,但只要有"同一块板两种配置"的需求,它就绕不开。

变体在 Project » Project Options 的 Variants 标签页里定义,或者在 Project » Variant Management 里管理。一个变体本质上是一组"哪些元件装、哪些不装"的规则集合。定义好之后,你可以在同一个工程里切换不同变体,PCB 视图也会实时反映出不装配的元件(通常显示为灰色或带叉)。

导出 BOM 的时候,Bill of Materials 对话框里会有变体选择项,可以选主设计(无变体)、某个具体变体,或者所有变体。选"所有变体"的时候,AD 会为每个变体生成一份输出——这在 AD 的 OutJob 里配置起来更顺手,可以一次性出全套。

变体 BOM 最容易出问题的地方是数量统计。不装配的元件依然会出现在 BOM 里,如果数量列没有反映 Fitted 状态,采购会按全部数量下单。解决办法还是前面提的:输出 Fitted 列,在 Excel 里区分算。如果变体数量多,建议用 OutJob 配置每个变体单独输出文件,命名时带上变体名,避免混淆。

5.4 用 OutJob 把 BOM 输出固化成一键操作

每次手动点 Reports » Bill of Materials、选模板、选路径,重复劳动不说,还容易忘。AD 的Output Job File(.OutJob)就是解决这个问题的。

流程是这样:File » New » Output Job File 新建一个,然后在左侧的 Report Outputs 类别里添加一个 Bill of Materials 项。右键这个项可以配置:使用哪个模板、输出到什么路径、文件名是什么、用哪个变体。配置完之后,可以把它设成某个输出容器(比如 "Assembly" 容器)的一部分,然后一键 Generate 整个容器。

OutJob 真正的价值在于可版本管理。把这个文件跟工程一起提交到版本控制里,任何人在任何机器上打开工程,生成的 BOM 格式和内容都完全一致。团队协作的时候这一点极其重要——避免"我这边导出来是对的,你那边导出来怎么少了两行"这种扯皮。

配置 OutJob 时有两个坑要留心:一是输出路径最好用相对路径,用绝对路径的话换台电脑就失效;二是模板文件最好也放在工程目录下一起纳入版本控制,别放在个人电脑的某个角落。

6. 交付前的三方对账与几个经典故障排查

BOM 导出完,别急着发。我给自己定了一个规矩:任何一份要发出去的 BOM,必须过一遍对账流程。这套流程花不了十分钟,但能拦掉九成以上的返工。

6.1 数量、位号、封装的三方对账法

所谓三方,指的是原理图、PCB、BOM 表这三份数据。核对方法是:

  • 原理图 vs BOM:在原理图里按 Comment 统计一遍元件总数,跟 BOM 里的数量和比一遍。如果工程不大,可以用 SCH List 面板导出所有元件,用 Excel 的 COUNTIF 做统计。差异出现就先怀疑分组键和 Fitted 状态。
  • PCB vs BOM:用 5.1 节说的 PCB 侧导出功能,比对位号集合。原理图有而 PCB 没有的位号,说明元件没转过去;PCB 有而原理图没有的位号,说明 PCB 上有多余的东西(可能是手工放的、忘了在原理图上补的)。这个检查特别能抓出"原理图删了但 PCB 上还在"的历史遗留问题。
  • BOM 内部一致性:同一个分组的元件,封装列必须是唯一的。如果某一行里位号列显示C1, C2, C3, C8而封装列出现了两种不同的封装值,说明分组键没加 Footprint。这个直接用 Excel 的"分列 + 去重计数"就能查出来。

对账这件事,工具不重要,重要的是养成"不核对不发出"的习惯。我见过太多因为漏了一颗 0 欧电阻导致整批板子返工的案例,那颗电阻本身几毛钱,返工的时间成本是几百倍。

6.2 CSV 乱码、科学计数法、位号丢失的根因

这三个问题各有各的根因,处理方式也不一样。

CSV 中文乱码:AD 导出的 CSV 默认用系统 ANSI 编码(简体中文环境下是 GBK),而现代 Excel 或者其他工具默认按 UTF-8 打开,结果中文全变成问号或者方块。解决办法有两个:一是用记事本打开 CSV,另存为 UTF-8 编码;二是用 Excel 的"数据 » 从文本/CSV"导入功能,手动指定编码为 936(GBK)。后者更可靠,而且可以顺便把每一列的格式指定好。

科学计数法:位号里出现了类似1E10这样的字符串时,Excel 会把它当成浮点数显示成1E+10,位号就丢了。或者料号里的纯数字串(比如某些厂牌的短料号)被转成了数字。根本原因是列格式没指定为文本。用"从文本/CSV"导入的方式,在导入向导里把位号和料号两列的格式改成"文本",问题就解决了。模板方案里则要在模板中预设文本格式。

位号丢失:导出的 BOM 里位号列比预期少,通常是两个原因——多子件元件的位号合并(这是正常的,不是丢失),或者元件本身没有位号(位号还是?)。排查方法是在 BOM 里搜?和空值,找到之后回到原理图重新标注。

6.3 一份可以直接照着跑的自检清单

把我日常用的检查项列出来,你可以直接抄:

  • 工程已 Compile,Message 面板无 Duplicate Designator 和 Missing Footprint。
  • 原理图上没有?位号,所有元件已标注。
  • 所有元件的 Footprint 非空,且与实物封装一致。
  • 关键元件(IC、连接器、晶振、电感)的 MPN 和厂商已填。
  • BOM 对话框里未勾选"只包含当前图纸的元件"。
  • 分组键至少包含 Comment + Footprint;量产 BOM 加 MPN。
  • 输出的列里包含 Fitted 状态。
  • 虚拟元件、测试点、机械件已通过BOM_Exclude参数或其他方式排除。
  • 模板的命名区域与 AD 字段名完全一致,列格式已设为文本。
  • 位号图(装配图)和坐标文件(Pick and Place)与 BOM 同批次输出,版本号一致。
  • 导出文件名带项目名、版本号和日期,例如项目A_Rev1.2_20240612_BOM.xlsx。

这份清单看着长,实际操作下来,前面几项是设计阶段就该做好的,真正在导出环节要花时间的只有最后三四项。把它固化到自己的项目模板里,下次新项目开工时直接复用,随着项目数量增加,边际成本会越来越低。

最后说一个我自己踩过最深的坑。有一次给一个小批量项目出 BOM,分组键只用了 Comment,结果板子上两种封装的 10uF 电容(0603 和 0805)被合并成了一行,数量是两者之和。采购按总数买了 0603,贴片厂上料的时候发现数量对不上,只能停下来等我重新确认。那次之后我就把"分组键必须含 Footprint"写进了自己的检查清单里,再也没出过类似的事。BOM 这东西,出错的代价从来不在导出那两分钟,而在事后补救的那几天。

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

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

立即咨询