ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AD21中Keepout层与机械层互转的两种高效方法及Gerber排雷指南

AD21中Keepout层与机械层互转的两种高效方法及Gerber排雷指南 做PCB设计的人应该都遇到过这个场景从别人手里接到一块板子惯例性地点开机械层想确认板框结果发现整圈外形线全画在Keepout层上或者自己画原理图的时候图省事直接用Keepout层画了一圈禁布区当板框结果要出Gerber给板厂时工艺那边回一句“外形层是哪层机械层没东西”。于是你只能把整框线一根一根地从Keepout层挪到机械1层。这种手动挪线我最早也干过二三十根线慢的话能折腾近一个小时最坑的是总有一小段圆弧或零碎的短线漏在原来的层里到后期整板检查才暴露出来。后来在AD21里摸出了两套批量互转的方法一套是纯界面操作用查找相似对象加上属性面板一把梭不写任何代码另一套是写一个DelphiScript小脚本挂进菜单里一键把Keepout层和机械层整层对翻。这两套方案我用了两三年从单板改板框到批量处理多块工程文件都很稳。这篇就掰开揉碎讲清楚顺便把转换后出Gerber文件时该勾的层、该避的坑一起整理了。1. 先把这两个层搞清楚Keepout和机械层到底差在哪1.1 字面意思和实际用途一个管禁布一个管外形很多人搞混这两个层是因为在屏幕上看它们都可以画线、画圆弧甚至看起来都能当板框用。但它们在AD21里的底层逻辑完全不同。Keepout层全称是Keepout Layer中文通常叫禁止布线层。它的本质是规则约束层画在Keepout层上的图形对象会自动带上Keepout属性提示布局布线的“禁区边界”。自动布线器遇到它要绕着走手动布线推挤时它也能挡住你铺铜的时候铜皮会自动在它边界处收边甚至DRC规则检查也会把它当成违规边界来卡。换句话说Keepout层上的内容不生产实物它只是告诉AD“这块区域不能放线、不能铺铜、不能放元器件”。机械层也就是Mechanical LayersAD里默认有一排机械1层、机械2层、机械3层……它的本质是物理信息搬运工。板框外形、V割线、定位孔、螺丝孔标注、装配高度、散热器轮廓、元器件的结构边界、各种说明文字全都按类别放在不同的机械层中。板厂拿到生产文件时主要就是看机械层里的板框线来切板看机械层里的标注来理解特殊工艺要求。这两个层的属性差异非常大我整理了一个直接对照表对比项Keepout层机械1层本质定位规则约束层物理制造信息层是否参与DRC是主动约束布线与铺铜否默认不参与出Gerber时是否强制输出不勾选就不输出不勾选就不输出但板厂通常需要它是否影响3D板框不影响配合Board Shape定义板框常见用途禁布区、天线净空、安装禁区板框、外形、V割、标注从板厂角度多数CAM软件不把它当外形默认当作外形层识别从这个表能看出来Keepout层和机械层虽然在画图操作上“长得像”但一个是给软件看的规则一个是给工厂看的图纸。如果板框线画在Keepout层软件看得懂工厂就不一定看得懂或者要看你在导出Gerber时有没有额外勾上Keepout层。1.2 为什么大家都在“手动挪线”互转的真实动机既然这两个层定位完全不同为什么会有大量互转需求我从实际工程里总结出三个最常见的场景。第一个场景是从第三方EDA或DXF/DWG格式导入的板框。机械结构工程师画的外形图经常导成DXF格式你在AD里导入后发现所有外形线都自动落到了Keepout层再手动拖到机械层如果不做层映射就是一整框线全堆在Keepout层上。第二个场景是旧模板和旧工程的历史遗留问题。AD低版本时代有不少人习惯把板框直接画在Keepout层后来转给同事或客户对方用的是AD21或更新版本打开后默认只认机械层这时候就面临着整层转线的尴尬。第三个场景是出Gerber文件时发现层配置不对。现在搜“ad21出gerber”相关经验的人非常多很多人卡在生成GBL外形层这一步——明明屏幕上有板框生成的光绘文件在CAM软件里打开就是没外形。十有八九就是板框所在的层没被勾选到输出列表里。解决办法很简单要么在Gerber Setup里把Keepout层勾上要么直接把板框转到机械1层再输出。多数板厂和标准生产工艺更认机械层所以“Keepout转机械层”就成了更通用的解法。2. 方法一Find Similar Objects 属性面板批量改层零脚本够快2.1 核心原理让AD把“同一类对象”自动选出来纯界面操作的核心不是真的让软件“识别Keepout层然后一键换层”而是利用AD的查找相似对象功能把同一层上的对象全部选中然后用Properties面板对多选对象做批量属性修改。这样做的好处非常明显不需要记命令、不需要写代码、也不需要额外装脚本插件用到的菜单和面板全是AD21自带的功能对新手特别友好。这个功能的入口有几种方式选中一个目标对象后右键菜单里的Find Similar Objects查找相似对象或者快捷键ShiftF11以及在右下角Panels里打开的PCB Inspector中做筛选。无论用哪个入口背后干的都是同一件事按你指定的属性条件把PCB上所有匹配的对象筛选出来同时把它们高亮显示。这里要特别注意一个点Find Similar Objects对话框里每一行属性后面都有一个“Same”复选框。勾选Same代表“查找时要求该属性必须和当前选中对象一致”不勾代表“忽略这个属性”。我们想把整个Keepout层的对象都选中只需要勾选Layer这一行的Same其他行保持不勾即可。这样软件就会忽略线的长度、宽度、是否锁定等差异只按“层相同”这个条件去全选。2.2 详细操作步骤从选中Keepout到改到机械1层下面这条路径我在AD21上实际跑过不知道多少次大家可以直接抄。第一步在PCB编辑界面里用鼠标左键单击任意一条画在Keepout层上的线段或圆弧。如果你单击的是Keepout层上被盖住的部分可以先用右键图层过滤或者按Tab键循环选择多试几次总能选中。第二步对着这个选中的对象点右键在弹出菜单里选择Find Similar Objects。或者直接按ShiftF11效果一样。这时会弹出一个对话框里面列出了当前对象的各类属性。找到Layer这一行把右侧的Same复选框勾上其他所有行的Same全部保持不勾选。同时确保对话框最下方的Select Matching选中匹配对象和Zoom Matching缩放匹配对象都处于勾选状态。第三步点击OK。AD会瞬间把所有位于Keepout层上的对象全部选中并且把其他对象变灰Masket状态只高亮选中部分。按ShiftC可以取消Masking状态不过建议先别急着取消在Mask状态下做层修改反而更直观不容易误操作。第四步保持全选状态打开Properties面板。如果面板没显示右键任意选中对象选Properties或者右下角Panels里勾选Properties即可。此时面板顶部会显示“N objects selected”之类的提示说明确实是多选状态。在Layer下拉框里把Keepout层改成Mechanical 1回车或单击空白处确认。这一下所有Keepout层对象全都跳到机械1层了。第五步按ShiftC清除遮罩高亮再CtrlA全选看一遍机械1层的对象确认没有遗漏。如果原来的Keepout层上还有文字、填充区域等其他类型对象在第一步选中有可能漏掉这也是为什么不建议依赖找当前选择而是用Find Similar Objects按层筛选的原因。这个方法本质上是批量“改层”整个过程大概十几秒比你一根根地在Keepout层和机械层之间复制粘贴再删旧线快几十倍。2.3 反向操作机械层转Keepout反过来想把机械1层上的板框转成Keepout层用作禁布区操作路径完全一样只是在选择初始对象时先去机械1层点一条线然后Find Similar Objects里勾选Layer的Same把整层机械线全选中。之后在Properties面板的Layer下拉框里把Mechanical 1改成Keepout即可。这里有一个需要注意的细节当对象被转移到Keepout层后它就自动带上了Keepout属性成为真正的禁布对象。但如果你的本意是让它继续保留在机械1层作为板框同时又要让它在布线时起到禁布作用那就不要改层而是直接选中这些机械1层对象在Properties面板里把Keepout属性勾选为True。这样对象既能被板厂从机械层识别为外形又能被AD识别为禁布区属于“跨层Keepout”的用法。跨层Keepout在日常设计里不算主流但在一些特殊封装和板边净空场景非常有用比如板边天线区域既要出外形线给工厂又要让走线自动避让。如果你正好遇到这种情况记得优先考虑“在机械层上直接勾Keepout属性”而不是把层切到Keepout层。2.4 操作注意事项这个方法看起来简单但有几个坑我不列出来新手大概率会踩。第一个坑转换前一定记得备份。批量改完层后CtrlZ虽然可以撤销但如果中间穿插了其他操作撤销链可能已经被打断。尤其是碰到几十条线的板框撤销到一半容易懵。稳妥的做法是改层前先File - Save a Copy另存一个副本文件改错了直接打开副本重来。第二个坑Keepout层转机械层后线宽可能对不上。Keepout绘制的线条很多时候线宽设置得很随意甚至有些从DXF导入的是零线宽。转到机械1层后板厂那边看图时可能因为线宽过小在CAM里显示成细虚线甚至肉眼几乎看不到。建议转换完成后对机械1层的所有线段做一次属性检查统一把线宽设置成0.2mm或0.3mm至少要让生产端能一眼看清。顺带一提线宽统一用Properties面板的多选编辑就行所有选中的线可以一次性改掉Line Width不需要一根一根补。第三个坑注意圆弧、填充和文字类型。Find Similar Objects里如果勾的是Layer这一行那么Keepout层上所有类型的对象都会被选中包括圆弧、填充区、字符串等。大部分情况这是好事但如果你只想转换某一种对象比如只转圆弧不转填充那在Find Similar对话框里就得多设几个条件比如把Object Kind这一行的Same也勾上。第四个坑转换后一定要想办法确认板框是“闭合”的。很多Keepout层的线框表面看是闭合的实际上边界处存在极微小的断点转到机械层后生产端切板时会报警“外形未闭合”。最直观的确认方式是把机械1层显示打开然后在设计菜单里用Design - Board Shape - Define from selected objects选中整圈板框线后让AD重新生成板框。如果不能成功生成板框说明有断点找到那个缺口补上即可。第五个坑如果你只想把Keepout层上属于“板框”的线转过去但Keepout层上同时还画了其他禁布区那就要用Find Similar Objects时额外加上线宽或网络等条件或者先手工把不需要转换的线筛选掉。这个我后面讲常见问题时会再展开。3. 方法二DelphiScript一键转换可重复使用一发入魂3.1 脚本思路与运行原理方法一虽然快但它是一次性操作。如果你每周要处理好几块不同工程里的板框或者经常从客户那边收来各种层混乱的PCB原文件每次手动走一遍Find Similar Objects其实也挺烦。这时候就该上脚本了。Altium Designer内置了完整的脚本引擎支持DelphiScript、VBScript和JavaScript其中DelphiScript在PCB对象遍历的例子里最丰富。我们的思路其实非常简单遍历当前PCB板上所有对象判断它是否在Keepout层或带有Keepout属性如果是就把它所在的层改成机械1层反向操作则反过来判断机械1层对象把它们改到Keepout层。脚本最大的优势是可以保存成一个脚本工程随手绑定到菜单或快捷键上下次打开AD直接一键运行连参数都不用重新配。而且脚本可以做成二合一的弹窗版本运行的时候问你一句“Keepout转机械层还是机械层转Keepout”选完方向就自动干完。这个对于经常要出厂家生产文件的人来说属于静态操作里极省心的一类。3.2 脚本代码与逐段解析下面这段DelphiScript脚本是我在AD21上验证过的版本支持“Keepout层转机械层”和“机械层转Keepout层”两种方向。可以直接复制到脚本工程里跑。Procedure KeepoutToMechanical; Var PCB_Board : IPCB_Board; Iterator : IPCB_BoardIterator; Primitive : IPCB_Primitive; TempList : TList; i : Integer; TargetLayer : IPCB_Layer; Begin PCB_Board : PCBServer.GetCurrentPCBBoard; If PCB_Board Nil Then Begin ShowMessage(请先打开一个PCB文件再运行脚本); Exit; End; // 目标层这里改成你要转到的机械层 TargetLayer : LayerUtils.MechanicalLayer(1); TempList : TList.Create; Try Iterator : PCB_Board.BoardIterator_Create; Iterator.AddFilter_ObjectSet(MkSet(eTrackObject, eArcObject, ePadObject, eViaObject, eTextObject, eFillObject)); Iterator.AddFilter_LayerSet(MkSet(eKeepOutLayer)); Iterator.AddFilter_Method(eProcessAll); Primitive : Iterator.FirstPCBObject; While Primitive Nil Do Begin TempList.Add(Primitive); Primitive : Iterator.NextPCBObject; End; PCB_Board.BoardIterator_Destroy(Iterator); For i : 0 To TempList.Count - 1 Do Begin IPCB_Primitive(TempList.Items[i]).Layer : TargetLayer; End; ShowMessage(已转换 IntToStr(TempList.Count) 个对象到机械层); Finally TempList.Free; End; End; Procedure MechanicalToKeepout; Var PCB_Board : IPCB_Board; Iterator : IPCB_BoardIterator; Primitive : IPCB_Primitive; TempList : TList; i : Integer; SourceLayer : IPCB_Layer; Begin PCB_Board : PCBServer.GetCurrentPCBBoard; If PCB_Board Nil Then Begin ShowMessage(请先打开一个PCB文件再运行脚本); Exit; End; SourceLayer : LayerUtils.MechanicalLayer(1); TempList : TList.Create; Try Iterator : PCB_Board.BoardIterator_Create; Iterator.AddFilter_ObjectSet(MkSet(eTrackObject, eArcObject, ePadObject, eViaObject, eTextObject, eFillObject)); Iterator.AddFilter_LayerSet(MkSet(SourceLayer)); Iterator.AddFilter_Method(eProcessAll); Primitive : Iterator.FirstPCBObject; While Primitive Nil Do Begin TempList.Add(Primitive); Primitive : Iterator.NextPCBObject; End; PCB_Board.BoardIterator_Destroy(Iterator); For i : 0 To TempList.Count - 1 Do Begin IPCB_Primitive(TempList.Items[i]).Layer : eKeepOutLayer; End; ShowMessage(已转换 IntToStr(TempList.Count) 个对象到Keepout层); Finally TempList.Free; End; End;代码里几个关键点我解释一下。PCBServer.GetCurrentPCBBoard是拿当前打开的PCB板卡对象。如果当前活动文档不是PCB这个函数返回Nil所以脚本开头做了一次判空避免用户误在原理图界面运行脚本导致报错。BoardIterator_Create是创建遍历迭代器。AddFilter_ObjectSet用来限定只遍历哪些对象类型我这里列了track、arc、pad、via、text、fill基本覆盖了Keepout层和机械层最常见的对象。如果你想把对象类型放开可以去掉这个过滤不过那样可能会处理到一些不期望的元素一般不推荐。AddFilter_LayerSet(MkSet(eKeepOutLayer))是只遍历Keepout层MkSet(SourceLayer)是只遍历机械1层。注意这里我用了TList把匹配到的对象先存起来遍历完再统一改层。为什么不在循环里直接改因为遍历过程中修改对象层属性可能会导致迭代器的行为异常尤其是一些对象的层属性会影响到过滤器判定。先收集再统一改虽然多占一点内存但绝对稳妥。运行完成后脚本会弹一个消息框告诉你一共转换了多少个对象这样你心里有数不会出现“跑了但不知道转没转”的迷茫。3.3 如何保存成菜单按钮有了脚本保存和调用也有一套固定流程我第一次用的时候也琢磨了一阵子。在AD21中打开菜单DXP - Run Script这时会弹出脚本选择界面。点击界面左下角的Create按钮选择Project类型并创建脚本工程往里新建一个Pascal Script Unit把上面代码粘贴进去保存。保存之后回到PCB界面再次DXP - Run Script在脚本列表里展开你刚建的工程找到KeepoutToMechanical或MechanicalToKeepout选中后点OK运行。如果你觉得菜单里翻脚本麻烦可以把脚本绑定到快捷键或工具栏。AD21支持在Customize定制界面里把脚本命令拖到工具栏并设置快捷键。具体路径是右键工具栏 - Customize弹出“Customizing”对话框后在Commands标签页里找到Script脚本把对应过程拖到某个工具栏上再右击工具栏按钮设置快捷键。绑定一次之后以后每次打开AD都能直接按快捷键调出转换功能。这个脚本还可以继续魔改。比如把目标机械层从一个固定数变成变量弹窗让用户输入层号或者增加对InKeepout属性的判断让它不局限于Keepout层上的对象而是只要带Keepout属性就处理。这些都可以在了解API后自己加脚本这种东西就是要越贴近自己的习惯越好。3.4 适用场景与限制脚本方法适合哪些人一是经常处理“乱七八糟”的第三方PCB文件的人板框在Keepout层、禁布区在机械层这种状况见得多了脚本可以救大命。二是需要批量出Gerber文件做交付的人每一块板子都可能要手动调整脚本配合一个固定“PCB模板规范”能省下大量时间。但脚本也有它的限制。最明显的一点是它默认在Keepout层上所有对象都是你要转换的“板框”。如果Keepout层上既有板框线又有禁布区一跑脚本全是整体转移无法按区域拆分。这时候脚本恐怕不如方法一灵活。另一个限制是AD的脚本API在不同版本之间有小幅变动AD20能跑的代码拿到AD17上可能有函数名兼容问题牵扯到LayerUtils和ObjectSet枚举名的时候建议先在同一版本上验证一次再批量使用。4. 转换完别急着出Gerber排雷清单与常见问题4.1 转换后必做的5项检查说实话把Keepout层和机械层的线转过去只完成了第一步最关键的其实是转换后的检查。我有一次就是因为转完没检查板框上有一小段圆弧没被选中结果出Gerber后板厂那边的外形层缺了个角幸亏在CAM预览里发现了否则就要白打样一轮。现在养成习惯只要做过层转换就按下面五步过一遍。第一打开View Configuration面板确认机械1层的显示是开启的并且在板框模式下可以清晰看到整圈外形线。如果机械1层没有开启显示很多线条会直接“隐身”容易误判成转换失败。第二选中整个机械1层的对象逐个看属性。主要检查线宽是否一致是否有断点是否混入了不该出现在板框层的标注或文字。如果发现有文字需要判断是辅助说明还是多余内容多余的该删就删。第三在机械1层有板框的前提下用Design - Board Shape - Define from selected objects重新生成板框。这个操作可以把“画线”升级为AD真正能识别的板框边界后面出3D视图、ERC检查、板框输出都会更顺畅。第四检查Keepout层转换方向上有没有残留。比如你从Keepout转机械层理论上Keepout层应该是空的或者只剩你不想转的禁布区。如果Keepout层还有零零散散的短线那就是漏网之鱼需要补转。第五运行一次DRC检查。把层转完之后原来由Keepout层提供的禁布约束可能消失了如果有走线或铺铜原本贴着板框边界走现在可能变成DRC违规。及早跑一下DRC把该补的禁布区重新画上去免得到最后烧录阶段才发现一堆距离错误。4.2 常见问题速查表我把实际操作中遇到过的各种状况整理成一张速查表遇到问题直接查表比翻菜单找答案快得多。现象可能原因处理方法转换后线条在屏幕上消失机械1层未开启显示或颜色被隐藏在View Configuration中开启机械1层并设置可见颜色Find Similar Objects选中了太多无关对象Layer的Same之外还有别的属性被误勾重新打开对话框只勾Layer的Same其余全部取消转完线后DRC报出一堆错原Keepout区域的禁布约束已丢失在需要的区域用Keepout层重新画禁布区或把机械层对象勾上Keepout属性Gerber文件里没有板框外形Gerber Setup中未勾选机械1层或Keepout层File - Fabrication Outputs - Gerber Files在Layers页签勾选对应层并预览确认板厂反馈外形不闭合原Keepout层上的线存在微小断点或重叠用Define from selected objects检查闭合性补齐断点脚本运行后提示对象数为0当前活动文档不是PCB或对象不在Keepout层/不在脚本指定的过滤类型内确认活动文档为PCB文件先手动点一条Keepout线确认层属性转换后一个圆弧变成了一条直线导入的圆弧类型或精度导致AD识别错误在机械1层重新画该段圆弧或用Properties调整圆弧半径起终点4.3 关于AD21导出Gerber文件的额外提醒搜“ad21出gerber”的人越来越多了但很多人不知道层转换和Gerber导出是两条独立流程虽然它们经常一起配合使用。这里我把AD21导出Gerber文件时的几个关键点顺手整理一下给还没摸熟的朋友做个参考。进入File - Fabrication Outputs - Gerber Files后首先确认General页签的格式一般选RS-274X单位采用mm精度建议用2:5或者2:4具体以板厂要求为准。然后在Layers页签里左侧的“Plot Layers”列表会显示所有可输出的层你要把机械1层勾上如果还需要把Keepout层作为禁布信息输出给工厂也一并勾上。右侧还有“Mechanical Layers to Add”之类的选项用于把机械层加到各个光绘文件中这个根据板厂要求来。很多人栽在最后一步没有点“Preview”看光绘预览。Gerber预览功能能直接显示出最终的每一道光绘文件内容板框线有没有、Keepout区域在不在、圆弧是否连续一眼就能看出来。我强烈建议导出前和导出后各看一次预览导出前确认层勾选对了导出后用独立的CAM工具或者AD的CAM编辑模式再看一遍确保板厂收到的文件里真的有完整外形。这个方法同样适用于“ad21导出gerber文件”时出现圆弧变形、字体丢失、线宽变细等一系列问题大部分都和层配置或对象属性有关而不是源PCB真的坏了。写在最后的经验之谈从最早一根一根挪线到现在模板里直接规定清楚“板框线只放机械1层禁布区单独放Keepout层”我最大的感受是无论用方法一还是方法二都只能帮你“改层”不能帮你判断“哪条线该属于哪一层”。真正靠谱的工作流是在工程开始前就定好板框层和Keepout层的使用规范并让团队里所有人遵守。层转换更像是接手“不规范文件”时的急救措施而不是常态操作。如果让我给建议新手第一次处理这种问题优先用方法一操作直观不容易出错还能顺便看清楚原来Keepout层上到底放了哪些东西。要是你已经确定只是整层互转而且以后还要反复处理类似文件那就直接用方法二写个脚本花5分钟配置一次后面能省太多时间。最后提醒一句导出Gerber前务必预览层转换后务必DRC这条铁律真的能帮你躲掉非常多打样返工。
返回列表