一次“导出Gerber”的背后:如何让团队协作不再为PCB文件版本扯皮?
你有没有遇到过这样的场景:
- 工厂打回来的板子缺了阻焊层,查了一圈才发现是某位同事导出时漏勾了一项;
- 团队里五个人都叫“最终版_V2”,但没人说得清哪个才是真·最终;
- 新人接手项目,面对一堆
TOP.gbr、BOT.gbr、drill.txt完全摸不着头脑; - 改了个电源网络重新布线,结果忘了重新导出Gerber,拿旧文件去贴片,烧了几块样板……
这些看似琐碎的问题,背后其实指向同一个痛点:“AD导出Gerber文件”这个动作,在多人协作中缺乏标准化和可追溯性。
别小看这一“点几下鼠标”的操作——它直接决定了你的电路板能不能正确制造出来。而一旦失控,轻则返工延误,重则整批报废。
今天我们就来深挖一下:如何把“Altium Designer导出Gerber文件”这件事,从“个人习惯行为”变成“团队可控流程”。
一、为什么“导出Gerber”会成为协作黑洞?
在单人开发时代,设计师自己画、自己审、自己导出,闭环清晰。但在现代电子研发中,一个项目往往涉及原理图、Layout、电源、射频、结构等多个角色协同,再加上频繁迭代,问题就来了:
1. 操作不一致 = 输出不可信
Altium Designer 的 Gerber 输出设置多达几十项:
- 单位用英制还是公制?
- 格式精度是 4:3 还是 4:4?
- 是否镜像顶层丝印?
- 孤立焊盘要不要保留?
- 钻孔文件是否包含NPTH?
如果每个人凭感觉选,哪怕只是差了一个复选框,生成的光绘数据可能就天差地别。
曾有团队因一人误设“Negative Polarity”导致整板反白曝光,工厂做出来的板子铜皮全没了——代价是7万元打样费打水漂。
2. 文件命名混乱 = 管理成本飙升
试想你收到一个压缩包,里面有:
top.gbr bottom.gbr soldermask.gbr drill.txt final_gerber_v3_real.zip你能确定这是哪个版本的设计?改了哪些地方?谁导出的?什么时候导出的?
没有上下文的信息就是垃圾数据。
3. 缺乏版本绑定 = 责任无法追踪
设计改了三次,但只导出了两次Gerber。第三次变更后没人重新输出,结果生产用了旧文件。
这种“设计与制造脱节”的情况,在快节奏项目中极为常见。
二、破局之道:三大支柱构建可信赖的输出体系
要解决这些问题,不能靠提醒、不能靠自觉,必须建立机制级保障。我们总结出三个核心支柱:
统一模板 × 规范命名 × 版本集成
只有三者联动,才能真正实现“每一次导出都是可靠的”。
支柱一:用输出模板固化最佳实践(告别手动配置)
与其指望每个人都记住所有设置,不如把标准“封装”成模板。
✅ 推荐做法:创建.OutputJob文件作为团队标准
Altium 提供了强大的Output Job Configuration功能,可以将整个制造输出流程打包保存。比如你可以创建一个名为Fabrication_Standard.outputjob的文件,其中包含:
- Gerber RS-274X 输出(含单位、精度、原点偏移)
- Excellon 钻孔文件(通孔/盲埋孔分开输出)
- IPC-356 测试点网表
- PDF 装配图(带 BOM 表格)
- 3D STEP 模型导出
更重要的是,这些设置是锁定的。新人只要双击运行这个任务,就能一键输出全套文件,无需理解每个参数含义。
🛠 实战建议:
- 将
.outputjob文件纳入 Git 版本控制; - 命名规则为
ProjectName_FabOutputs_vX.job; - 每次重大工艺变更(如首次使用HDI)更新模板并打标签;
这样,哪怕十年后再翻老项目,也能还原当时的输出逻辑。
支柱二:命名规范不是小事,它是机器可读的语言
文件名是你留给世界的“第一印象”。好的命名能让任何人一眼看懂它的身份。
✅ 推荐格式:
<Project>_<Rev>_<Layer>.<ext>例如:
MotorDriver_Module_v1.4.0_TOP.gbr MotorDriver_Module_v1.4.0_SMT.gbr MotorDriver_Module_v1.4.0_DRL.drl🔤 层别编码推荐表(团队共识):
| 层名称 | 缩写 |
|---|---|
| Top Layer | TOP |
| Bottom Layer | BOT |
| Solder Mask Top | SMT |
| Solder Mask Bottom | SMB |
| Paste Mask Top | PST |
| Paste Mask Bottom | PSB |
| Silkscreen Top | SIL |
| Silkscreen Bottom | SIB |
| Internal Plane 1 | IN1 |
| Drill File | DRL |
⚠️ 注意事项:
- 不要用中文、空格、特殊字符(如#,&);
- 版本号优先使用 SemVer(语义化版本),便于排序和自动化处理;
- 所有文件放在同一目录下,避免嵌套多层文件夹。
💡 高阶技巧:加入时间戳或Git Hash(用于CI环境)
在自动化流程中,还可以附加更多信息:
sensor_board_v2.1.0_20250405_GitAbc123_TOP.gbr这使得每一份输出都具备全局唯一标识,彻底杜绝歧义。
支柱三:把“导出Gerber”接入版本控制系统(让它有迹可循)
这才是真正的质变——让制造文件和代码一样可追溯、可对比、可审计。
🔄 标准协作流程应该是这样的:
graph LR A[设计师提交PcbDoc至Git] --> B[发起Pull Request] B --> C[团队Code Review + DRC检查] C --> D[合并至release分支] D --> E[CI系统自动触发Gerber导出] E --> F[上传制品库 + 创建Release] F --> G[通知生产/采购下载]不再是“我本地导了个包发你邮箱”,而是“点击GitHub Release页面下载经验证的v1.3.0制造包”。
🧪 关键能力支持:
| 能力 | 实现方式 |
|---|---|
| 版本回溯 | 每个Gerber包关联Git commit hash |
| 差异分析 | 使用 CAM350 或 DiffPlug 对比两个版本Gerber变化 |
| 完整性校验 | 附带 SHA256 校验码,防止传输损坏 |
| 权限控制 | 只有通过CI构建的包才允许发布 |
| 审计留痕 | 所有操作记录在日志中,满足 ISO9001 要求 |
三、动手实战:用 GitHub Actions 自动化导出Gerber
下面是一个真实可用的 CI 流程示例,实现“推标签 → 自动导出 → 发布Release”。
📁 工作流文件:.github/workflows/fab-export.yml
name: Generate Fabrication Package on: push: tags: - 'v*' # 仅当推送形如 v1.0.0 的标签时触发 jobs: export-gerbers: runs-on: windows-latest env: AD_PATH: "C:/Program Files/Altium/AD23/DXP.exe" SCRIPT_NAME: "ExportGerber.dsp" steps: - name: Checkout Source Code uses: actions/checkout@v4 - name: Install Altium Script Runner (if needed) run: | # 若需额外依赖可在此安装 echo "Assuming Altium is pre-installed on runner." - name: Run AD Script to Export Gerber & Drill shell: cmd run: | start "" /wait "{{env.AD_PATH}}" \ -RunScript:"{{env.SCRIPT_NAME}}" \ -Command=ExportGerberFiles \ -Wait - name: Verify Output Files Exist run: | dir Outputs\Gerber\*.gbr dir Outputs\Drill\*.drl - name: Upload Artifacts for Debugging uses: actions/upload-artifact@v3 with: name: gerber-package-${{ github.ref_name }} path: | Outputs/Gerber/ Outputs/Drill/ - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref }} name: "🔧 Fabrication Package ${{ github.ref }}" body: | This release contains the official fabrication files for revision ${{ github.ref }}. - Gerber Files: `Outputs/Gerber/` - Drill Files: `Outputs/Drill/` - Generated via CI at ${{ github.run_id }} draft: false prerelease: false files: Outputs/**/*📜 配套脚本:ExportGerber.dsp(Delphi Script)
// ExportGerber.dsp procedure ExportGerberFiles; var PCBDoc : IPCB_Document; Job : IPCB_FabricationOutputJob; begin // 获取当前PCB文档 PCBDoc := GetActiveDocumentPCB; if PCBDoc = nil then begin ShowMessage('Error: No active PCB document.'); Exit; end; // 创建输出任务 Job := PCBServer.CreateFabricationOutputJob; Job.Name := 'Automated_Gerber_Output'; Job.OutputPath := 'Outputs/Gerber/'; // 配置Gerber输出 with Job.AddGerberOutput do begin Units := eUnitMillimeter; Format := eFormat4_4; IncludeUnconnectedMidLayers := True; MirrorPlot := False; RouteAndFillPolygons := True; SuppressViaHoles := False; UseRoutingLayerSettings := True; end; // 添加钻孔输出 with Job.AddNC_DrillOutput do begin OutputPath := 'Outputs/Drill/'; Format := eExcellon; Units := eUnitMillimeter; LeadingZeroes := True; end; // 执行输出 try Job.Execute; ShowMessage('✅ Gerber and drill files exported successfully!'); except on Exception do ShowMessage('❌ Failed to export fabrication files.'); end; end;✅ 提示:将该脚本放入仓库根目录,并确保CI环境中路径一致。
四、避坑指南:那些年我们在Gerber上踩过的雷
以下是我们在多个硬件团队落地过程中总结的“高频事故清单”及应对策略:
| 坑点现象 | 根本原因 | 解决方案 |
|---|---|---|
| Gerber显示大面积反白 | 极性设为 Negative | 在模板中强制设置 Polarity = Positive |
| 钻孔文件缺失 NPTH 孔 | 忘记勾选 Non-Plated Through Holes | 输出任务中明确启用 NPTH 分类 |
| 丝印文字被削角 | 字体太细+阻焊开窗过大 | 增加丝印宽度至≥5mil,或关闭“Remove Silkscreen Over SMD” |
| 多层板内层错位 | 层映射未正确指定 | 使用.stackup文件同步叠层信息 |
| 文件传给工厂后打不开 | 使用了非标准扩展名 | 统一使用.gbr/.drl,禁用.gtp.gbl等历史格式 |
💬 经验之谈:最好的防错方式不是培训,而是让错误根本无法发生。通过模板锁定关键选项,比口头强调有效一百倍。
五、结语:从“手工交付”到“工程化输出”
回到最初的问题:
“导出Gerber”真的只是点几下鼠标吗?
答案显然是否定的。
在一个成熟的硬件研发体系中,每一次制造文件的输出都应该是一次受控的、可重复的、可验证的工程事件,而不是某个工程师桌面上的一次随机操作。
当你能把“AD导出Gerber文件”这件事做到:
-自动化执行
-标准化命名
-版本化归档
-全流程追溯
你就已经走在了大多数团队前面。
未来,随着硬件DevOps理念普及,我们会看到更多自动化质检(AI检板)、数字孪生仿真、云化CAM审查等能力融入这个链条。而这一切的基础,正是今天我们讨论的这套“可靠输出机制”。
所以,请不要再让你的PCB命运,掌握在某个人的手动操作上。
让工具替你把关,让流程为你兜底。
如果你也在推进团队规范化建设,欢迎留言交流你们的做法。也可以分享你在Gerber输出中踩过的坑,我们一起填平它。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考