Ultra Librarian / Altium 元器件包 → Cadence SPB 16.6 CIS 入库全流程
定位:本文档是"从厂商/立创/LCSC 下载的元器件数据包 → 本机 CIS 库可放置元器件"的完整作业指导书。
由 RTL8367N-VB-CG(UL 包,2026-09-23)和 RTL8367RB-CG(Altium 包,2026-10-03)两次全流程实战写成。
0. 环境事实(勿重新探索)
| 项 | 值 |
|---|---|
| Cadence 安装 | D:\Cadence\SPB_16.6(仅 16.6,无 17.x) |
| allegro.exe | D:\Cadence\SPB_16.6\tools\pcb\bin\allegro.exe |
| create_sym.exe | 同目录(只能在真控制台跑,见 FAQ-5) |
| Capture/tclsh | D:\Cadence\SPB_16.6\tools\capture\Capture.exe;tools\tcltk\8.4\bin\tclsh84.exe(跑 Dbo Tcl 前把 tools\capture 加进 PATH) |
| 符号库 | D:\CIS_LIBRARY\SCH\*.OLB |
| 焊盘/封装库 | D:\CIS_LIBRARY\PCB\pad\*.pad、D:\CIS_LIBRARY\PCB\symbol\*.dra/.psm/.ssm |
| CIS 数据库 | D:\CIS_LIBRARY\CIS\Trent_CIS_2022.mdb(Access,pyodbc +{Microsoft Access Driver (*.mdb, *.accdb)}) |
| 生效 ini | D:\Cadence\SPB_Data\cdssetup\OrCAD_Capture\16.6.0\Capture.ini([Part Management]→DBC;[Part Library Directories]→SCH;[Allegro Footprints]→PCB) |
| 关键环境变量(用户级) | CDSROOT=D:\Cadence\SPB_16.6、CDS_LIC_FILE=D:\Cadence\LicenseManager\license.dat、HOME=D:\Cadence\SPB_Data、PATH 含tools\pcb\bin |
| YC CODE | IC 表前缀60501(另有60510段在用),Oscillator=60602;取同前缀 MAX+1,insert_part.py 自动做 |
1. 输入:认识三种原料
| 来源 | 特征 | 内容 |
|---|---|---|
| Ultra Librarian 包 | 文件名ul_*.zip,立创/LCSC 页 “Ultra Librarian” 按钮下载 | AllegroV17_2\*.xml(封装几何)、OrcadCaptureXML\*.xml(符号引脚)、*.step(3D)、builder.ile(17.2 专用,16.6 无用) |
| Altium 包 | Altium_*.zip,同页面 Altium 按钮下载 | *.schdoc(符号,ASCII 记录流)、*.pcbdoc(封装,ASCII 记录流) |
| 只有 PDF 手册 | 最苦的情况 | 手工按 Land Pattern 画(走 cadence-new-part skill 路线 B) |
选型建议:优先下载 UL 包(格式结构化最好);只有 Altium 包也行(本文档 §3 有转换器)。
2. 文件格式要点
2.1 UL Allegro XML(目标格式,一切以它为准)
<Footprintname="封装名"><Unitstype="mils"precision="3"/><ExtentsminXminYwidthheight/><Padstackname="..."type="single"><Layers><Layername="TOP|PASTEMASK_TOP|SOLDERMASK_TOP"><Padshape="rectangle|square|circle|oblong|octagon"widthheight/>- 等宽高焊盘必须
shape="square"(含散热盘 EPAD)——rectangle 等宽高会被 axl 拒绝(FAQ-9) <Pin number padName originX originY rotation>:坐标已相对封装原点,单位 mil<Layer name="PACKAGE GEOMETRY/SILKSCREEN_TOP|ASSEMBLY_TOP|PLACE_BOUND_TOP" packageHeight>- Path type=“line”=线段(lineWidth 宽度);≥3 点闭合折线→按 shape 处理
<Label textBlock angle x y text justify>=文字
- 层名对照:Altium TOPOVERLAY→SILKSCREEN_TOP;MECH7(courtyard)→PLACE_BOUND_TOP;本体→ASSEMBLY_TOP
2.2 Altium schdoc/pcbdoc(ASCII 记录流)
- 文件头
|HEADER=或|RECORD=,记录间以\x00或下一条|RECORD=分隔 - 属性
|KEY=VALUE竖线分隔;坐标带单位后缀如3028.7400mil - pcbdoc 关键记录:
Component(原点=PATTERN 中心)、Pad(NAME/X/Y/XSIZE/YSIZE/SHAPE/ROTATION)、Track(X1 Y1 X2 Y2/LAYER/LINEWIDTH)、Region(VXn/VYn 顶点) - schdoc 引脚:
RECORD=2记录里DESIGNATOR=脚号、NAME=脚名 - 转换器:
python altium2ul_xml.py <pcbdoc> <schdoc> <out.xml> <footprint_name>(在 workspace,可挪进 skill scripts)
2.3 Generate Part 的 PSpice Model(做 .olb 的唯一可行路线)
.subckt <PartName> 脚名1 脚名2 ... ← 每行约6个,续行以 "+ " 开头 .ends <PartName>- 不要用 Actel Pin File:格式不公开、HEADER 规则踩不出来(FAQ-7)
- 生成器:
python pins_pspice_lib.py <capture_xml> <PartName> <out.lib>(UL 包直接用;Altium 包从 pins.json 取名)
3. 完整操作流程(六步)
第 1 步 · 备料
解压到独立构建目录(如D:\Desktop\rb_build,目录名不能含空格以外的中文也可,但路径里别有空格更稳)。
- UL 包:直接用
AllegroV17_2\*.xml - Altium 包:先
altium2ul_xml.py转成 UL 格式 XML;核验输出行pads=N、pins in sch but not pcb: [](引脚数与名称两边一致才算过)
第 2 步 · 生成 SKILL 构建脚本
python"C:\Users\38101\.agents\skills\cadence-ul-import\scripts\gen_dra_skill.py"<build_dir><xml...>产物:ul_build.il(数据内联的 SKILL)、build.scr.txt、template.dra(空 Package 绘图模板,skill 核心资产,勿删)。
第 3 步 · Allegro 批量构建 .dra/.pad
cd<build_dir>&&("<allegro.exe>"-sbuild.scr.txt>allegro_run.log2>&1&)- 启动必弹Product Choices对话框 → computer-use:选
Allegro PCB Librarian XL→ OK(每次都弹,没有免弹配置) - 轮询
allegro.jrl里的ULBUILD行,验收标准:drawing opened type=PACKAGEpins created=N failed=0(N=总脚数含散热盘)<name> saved
- 结束后:记 PID 精确杀会话(
taskkill /PID <pid> /F,严禁 /IM,会误杀用户开的工程!),rm -f *.lck - 产物:
<name>.dra+pad*.pad
第 4 步 · 编译 .psm(用户手工,1 分钟)
把skill\scripts\make_psm.bat复制到构建目录,让用户双击,黑窗里依次输入:
Symbol Drawing (*.dra): → <name>.dra Package Symbol (*.psm): → <name>.psm看到'xxx' saved to disk.即成功。
第 5 步 · 生成 .olb(用户在 Capture 里点,共 5 次点击)
先备料:python pins_pspice_lib.py ... <PartName>.lib(Altium 包从 pins.json 生成同名 .lib)。
用户在已打开的 Capture里:
Tools → Generate Part... Netlist/source file: <build_dir>\<PartName>.lib ← 文件名框手敲完整路径 Netlist/source file type: PSpice Model ← 改路径后会自动重置,必须重选! Part name: <PartName> Destination part library: D:\CIS_LIBRARY\SCH\<短名>.OLB → OK生成后.OLB落在源 .lib 旁边 → 拷进D:\CIS_LIBRARY\SCH\。
第 6 步 · 入库登记 + 四查(全自动)
# 拷贝正本cp<name>.dra<name>.psm<name>.step → D:\CIS_LIBRARY\PCB\symbol\cppad*.pad → D:\CIS_LIBRARY\PCB\pad\# 大小写与登记名统一cp<PartName>.OLB → D:\CIS_LIBRARY\SCH\<短名>.OLB# 验证符号名(输出 PART: 行,逐字符用于登记)PATH=".../tools/capture:$PATH"tclsh84.exe dump_olb.tcl"D:/CIS_LIBRARY/SCH/<短名>.OLB"# 写库(自动备份 mdb + 分配 YC CODE + 回查)python insert_part.py parts.json# cadence-new-part skill scripts 下parts.json 字段(IC 表示例):
[{"table":"IC","Part Type":"Transceiver","Value":"RTL8367RB-CG","Description":"Realtek RTL8367RB 5口千兆交换 LQFP-128 0.4mm","Schematic Part":"RTL8367RB-CG",← dump_olb 输出的符号名,一字不差"Allegro PCB Footprint":"QFP128_RTL8367RB",←=.psm 文件名,一字不差"Manufacturer Part Number":"RTL8367RB-CG","Manufacturer":"Realtek"}]Part Type 必须复用表内已有词汇(SELECT DISTINCT [Part Type] FROM [IC]:ADC/DAC, Amplifier, Clock, Logic, MISC, Power, Processor&Controller, Programmable IC, Storage, Transceiver)。
四查(全过才算完)
dump_olb输出含目标符号名insert_part.py回查行内容正确ls PCB\symbol\<footprint>.*同时有 .dra 和 .psm- ini 三项指向 D:\CIS_LIBRARY
放置验证(教用户)
Capture 原理图页右键 →Place Database Part→ 搜 Value → 双击放置。
CIS Explorer 是登记前开的话要重开才刷新。
4. 常见问题清单(全部实战踩过)
| # | 报错/现象 | 根因 | 解决 |
|---|---|---|---|
| 1 | UL 官方 .bat 弹 “Allegro 17.2 or later is required” | builder.ile 检查版本,16.6 不支持 | 放弃官方流程,用 gen_dra_skill.py 自建 |
| 2 | 阿狸狗降版本工具无法使用 | 它只转 17.x 二进制(.dra/.psm/.brd),UL 包里只有 XML 源数据 | 同上,XML 直接生成 16.6 数据,无需降版本 |
| 3 | allegro -s 启动后一直卡住不动 | 每次启动必弹 Product Choices 对话框等人工点 | computer-use 点掉(选 Librarian XL → OK) |
| 4 | pins created=0 failed=N+ “can only be applied to symbol drawings” | 打开的是 BOARD/SHAPE 绘图;axlSetSymbolType/axlSetDesignType/newdraw/newsym/gensym在 16.6 全都不可用 | 用 skill 的template\probe_pkg.dra+axlOpenDesignForBatch;库里 flash*.dra/c1r20_d/aspad20 都是 SHAPE 类型不能当模板 |
| 5 | Unable to start program; create_sym | allegro 会话内拉不起子进程(补齐 CDSROOT/PATH 也无效) | 用make_psm.bat在真控制台编译 .psm |
| 6 | axlSaveDesign后没有 .psm | 16.6 保存只写 .dra | 正常,走 FAQ-5 的 bat |
| 7 | Generate Part 报 ORCAP-1541/1516(Actel Pin File) | Actel 格式不公开,HEADER 规则构造不出 | 换PSpice Model路线(.subckt 端口=引脚),实测稳定 |
| 8 | Generate Part 的 Browse 看不到 .lib/.txt | 文件类型过滤 | 文件名框手敲完整路径;且每次改路径后 type 会自动重置,必须重选 PSpice Model |
| 9 | WARNING(SPMHA1-102): Illegal figure size(焊盘建不出) | RECTANGLE 图形等宽高被拒,等宽高必须用 SQUARE | gen_dra_skill.py 已内置转换(rectangle 等宽高→SQUARE);手写 XML 时注意 |
| 10 | (axlDBCreatePin): Invalid Text Block - 17 | 模板绘图没有 17 号文字块 | 引脚号文字块统一用3 |
| 11 | WARNING(SPMHA1-102)连带ERROR(SPMH1-161) dbdoctor | 焊盘失败后的连锁反应 | 修根因(多半是 FAQ-9)即可消失 |
| 12 | ERROR(SPMHDB-184): Unfilled SHAPE may not exist on PLACE_BOUND_TOP | place bound 用了不填充的 shape | OpenShape 第二参传t(填充) |
| 13 | WARNING(SPMHA1-108): Illegal line segment ... end points | XML 里有起止点相同的零长度退化线段 | 生成器已过滤连续重复点 |
| 14 | 保存时卡 “Do you want to save the changes … unnamed?” | 会话退出前的保存提示 | computer-use 点"否"(产物已单独存过) |
| 15 | 启动弹 “…is being edited by user… override the lock?” | 上次强杀进程留下 .lck | rm -f *.lck后重试 |
| 16 | 误杀用户的 Allegro 工程 | 用了taskkill /IM allegro.exe | 铁律:只允许taskkill /PID;启动会话先记 PID |
| 17 | SKILL sprintf 崩溃too many format specs | 生成器把 %%s 按字面写入 | SKILL 里 % 是字面量不需转义;修生成器(已修) |
| 18 | sprintf 报 argument incompatible | SKILL 的 %d/%g 对浮点/整数挑剔 | 调试消息统一用%L(打印任意 Lisp 数据) |
| 19 | Capture 16.6 找不到 XML 导入 | 该功能 16.6 没有(olb.xsd 无脚本引用) | 走 Generate Part(FAQ-7 路线) |
| 20 | 写 mdb 报锁定失败 | Capture/Access 开着库文件 | 关 CIS 浏览窗/Access 再写 |
5. 硬性规矩(违反会翻车)
- 杀进程只按 PID(见 FAQ-16)。
- 写 mdb 前必备份(insert_part.py 自动做,别绕过它手写 SQL)。
Schematic Part与 OLB 内符号名一字不差;Allegro PCB Footprint与 .psm 文件名一字不差(变体后缀 -M/-L 放 Alt_Symbols 或 Description,不放主名)。- Capture 运行中不改 Capture.ini(退出时会覆盖你的修改)。
- 调试产物只放构建目录;入库正本只认
D:\CIS_LIBRARY里的拷贝。 template\probe_pkg.dra是唯一可用的 Package 模板来源,删了就要用 UI 手工重建(File→New→Package symbol→命名→Ctrl+S)。
6. 两次实战记录(可对照排错)
| RTL8367N-VB-CG | RTL8367RB-CG | |
|---|---|---|
| 原料 | ul_*.zip(UL 格式) | Altium_*.zip(schdoc+pcbdoc) |
| 封装 | QFN88_RTL8367_RTK,89 脚(88+EPAD) | QFP128_RTL8367RB,129 脚(128+EPAD 5.6mm) |
| YC CODE | 605010018 | (待登记) |
| 特有坑 | FAQ-4/5/7/8/10/16 | FAQ-9(SQUARE)+ Altium 格式转换 |
7. 增补 FAQ(2026-10-03 RB 实战第二轮)
| # | 报错/现象 | 根因 | 解决 |
|---|---|---|---|
| 21 | Generate Part 后同会话Place Database Part 报 ORCIS-6085 | 生成的 OLB 被自动挂进当前工程(工程树 Library 下出现该 olb),Capture 持有 .OLBlck 锁,CIS 读取冲突 | 工程树右键该 olb → Remove From Project 释放锁;锁文件消失后重开 CIS Explorer 放置 |
| 22 | .psm 也能全自动编译 | bash 管道喂 stdin 会触发 create_sym 批处理模式(SPMHUT-39) | PowerShellStart-Process cmd /c make_psm.bat开真控制台 + computer-use 键盘输入两行文件名 |
| 23 | Generate Part 对话框可远程驱动 | 活动文档是**项目管理器(.opj)**时 Tools 菜单项才可用(原理图页激活时全灰) | computer-use:AXExpand Tools → AXPress Generate Part…;对话框字段用 setValue 按 window_id 固定绑定填写 |
| 24 | 符号太丑(Generate Part 单列长条) | 自动生成的固有布局 | 抄参考设计:课程/同事的 .dsn 用 export_to_olb.tcl 抽符号(路线 A),名字一致则数据库零改动直接换 OLB 文件 |
RB 实战结论:参考工程02_千兆5口交换机项目\01-工程文件\SCH\RTL8367RB_5PORT_SWITCH.DSN
一次抽出 15 个可用符号(RTL8367RB-CG、RJ45_053_5、HX5084NL、TMI3253SH、XTAL2 等),
换入D:\CIS_LIBRARY\SCH\RTL8367RB.OLB(原自动版备份为 _auto_backup.OLB)。