从设计到生产:构建装配视图BOM的完整实践指南
2026/8/21 11:50:22 网站建设 项目流程

在电子设计自动化(EDA)和机械设计领域,物料清单(Bill of Materials,简称 BOM)是连接设计、采购、生产和装配的核心文件。一个完整的 BOM 不仅需要列出所有元器件的详细信息,更需要清晰地展示这些元器件在最终产品中的物理装配关系。这就是“装配视图”的价值所在。很多工程师在导出基础 BOM 后,面对如何将原理图或 PCB 布局中的逻辑连接,转化为指导实际生产的装配层级结构时,常常感到无从下手。他们可能得到了一个包含位号、型号、数量的扁平列表,却不知道哪个部件属于哪个子板,或者多个相同型号的器件该如何区分安装位置。

本文将以一个典型的电子硬件开发流程为背景,深入讲解如何从设计文件(如 Cadence Allegro、Altium Designer 或 SolidWorks)出发,创建出结构清晰、信息准确的装配视图 BOM。我们将重点关注“创建”这一动作背后的逻辑、数据提取方法、层级构建规则以及最终输出的验证,而不仅仅是某个软件的点击操作。无论你是硬件工程师、PCB 设计师还是负责生产导入的工程师,都能通过本文理解从设计数据到可指导生产的装配 BOM 的全链路实践。

1. 理解 BOM 表与装配视图的核心关系

在深入操作之前,必须厘清几个核心概念,这是避免后续数据混乱的基础。

1.1 什么是 BOM 表?

BOM 表是构成一个产品所需的所有物料项目的结构化清单。一份基础的 BOM 通常包含以下关键字段:

  • 位号 (Reference Designator): 如 R1, C2, U3,在电路板或装配图上唯一标识一个元器件的位置。
  • 物料编码 (Part Number): 公司内部或供应商提供的唯一标识符,用于采购和库存管理。
  • 描述 (Description): 物料的名称、规格说明,如 “10kΩ, 1%, 0805 Resistor”。
  • 数量 (Quantity): 在该产品或装配层级中所需的数量。
  • 封装 (Package/Footprint): 物料的物理外形和焊盘尺寸,如 0805, SOIC-8。

一个简单的 BOM 表示例(CSV 格式):

Reference, Part Number, Description, Quantity, Package R1, R-10K-0805, RES 10K OHM 1% 1/8W 0805, 1, 0805 C1, C-10uF-0805, CAP CER 10UF 10V X5R 0805, 1, 0805 U1, IC-MCU-STM32F103, MCU 32BIT ARM CORTEX-M3, 1, LQFP-48

这种 BOM 是“扁平化”的,它列出了所有物料,但没有体现它们之间的组装关系。

1.2 为什么需要装配视图?

装配视图(有时也称为“层级化 BOM”或“制造 BOM”)在扁平 BOM 的基础上,引入了产品结构树的概念。它按照产品的实际物理组装顺序来组织物料。

核心价值在于:

  1. 指导生产装配: 明确告诉生产线先装子板 A,再将子板 A 装到主板 B 上。避免了物料混装和工序错误。
  2. 精确成本核算: 可以分别计算子装配体(如电源模块、显示模块)的成本,便于模块化定价和成本分析。
  3. 清晰的物料归属: 在多板卡(主板+子板)或包含外购模块(如 WiFi 模组)的产品中,能明确区分哪些物料属于哪个部件。
  4. 支持模块化设计与复用: 一个成熟的子装配体(如标准电源模块)可以被多个产品引用,只需在顶层 BOM 中引用该模块即可,无需重复列出其所有下级物料。

一个装配视图 BOM 的简化结构示例:

产品:智能网关 (P-1000) ├── 装配:主板 (ASSY-MAIN-01) │ ├── PCB: 主板裸板 (PCB-MAIN-REV1.2) │ ├── 物料: U1, MCU, ... (属于主板) │ ├── 物料: R1, R2, C1, C2, ... (属于主板) │ └── 装配: 电源子板 (ASSY-PWR-01) (作为一个整体被引用) │ ├── PCB: 电源板裸板 (PCB-PWR-REV1.0) │ ├── 物料: U10, PWM IC, ... (属于电源子板) │ └── 物料: L1, D1, ... (属于电源子板) ├── 装配: 外壳组件 (ASSY-ENCL-01) │ ├── 物料: 上盖 (PLASTIC-TOP) │ └── 物料: 下盖 (PLASTIC-BOTTOM) └── 物料: 螺丝 (SCREW-M3x5), 4个 (属于顶层)

1.3 设计数据如何映射到装配视图?

这是创建装配视图的技术关键。映射关系依赖于设计工具中的信息:

  • 原理图层次化设计: 在 Altium Designer 或 OrCAD 中,你可以用“子图”或“层次化框图”来表示一个功能模块(如电源)。这些子图会对应装配视图中的一个子装配体。
  • PCB 中的器件层与装配层: 如 Allegro 中的ASSEMBLY_TOPASSEMBLY_BOTTOM层定义了顶面和底面的装配图形。导出 BOM 时包含器件层信息,可以帮助区分顶贴和底贴器件,这对于生成面向 SMT 贴片的装配工位图至关重要。
  • 机械装配体: 在 SolidWorks 中,装配体文件(.sldasm)天然就是一棵结构树。其中的子装配体和零件直接对应 BOM 的层级。
  • 位号前缀约定: 虽然不是绝对可靠,但常见的位号前缀有时用于暗示器件类型或所属模块(如U代表 IC,J代表连接器,P代表插头等),可作为辅助判断信息。

注意: 设计工具的层级并不总是与制造装配层级完全一致。例如,原理图中为了绘图方便可能将多个模块画在一张图上,但生产时它们是独立的板卡。创建装配视图时,需要以实际物理组装方式为准,对设计数据进行重新组织和归并。

2. 环境准备与数据源梳理

创建装配视图 BOM 不是一个孤立的任务,它严重依赖于上游设计数据的完整性和规范性。在开始操作前,请完成以下准备工作。

2.1 设计文件与工具确认

首先,明确你的数据来源和所需工具:

设计领域可能的设计工具关键输出文件(用于 BOM)备注
电子电路 (ECAD)Cadence Allegro/OrCAD, Altium Designer, KiCad, Mentor PADS原理图文件(.dsn,.SchDoc), PCB文件(.brd,.PcbDoc), 网表核心数据源,提供位号、参数、封装、网络连接。
机械结构 (MCAD)SolidWorks, AutoCAD, Fusion 360, Creo3D 装配体文件(.sldasm,.iam), 2D 工程图提供外壳、支架、螺丝等非电子物料,以及装配关系。
BOM 管理/ERPArena, Oracle Agile, SAP, 或自研系统物料主数据、已有组件库、替代料信息提供标准的物料编码、描述、供应商信息,确保 BOM 与公司物料系统一致。

行动清单:

  1. 定位最新版本: 确保你使用的是已发布或基线化的设计文件版本(如PCB_Main_V1.2SCH_Main_V1.2)。
  2. 检查设计完整性: 确保所有器件都有正确的位号、封装和必要的参数(如阻值、容值、芯片型号)。
  3. 统一命名规范: 检查原理图符号库、PCB 封装库、3D 模型库的命名是否一致且符合公司规范。

2.2 建立物料编码映射库

这是将设计参数转化为可采购物料的关键一步。你需要一个映射表(通常是一个 Excel 文件或数据库查询),将设计中的“描述”或“型号”映射到公司的“物料编码”。

示例映射表 (part_mapping.csv):

Designator_Prefix, Schematic_Part, Value/Model, Manufacturer, Internal_Part_Number, Description RES, RESISTOR, 10k, Yageo, R-10K-0805-1%-YAG, RES 10K OHM 1% 1/8W 0805 CAP, CAPACITOR, 10uF, Murata, C-10UF-10V-X5R-0805-MUR, CAP CER 10UF 10V X5R 0805 IC, MICROCONTROLLER, STM32F103C8T6, ST, IC-MCU-STM32F103-LQFP48-ST, MCU 32BIT ARM CORTEX-M3 64KB FLASH ...

为什么需要这个?因为设计中的“10k”可能对应多个不同精度、功率、封装的电阻,采购必须依据唯一的物料编码。在创建 BOM 时,脚本或工具可以依据此映射表自动填充Part Number和标准Description

2.3 定义装配层级规则

在开始导出数据前,必须和结构工程师、生产工程师共同确定产品的装配层级。例如:

  • 层级 0 (产品): 最终可销售的完整产品。
  • 层级 1 (主要装配体): 如主板总成、外壳总成、线束总成。
  • 层级 2 (子装配体): 如主板上的电源模块(可能是一块独立的子板)、显示模块、射频模块。
  • 层级 3 (PCB/裸板): 每一块需要贴片的印刷电路板本身也是一个“物料”。
  • 层级 4 (元器件): 最底层的电阻、电容、芯片等。

将这套规则文档化,它将指导你如何对导出的原始数据进行分类和聚合。

3. 从设计工具导出原始 BOM 数据

现在,我们从设计工具中提取第一手数据。以Altium DesignerSolidWorks为例,这是两种最常见的数据源。

3.1 从 Altium Designer 导出包含层级信息的 BOM

Altium 的 BOM 导出功能非常强大,关键在于配置。

  1. 打开装配体项目: 确保你的.PrjPcb项目文件已打开,并且所有原理图文档都已正确编译,无错误。
  2. 执行 BOM 导出: 菜单Reports->Bill of Materials
  3. 关键列配置: 在 BOM 对话框中,你需要将以下字段拖到“Grouped Columns”(用于创建层级)或“All Columns”(用于显示)区域:
    • Document: 原理图文档名。如果使用了层次化设计,不同子图的器件会归属不同文档,这是构建装配层级最重要的依据之一
    • Description,Designator,Footprint,Quantity
    • Part Number: 如果已在原理图符号中填写了公司物料编码,则直接使用。
    • Comment: 通常存放型号或参数值。
    • Layer: 器件所在 PCB 层(Top/Bottom),用于区分贴装面。
  4. 分组与层级化: 将Document字段拖入“Grouped Columns”的顶部。这样,BOM 会首先按原理图文档(即逻辑模块)进行分组,每个分组下再列出该模块的所有器件。这已经初步形成了基于设计逻辑的层级视图。
  5. 导出数据: 选择导出格式为ExcelCSV,保存文件,例如BOM_Raw_From_Altium.csv

导出的分组 BOM 片段可能如下:

Grouped By: [Document] - Document: Power_Supply.SchDoc Designator | Comment | Description | Footprint | Quantity U10 | LM2675 | SIMPLE SWITCHER... | SOIC-8 | 1 L1 | 22uH | Inductor | 1210 | 1 D1 | SS34 | Schottky Diode | SMA | 1 - Document: MCU_Board.SchDoc Designator | Comment | Description | Footprint | Quantity U1 | STM32F103| MCU | LQFP-48 | 1 R1, R2 | 10k | Resistor | 0805 | 2

3.2 从 SolidWorks 导出结构化 BOM

对于机械部件,SolidWorks 能直接生成带有装配层级的 BOM。

  1. 打开顶级装配体文件: 打开代表最终产品的.sldasm文件。
  2. 插入表格: 在工程图环境或装配体环境中,选择插入->表格->材料明细表
  3. 配置 BOM 类型: 在材料明细表属性中,选择“仅限顶层”“仅限零件”“缩进”创建装配视图必须选择“缩进”。这将生成一个树状结构的 BOM,清晰显示装配体、子装配体和零件的关系。
  4. 自定义列: 确保表格包含以下列:项目号数量零件号(对应物料编码)、说明(描述)、材料等。
  5. 导出表格: 将材料明细表另存为Excel文件,例如BOM_Raw_From_SW.xlsx

导出的缩进 BOM 结构在 Excel 中看起来像这样:

项目号 | 零件号 | 说明 | 数量 1 | ASSY-TOP | 产品总成 | 1 1.1 | PCB-MAIN | 主板组件 | 1 1.1.1 | PCB-MAIN-REV1 | 主板裸板 | 1 1.1.2 | IC-MCU | 主控芯片 | 1 1.1.3 | R-10K | 10K电阻 | 5 1.2 | ENCLOSURE | 外壳组件 | 1 1.2.1 | PLASTIC-TOP| 塑料上盖 | 1 1.2.2 | PLASTIC-BOT| 塑料下盖 | 1 1.2.3 | SCREW-M3 | M3螺丝 | 4

3.3 处理 Allegro 等工具的导出

对于 Allegro,通常通过Tools->Reports功能导出 BOM。关键是要在报告设置中,勾选输出Ref DesComp ValuePart Number(来自元件属性)以及ASSEMBLY_TOP/ASSEMBLY_BOTTOM层的器件信息。这能帮助后续区分贴片面。导出的通常是文本文件,需要进一步用脚本或 Excel 进行解析和格式化。

4. 整合与构建装配视图 BOM

现在,我们有了来自 ECAD 和 MCAD 的原始数据。下一步是将它们整合,并按照第 2.3 节定义的物理装配规则进行重构。

4.1 数据清洗与标准化

将导出的 CSV/Excel 文件在 Excel 或 Python(使用 pandas 库)中进行处理。

常见清洗任务:

  1. 统一列名: 将DesignatorRef Des位号统一为Reference。将Part Number零件号物料编码统一为Part_Number
  2. 处理多值单元格: ECAD 导出的 BOM 中,相同物料的设计位号可能合并为一个单元格,如R1, R2, R3。为了后续处理,有时需要将其拆分为多行(每行一个位号),但保留相同的物料信息。这取决于下游 ERP 系统的要求。
  3. 应用物料映射: 使用 VLOOKUP 函数或 pandas 的merge操作,根据Comment(型号)或Description(描述)去匹配part_mapping.csv,为每一行数据填充标准的Part_NumberDescription
  4. 标记数据来源: 新增一列Source,标记该行数据来自AltiumSolidWorks还是Manual(手动添加的物料,如润滑脂、硅胶垫)。

4.2 构建装配结构树

这是核心步骤。你需要创建一个新的工作表或数据结构来代表装配视图。

手动构建(适用于简单产品):

  1. 新建一个 Excel 工作表,命名为Assembly_BOM
  2. 按照层级规则,从顶层产品开始,逐级创建“装配项”。
  3. 对于每个“装配项”,它包含两类内容:
    • 子装配体: 引用另一个装配项(如“电源模块”)。
    • 物料: 具体的元器件、标准件、原材料。
  4. 为每一行数据定义关键字段:
    • Level: 层级编号(如 1, 1.1, 1.1.1)
    • Type: 类型(Assembly,Part,PCB
    • Item_Number: 项目号(如100,110,111
    • Part_Number: 物料编码(对于装配体,可以自定义一个编码如ASSY-PWR-01
    • Description: 描述
    • Quantity: 数量(注意:此数量是相对于其父项的数量
    • Reference: 位号(仅对Part类型有效,且属于该装配体)
    • Source_Assembly: 该物料所属的装配体(用于数据关联和校验)

示例Assembly_BOM工作表结构:

Level, Type, Item_Number, Part_Number, Description, Quantity, Reference, Source_Assembly 1, Assembly, 100, P-1000, 智能网关, 1, , 1.1, Assembly, 110, ASSY-MAIN-01, 主板总成, 1, , 100 1.1.1, PCB, 111, PCB-MAIN-REV1.2, 主板裸板, 1, , 110 1.1.2, Part, 112, IC-MCU-STM32F103, 主控芯片, 1, U1, 110 1.1.3, Part, 113, R-10K-0805, 10K电阻, 5, R1,R2,R3,R4,R5, 110 1.2, Assembly, 120, ASSY-ENCL-01, 外壳组件, 1, , 100 1.2.1, Part, 121, PLASTIC-TOP, 塑料上盖, 1, , 120 1.2.2, Part, 122, PLASTIC-BOT, 塑料下盖, 1, , 120 1.2.3, Part, 123, SCREW-M3x5, M3x5螺丝, 4, , 120

4.3 使用脚本半自动化整合(进阶)

对于复杂产品或频繁更新的项目,建议使用 Python 脚本自动化此过程。

脚本工作流思路:

  1. 读取: 用pandas读取清洗后的 ECAD BOM (df_ecad) 和 MCAD BOM (df_mcad)。
  2. 定义映射规则: 创建一个配置文件 (rules.yaml),定义如何将原理图文档名(或位号前缀)映射到装配体。
    assembly_mapping: - source: “Power_Supply.SchDoc” # Altium 文档名 assembly_part_number: “ASSY-PWR-01” assembly_description: “DC-DC 电源模块” level: “1.1.4” # 在主板的层级下 - source_prefix: “J” # 位号以 J 开头 assembly_part_number: “ASSY-CONN-01” assembly_description: “连接器组件” level: “1.1.5”
  3. 处理与归并: 脚本遍历df_ecad的每一行,根据映射规则,将其ReferencePart_Number分配到对应的装配体下。同时,将df_mcad的数据作为独立的装配体或顶层物料插入。
  4. 生成结构树: 脚本按照层级顺序,输出最终的Assembly_BOM.csv

这种方法确保了数据的一致性和可追溯性,当设计变更时,只需重新运行脚本即可更新 BOM。

5. 验证、输出与导入 ERP

创建好的装配视图 BOM 必须经过严格校验才能投入使用。

5.1 完整性校验清单

在发布前,请逐项核对:

  • [ ]数量守恒: 所有底层元器件的数量总和,是否等于各层级装配体数量乘以其内部用量的总和?可以用 Excel 公式验证。
  • [ ]位号无遗漏: 从原始 ECAD BOM 导出的所有位号,是否都分配到了某个装配体中?是否存在“孤儿”位号?
  • [ ]物料编码有效: 所有Part_Number是否都能在公司的物料管理系统中找到?描述、规格是否匹配?
  • [ ]层级逻辑正确: 装配关系是否符合实际生产工艺?例如,螺丝是否确实用于固定对应的外壳?
  • [ ]关键属性完整: 对于采购和生产,以下信息是否齐全?
    • 制造商/供应商
    • 封装/规格
    • 是否有替代料
    • 是否属于客户指定物料

5.2 生成最终交付物

根据下游用户的需求,生成不同格式的 BOM:

  1. 面向采购的扁平 BOM: 将装配视图 BOM “压平”,汇总所有唯一Part_Number的总需求数量。这可以通过数据透视表轻松实现。
  2. 面向生产的装配指引 BOM: 保留完整层级,并可以附加更多信息,如每道工序的站位号、贴片坐标文件链接、装配示意图编号。
  3. 可视化装配图: 结合 Altium 的装配图输出或 SolidWorks 的爆炸视图,在 BOM 中引用相关图纸编号,实现图文关联。

5.3 导入 ERP/PLM 系统

这是最后一步,也是 BOM 数据“落地”的一步。通常需要将最终的Assembly_BOM.csv转换为 ERP 系统要求的特定模板格式。

关键注意事项:

  • 字段映射: 确保你的 CSV 列名与 ERP 导入模板的列名完全一致。
  • 数据格式: 注意数字、日期的格式,避免前导零丢失(如物料编码00123变成123)。
  • 父子关系字段: ERP 系统通常有Parent_ItemChild_ItemLevel字段来维护 BOM 结构。按照系统手册正确填写。
  • 试导入: 先在测试环境进行导入,检查结构树是否正确建立,物料是否成功关联。
  • 版本控制: 在 ERP 中,任何 BOM 变更都应生成新版本,并与设计文件版本号关联,确保可追溯。

6. 常见问题与排查路径

在实际操作中,你可能会遇到以下典型问题。

6.1 问题:导出的 BOM 中器件描述或参数缺失

  • 现象: BOM 中Description列为空,或Value值不正确。
  • 可能原因
    1. 原理图符号的属性未正确填写。例如,电阻的Value属性未设置。
    2. 原理图库符号中,用于映射到 BOM 的字段名与 BOM 输出配置中的字段名不匹配。
    3. 器件属性被隐藏或未导出。
  • 排查步骤
    1. 在原理图中双击有问题的器件,检查其属性对话框,确认ValueDescriptionPart Number等关键属性已填写。
    2. 检查原理图库中该符号的定义,确保相关属性存在且命名规范。
    3. 在 BOM 导出配置中,检查“All Columns”列表,确保包含了所需的属性字段(如Parameter:Value)。

6.2 问题:装配视图中的数量计算错误

  • 现象: 顶层产品所需物料总数,与各子装配体需求汇总数对不上。
  • 可能原因
    1. 重复计算: 同一个物料在多个子装配体中被错误地重复列出,且未考虑顶层数量。
    2. 层级数量因子错误: 子装配体 A 需要 2 个,其内部的电阻 R1 数量为 1。那么顶层对电阻 R1 的总需求应该是 2 * 1 = 2 个。计算脚本或公式错误。
    3. 虚拟件/外协件处理不当: 将实际需要采购的物料误标为“虚拟件”,导致未计入采购需求。
  • 排查步骤
    1. 使用 Excel 数据透视表,分别按扁平化和层级化方式汇总各Part_Number的数量,对比差异。
    2. 逐级检查装配体数量。从最底层零件开始,向上逐级乘法计算,验证总数。
    3. 审查Type字段,确认所有Part类型的项目都是真实物料,所有Assembly类型都不直接参与采购汇总。

6.3 问题:位号无法归属到正确的装配体

  • 现象: 在整合后的 BOM 中,某些器件的Source_Assembly为空或错误。
  • 可能原因
    1. 映射规则 (rules.yaml) 不完整,未能覆盖所有原理图文档或位号前缀。
    2. 设计变更后,新增了原理图文档或位号,但映射规则未更新。
    3. 位号命名不规范,导致基于前缀的规则失效(例如,连接器用了CN而不是J)。
  • 排查步骤
    1. 找出所有Source_Assembly为空的记录。
    2. 回溯到原始 ECAD BOM,查看这些位号所在的原理图文档名。
    3. 更新映射规则文件,补充新的映射关系。
    4. 考虑在原理图设计规范中,明确位号前缀与功能模块的对应关系,从源头减少歧义。

7. 最佳实践与扩展方向

7.1 设计阶段的前置规范

  • 统一库管理: 建立公司统一的原理图符号库、PCB 封装库和 3D 模型库,并在符号中预定义好 BOM 相关属性(如MPNManufacturer)。
  • 推行层次化设计: 在原理图阶段就使用层次化图纸,使设计逻辑与装配逻辑尽可能对齐。
  • 属性填写检查: 将关键属性(如ValueMPN)的填写纳入设计评审环节。

7.2 BOM 管理流程自动化

  • CI/CD 集成: 将 BOM 生成脚本集成到 Git 提交钩子或 CI 流水线中。每次设计文件更新,自动触发 BOM 生成、校验并发布到内部站点。
  • 与 PLM 系统联动: 通过 API 将自动生成的 BOM 直接推送至 PLM 系统,创建变更单,减少人工录入错误。
  • 差异对比报告: 脚本自动对比新旧版本 BOM,生成增、删、改的差异报告,便于快速评审。

7.3 扩展:面向不同角色的 BOM 视图

一个主 BOM 数据源,可以衍生出多种视图:

  • 采购 BOM: 包含供应商、采购周期、单价、替代料信息。
  • 制造 BOM: 包含工艺路线、工时、站位号、测试要求。
  • 维修 BOM: 包含故障率、维修备件建议、关键物料标识。
  • 成本 BOM: 关联最新采购价,实时计算产品材料成本。

创建装配视图 BOM 不是一次性的数据转换任务,而是一个需要设计、物料、生产等多部门协同的持续过程。其核心在于建立从设计数据到生产指令的准确、自动化的信息流。通过规范设计源头、利用工具脚本、严格执行校验,你可以将这项繁琐的工作转化为稳定可靠的工程实践,显著减少生产错误和沟通成本,为产品的顺利制造打下坚实基础。下一步,你可以尝试将本文的手动或脚本流程,封装成团队内部的一个标准化工具或模板,让每一位工程师都能更轻松地生成高质量的装配 BOM。

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

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

立即咨询