尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PADS Layout导出BOM与坐标文件:脚本法与CAM Plus操作对比

发布时间:2026/9/28 17:40:48

资讯中心
01
ARTICLE

PADS Layout导出BOM与坐标文件:脚本法与CAM Plus操作对比

PADS Layout导出BOM与坐标文件:脚本法与CAM Plus操作对比
1. 为什么BOM和坐标文件总在项目收尾时拖后腿画完PCB、跑完DRC、连通性检查全绿按理说最难的活儿已经过去了。但真正做过量产项目的人都知道从设计完成到能交给产线中间还卡着一道很容易被低估的工序——导出BOM和坐标文件。这两个文件一个决定采购能不能备齐料一个决定贴片机能不能把元件打到正确的位置上。它们出错板子就是一堆废铜烂铁。我见过太多这样的情况设计工程师花两周时间精雕细琢布局布线结果在导出BOM时因为位号重复、封装名不统一、物料编码缺失被采购和工艺来回打回三四次。坐标文件更隐蔽X/Y方向搞反、旋转角度基准不对、单位混用贴片厂试产时才发现元件全偏了。这些问题不是设计能力问题而是对导出流程和工具特性理解不够深。PADS Layout作为国内中小型电子企业用得极多的PCB设计工具它自带的BOM和坐标导出功能其实够用但用起来有门槛。很多人只会用CAM Plus里那个图形界面的导出向导点几下鼠标完事遇到复杂需求就抓瞎。而另一条路——用脚本法自动生成——知道的人不多用起来的人更少但一旦跑通效率提升是数量级的。这篇内容就是把我自己在实际项目中反复验证过的两条路线完整拆开一条是脚本法一键生成适合有批量需求、需要定制字段、想接入自动化流程的场景另一条是CAM Plus对比操作适合快速出图、临时改板、不想折腾脚本的场合。两条路我都会给出具体操作、参数含义、踩过的坑以及什么情况下该选哪条。不管你是刚接触PADS的新手还是用了几年但一直用笨办法的老手都能从中找到能直接抄作业的东西。2. 先搞清楚BOM和坐标文件到底要包含什么在动手导出之前得先明确这两个文件各自承载什么信息、下游是谁在用。很多人导出文件出问题根源不是操作不熟而是根本没想清楚这份文件要交给谁、对方拿它干什么。2.1 BOM的字段构成与采购视角BOM全称Bill of Materials物料清单。它的核心作用是告诉采购和库房这块板子要用哪些料、每种料用多少、装在哪里。一份能直接下厂的BOM至少应该包含这几列字段含义是否必需Item行号建议有Quantity单板用量必需Reference Designator位号如R1,R2,C5必需Value参数值如10K,100nF必需Part Number物料编码/料号必需Description描述建议有Manufacturer制造商可选Footprint封装名建议有这里最容易出问题的是位号合并。同一颗10K电阻用了20次BOM里应该是一行Quantity写20Reference Designator列把20个位号用逗号隔开。如果每个位号单独一行采购会疯掉。PADS默认导出是按位号逐行列的需要做合并处理这是第一个关键点。另一个坑是物料编码缺失。很多公司的原理图里只填了Value和Footprint没有Part Number。导出的BOM到了采购手里对方不知道10K电阻具体要买哪个型号、什么封装、什么精度。所以导出前一定要确认原理图属性里Part Number字段是否完整。如果公司有物料库最好在原理图阶段就关联好。2.2 坐标文件的基准与贴片机需求坐标文件Pick and Place File也叫贴片坐标文件、位置图是给SMT贴片机用的。它告诉机器每个元件在PCB上的绝对坐标是多少、旋转多少度、在哪一面。核心字段包括Designator位号LayerTop/Bottom表示元件在顶层还是底层X坐标元件中心相对于原点的X位置Y坐标元件中心相对于原点的Y位置Rotation旋转角度Package/Footprint封装类型坐标文件最大的坑在于原点位置和旋转基准。PADS默认的原点可能在板子左下角也可能在某个随意位置而贴片厂通常要求原点设在板子左下角或某个Mark点。如果原点不对所有坐标都是错的。旋转角度更微妙PADS里元件属性中的Rotation和贴片机理解的Rotation可能差90度或180度这取决于封装库的零点定义。我遇到过整板电阻电容全部旋转90度的情况就是因为封装库的零点方向和贴片机默认约定不一致。提示导出坐标文件前务必和贴片厂确认三件事——原点要求、旋转角度基准、单位是毫米还是密尔。这三个参数不确认导出的文件大概率要返工。2.3 两种导出路线的本质差异PADS Layout导出BOM和坐标本质上是从设计数据库里提取属性信息再按特定格式输出。CAM Plus是一条路它通过图形界面配置输出内容底层调用的还是PADS的报表引擎。脚本法是另一条路直接用PADS支持的脚本语言Basic Script或Python访问设计对象自己控制输出格式和内容。两者的核心差异在于可控粒度和自动化程度。CAM Plus是配置型你在界面上勾选要哪些字段、怎么排序、怎么合并它按你的配置生成。脚本法是编程型你写代码遍历所有元件自己决定怎么过滤、怎么合并、怎么格式化。前者上手快但灵活性受限后者学习曲线陡但一旦写好可以反复用、可以定制任何格式。3. 脚本法写一次以后每次导出都是几秒钟的事脚本法是我现在做量产项目的主力方案。原因很简单一旦脚本调通每次改完板子导出BOM和坐标就是点一下按钮的事不用再重复配置CAM Plus那一堆选项。而且脚本可以处理CAM Plus搞不定的复杂逻辑比如按物料编码合并、自动过滤不上件的元件、输出公司指定格式的Excel。3.1 PADS脚本环境与基本对象模型PADS Layout支持两种脚本Basic Script和Python。Basic Script是PADS自带的兼容性好但语法老旧Python需要额外配置但写起来舒服得多。我建议用Python因为处理字符串、写文件、调库都方便。PADS的脚本对象模型核心是Application对象通过它可以访问当前打开的PCB文档。关键对象包括Application.ActiveDocument当前文档Document.Components所有元件的集合Component.Reference位号Component.PartType元件类型Component.Value参数值Component.Position位置信息X,YComponent.Rotation旋转角度Component.Layer所在层下面是一个最简化的Python脚本框架用来遍历所有元件并打印位号和坐标import pads import math app pads.Application doc app.ActiveDocument # 遍历所有元件 for comp in doc.Components: ref comp.Reference x comp.Position.X y comp.Position.Y rot comp.Rotation layer comp.Layer print(f{ref},{x},{y},{rot},{layer})这段代码跑起来就能看到所有元件的基本信息。但实际用的时候远不止这么简单需要处理单位转换、坐标原点偏移、属性提取等问题。3.2 从零写一个可用的BOM导出脚本一个能直接用的BOM脚本需要完成这几件事遍历元件、提取属性、按物料编码或ValueFootprint合并、统计数量、按指定格式输出CSV。先看属性提取。PADS里元件的属性存在Attributes集合里可以通过属性名访问def get_attr(comp, attr_name): try: return comp.Attributes(attr_name).Value except: return 然后是合并逻辑。合并的key通常用PartNumber如果没有就用Value Footprint组合bom_dict {} for comp in doc.Components: # 跳过不上件的元件 if get_attr(comp, ExcludeFromBOM) Yes: continue part_num get_attr(comp, PartNumber) value comp.Value footprint comp.PartType desc get_attr(comp, Description) # 确定合并key if part_num: key part_num else: key f{value}|{footprint} if key not in bom_dict: bom_dict[key] { part_num: part_num, value: value, footprint: footprint, desc: desc, refs: [] } bom_dict[key][refs].append(comp.Reference)最后输出CSV位号列表要排序并逗号分隔import csv with open(bom_output.csv, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([Item, Quantity, Reference, Value, PartNumber, Footprint, Description]) for idx, (key, item) in enumerate(bom_dict.items(), 1): refs sorted(item[refs], keylambda r: (r[0], int(.join(filter(str.isdigit, r)) or 0))) writer.writerow([ idx, len(refs), ,.join(refs), item[value], item[part_num], item[footprint], item[desc] ])这段代码有几个细节值得说。位号排序不能简单按字符串排否则R10会排在R2前面。我用了(首字母, 数字部分)的排序key这样R1、R2、R10的顺序就对了。另外文件编码用了utf-8-sig这样Excel打开中文不会乱码这是踩过坑才知道的。3.3 坐标文件脚本的关键原点偏移与角度校正坐标文件脚本比BOM多两个关键处理原点偏移和角度校正。原点偏移是因为PADS里的坐标是相对于设计原点的而贴片厂要的是相对于板子左下角或Mark点的坐标。假设板子左下角在PADS里的坐标是(origin_x, origin_y)那么每个元件的实际坐标是actual_x comp.Position.X - origin_x actual_y comp.Position.Y - origin_y原点坐标可以从板框Board Outline的边界框获取outline doc.BoardOutline min_x outline.BoundingBox.MinX min_y outline.BoundingBox.MinY角度校正更麻烦。PADS里元件的Rotation是相对于封装库零点的而贴片机的角度基准可能不同。常见的校正方式是加一个偏移量def correct_rotation(rot, offset0): corrected (rot offset) % 360 return corrected这个offset具体是多少取决于你的封装库和贴片厂的约定。我一般先导出一版让贴片厂确认如果整体偏了90度就把offset改成90或-90。这个值一旦确定以后所有板子都能用。还有一个容易忽略的点底层元件。底层元件的X坐标通常需要镜像处理因为贴片机是从上往下看的。PADS里底层元件的坐标可能已经是镜像后的也可能不是这取决于版本和设置。稳妥的做法是导出后让贴片厂确认或者自己拿一块已知板子验证。3.4 脚本的调试与常见报错处理PADS脚本调试不像普通Python那么方便没有断点调试只能靠打印输出。我的习惯是在关键步骤加print把中间结果输出到文件跑完再看。常见报错有这么几类属性不存在访问comp.Attributes(PartNumber)时如果该元件没有这个属性会抛异常。所以要用try-except包起来返回空字符串。单位不一致PADS内部单位可能是密尔也可能是毫米取决于文档设置。导出前要确认单位必要时做转换。1毫米39.37密尔。元件未放置原理图里有但PCB上没放的元件在doc.Components里可能不存在或者位置是(0,0)。需要过滤掉。特殊字符位号或Value里如果有逗号、引号CSV会错位。输出前要做转义处理。注意脚本跑通一次不代表永远没问题。每次PADS升级、封装库更新、公司物料编码规则调整都可能让脚本失效。建议把脚本纳入版本管理每次改动记录原因。4. CAM Plus路线不写代码也能导出但有几个隐藏选项必须改不是每个人都需要写脚本也不是每个项目都值得花时间调脚本。对于临时改板、小批量试产、或者刚接触PADS的新手CAM Plus是更现实的选择。但CAM Plus的默认配置有几个坑不改的话导出的文件基本不能用。4.1 CAM Plus导出BOM的完整操作链路打开PADS Layout菜单栏选File→CAM弹出CAM Plus窗口。在左侧列表里找到Assembly分类里面有几个和BOM相关的选项。但严格来说CAM Plus主要面向光绘和钻孔文件BOM导出其实在另一个地方——File→Reports。不过很多人不知道的是CAM Plus里也可以配置BOM输出。具体路径是在CAM Plus窗口里点AddDocument类型选Assembly然后Format选BOM。这样配置出来的BOM可以和其他CAM输出一起批量生成适合需要一次性输出整套生产文件的场景。配置BOM时的关键选项Output Format选CSV或TextCSV方便Excel打开Sort By建议按Part Number或Value排序方便核对Combine By这是最关键的选项决定怎么合并相同物料。选Part Number或ValueFootprintInclude Attributes勾选需要输出的属性字段PartNumber、Description、Manufacturer等默认配置下Combine By可能是None也就是每个位号一行。这就是为什么很多人导出的BOM有几百行采购看了直摇头。改成按Part Number合并后行数会大幅减少。4.2 坐标文件在CAM Plus中的参数陷阱坐标文件在CAM Plus里的路径是Add→ Document类型选Assembly→ Format选Pick and Place。配置界面有几个参数直接决定文件能不能用。Units选毫米还是密尔。国内贴片厂大多用毫米但有些老厂还用密尔。导出前问清楚。Origin原点位置。默认可能是Absolute设计原点需要改成Board Outline的左下角或者手动指定坐标。这个选项藏得比较深在Options按钮里面。Rotation旋转角度的处理方式。有个选项叫Rotate to nearest 90意思是把角度归整到最近的90度。这个选项要慎用如果贴片厂需要精确角度勾了它反而会出错。Mirror Bottom Layer底层元件是否镜像。这个选项和贴片机的约定有关建议先不勾导出后让贴片厂确认如果底层元件全反了再勾上重新导。我自己的经验是CAM Plus导出的坐标文件第一次给新贴片厂时一定要让他们先确认格式不要直接上产线。确认内容包括原点位置对不对、角度基准对不对、底层元件方向对不对。这三项确认完以后同一家厂就可以直接用了。4.3 两种路线在真实项目中的选择依据脚本法和CAM Plus不是非此即彼的关系实际项目中往往两种都用。我的选择依据是这样的场景推荐路线理由量产项目频繁改版脚本法一次写好每次导出几秒钟临时改板只导一次CAM Plus配置几分钟不用写代码需要定制字段和格式脚本法CAM Plus格式固定改不了新手第一次导出CAM Plus图形界面直观不容易出错需要接入自动化流程脚本法可以命令行调用集成到CI公司有多个设计工程师脚本法统一格式避免每人导出的不一样还有一个现实因素脚本法需要维护。PADS版本升级、封装库变更、公司物料规则调整都可能让脚本失效。如果团队里没有人愿意维护脚本那CAM Plus反而是更稳妥的选择。我见过太多写了个脚本但没人维护最后大家还是用CAM Plus的情况。5. 那些年我在导出BOM和坐标时踩过的坑这一节不讲操作步骤专门讲踩过的坑。这些坑在官方文档里基本找不到但每一个都让我返过工、挨过骂。5.1 位号重复与封装名不统一导致的合并失败有一次导出的BOM采购反馈说同一个10K电阻出现了三行数量分别是5、8、7。我检查了半天发现原因是这三个电阻的封装名不一样一个是R0603一个是RES0603一个是0603R。它们其实是同一种物料但封装名不统一BOM合并时就分成了三组。这个问题根源在原理图库管理。不同人建的库、不同时期建的库封装命名规则不统一。解决办法有两个一是在原理图阶段就统一封装命名规范二是在BOM脚本里做封装名映射把不同写法归一到同一个标准名。我后来在脚本里加了一个映射表footprint_map { R0603: 0603, RES0603: 0603, 0603R: 0603, # ... }这样不管封装名怎么写合并时都用标准名。这个映射表需要根据公司实际库情况维护但一旦建好BOM合并就再也没出过问题。5.2 坐标文件原点偏移引发的整板偏移有一次试产贴片厂反馈说所有元件都偏了5毫米。我检查了坐标文件发现原点设在了板子左下角但板子左下角在PADS里的坐标不是(0,0)而是(5,5)。也就是说我导出时没有做原点偏移元件坐标是相对于设计原点的而贴片厂以为是相对于板子左下角的。这个问题在CAM Plus里也有。CAM Plus的Origin选项如果选Absolute导出的就是设计原点坐标如果选Board Outline它会自动做偏移。但Board Outline的偏移基准是板框的边界框左下角如果板框不是矩形或者有多个板框偏移可能不对。我的做法是导出前先在PADS里把设计原点手动移到板子左下角。具体操作是Setup→Set Origin然后点板子左下角。这样导出的坐标就是相对于板子左下角的不用再做偏移。这个操作很简单但很多人不知道导致坐标文件反复出问题。5.3 旋转角度基准不一致的排查过程旋转角度的问题最隐蔽因为导出的文件看起来是对的但贴片厂打出来就是偏的。我遇到过一次整板电阻电容全部偏90度。排查过程是这样的第一步确认PADS里元件的Rotation值。打开元件属性看Rotation是多少。比如一个电阻是0度。第二步确认封装库的零点方向。打开封装库看元件的零点在哪个方向。有些封装库的零点在元件中心有些在1脚有些在某个角。第三步确认贴片机的角度基准。这个需要问贴片厂他们的机器默认0度是哪个方向。这三步对下来发现封装库的零点方向和贴片机的基准差了90度。解决办法是在导出脚本里加90度偏移或者在CAM Plus里设置Rotation Offset。这个偏移量一旦确定以后所有板子都加这个值。提示旋转角度问题最好在第一次合作时就确认清楚。拿一块简单的板子放几个不同角度的元件导出坐标后让贴片厂确认。确认一次以后省心。5.4 底层元件镜像处理的两种策略底层元件的坐标处理有两种策略一种是导出时不做镜像贴片机自己处理另一种是导出时就镜像好贴片机直接用。哪种对取决于贴片厂的设备和习惯。PADS里底层元件的坐标默认是相对于顶层视角的。也就是说如果你从顶层往下看底层元件在左边但实际从底层往上看它在右边。贴片机贴底层时是从上往下看的所以需要镜像。CAM Plus里有个Mirror Bottom Layer选项勾上就会镜像底层元件的X坐标。脚本里可以自己处理if comp.Layer Bottom: actual_x board_width - actual_x但这里有个坑镜像的基准是板子宽度如果板子不是矩形或者原点不在左下角镜像就会错。所以镜像处理最好和原点设置一起考虑确保基准一致。我的建议是先不镜像导出后让贴片厂确认。如果他们说底层元件全反了再镜像重新导。不要自己猜猜错了返工成本更高。6. 把导出流程固化下来从个人技巧到团队规范一个人会导出BOM和坐标不难难的是让团队里每个人都导出正确的文件。我经历过从每个人按自己习惯导到统一流程的转变中间踩了不少坑也总结了一些可落地的方法。6.1 建立公司自己的导出模板不管是脚本法还是CAM Plus都应该有一套公司标准的导出模板。CAM Plus的配置可以保存成模板文件下次直接加载。脚本可以放在共享目录每个人用同一份。模板里应该固定这些内容字段列表和顺序合并规则按Part Number还是ValueFootprint原点设置单位和角度基准输出文件命名规则命名规则很重要。我见过有人导出bom.csv有人导出BOM_20240315.csv有人导出物料清单.csv。文件一多就乱。统一命名规则比如项目名_版本号_BOM_日期.csv找起来方便也不容易搞混版本。6.2 导出前的自检清单导出前花两分钟做自检能省掉后面两小时的返工。我的自检清单是这样的原理图里所有元件的PartNumber是否完整是否有元件标记了ExcludeFromBOM但实际需要上件封装名是否统一没有R0603和RES0603混用设计原点是否在板子左下角底层元件是否需要镜像单位是毫米还是密尔和贴片厂确认过没有旋转角度基准和贴片厂确认过没有这七项检查完导出的文件基本不会有大问题。我把它做成了一个检查表每次导出前过一遍养成习惯后也就一两分钟的事。6.3 和采购、工艺的对接要点BOM给采购坐标给工艺但这两份文件的信息要一致。我遇到过BOM里写了20个电阻坐标文件里只有18个的情况原因是两个元件在PCB上没放但原理图里有。采购按BOM备了20个的料结果多了2个。对接要点BOM和坐标文件的位号必须完全一致不上件的元件要在两份文件里都排除版本号要一致BOM是V1.2坐标也必须是V1.2文件格式要提前确认采购可能要Excel工艺可能要CSV还有一点BOM里的物料编码要和公司ERP系统里的编码一致。如果ERP里编码是RES-0603-10K-1%BOM里就不能写10K电阻。这个一致性需要在原理图阶段就保证导出时只是提取。6.4 版本变更时的重新导出策略板子改版后BOM和坐标都要重新导出。但重新导出不是简单再跑一遍脚本要注意几个点改版可能新增或删除元件BOM的行数和内容会变元件位置可能移动坐标会变元件角度可能调整旋转角度会变物料可能替换PartNumber会变我的做法是每次改版后把新导出的BOM和上一版做diff看看哪些行变了。如果只是数量变化确认一下是不是真的增减了元件。如果PartNumber变了确认是不是有意替换。这个diff过程能发现很多意外改动。坐标文件的diff更直观直接对比X/Y坐标看哪些元件移动了。如果某个元件移动了但BOM没变那可能是布局调整没问题。如果BOM变了但坐标没变那可能是替换了物料但位置没动也没问题。两个文件结合起来看能快速定位改版影响范围。7. 一些让效率再高一点的补充技巧前面讲的都是核心流程这一节补充几个能让效率再提升的小技巧。这些技巧不是必需的但用了之后会觉得很香。7.1 用Excel宏做BOM后处理脚本导出的BOM是原始数据有时候还需要在Excel里做后处理比如加公司抬头、调整列宽、加边框、按供应商分类。这些操作可以用Excel宏自动化。我常用的一个宏是做BOM格式美化设置列宽、加粗表头、加边框、冻结首行。代码不长但每次导出后跑一下省去手动调整的时间。另一个宏是做BOM对比把新旧两版BOM放在两个sheet里宏自动标出差异行。这个在改版频繁的项目里特别有用。7.2 坐标文件的快速验证方法导出的坐标文件怎么验证对不对我的方法是拿一块已知板子手动量几个元件的坐标和文件里的对比。比如板子左下角有个电阻手动量它的中心位置是(10.5, 8.2)文件里也是(10.5, 8.2)那就对了。还有一个更快的验证方法把坐标文件导入PADS Layout看生成的元件位置和实际PCB是否重合。具体操作是File→Import选坐标文件PADS会在PCB上生成标记。如果标记和元件重合说明坐标正确如果偏移说明原点或单位有问题。7.3 脚本的版本管理与团队共享脚本写好后要纳入版本管理我用Git。每次修改都提交记录改了什么、为什么改。这样如果改出问题可以回退到上一个版本。团队共享的话把脚本放在共享目录每个人从那里取。但要注意PADS版本兼容性不同版本的PADS脚本API可能有差异。我一般会在脚本开头加版本检查如果PADS版本不对就提示。还有一个经验脚本里不要硬编码路径。比如输出文件路径不要写死C:\Users\XXX\Desktop\bom.csv而是用相对路径或从配置文件读取。这样别人用的时候不用改代码。7.4 什么时候该放弃脚本改用CAM Plus脚本不是万能的。有几种情况我会放弃脚本直接用CAM Plus只导一次以后不再用这个板子脚本出了问题短时间内修不好但急着要文件新同事不熟悉脚本教他用CAM Plus更快PADS版本刚升级脚本还没适配放弃脚本不丢人工具是为人服务的怎么快怎么来。我见过有人为了用脚本花半天调代码而CAM Plus五分钟就搞定了。这种时候脚本反而成了负担。反过来如果项目要反复改版、要导很多次、要定制格式那花时间调脚本是值得的。判断标准很简单如果重复操作超过三次就值得自动化。这是我在实际工作中总结出来的经验分享给你参考。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。