简介面向需要跨平台复用PCB封装的电子设计人员这份文档围绕Altium Designer封装迁移至Cadence Allegro这一常见需求梳理封装库转换中的关键环节与易错点适合具备基础EDA操作经验、希望减少重复建库工作的读者参考。压缩包仅含1个docx文件约63KB内容集中、便于快速查阅和本地留存。相关页面显示已有1476人学习说明该主题在封装复用场景中具有一定关注度。文档重点涉及路径命名、symbol与shape及焊盘文件的归类放置、导入后加载检查等实际问题并给出可操作的排错思路可帮助读者理解两类软件间的封装对应关系建立可复用的迁移流程提升封装库整理与复用效率。1. 从AD到Allegro搬封装一次转换能省掉多少重复建库手上攒了几年的 AltiumDesigner 封装库新项目全线切到 Allegro第一反应往往是重画 padstack。这条路的成本被严重低估一个 0603 封装画焊盘、建 shape、定原点、加丝印熟手十几分钟几百个就是几十个工时还容易在焊盘补偿上翻车。AD 封装导入 Allegro 的流程其实不复杂AD 里把目标封装摆到空 PCB另存 ASCII 格式的 PcbDocAllegro 用 CAD_Translators 里的 Altium PCB 翻译器导入并生成 brd再从 brd 导出 Library拿到 dra、psm、ssm、pad 四类文件分路径放好即可调用。这套流程适合手上已经有一批验证过的 AD 封装、需要在 Allegro 里快速复用的工程师不适合指望一次转换就把整板走线和铜皮一起搬过来的人。2. 转换前的AD侧准备空PCB、ASCII存档与三个容易忽略的开关转换失败的情况十次里有七次问题出在 AD 这一侧不在 Allegro 那一侧。翻译器需要解析的是一整块 PCB 的数据库不是封装库的索引所以前面这几步的输入质量直接决定了后面导出 Library 时能拿到几个完整文件。2.1 为什么必须走「空PCB 只放目标封装」这条路Altium PCB 翻译器接收的输入是一份 PCB 文件.PcbLib无法直接作为输入。常见做法是 File → New → PCB 新建一块空白板再把库里要搬的封装一个个 Place 上去。走到这里有个容易被忽略的点翻译器只把 PCB 上「器件」级别的对象当封装解析散落的 free pad、free line、free text 不会被收进 symbol。所以放置时必须走 Place → Component放成带 Designator 的器件不能图快用 Place → Pad 手搓。空 PCB 也不是越空越好。完全没有板框的板子翻译器输出 brd 时给的画布尺寸很随意虽然后面导出库不受影响但如果你要顺便核对位置就很别扭。我一般会画一块 200mm × 200mm 的板框把封装按 20mm 间距排成网格一次放二三十个编号写清楚。这样在 Allegro 里检查 symbol 时漏了哪个一眼能看出来。原点这件事值得单独说。AD 里每个封装自带 Reference Point放到 PCB 上之后翻译器按这个参考点换算坐标。如果库里的参考点定得乱七八糟——有的在 1 脚有的在几何中心有的干脆在画布角落——导入后的 symbol 原点也会跟着乱在 Allegro 里摆件会很难受。血泪经验是导入前统一把要搬的封装参考点归到 1 脚或几何中心这一步花的时间远少于导入后一个个返工。还有一个数量上的取舍。一次放三五十个封装比较合适太多的话翻译器跑一遍要几分钟中间任何一个封装有问题都得整批重来太少又显得折腾。我一般按功能分批比如「所有电阻电容」「所有 SOP 类」「所有连接器」每批单独存一份 ASCII出问题只回滚这一批。2.2 另存 PCB ASCII File 的正确姿势与路径约束放置完成后 File → Save As保存类型选 PCB ASCII File (*.PcbDoc)。注意后缀仍然是.PcbDoc只是内容变成了文本记录。不少人在这里手动把后缀改成.txt或.PcbAscii结果翻译器直接认不出来。别改。路径约束是硬性的整条路径不要出现中文、空格以及、#、%这类符号。翻译器日志里如果冒出乱码文件名基本就是这一步踩了坑。我习惯统一放在D:\work\ad2allegro\下面文件名只用字母、数字和下划线。注意不要放在桌面或「我的文档」这类路径里用户目录名带中文的情况太常见了。另存完之后可以用文本编辑器打开这个.PcbDoc看一眼。正常的 ASCII 存档开头会有一串记录版本和单位的行能看到LAYER、COMPONENT、PAD之类的关键字。如果打开是乱码说明保存类型选错了存成了二进制格式。版本兼容是另一个隐藏开关。AD 的 ASCII 存档格式随版本演进而变化翻译器对太新的格式支持有限表现是导入时卡住或者只出来一半器件。常见解法是用低一档的版本重新打开再另存一次或者在翻译器日志里确认它报的是「unsupported record」还是「file corrupted」两种情况处理方式不同。2.3 封装本身要先自检焊盘、层、原点翻译器不是万能的它对异形焊盘、自定义 pad 形状、特殊层结构的处理能力有限。与其在 Allegro 里对着报错猜不如在 AD 侧先过一遍清单。自检项检查什么不合格的后果焊盘形状是否只有矩形、圆形、八边形圆弧、多边形、自定义形状会被降级成矩形尺寸失真槽孔是否用了 slot / 长圆孔翻译后变成圆孔装配时插不进去丝印层器件轮廓是否在 Top Overlay落在 Mechanical 层的线不会被识别成丝印参考点是否在 1 脚或几何中心导入后 symbol 原点偏移摆件全靠手调封装名是否只有字母数字下划线含中文或空格的符号名在 Allegro 里可能直接非法3D 与文本是否带 3D body、大段字符串增加翻译时间产物里全是无用对象焊盘这一项最值得花时间。AD 里用「自定义焊盘」画的异形焊盘翻译器只认基础形状圆角、内凹、多边形统统退化成外接矩形。对 0402、0603 这种规则封装无所谓但对某些连接器的定位焊盘、大功率器件的散热焊盘退化之后尺寸会明显偏大或偏小。我的处理办法是规则封装批量导入异形焊盘的封装干脆在 Allegro 里重画 padstack只把 symbol 的丝印和摆放位置从 AD 搬过来。层的对应关系也要在 AD 侧确认一遍。Top Layer 对应 Allegro 的 TOPBottom Layer 对应 BOTTOMMid Layer 对应内层Top Overlay 对应 SILKSCREEN_TOP。如果你的封装把轮廓画在了 Mechanical 1 或 Mechanical 13 这种非标准层上翻译器不会自动映射过去丝印就丢了。导入前在 AD 的 View Configuration 里逐个打开层看一眼比重导入三次便宜得多。3. Allegro侧的导入实操CAD_Translators参数逐项拆解AD 侧的 ASCII 文件准备好了接下来是 Allegro 这边的入口和参数。这一段看着步骤少实际翻车点集中在层映射和单位两个参数上而且报错信息写得很含糊需要靠日志反推。3.1 新建brd与翻译器入口不要先手动 New 一个 brd 再去找导入菜单那样容易在数据库单位上先入为主。直接走 File → Import → CAD Translators → Altium PCB翻译器会自己创建一个输出 brd单位跟着输入文件走。弹出的对话框里几个字段Input file指向刚才那份 ASCII 格式的.PcbDocOutput design输出 brd 的完整路径文件名自己起别带中文Layer mapping可以留空让翻译器自动生成也可以指定一份已经调好的映射文件Options 区控制是否转换文本、是否转换铜皮、是否保留网络第一次跑建议先留空层映射让它自动生成一份然后再看日志里哪些层没对上。这样做的好处是你能拿到一份「翻译器认为的映射关系」作为基准比对着文档瞎猜快得多。输出路径同样不要带中文。翻译器在写 brd 时会生成一批中间文件路径有问题的话失败信息往往只写「cannot create output」看不出根因。3.2 层映射文件与单位两个决定成败的参数层映射文件本质是一张对照表左边是 AD 的层名右边是 Allegro 的层名和 subclass。自动生成的映射在常见层上基本正确需要人工干预的是下面这几类AD 侧层Allegro 侧目标说明Top LayerTOP顶层走线通常自动映射Bottom LayerBOTTOM底层走线Mid Layer 1~30内层需指定内层编号必须和叠层顺序一致否则线跑到错误的层Top OverlaySILKSCREEN_TOP / PACKAGE GEOMETRY自动映射常只给一个另一个要手动补Top SolderSOLDERMASK_TOP阻焊层漏了会导致 pad 没有开窗Top PastePASTEMASK_TOP钢网层漏了钢网文件是空的Keep-Out LayerROUTE KEEPOUT禁布区自动映射经常丢丝印那一行最容易被忽略。翻译器默认把 Top Overlay 映射到 PACKAGE GEOMETRY 的情况很常见结果是 symbol 建出来了但在 Allegro 的丝印层上看不到轮廓摆件时完全没有参照。发现这种情况回去把映射改成 SILKSCREEN_TOP重跑一遍就行不用从 AD 侧重来。单位问题更隐蔽。AD 常见用 mmAllegro 的数据库单位默认是 mil。翻译器内部会做换算正常情况下尺寸不会错。真正出错的是两种情况一是 ASCII 文件被人为打开改过单位字段二是用了不匹配的映射文件版本。表现出来就是导入后所有尺寸整齐地差 39.37 倍或者差 0.0254 倍。看到这种「整齐的倍数关系」别怀疑焊盘画错了先回去查单位。判断方法很简单导入后在 Allegro 里 Measure 一下两个相邻 pad 的中心距0603 电阻应该是 1.5mm 左右约 59mil0402 是 0.9mm 左右约 35mil。数字差一个数量级就是单位问题。3.3 导入日志怎么看哪些警告可以放过哪些必须回头改翻译器跑完会留一份日志路径就在输出 brd 的同一个目录下。日志几百行是常态需要分类看。可以放过的一类文本字符串转换失败、3D 模型跳过、铜皮填充忽略、设计规则丢弃。这些对封装复用没有影响封装导入本来就不需要网络和规则。必须回头改的一类padstack 相关的报错提示找不到某个焊盘或者焊盘形状不支持、层映射报的「unknown layer」、以及「component skipped」。这三类如果不处理导出的 Library 里就是缺胳膊少腿。还有一类介于两者之间焊盘尺寸被调整的警告。翻译器有时会把非标准的 pad 尺寸圆整到它认识的档位日志里会写一句「pad size adjusted」。这种情况要拿原始封装对一遍差个几 mil 对普通器件能接受对精密连接器就得手动改。提示把日志整份存下来和这批 ASCII 文件放在同一个目录后面复查时能省掉重新跑一遍的时间。另外翻译完成之后不要急着导出 Library先在那个临时 brd 里打开 Display → Status 看一下器件数量对不对。放进去 30 个封装brd 里只有 28 个说明有两个在翻译阶段就被跳过了这时候回去查日志比后面在库里找快得多。4. 导出Library与文件归位dra、psm、ssm、pad各回各家到这一步brd 里已经有封装了但还不能直接用。Allegro 的封装是由四类文件共同描述的必须从 brd 里导出成独立文件再按类型放对路径库才算真正可用。4.1 Export Libraries勾选项与产物清单在临时 brd 里走 File → Export → Libraries指定一个空目录作为输出位置。对话框里有几个勾选项建议全开导出 padstack、导出 shape symbol、导出 device 文件。少勾一项后面就会在放置时报「找不到」相关的错。产物大致是这几类扩展名内容对应路径变量.drasymbol 的绘图源文件可编辑psmpath.psm编译后的封装符号放置时实际加载的就是它psmpath.padpadstack 定义padpath.ssmshape symbol异形焊盘和特殊形状用psmpath.txtdevice 文件描述引脚与功能的对应devpath这里最容易被误解的是.dra和.psm的关系。.dra是你能打开、能修改的图形.psm是编译产物。Allegro 放置器件时优先找.psm找不到才会退回.dra现场编译。所以只把.dra拷进库路径看上去库里能搜到名字一放就报错就是这个原因。.ssm同理。异形焊盘和复杂外形在 Allegro 里是单独的 shape symbol名字通常带sr或ss前缀。这类文件没进 psmpath表现是焊盘变成方块或者干脆消失。导出目录里还会混进一些临时文件和日志别一股脑全拷进库路径Allegro 加载库时扫描一堆无用文件会变慢出问题也不好排查。4.2 三类路径的配置padpath、psmpath、devpath路径配置在 Setup → User Preferences → Paths → Library 里。四个变量各管一段padpath焊盘文件.pad的搜索路径psmpath封装符号.dra、.psm和 shape symbol.ssm的搜索路径devpathdevice 文件.txt的搜索路径parampath参数化封装用的路径一般用不上每一项都可以写多个路径用系统分隔符隔开。我习惯把公司公共库和自己导出的库分开写公共库在前自己的在后这样同名封装优先用公共库避免污染。一个实操细节路径末尾不要带反斜杠。Allegro 对路径拼接的处理比较粗糙末尾多一个反斜杠某些版本会拼出双斜杠导致找不到文件。配完之后不用重启但要让 Allegro 重新扫一遍库打开 Place → Manually在 Package symbols 的过滤框里输入你刚导入的封装名能搜到就说明路径生效了。搜不到的话优先怀疑.psm不在 psmpath 里而不是名字写错。4.3 用脚本做归位与配套性检查一批导出二三十个封装手工按扩展名分拣又慢又容易漏。我一般跑一个脚本按类型分到不同子目录顺便检查.dra和.psm是否成对。# -*- coding: utf-8 -*- # 把 Export Libraries 的产物按类型归位并检查 dra/psm 配套 import os import shutil from collections import defaultdict SRC rD:\work\ad2allegro\export_out # Export Libraries 的输出目录 DST rD:\work\allegro_lib # 目标库根目录 # 扩展名 - 目标子目录子目录名和路径变量的含义对齐 BUCKET { .pad: pad, # 对应 padpath .psm: symbol, # 对应 psmpath .dra: symbol, # 对应 psmpath .ssm: shape, # 对应 psmpathshape symbol .txt: device, # 对应 devpath } def collect(src): table defaultdict(list) for name in os.listdir(src): ext os.path.splitext(name)[1].lower() if ext in BUCKET: table[BUCKET[ext]].append(name) return table def copy_all(src, dst, table): for bucket, names in table.items(): target_dir os.path.join(dst, bucket) os.makedirs(target_dir, exist_okTrue) for name in names: shutil.copy2(os.path.join(src, name), os.path.join(target_dir, name)) def check_pairs(dst): sym_dir os.path.join(dst, symbol) stems {os.path.splitext(n)[0] for n in os.listdir(sym_dir)} missing_psm [s for s in stems if not os.path.exists(os.path.join(sym_dir, s .psm))] return missing_psm if __name__ __main__: table collect(SRC) copy_all(SRC, DST, table) for k, v in table.items(): print(f{k:8s} {len(v):3d} files) bad check_pairs(DST) print(缺少 psm 的符号, bad if bad else 无)逻辑上分三段。collect扫一遍源目录只保留认识的五种扩展名其余临时文件直接丢弃避免把日志和中间文件混进库路径。copy_all按桶复制到对应子目录子目录名和 4.2 里的路径变量一一对应配路径时直接指过来就行。check_pairs做配套性检查把 symbol 目录里所有.dra和.ssm的主名收成一个集合逐个查有没有同名.psm。参数上需要改的只有两个SRC指向 Export Libraries 的输出目录DST指向你的库根目录。BUCKET这张表如果你们的库结构不一样改右边那列的目录名即可左边不要动。脚本跑完会打印每一类的文件数量和缺.psm的符号名。看到「缺少 psm 的符号」不为空直接回到 3.3 那一步查日志别急着往下走因为缺.psm的符号在 Allegro 里是放不下去的前面配路径花的时间全白费。5. 避坑与排查路径、单位、层映射与焊盘丢失的六种现场前面的步骤照着走大部分封装能出来。剩下的少数问题集中在下面六个现场每个都按「现象 → 原因 → 解决」拆开遇到时可以直接对号入座。现场一翻译器一跑就退输出目录是空的。现象是点了 OK 之后进度条闪一下就结束输出目录里什么都没有日志文件也没生成。原因基本锁定在路径上——输入文件所在路径或输出路径含中文、空格或特殊符号。翻译器在创建中间文件时用的是 C 风格路径处理遇到非 ASCII 字符直接失败但不报错。解决是把 ASCII 文件和输出目录都挪到纯英文短路径下比如D:\work\ad2allegro\重新跑一遍。现场二导入后所有尺寸整齐地差 39.37 倍。这种现象很有辨识度Measure 一量0603 的焊盘间距从 1.5mm 变成 59mm 左右或者反过来。原因是单位解析出了问题AD 侧用 mm 记录翻译器按 mil 读或者中间有人手动改过 ASCII 文件的单位字段。解决是先确认 ASCII 原文里的单位记录再确认翻译器的单位选项两边对齐之后重跑。已经导入的 brd 不用删重跑会覆盖输出文件。现场三库里能搜到封装名一放就报「Could not find padstack」。现象是在 Place 对话框里输入名字能匹配到双击放置时弹出错误说某个 padstack 找不到。原因是.pad文件没有导出或者导出了但没进padpath。Export Libraries 时如果没勾「导出 padstack」产物里就只有 dra 和 psm。解决是回去重新导出并勾上或者用 4.3 的脚本确认 pad 目录里确实有文件。现场四符号库里能看到名字但放置列表里是灰的。现象比上一个更早一步Place 对话框里能搜到但条目是灰的点不动。原因是.psm缺失。.dra存在只说明符号的源文件在编译产物.psm不在的话放置流程走不下去。解决是回到临时 brd确认这个封装本身在 brd 里是完整的再重新 Export Libraries。如果 brd 里就没有说明它在翻译阶段被跳过了回到第 3 章的日志去查。现场五封装放进来了但丝印层上什么都看不到。现象是器件摆到板上焊盘正常轮廓线消失。原因是层映射把 Top Overlay 导向了 PACKAGE GEOMETRY 或者 ASSEMBLY 层而不是 SILKSCREEN_TOP。解决有两个一是在 Allegro 里打开 Display → Color把 PACKAGE GEOMETRY 打开看一眼轮廓是不是跑那儿去了确认之后改层映射重跑二是如果封装不多直接在 symbol 编辑器里把线挪回 SILKSCREEN_TOP省一次重导。现场六异形焊盘导入后变成方块或直接消失。现象是连接器的定位焊盘、大功率器件的散热焊盘导入后形状完全不对。原因是这类焊盘在 Allegro 里靠 shape symbol 描述产物是.ssm文件而.ssm没进psmpathAllegro 找不到就退化成矩形。解决是把.ssm从导出目录拷进 psmpath 覆盖的任一目录然后重新打开封装确认。这类封装我建议导入后逐个目视检查一遍别指望日志会提醒你。提示这六个现场里现场一到现场四都能靠「路径配全 文件成对」提前避免做法就是 4.3 那个脚本。跑一遍脚本比在 Allegro 里反复试快得多我现在的习惯是每次导出之后先跑脚本配套齐全了才去配路径。6. 导入后验证与批量复用三个数字对不上就别往下走封装能放下来不等于能直接用。真正决定这批库能不能进项目的是三个数字对不对得上。第一个是尺寸。在 Allegro 里用 Display → Measure 量两处相邻 pad 的中心距和 pad 的长宽。拿 0603 电阻做基准中心距应该在 1.5mm 上下pad 长宽在 0.8mm × 0.9mm 附近。和 AD 库里的原始数值逐个对差 0.05mm 以内属于正常圆整差 0.5mm 就说明焊盘在翻译过程里被改过。第二个是引脚编号。打开 symbol 编辑器用 Display → Element 点每个 pad 看编号重点确认 1 脚位置和总引脚数。极性器件、IC、连接器这三类必须逐个查编号错位在原理图网表导入时不会报错到布线阶段才发现就晚了。第三个是原点。在 Placement 模式下看 symbol 的 placement origin 落在哪1 脚还是几何中心。原点偏移的量通常很小肉眼看不出来但摆件时配合栅格就会一直对不齐操作起来很别扭。这三项我做成一张对照表每批导入填一行攒够一批再统一签字入库。批量复用的时候把 4.3 的归位脚本和这张表绑在一起用脚本负责文件层面不出错表格负责电气层面不出错。两者都过了这批封装才算真正可以交付。说实话最早做这套转换时我图省事导出完直接把整个目录拷进库路径结果在一个 40 pin 的连接器上栽了跟头——.ssm没拷进去定位焊盘全变方块板子回来装不上。从那以后我每次导完库都强制走一遍脚本加三项对照哪怕只导入三个封装也不跳过。流程本身不复杂复杂的是人对「这次应该没问题」的侥幸。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?