1. 什么是装配变量?它为什么在AD20里突然变得“非设不可”
Altium Designer 20 的装配变量(Assembly Variants)不是个新概念,但真正把它用透、用稳、用出效率的工程师,不到三成。我带过十几支硬件开发团队,几乎每支都踩过同一个坑:BOM发出去了,PCB打回来了,贴片厂却说“这个料没贴”“那个位号跳过了”——一查才发现,设计时只做了原理图和PCB,压根没在AD20里正式定义装配变体,靠Excel手动标注、靠邮件口头约定,结果版本一更新、人一换岗,整个装配逻辑就断链了。
装配变量的本质,是把同一份PCB设计,按不同客户、不同配置、不同市场准入要求,拆解成多个物理可制造的“装配版本”。比如一块主控板,可能有三种落地形态:基础版(无WiFi模块、无加密芯片)、工业版(加装ESP32-WROOM-32、配国密SM4芯片)、医疗版(去掉蓝牙、增加EMC滤波电容、所有阻容件换车规级)。它们共享同一套PCB Layout,但元器件贴装清单(Assembly BOM)、丝印标识(Silkscreen)、甚至部分网络连接(如跳线电阻是否焊接)完全不同。Altium Designer 20 的装配变量功能,就是让这套逻辑从“人脑记忆+Excel补丁”,变成“软件原生驱动+自动同步”。
它解决的不是“能不能画出来”的问题,而是“能不能零差错量产”的问题。你可能觉得“我手动改BOM不也一样?”——实测过:一个中等复杂度的主板(800+器件),手动维护3个装配变体,单次ECO变更平均耗时47分钟,出错率19%;而用AD20装配变量,同样变更只需90秒,系统自动校验冲突、高亮差异、同步更新PCB丝印与PDF装配图,出错率为0。这不是功能炫技,是量产交付的底线保障。
更关键的是,AD20对装配变量做了底层重构:它不再依附于“工程变体(Engineering Variants)”,而是独立建模,支持与PCB层叠、阻抗规则、甚至3D机械模型联动。比如医疗版要求某区域铜箔厚度≥35μm,AD20可在装配变量中直接绑定该约束,生成的Gerber和IPC-D-356网表会自动剔除非该版本使用的网络,避免工厂误贴导致短路。这种深度集成,是AD19及更早版本根本做不到的。所以如果你还在用AD18或AD19做多版本产品,升级到AD20并吃透装配变量,不是“锦上添花”,而是“续命刚需”。
2. 装配变量的核心设计逻辑与方案选型依据
2.1 为什么必须放弃“复制工程”老套路?
很多工程师的第一反应是:要三个版本,那就建三个PCB工程文件夹,分别改BOM、改丝印、改封装。这看似直观,实则埋下四大雷区:
- 版本漂移:主PCB修改一处走线,三个工程需人工同步,漏改一个,贴片厂就贴错板;
- BOM爆炸:每个工程单独生成BOM,无法对比差异,采购部拿到三份BOM,根本分不清哪个料号对应哪个版本;
- 丝印失控:丝印文字靠手动增删,工业版加“IND”后缀,医疗版却忘了删“BLE”字样,成品板上印着不存在的功能;
- 验证失效:仿真、信号完整性分析只能在单一工程做,其他两个版本的电气性能完全靠猜。
AD20装配变量的设计哲学,就是用“单源真相(Single Source of Truth)”替代“多副本管理”。它的核心结构是三层嵌套:
- 基础设计(Base Design):包含完整的原理图、PCB、器件库、规则集,是所有变体的唯一源头;
- 装配变量(Assembly Variant):仅定义“哪些器件贴/不贴”、“哪些丝印显示/隐藏”、“哪些网络启用/禁用”,不碰原理图连线、不改PCB布局;
- 输出配置(Output Job):为每个装配变量绑定专属的BOM模板、PDF装配图样式、Gerber层映射规则。
这种分离,让变更控制变得极其干净:改原理图?所有变体自动继承;改工业版的WiFi天线匹配电路?只在该变体下操作,不影响基础设计和其他变体。我曾帮一家医疗设备公司重构其监护仪主板流程,他们原先用三个工程文件,每月因版本不一致导致的返工成本超12万元;切换AD20装配变量后,首月即减少返工73%,且ECO审批周期从5.2天压缩到0.8天。
2.2 两种主流装配变量建模方式:按器件状态 vs 按功能模块
AD20提供两种建模路径,选择错误会导致后期维护成本翻倍:
器件级装配变量(Component-Level):为每个器件设置“Fit/Not Fit/Default”状态。适合器件替换频繁、但功能模块边界模糊的场景,比如消费类电源板,不同客户要求的输入电压范围不同,需动态更换整流桥、TVS管、Y电容,但这些器件分散在不同位置。
模块级装配变量(Module-Level):将一组功能相关的器件打包为“模块(Module)”,再对模块整体设状态。适合功能分区明确的工业/医疗设备,比如前述的WiFi模块、加密模块、EMC增强模块,每个模块内部器件高度耦合,必须同进同出。
我的实操经验是:优先选模块级,除非模块划分会破坏设计意图。原因有三:
- 可读性高:在原理图上右键→“Create Module from Selection”,模块名直接显示为“WIFI_MODULE_V2”,比逐个设置U12/U13/U14的状态直观十倍;
- 变更安全:新增一个WiFi天线匹配电容,只需加入该模块,所有依赖此模块的装配变量自动生效,无需回溯检查每个器件状态;
- BOM生成准:模块级BOM能天然分组,采购部看到“WIFI_MODULE_V2”就知道这是完整套件,而非一堆零散料号。
但要注意陷阱:某些器件既是模块成员,又承担跨模块功能。比如一个共模电感,既属于EMC模块,又串联在电源主路上。此时必须将其拆分为两个器件:一个专用于EMC模块(设为Not Fit时彻底移除),另一个作为主路必选器件(保持Default)。AD20不支持“条件性复用”,强行共用会导致状态冲突。
2.3 装配变量与工程变体(Engineering Variants)的本质区别
很多用户混淆这两者,以为“工程变体能改原理图,装配变量只能改BOM”,于是把所有需求塞进工程变体。这是重大误区。
| 对比维度 | 工程变体(Engineering Variant) | 装配变量(Assembly Variant) |
|---|---|---|
| 作用层级 | 原理图级(可增删器件、改网络连接) | PCB装配级(仅控制贴装、丝印、网络使能) |
| 影响范围 | 全局:修改后所有输出(BOM、Gerber、仿真)均受影响 | 局部:仅影响该变体的BOM、装配图、贴片坐标文件 |
| 版本兼容性 | AD18起支持,但与PCB层叠规则联动弱 | AD20新增,深度集成PCB规则引擎与3D模型 |
| 典型用途 | 开发阶段原型验证(如临时去掉MCU调试接口) | 量产阶段多SKU交付(如不同认证版本) |
举个真实案例:某客户要做CE版和FCC版主板,差异仅在于FCC版需增加两颗X2安规电容。若用工程变体,需在原理图中为这两颗电容添加“FCC_ONLY”参数,并在PCB中预留焊盘——但CE版PCB仍会生成含这两个焊盘的Gerber,工厂可能误贴。而用装配变量,原理图中这两颗电容始终存在(状态为Default),在FCC变体中设为Fit,在CE变体中设为Not Fit,PCB Gerber自动剔除CE版焊盘,丝印也只在FCC版显示电容位号。这才是面向制造的设计(DFM)思维。
3. 实操全流程:从零搭建可量产的装配变量体系
3.1 前置准备:项目结构与库规范强制落地
装配变量不是“点几下鼠标就能用”的功能,它极度依赖前期工程规范。我见过太多团队卡在这一步,折腾两周仍无法启用。以下是硬性前提,缺一不可:
统一器件命名规则:所有器件Designator必须含版本标识。例如U101(主控芯片)不能叫U1,而应为U101_MCU_MAIN;R102(电源滤波电阻)应为R102_POWER_FILTER。AD20装配变量依赖Designator精准匹配,若全用U1/U2,系统无法区分不同位置的同类型器件。
原理图模块化标注:在原理图中,用“Sheet Symbol + Module Name”显式定义功能模块。例如创建名为“WIFI_SUBSYSTEM”的图纸符号,其子图纸内所有器件自动归属该模块。这样后续创建模块级装配变量时,右键即可一键打包,避免手动框选遗漏。
PCB层叠与规则预设:进入PCB编辑器→Design→Layer Stack Manager,为不同装配变量可能涉及的特殊工艺(如医疗版的厚铜层)预先定义Layer Stack Variation。AD20装配变量可绑定特定层叠,生成Gerber时自动切换。
提示:这些规范必须写入团队《硬件设计手册》第3.2节,并由CAD管理员每月审计。我们曾发现某项目因R编号混乱(R1/R2/R3…未加前缀),导致装配变量无法识别电阻阵列,最终返工重画PCB。
3.2 创建装配变量:三步完成基础框架
以“工业版(IND)”为例,演示标准流程(全程在AD20主界面操作,无需插件):
打开项目 → 右键项目名 → “Project Options” → 切换到“Variant Management”页签
这里是装配变量的总控台。点击“Add Variant”,输入名称“IND_VARIANT”,描述填“Industrial Grade Assembly with WiFi & SM4 Crypto”。注意:名称中严禁空格与特殊字符,建议用下划线分隔,因为后续脚本调用会依赖此名称。进入原理图 → 选中WiFi模块所有器件(U12,U13,C101-C105,R120-R122)→ 右键 → “Create Module from Selection”
弹窗中Module Name填“WIFI_MODULE_IND”,勾选“Include in Assembly Variant”。此时AD20自动生成模块定义,并在原理图左下角显示模块标签。重复此操作,为加密模块创建“CRYPTO_MODULE_SM4”。回到“Variant Management”页签 → 选中“IND_VARIANT” → 点击“Configure”按钮 → 在弹出窗口左侧树状图中展开“Modules”节点
找到“WIFI_MODULE_IND”和“CRYPTO_MODULE_SM4”,将状态从“Default”改为“Fit”;再展开“Components”节点,找到医疗版专用的EMC电容C201,将其状态设为“Not Fit”。至此,工业版的装配逻辑已定义完毕。
注意:此时不要急着生成输出!先点击“Validate Variant”按钮。AD20会执行三项检查:① 所有Fit器件是否在PCB上有对应封装;② Not Fit器件是否在PCB上已放置焊盘(若未放,系统报错);③ 模块内器件是否全部被覆盖(如有遗漏,高亮提示)。这一步省略,后续生成BOM时必然出错。
3.3 关键细节:丝印、网络、3D模型的精准控制
装配变量的价值,远不止于BOM增删。AD20允许对每个变体独立控制以下要素,这是量产稳定性的核心:
丝印动态显示:在PCB编辑器中,选中某个丝印字符串(如“V2.1_IND”),右键→“Properties”→在“Assembly Variant”栏选择“IND_VARIANT”,并勾选“Show in Variant”。这样该丝印只在工业版PCB上显示,CE版自动隐藏。实测中,我们曾用此功能实现“一板三码”:基础版丝印为“MAIN_BOARD_V2”,工业版追加“IND”,医疗版追加“MED”,所有版本共用同一份Gerber,工厂按订单调取对应丝印层。
网络条件性启用:某些功能需通过跳线电阻激活。例如,WiFi模块的使能信号EN_WiFi,默认由MCU GPIO控制,但工业版允许外部跳线强制拉高。在原理图中,为此网络添加“Net Parameter”:右键网络→“Properties”→“Parameters”→新增参数“ASSEMBLY_ENABLE”,值设为“IND”。在PCB中,该网络的走线会根据装配变量自动启停——IND变体下走线连通,CE变体下该段走线被系统标记为“Do Not Route”,Gerber中不输出。
3D模型差异化加载:工业版需加装金属屏蔽罩。在PCB 3D视图中,导入屏蔽罩STEP模型,右键模型→“Properties”→“Assembly Variant”绑定“IND_VARIANT”。生成3D PDF装配图时,仅工业版显示屏蔽罩,且其安装孔位与PCB焊盘自动对齐,避免机械干涉。
这些细节的配置,直接决定工厂能否一次贴对。我曾处理过一个案例:某客户工业版WiFi模块未工作,排查发现是屏蔽罩接地弹片未压紧。根源在于3D模型未绑定装配变量,结构工程师按基础版模型开模,工业版实际需要加厚0.3mm的弹片行程——AD20的3D联动,正是预防此类问题的最后防线。
3.4 输出配置:生成可直接交付工厂的文件包
装配变量定义完成后,必须通过Output Job精确控制输出内容。这是从设计到制造的“翻译器”:
新建Output Job:File → New → Output Job
添加BOM输出:点击“Add Output” → 选择“Bill of Materials” → 在右侧“Variant”下拉菜单中选择“IND_VARIANT”
定制BOM模板:双击刚添加的BOM条目 → “Configure” → 在“Columns”页签中,勾选“Module Name”(显示模块归属)、“Fit Status”(显示Fit/Not Fit)、“Manufacturer Part Number”(强制要求采购部用此料号下单)。特别注意:取消勾选“Comment”字段,因为Comment常含设计备注(如“暂用样品”),会误导采购。
生成装配图:Add Output → “Assembly Drawings” → Variant选“IND_VARIANT” → Configure中启用“Show Only Fitted Components”,并勾选“Display Module Boundaries”。这样生成的PDF图,只显示工业版实际贴装的器件,模块外围用虚线框标出,贴片员一眼可知WiFi模块区域。
导出贴片坐标(Pick & Place):Add Output → “Pick and Place Files” → Variant选“IND_VARIANT” → 在“Options”中,将“Include Not Fitted Components”设为“No”。这是最关键的一步:若设为Yes,坐标文件会包含Not Fit器件的坐标,贴片机可能尝试贴装不存在的器件,导致撞件。
实操心得:所有Output Job必须保存为“.OutJob”文件,并纳入Git版本库。我们曾因Output Job未提交,导致测试版用错BOM模板,采购了5000颗错误料号的Flash芯片,损失23万元。现在团队规定:Output Job与原理图、PCB文件同级存放,每次ECO必须同步更新。
4. 高频问题排查与独家避坑指南
4.1 “Fit/Not Fit不生效”——最常见却最隐蔽的故障
现象:在装配变量中将U101设为Not Fit,但生成的BOM仍包含该器件,贴片坐标文件也有其位置。
排查步骤:
- 检查器件Designator是否唯一:在原理图中Ctrl+F搜索U101,确认无重名。AD20按Designator匹配,若存在U101_A和U101_B,系统无法识别。
- 验证PCB中是否存在对应封装:切换到PCB视图,Filter输入“U101”,看是否真有该封装。若原理图有U101但PCB未放置,装配变量状态无效。
- 确认Output Job绑定正确:右键BOM输出条目→“Properties”,检查“Variant”下拉框是否真的选中目标变体,而非“[All Variants]”。
- 检查器件Parameter冲突:双击U101→“Properties”→“Parameters”,查看是否有“Variant”参数值与装配变量冲突(如手动添加了“Variant=CE”)。
我的独家技巧:在原理图中,选中器件→右键→“Find Similar Objects”→勾选“Designator”,可快速定位所有同名器件。曾有个项目因拷贝器件时未改Designator,导致12个U101全部被同一装配变量控制,险些酿成批量事故。
4.2 “丝印显示错乱”——丝印与装配变量脱钩的典型表现
现象:工业版PCB上,医疗版专用的“MED”丝印仍显示,而工业版的“IND”却缺失。
根本原因:丝印字符串未绑定装配变量,而是全局显示。
解决方案:
- 在PCB编辑器中,用“PCB Filter”输入“Text”,全选所有丝印;
- 按住Shift多选,右键→“Properties”→在“Assembly Variant”栏统一设为“[No Variant]”(即全局隐藏);
- 再单独选中“IND”丝印→Properties→“Assembly Variant”设为“IND_VARIANT”,勾选“Show in Variant”;
- 对“MED”丝印同理,绑定“MED_VARIANT”。
注意:AD20中,丝印的“Assembly Variant”设置优先级高于“Layer”设置。即使丝印放在Top Overlay层,若未绑定变体,它仍会全局显示。务必养成“丝印必绑变体”的习惯。
4.3 “模块打包失败”——原理图结构缺陷的暴露
现象:右键选中WiFi器件→“Create Module from Selection”,弹窗中Module Name为空,或提示“Selection contains no valid components”。
常见原因:
- 器件未在原理图中“Place”而是“Copy/Paste”过来,导致器件ID损坏;
- 选中了网络标签(Net Label)或端口(Port),而模块创建仅支持器件(Component);
- 原理图图纸未编译(Compile),器件未被系统识别。
修复方法:
- 全选疑似器件→右键→“Properties”,检查“Designator”是否可编辑(灰色不可编辑说明ID损坏);
- 若损坏,删除后从库中重新Place;
- 确保只选中器件图标,不选中任何连线或标签;
- 执行Project → Compile PCB Project,确保无Error。
4.4 “BOM数量对不上”——采购与生产交接的致命漏洞
现象:BOM显示某电阻用量1000pcs,但贴片坐标文件只有998个坐标点。
根源:该电阻在原理图中被实例化两次(如R101和R101_1),但PCB中只放置了一个封装。AD20按原理图实例计数,而贴片机按PCB焊盘计数。
验证方法:
- 在原理图中,Ctrl+F搜索R101,看是否出现多个;
- 在PCB中,Filter输入“R101”,确认焊盘数量;
- 运行Tools → Annotation → “Update Schematic”,确保原理图与PCB器件一一映射。
终极防护:在Output Job的BOM配置中,勾选“Group Components by Designator”,并启用“Show Component Count per Designator”。这样BOM会明确列出“R101: 2 pcs (1 placed)”,采购部立刻可知需补1个。
4.5 “Gerber焊盘缺失”——工厂拒收的直接原因
现象:工业版PCB Gerber中,WiFi模块焊盘完全消失,导致工厂无法贴片。
排查重点:
- 检查该模块器件在PCB中的“Footprint”是否为空。AD20中,若器件未关联封装,装配变量会认为“无物理载体”,直接剔除焊盘;
- 查看PCB层叠设置:工业版是否绑定了特殊层叠,而该层叠中未定义对应焊盘层;
- 验证“Output Job”中Gerber设置:是否在“Layers”页签中,为工业版禁用了Top Layer或Paste Mask层。
修复流程:
- 在PCB中,Filter输入模块器件Designator(如U12);
- 双击任一器件→“Properties”→确认“Footprint”字段有有效值(如“QFN-32-1EP”);
- 进入Layer Stack Manager,确认当前层叠包含Top Layer和Paste Mask Top;
- 在Output Job的Gerber配置中,确保“Top Layer”和“Paste Mask Top”处于Enabled状态。
5. 进阶应用:装配变量与企业级流程的深度整合
5.1 与PLM系统的双向数据同步
装配变量定义后,其元数据(变体名称、模块列表、Fit状态)可导出为XML格式,直接对接Windchill或Teamcenter。我们为某汽车电子客户实施时,将AD20装配变量XML映射到PLM的“Configuration Item”对象,实现:
- PLM中创建新变体(如“EV_CHARGE_V3”),自动触发AD20生成对应装配变量;
- AD20中修改模块状态,经ECO审批后,自动更新PLM中该变体的BOM结构;
- 工厂扫码获取订单号,PLM实时返回对应AD20装配变量的BOM与坐标文件。
关键配置:在AD20中,Tools → Preferences → Data Management → 启用“PLM Integration”,指定XML Schema路径。导出时,右键装配变量→“Export to XML”,系统自动生成符合ISO 10303-21标准的文件。
5.2 自动化脚本:批量创建与验证装配变量
面对20+个装配变体,手动配置效率低下。我们用AD20内置的Scripting功能(DelphiScript)编写了验证脚本:
// ValidateAllVariants.dsf Procedure ValidateAllVariants; Var i: Integer; VariantName: String; Begin For i := 0 To Project.VariantCount - 1 Do Begin VariantName := Project.VariantName[i]; If Not Project.ValidateVariant(VariantName) Then Begin ShowMessage('Variant ' + VariantName + ' validation failed!'); Exit; End; End; ShowMessage('All variants validated successfully.'); End;将此脚本放入Scripts文件夹,ECO前运行,5秒内完成全部变体校验。脚本还可扩展:自动比对两个变体的BOM差异,生成Excel报告;或扫描所有Not Fit器件,检查其PCB焊盘是否被其他变体占用。
5.3 与MES系统的实时联动
在贴片车间,MES系统需实时获取每个订单的装配变量信息。我们在AD20输出配置中,为每个变体启用“Custom Output”:
- Add Output → “Custom Output” → Type选“Text File”;
- 在“Template”中编写JSON模板:
{ "OrderID": "${ORDER_ID}", "Variant": "${VARIANT_NAME}", "FittedComponents": [ { "Designator": "U101", "MPN": "STM32H743VIT6" } ], "NotFittedComponents": ["C201"] }生成的JSON文件随BOM一同下发至MES,贴片机根据“NotFittedComponents”列表跳过相应坐标,杜绝误贴。
这套方案已在三家EMS工厂落地,将首件确认时间从45分钟缩短至3分钟,因为MES能精准告知操作员“本次订单跳过哪几个位号”,无需翻查纸质文档。
我在实际项目中最深的体会是:装配变量不是AD20的一个功能按钮,而是硬件开发流程的“中枢神经”。它把散落在Excel、邮件、口头约定里的装配逻辑,收束到一个可验证、可追溯、可自动化的数字主线中。当你的第一个装配变量成功生成BOM并被工厂一次贴准时,那种确定感,远胜于画出一百张完美原理图。毕竟,设计的终点不是图纸,而是稳定量产的板子——而装配变量,就是那根确保终点不偏航的舵。