AD封装库全流程:原理图库、PCB库与3D库管理避坑

发布时间:2026/11/5 7:17:03
AD封装库全流程:原理图库、PCB库与3D库管理避坑

简介:面向Altium Designer用户的元器件库合集,覆盖原理图绘制到PCB布局布线的常见需求,适合刚入门AD、需要快速补齐基础库的电子工程师与在校学生,也便于有经验的设计者减少重复建库。压缩包共117个文件,约464.27MB,包含64个pcblib封装库、45个schlib原理图符号库及8个htm索引/预览页面;pcblib覆盖连接器、贴片与插件封装等常用器件,schlib提供原理图符号,htm便于按封装类型快速查找。已有580人学习下载。资源将封装库、元件库、3D库、PCB库与原理图库集中整理,分类相对齐全,可直接用于课程设计、小批量项目打样和日常选型参考,帮助读者省去逐个创建符号与封装的时间,把精力放在电路功能与布局优化上,并降低封装不匹配、装配干涉等常见问题。

1. 先看库的骨架:AD封装库、元件库、3D库、PCB库、原理图库到底谁管谁

很多人拿到一套 AD封装库,第一反应是全部 Install;我见过更常见的翻车是原理图符号能放,PCB 里却没有封装,3D 模型还悬在板外。这套资源不是单一库文件,而是元件库、原理图库、PCB库、3D库的组合:原理图库管符号和引脚,PCB库管焊盘和丝印,3D库管 STEP 模型,元件库把参数、封装、模型串起来。它适合课程设计、小批量项目和需要快速补齐常用器件的工程师,能省掉重复画符号、对焊盘、找模型的时间;不适合不做器件承认就直接上高可靠性产品。先弄清层级关系,再谈安装,后面会少很多返工。

2. 拆开这套库:文件类型、目录结构与选型判断

2.1 五类文件在项目里的分工

拿到压缩包后,不要急着双击安装。先按文件类型分堆,搞清楚哪些是源库、哪些是编译产物、哪些是模型。AD 库里常见的文件分工如下,我一般会用这张表做第一轮盘点。

文件/目录类型主要管什么能不能直接改项目里的角色
原理图库.SchLib符号外形、引脚号、引脚名、电气类型、参数、封装名能,属于源库原理图放置元件的底稿
PCB 封装库.PcbLib焊盘、丝印、机械层、3D Body、参考点能,属于源库从原理图同步到 PCB 后的落点
集成库.IntLib编译后的符号、封装、模型、参数打包一般不直接改交付、评审、固定版本引用
3D 模型目录STEP 模型、旋转偏移、高度信息能,但要和封装绑定结构检查、装配预览、导出 STEP
参数表/映射表MPN、Value、Footprint、Datasheet、3D 标记能批量校验和 BOM 合并的依据

这里最容易误解的是.IntLib。它不是“更高级的源库”,而是编译产物。源库改了,集成库不会自动跟着变;旧项目如果直接引用集成库,看起来稳定,但新项目又可能拿到旧版本。我的做法是:源库只读备份一份,日常维护用松散库,发布给项目时再编译成集成库,项目引用发布版。这样既保留可修改性,又避免项目之间互相污染。

还有一个细节:元件库不是单独一个文件,它更像一套约定。符号里写Footprint参数,PCB 库里必须有同名封装;封装里挂 3D Body,3D 模型的原点和方向要能对上。任何一层名字不一致,最后都会表现为“原理图有、PCB 没有”或者“3D 飞上天”。先把这套约定固定下来,比堆库文件更重要。

2.2 拿到资源先做只读盘点

第一步不是打开 AD,而是解压到只读目录,按类别分开。下面这种目录结构不复杂,但足够让后面排查有迹可循。路径名用英文,避免空格和中文,减少库引用丢失的概率。

# 在库根目录下建立只读盘点目录,原始压缩包解压后不要直接改 mkdir -p ad_lib_audit/{schlib,pcblib,intlib,step,reports,backup} # 把原始文件按扩展名复制到对应目录,保留原文件名 find ./raw_lib -type f -iname "*.SchLib" -exec cp -n {} ./ad_lib_audit/schlib/ \; find ./raw_lib -type f -iname "*.PcbLib" -exec cp -n {} ./ad_lib_audit/pcblib/ \; find ./raw_lib -type f -iname "*.IntLib" -exec cp -n {} ./ad_lib_audit/intlib/ \; find ./raw_lib -type f -iname "*.STEP" -o -iname "*.stp" -exec cp -n {} ./ad_lib_audit/step/ \;

这段命令做的是“分类复制”,不是移动,原始目录保持不动。-n表示不覆盖同名文件,避免第二次执行时把人工改过的文件冲掉。-iname不区分大小写,因为不同来源的扩展名大小写经常不统一。盘点和后续修改都在ad_lib_audit里做,原始压缩包留作后悔药。

分类之后跑一个清单脚本,重点看三件事:文件类型数量、同名库文件、封装名和符号名是否在文件名层面就冲突。这里不解析二进制内容,只做文件级盘点,足够发现大多数“装进去互相覆盖”的问题。

import csv import re from pathlib import Path lib_root = Path("ad_lib_audit") out_csv = lib_root / "reports" / "lib_inventory.csv" exts = {".schlib", ".pcblib", ".intlib", ".step", ".stp"} rows = [] name_map = {} for p in lib_root.rglob("*"): if p.is_file() and p.suffix.lower() in exts: stem = p.stem.lower() rows.append({ "file": str(p), "name": p.name, "stem": p.stem, "ext": p.suffix.lower(), "size_kb": round(p.stat().st_size / 1024, 1), }) name_map.setdefault(stem, []).append(str(p)) # 标记同名文件:不同目录下 stem 相同,安装后容易互相覆盖 for r in rows: r["duplicate_stem"] = "yes" if len(name_map[r["stem"]]) > 1 else "" out_csv.parent.mkdir(parents=True, exist_ok=True) with out_csv.open("w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["file", "name", "stem", "ext", "size_kb", "duplicate_stem"]) writer.writeheader() writer.writerows(rows) print(f"inventory rows: {len(rows)}, output: {out_csv}")

脚本参数很直白:lib_root指向盘点根目录,out_csv是输出清单,exts控制要扫的扩展名。duplicate_stem这一列是我最常看的,因为 AD 库安装后是按库名和元件名识别的,两个不同目录下都叫Power.SchLib,装进去就可能互相顶掉。清单生成后不要急着全量安装,先按重复项拆库或改名,再进下一步。

盘点完做抽样打开:每个大类抽 3 到 5 个库,看能不能正常打开、符号有没有缺引脚、封装有没有焊盘堆叠、3D 模型能不能预览。抽样不是形式主义,我遇到过封装库能打开但焊盘全在 Keepout 层的情况,清单看不出来,只有打开才现形。

2.3 什么时候用 IntLib,什么时候用松散库

选型上不要一刀切。集成库适合“交付”和“冻结”,松散库适合“维护”和“返修”,参数表适合“批量管理”。下面这张对比表可以直接拿去和团队对齐。

使用方式适合场景优点代价
松散.SchLib+.PcbLib日常维护、多人改库、快速修封装改完立即生效,便于比对项目直接引用时容易被源库改动影响
集成.IntLib项目评审、交付、固定版本符号封装模型打包,引用简单源库更新后要重新编译,不能当源库改
参数表 + 映射 CSV批量核对、BOM 合并、器件承认可脚本校验,问题定位快需要维护字段规范,否则表本身会乱

我的习惯是“双轨”:维护目录放松散库,发布目录放集成库和清单。项目里只引用发布目录,不直接指向维护目录。每次发布前把集成库、参数表、3D 清单一起打包,旧项目不跟着新库漂。这样做的成本是每次多一步编译,收益是旧项目不会某天打开突然多出一堆封装错误。

如果资源里同时给了松散库和集成库,优先用松散库做学习和检查,用集成库做项目引用。不要拿集成库反推源库,也不要把它当唯一底稿。源库、发布库、项目库三层分开,是这套资源能不能长期用的分水岭。

3. 把原理图库做成可维护的元件库:符号、引脚、参数一次到位

3.1 新建 SchLib 与符号绘制的硬规则

原理图库的第一目标不是好看,而是“可读、可查、可映射”。新建Schematic Library后,先定栅格:常见做法是符号体用 100 mil 栅格,引脚间距用 100 mil 或 50 mil,具体看图纸密度。引脚长度我一般用 200 mil 起步,密脚器件再缩到 100 mil。原点放在符号中心或 1 脚附近,团队内统一,不要这个库放中心、那个库放左下角。

符号外形只表达功能,不要把封装丝印、引脚长度、极性标记全画进去。多单元器件用 Part 拆分,电源引脚如果隐藏,必须确认网络连接规则,否则原理图看起来干净,PCB 网络却可能少一根。每个符号至少具备这些可见信息:Designator、Comment或Value、关键参数、Footprint模型。Designator前缀按类别固定,电阻R、电容C、接口J、测试点TP,不要同一类器件混用前缀,否则 BOM 合并和位号排序会乱。

下面是一个参数模板,建议直接在库里按这个字段名建,值可以后续填。字段名用英文,值可以用中文,但同一字段不要中英文混写。

参数名是否必填用途示例写法
Value是原理图显示值10k、100nF
Manufacturer建议器件来源通用或供应渠道简称
MPN是唯一料号供应方料号,不要填封装名
Footprint是对应 PCB 封装R0603、SOP8_1.27
Datasheet建议资料定位本地相对路径或文档编号
Description建议功能描述厚膜电阻 1%
3D_Model建议是否有 3D 标记yes/no
Lifecycle建议生命周期状态active/nrnd

字段名一旦定下就不要频繁改,尤其是MPN和Footprint。我见过有人在部分库里写PartNumber,另一部分写MPN,最后 BOM 合并出两列,采购表直接对不上。参数模板不是形式,它是后面脚本校验的锚点。

3.2 引脚电气类型与 Designator 映射

引脚最容易翻车的地方不是画错位置,而是Designator和 PCB 焊盘号对不上。原理图引脚属性里,Designator是网络映射用的编号,Name是功能名,Electrical Type决定电气规则检查。常见设置是:电源脚用Power,普通无源脚用Passive,输入输出按方向设置,不用或悬空脚设Not Connected。隐藏引脚要特别小心,隐藏了但没接网络,检查时不一定报错。

符号引脚号必须和封装焊盘号一一对应。二极管、三极管、连接器最容易出现1/2/3对A/K/G的情况。我的做法是建一张映射 CSV,左边是符号引脚号,右边是封装焊盘号,批量核对,不靠眼睛。

import csv from pathlib import Path pin_map_csv = Path("ad_lib_audit/reports/pin_map.csv") errors = [] # CSV 字段:part, symbol_pin, footprint_pad, note with pin_map_csv.open(encoding="utf-8-sig") as f: rows = list(csv.DictReader(f)) for i, r in enumerate(rows, start=2): sp = (r.get("symbol_pin") or "").strip() fp = (r.get("footprint_pad") or "").strip() if not sp or not fp: errors.append((i, "空引脚号或空焊盘号", r)) if sp != fp: # 允许显式映射,但必须在 note 里写原因 if not (r.get("note") or "").strip(): errors.append((i, f"符号脚 {sp} 与焊盘 {fp} 不一致且未备注", r)) for e in errors: print(e) print(f"checked rows: {len(rows)}, errors: {len(errors)}")

这个脚本不判断电气对错,只抓两类问题:空值和“脚号不一致但没有备注”。参数pin_map.csv的字段固定为part、symbol_pin、footprint_pad、note,note是给二极管、连接器这类非直通映射留的口子。输出行号方便回到表里改。实际使用时,先把所有直通器件跑一遍,再人工审非直通项,比在原理图里逐个点引脚快得多。

多单元器件还要看Part编号和引脚号是否重复。电源脚可以在多个单元重复,信号脚不能重复。重复引脚如果没标Power或没做隐藏连接,后面网络合并会出玄学问题。我的经验是:能不在符号里隐藏引脚就不隐藏,非要隐藏,就在参数里写清楚连接到哪个网络。

3.3 参数模板与 BOM 字段

参数不是越多越好,但 BOM 要用的字段必须有。最少要有Value、Footprint、MPN、Description,再加Manufacturer和Datasheet更好。字段值不要带换行,不要带多余空格,封装名不要写别名。下面这段脚本用来检查参数表必填项和封装命名格式,适合在入库前跑。

import csv import re from pathlib import Path param_csv = Path("ad_lib_audit/reports/component_params.csv") required = ["Value", "MPN", "Footprint", "Description"] fp_pattern = re.compile(r"^[A-Za-z][A-Za-z0-9_\-]*$") # 封装名只允许字母数字下划线短横 bad = [] with param_csv.open(encoding="utf-8-sig") as f: reader = csv.DictReader(f) for row_no, row in enumerate(reader, start=2): for key in required: if not (row.get(key) or "").strip(): bad.append((row_no, row.get("MPN", ""), f"缺少 {key}")) fp = (row.get("Footprint") or "").strip() if fp and not fp_pattern.match(fp): bad.append((row_no, row.get("MPN", ""), f"封装名格式可疑: {fp}")) if " " in (row.get("Footprint") or ""): bad.append((row_no, row.get("MPN", ""), "封装名含空格")) for b in bad: print(b) print(f"bad rows: {len(bad)}")

脚本的required列表可以按团队规则增减,fp_pattern控制封装名格式。封装名带空格、带中文、带斜杠,在跨项目引用时最容易断。输出里带行号和 MPN,方便定位。这里没有校验 MPN 是否真实,因为料号真实性要靠供应渠道和器件承认,不靠脚本。脚本只解决“漏填、格式乱、名字对不上”这类低级但高频的问题。

参数表建好后,原理图符号里只放最关键的几个参数,不要把所有采购字段都显示在图纸上。隐藏参数照样进 BOM,显示太多反而影响读图。我的习惯是图纸显示Value和Designator,最多加一个Description,其余字段放属性里。

3.4 把 Footprint 和 3D 模型挂到符号上

符号挂封装的常见做法是:在符号属性里添加Footprint模型,选择对应.PcbLib和封装名;3D 模型不挂在符号上,而是挂在 PCB 封装里。这样原理图只负责“这个器件用哪个封装”,PCB 库负责“这个封装长什么样、有没有 3D”。如果资源里的符号已经挂了封装名,先别改,先用Footprint Manager看映射是否完整。

挂模型时注意路径。绝对路径在换机器后容易断,相对路径要求库和项目保持目录关系。集成库会把模型打包进去,松散库不会。我的做法是:维护目录保持相对路径,发布时编译集成库;项目里如果必须用松散库,就把库目录和项目目录放在同一个父目录下,减少路径漂移。

挂完后做一次符号级检查:每个符号至少有一个Footprint模型;模型名和 PCB 库里的封装名完全一致;多单元符号每个 Part 都有对应封装;电源符号和测试点不要误挂封装。检查完再编译集成库,不要等到原理图里放了几百个器件才发现封装名拼错。

4. PCB库与3D库落地:焊盘、丝印、STEP 模型和参考点

4.1 焊盘尺寸与层设置的可复现步骤

新建PcbLib后,先定单位和栅格。常见做法是公制毫米,栅格 0.05 mm 或 0.1 mm,焊盘中心对齐栅格。放置焊盘时逐个设置:Designator和原理图引脚号一致,Layer决定贴片还是通孔,Shape选矩形或圆形,X/Y Size是焊盘尺寸,Hole Size是钻孔,Plated控制是否金属化。贴片焊盘不设孔,通孔焊盘必须设孔径和金属化。

下面这张表是示例参数,不是固定标准,实际要按工艺能力和器件规格调整。我一般先用它做底稿,再让工艺确认。

封装示例焊盘尺寸 X/Y间距孔径层备注
0603 电阻0.9 mm × 1.0 mm1.6 mm无Top Layer贴片,按实际器件微调
SOP-80.6 mm × 1.5 mm1.27 mm无Top Layer注意 1 脚方向
通孔排针 2.541.7 mm × 1.7 mm2.54 mm1.0 mmMulti-Layer金属化,孔径按针径

焊盘放完后设参考点。参考点影响贴片坐标和 3D 对齐,我一般把 1 脚焊盘中心或封装几何中心设为参考点,团队内统一。参考点不是随便点一下,放错会导致贴片文件整体偏移。封装里还要画占位边界,用机械层画外框,命名清楚,比如Courtyard,不要和丝印混在一起。

4.2 丝印、装配层、占位边界

丝印的原则是“不压焊盘、不压孔、能看出方向”。线宽常见 0.15 mm,密脚器件可以细一点,但不要细到工厂印不出来。1 脚用圆点或斜角标记,极性器件用+或缺口标记。装配层可以放器件外框和 1 脚标记,方便装配图查看。占位边界画在机械层,表示器件和周围器件的安全距离,不要画到焊盘上。

这一步的检查项很具体:焊盘之间有没有重叠;丝印有没有压到焊盘;1 脚标记是否和原理图一致;通孔孔径是否小于针径;定位孔是否金属化;占位边界是否包住 3D 模型投影。检查完不要只存盘,重新打开库看一遍,AD 有时缓存显示和实际保存不一致。

4.3 3D Body 链接 STEP 的旋转与偏移

3D 模型链接是这套资源里最容易“看起来有、实际不能用”的部分。步骤是:在PcbLib里放置3D Body,选择Generic STEP Model,选 STEP 文件,设置嵌入或链接,然后调旋转和偏移。关键参数有三个:Rotation X/Y/Z、Standoff Height、Overall Height。单位统一用毫米,STEP 文件本身可能是英寸,导入后先看包围盒尺寸对不对。

常见做法是先把旋转全部设 0,看模型默认方向和焊盘的关系;如果模型躺着,再绕 X 或 Y 转 90 度;如果模型悬空,调Standoff Height;如果高度不对,调Overall Height或检查 STEP 单位。模型原点不在封装中心时,不要硬拖,先用机械层画中心十字,按坐标偏移。3D 模型的方向没有玄学,只有坐标系对齐。

检查时切到 3D 视图,看模型是否压焊盘、是否超出占位边界、1 脚方向是否和丝印一致。连接器、电解电容、排针这类高度明显的器件尤其要看。3D 不对不一定会影响电气连接,但会影响结构确认和装配图,后期改起来很烦。

4.4 用封装管理器批量核对符号-封装映射

原理图里的Footprint Manager可以批量看每个元件当前封装、可用封装和替换关系。我的流程是:先导出映射 CSV,再用脚本检查“每个元件有且仅有一个封装、封装名在 PCB 库清单里、3D 标记不为空”。下面这段脚本做的是 CSV 对 CSV 的比对,不直接读 AD 二进制库,适合在发布前跑。

import csv from pathlib import Path map_csv = Path("ad_lib_audit/reports/footprint_map.csv") pcb_list_csv = Path("ad_lib_audit/reports/pcb_footprints.csv") out_csv = Path("ad_lib_audit/reports/footprint_check.csv") # footprint_map.csv 字段:designator, comment, footprint, has_3d # pcb_footprints.csv 字段:footprint with pcb_list_csv.open(encoding="utf-8-sig") as f: pcb_set = {(r["footprint"] or "").strip() for r in csv.DictReader(f)} rows_out = [] with map_csv.open(encoding="utf-8-sig") as f: for r in csv.DictReader(f): fp = (r.get("footprint") or "").strip() issues = [] if not fp: issues.append("缺封装名") elif fp not in pcb_set: issues.append("PCB库中无此封装") if (r.get("has_3d") or "").strip().lower() not in {"yes", "no"}: issues.append("3D标记未填") rows_out.append({ "designator": r.get("designator", ""), "comment": r.get("comment", ""), "footprint": fp, "has_3d": r.get("has_3d", ""), "issue": ";".join(issues), }) with out_csv.open("w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["designator", "comment", "footprint", "has_3d", "issue"]) writer.writeheader() writer.writerows(rows_out) print(f"checked: {len(rows_out)}, output: {out_csv}")

参数上,map_csv是从原理图导出的映射表,pcb_list_csv是 PCB 库封装名清单,out_csv是检查结果。脚本只做集合比对和空值检查,不判断封装尺寸对不对,尺寸要靠焊盘规则和人工抽检。输出里issue为空的行不代表完全正确,只代表“名字层面没断”。我的习惯是先把issue清零,再抽 10% 做 3D 预览,最后才编译发布库。

5. 避坑与排查:库装上了却不能用,先查这五处

5.1 现象:原理图能放符号,PCB 里没有封装

现象很典型:原理图放置元件正常,编译也不报错,更新 PCB 时提示找不到封装,或者封装列表是空的。原因通常有四个:符号根本没挂Footprint模型;模型名和 PCB 库里的封装名大小写或空格不一致;PCB 库没安装到当前项目;项目引用的是旧集成库,新封装没编译进去。

解决顺序不要乱。先在符号属性里看Footprint模型是否存在,再看模型名是否和 PCB 库完全一致;然后打开Footprint Manager,看当前元件能不能选到目标封装;如果选不到,检查 PCB 库是否在可用库列表里;最后重新编译集成库,刷新项目库引用。不要一上来就删项目缓存,先确认名字和路径,八成问题在这一层。

我的血泪经验是:封装名不要用中文,不要带空格,不要用SOP-8和SOP8_1.27这种同义不同名混用。名字统一了,后面批量替换才有救。

5.2 现象:3D 模型方向反了或悬空

现象是 3D 视图里模型躺倒、翻转、悬空,或者整体偏离焊盘。原因一般是 STEP 文件坐标系和封装坐标系不同、单位不是毫米、旋转角没设对、Standoff Height没调,或者模型原点不在几何中心。

解决时先把旋转全部归零,看模型默认姿态;用机械层画中心十字和 1 脚方向;按包围盒尺寸确认单位;再逐步调Rotation X/Y/Z,最后调Standoff Height。不要一边转一边拖,参数会乱。调完后保存,重新打开 3D 视图确认,不要只看当前缓存。连接器类器件还要看插入方向,方向反了比悬空更难发现。

5.3 现象:引脚号对不上,网络飞线乱

现象是原理图网络连好了,PCB 里飞线乱跳,或者某个引脚没网络。原因通常是符号Designator和焊盘Designator不一致,二极管、三极管、连接器最容易中招;也可能是隐藏引脚没接网络,或者多单元器件引脚号重复。

解决时先导出引脚映射表,按第 3 章的脚本跑一遍空值和直通检查;非直通项人工确认;再看隐藏引脚属性,确认连接到正确网络;最后重新同步 PCB。不要用“重新编号”糊弄过去,编号一改,封装映射可能全乱。我的做法是每个非直通器件都在note字段写原因,后面换人维护也能看懂。

5.4 现象:库更新后旧项目被悄悄改掉

现象是旧项目打开后,某些封装突然变了,或者 3D 模型消失。原因是项目直接引用了松散库,源库一改,项目跟着变;或者新发布的集成库覆盖了同名旧库;没有版本快照和哈希记录。

解决方法是把“维护库”和“发布库”分开,旧项目只引用发布版集成库;每次发布生成文件哈希清单,记录库名、封装名、日期和变更人;旧项目需要改库时,复制一份项目专用库,不要动公共发布库。下面这段脚本用来生成发布清单的哈希,不需要第三方库。

import hashlib import csv from pathlib import Path release_dir = Path("ad_lib_audit/release") out_csv = Path("ad_lib_audit/reports/release_hash.csv") rows = [] for p in release_dir.rglob("*"): if p.is_file() and p.suffix.lower() in {".schlib", ".pcblib", ".intlib", ".step", ".stp"}: h = hashlib.sha256(p.read_bytes()).hexdigest() rows.append({"file": str(p), "sha256": h, "size_kb": round(p.stat().st_size / 1024, 1)}) with out_csv.open("w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["file", "sha256", "size_kb"]) writer.writeheader() writer.writerows(rows) print(f"hashed: {len(rows)} files")

参数release_dir指向发布目录,脚本只对库和模型文件算哈希,输出sha256和大小。哈希不是用来防人,是用来判断“这个项目当年到底用的是哪一版”。旧项目出问题时,先比对哈希,比翻聊天记录快。

5.5 现象:同名元件互相覆盖

现象是装了两个库,元件面板里只剩一个,或者参数被另一个库覆盖。原因是不同库里有相同库名或相同元件名,安装顺序决定谁生效;也可能是元件名相同但封装不同,项目引用时随机命中。

解决方法是给库名和元件名加前缀,比如按类别或项目代号分库;安装前跑第 2 章的同名盘点脚本;重复项要么合并,要么改名,不要靠安装顺序赌。我的习惯是库名带类别前缀,元件名带封装后缀,例如R0603_10k这种命名只用于内部临时库,正式库还是R加参数,避免把参数写死进元件名。

6. 入库前用 BOM 反查:三张表和一次 3D 预览

入库前我一般不做“感觉检查”,而是用 BOM 反查库完整性。从原理图导出 BOM,至少包含Designator、Comment、Footprint、MPN四列;再导出库清单和封装清单;用脚本比对 BOM 里的封装是否都在库清单里、MPN 是否为空、3D 标记是否缺失。下面这段脚本只做三件事:找缺失封装、找空 MPN、找无 3D 标记。

import csv from pathlib import Path bom_csv = Path("ad_lib_audit/reports/bom.csv") pcb_csv = Path("ad_lib_audit/reports/pcb_footprints.csv") out_csv = Path("ad_lib_audit/reports/bom_check.csv") with pcb_csv.open(encoding="utf-8-sig") as f: pcb_set = {(r["footprint"] or "").strip() for r in csv.DictReader(f)} issues = [] with bom_csv.open(encoding="utf-8-sig") as f: for i, r in enumerate(csv.DictReader(f), start=2): fp = (r.get("Footprint") or "").strip() mpn = (r.get("MPN") or "").strip() has_3d = (r.get("has_3d") or "").strip().lower() if fp not in pcb_set: issues.append((i, r.get("Designator", ""), "封装不在库清单")) if not mpn: issues.append((i, r.get("Designator", ""), "MPN为空")) if has_3d not in {"yes", "no"}: issues.append((i, r.get("Designator", ""), "3D标记缺失")) with out_csv.open("w", newline="", encoding="utf-8-sig") as f: writer = csv.writer(f) writer.writerow(["row", "designator", "issue"]) writer.writerows(issues) print(f"issues: {len(issues)}, output: {out_csv}")

bom_csv是导出的 BOM,pcb_csv是封装清单,out_csv是问题表。脚本跑完先清空问题表,再抽 3D 预览:至少看连接器、极性器件、高器件、密脚芯片四类。BOM 反查只能证明名字层面完整,不能证明焊盘尺寸正确,所以最后一步人工抽检不能省。从那以后我每次把新库放进项目前,都强制走一遍 BOM 反查和 3D 预览,不给自己留“装完再说”的后悔药。希望帮到你。

本文还有配套的精品资源,点击获取