
引脚网络重排
引脚网络重排
liuem6LCEDA-sch-header-swap(引脚网络重排)
嘉立创EDA专业版扩展(PCB 侧):在 PCB 中选中要交换的网络(如 MCU-FPGA 排线网络),从网络连接的器件中选择实施交换的器件(排插/MCU/FPGA 均可),按鼠线交叉与总线长求解最优引脚-网络指派;应用后直接改焊盘网络、画布鼠线即时可见,满意再同步原理图,不满意一键撤销。
解决什么问题
把 MCU/FPGA 的 IO 拉到排插或互连,是开发板与模块设计的常规操作。布局完成后,器件引脚 顺序与另一侧焊盘的鼠线经常大面积交叉,以往只能手工逐个调整某一侧的网络分配去适配布线。 本插件把这一步变成自动求解:以"器件引脚位置 ↔ 网络"的指派问题建模(匈牙利算法 + 2-opt 精修),最小化鼠线交叉与总线长。
交换的目的是好布线——所以主场在 PCB:改焊盘网络后画布鼠线即时更新(真鼠线即预览), 满意再把变更同步回原理图,不满意一键撤销。
功能演示
1. 菜单入口(PCB 编辑器 → 顶部菜单「引脚网络重排」)

2. 重排前:MCU-FPGA 排线鼠线大面积交叉

3. 选中要交换的网络(点选/框选走线或焊盘)

4. 执行「交换选中网络」:预览窗列出候选器件与各自方案(前后交叉数/鼠线总长)

5. 应用后的效果:同一批网络在所选器件上重新分配,鼠线交叉显著减少

6. 满意 → 同步到原理图;不满意 → 撤销

7. 设置:锁定引脚 / 电源名单 / 优化目标 / 写入节奏

使用方法(PCB 编辑器菜单「引脚网络重排」)
- 在 PCB 中选中要交换的网络:点选/框选这些网络的走线或焊盘(未布线时选焊盘)。
- 「交换选中网络(选器件)…」:弹出预览窗,列出这些网络连接的器件(在选中网络上 落有 ≥2 个焊盘者)及各自的交换预览(每脚新旧网络、前后交叉数/鼠线总长、锁定原因), 点选实施交换的器件。
- 「应用到 PCB」:直接改写该器件焊盘网络并保存、刷新鼠线——观察画布真鼠线。
- 满意 → 「同步上次交换到原理图…」(器件引脚的独占导线自动改网络;汇入结点/电源 符号承载的引脚会列入手工清单);不满意 → 「撤销上次交换」(PCB 与原理图一并恢复)。
- 反悔随时可撤销(含已同步的情况)。
重要:自动保存与备份
- 应用 / 撤销会自动保存 PCB,同步会自动保存原理图,并且写操作完成后会 自动重新加载 PCB 页签(画布与鼠线即时重建,属正常现象)。
- 插件虽然自带「撤销上次交换」(按台账恢复焊盘与导线网络),但改网络属批量写操作, 建议先对工程备份(编辑器内 文件 → 备份/另存为,或复制整个工程)再执行。
- 同步前原理图与 PCB 网络不一致属预期(以 PCB 为准),请尽快同步或撤销。
要求与限制
- 交换发生在选中的网络集合内部,器件其它引脚不受影响;请确保所选网络在该器件上 确实可互换(如全 GPIO),差分/专用功能网络请勿选入。
- 电源/地脚默认按名单自动锁定(3V3/1V8 等裸电压形态自动识别),任意引脚可在设置中锁定。
- 原理图自动同步要求器件引脚由带网络名的导线(原生虚拟网络标签)承载; 其余连接形态会列入手工清单而不是误改。
pcb_PrimitivePad.modify/sch_PrimitiveWire.modify为 BETA 接口,旧客户端: 焊盘改写失败会列明细;导线改写自动退级"按原折线删建"。- 多 PCB 工程暂使用名称排序的第一个 PCB(若与当前激活文档不一致会提示)。
- 在嘉立创EDA专业版 V3.2.149 实机开发验证;写路径按 V3.2 形态适配(焊盘经器件引脚
对象
setState_Net写入,写后自动重开 PCB 页签重建画布)。
开发
node test/run-offline.ts # 离线测试(179 断言)
npx eslint src test config
npx tsc --noEmit -p tsconfig.json
npm run build # 产出 build/dist/lceda-sch-header-swap_vX.Y.Z.eext
node test/verify-pkg.cjs # 包内容核验(含 images 硬校验)
npm run test:bundle # 构建产物冒烟(入口求值/预览/应用/同步/撤销/错误路径)
License
Apache-2.0
Changelog
0.3.2 (2026-09-23)
移除 banner 横幅图(images/banner.jpg、images/banner.svg 与 extension.json 的
images.banner 声明):上架物料只保留 logo,功能无变化。注意声明了 banner 但包内
无文件会导致客户端加载失败/菜单不出现(v0.1.0 踩过的坑),verify-pkg 加守卫确保
banner 声明与文件都不存在。
0.3.1 (2026-09-22)
三处实机反馈修复(Run API Gateway 桥接 + 截屏取证):
- 改网后画布"半锁死"(只有部分焊盘可拖、拖动不落盘、鼠线不刷新):V3.2 客户端 程序化改焊盘网络(setState+done 或类级 modify)会把交互层带进半成品事务态—— 实测拖动的焊盘保存重开 PCB 后自动归位(拖动从未写入文档),关开页签即原生重建。 修复:应用/撤销写完保存后自动关闭并重开 PCB 页签(等价用户手动路径,画布/ 鼠线一起干净);无 closeDocument 的旧客户端退级 ratline start/stop 循环(等待 300ms→2500ms,过早 stop 会掐死大板计算)。
- 同步原理图报「未找到器件 U4」:V3.2 客户端
sch_PrimitiveComponent.getAll()无参调用必抛「获取所有器件失败」,可用形态是getAll('part', true)(conn-export 先例,本次落地)。器件读取统一走('part', true);跨图页返回集合下,多页工程 用「引脚落在本页导线上」几何确认器件所在页(确认不了退级首次命中页)。 工程信息的原理图节点兼容单数page字段。 - 版本标记
schHeaderSwapVersion= 0.3.1。
0.3.0 (2026-09-18)
写路径根治性重构:经 Run API Gateway 桥接多轮实机取证,确认 pcb_PrimitivePad.modify
类级批量改网虽然生效,但会把画布交互层搞坏(除被改过的焊盘外全部无法点选/拖动,
多轮实机复现;U4.41/FPGA.D15 即为被改焊盘)。新写路径 = 器件引脚对象的
setState_Net(net) + done()(getAllPinsByPrimitiveId 取引脚,全板引脚对象 8 并发缓存),
实机验证真实生效且交互层保持健康;类级 modify 仅作无 setState 客户端的兜底。
附带实机结论:pcb_Net.setNetlist('Protel2') 返回 true 但假成功(网络不变);
getNetlist('EasyEDA') 会挂起——均不可用。
0.2.3 (2026-09-18)
应用/撤销写焊盘前先 clearSelected(修改"正处于选中状态"的焊盘会破坏交互层);
加载即写 schHeaderSwapVersion 版本标记(桥接诊断直接确认客户端加载版本)。
0.2.2 (2026-09-18)
startCalculatingRatline 是模式开关(调后画布输入锁死),改为与 stop 配对 +
轮询校验收敛;toast 类型改 V3.2 数字枚举(2=信息/3=成功,传 0 显示红叉错误图标)。
0.2.1 (2026-09-18)
修复实机"选中网络上没有落有 ≥2 个焊盘的器件":V3.2 客户端 pcb_PrimitivePad.getAll()
返回的焊盘图元没有 getState_ParentComponentPrimitiveId 方法(经 Run API Gateway
桥接实机探明),位号映射全空导致所有焊盘被过滤。修复:焊盘位号映射双路径——pad 自带
parent 方法时直接用(autofanout 先例客户端);没有时逐器件 getAllPinsByPrimitiveId
(其返回带 parent/PrimitiveId)反向构建 padId→位号 映射(8 并发批)。离线 163 断言
新增该形态回归;另新增 tools/ 实机诊断脚本(经 49620 桥端到端驱动,见 AGENTS.md)。
0.2.0 (2026-09-18)
按实机使用反馈重构为 PCB 主场(交换的目的是好布线,原理图只跟进):
- 菜单迁到 PCB 编辑器:「交换选中网络(选器件)…」「同步上次交换到原理图…」「撤销上次交换」。
- 新流程:PCB 中选中要交换的网络(点选/框选走线或焊盘)→ 从网络连接的器件列表中选择 实施交换的器件(排插/MCU/FPGA 通吃,预览窗卡片选择、默认高亮改善最大者)→ 求解 → 应用 = 直接改该器件焊盘网络 + 保存 + 刷新鼠线(画布鼠线即预览)→ 满意「同步到原理图」、 不满意「撤销」(焊盘 + 已同步导线一并恢复)。
- 同步原理图:逐页定位器件所在图页(board.schematic/pages 递归收集),该器件参与交换引脚的 独占导线两阶段改名(先临时名后最终名);汇入结点/电源符号承载的引脚列入手工清单。
- 交付仅限选中的网络:交换发生在选中网络集合内部,器件其它引脚不受影响;候选器件 = 在选中网络上落有 ≥2 个焊盘的器件。
- 移除已无意义的「PCB 同步策略」配置(应用本就直接写 PCB)。
- 开发坑:递归收集原理图页时 schematic 常是 board 的子对象(无 type 字段),只认 type=schematic 会空手而归——与 PCB 收集同款的形态兼容处理。
0.1.1 (2026-09-18)
修复安装后菜单不出现:extension.json 声明了 images/logo.png、images/banner.jpg
但包内无 images/ 目录,客户端加载声明资源失败导致扩展不激活。补 PIL 自绘占位
logo/banner(M4 上架前换正式版);verify-pkg 把 images 存在性从提示升级为硬校验;
新增 npm run test:bundle(dist/index.js 冒烟:求值入口 -> 预览/应用/撤销/PCB
同步/错误路径全流程),防"入口求值失败/导出缺失"类问题再漏到实机。
0.1.0 (2026-09-18)
首个开发版本(M1+M2+M3 功能齐备,待实机验证)。
- 「分析选中排插并预览重排」:选中原理图排插/连接器 → 跨文档读取 PCB 全板焊盘 与走线 → 按"最近端点距离"匈牙利算法求初解 + 真实目标函数(鼠线 MST 总长 + 交叉数×权重档)2-opt 精修 → 预览窗展示每脚新旧网络与前后指标(只读不改画布)。
- 引脚锁定规则链:用户名单(位号.引脚号 / 纯引脚号)→ 电源地名单(通配 + 裸电压 形态)→ 无网络/无焊盘 → 原理图连接形态(独占导线簇才可改:共享结点、电源符号 承载、簇内多名一律锁定)→ 重复网络 → 原理图/PCB 网络名一致性。
- 「应用上次预览的重排方案」:两阶段改名(先临时名后最终名,规避交换环的瞬时 同名冲突),失败退级"删除导线+按原折线重建";改动前台账先落盘。
- PCB 直接同步(可选):激活 PCB → 逐焊盘改网络 → 保存 + 刷新鼠线 → 切回原理图; 受影响网络已有走线时先警告并二次确认;同步失败引导走内置「更新 PCB」。
- 「撤销上次交换」:按台账恢复导线旧网络名(含删建回退的恢复)与 PCB 焊盘。
- 设置面板:锁定名单、电源名单、权重档(偏重交叉/均衡/偏重线长)、PCB 同步策略、 精修轮数、写画布节奏。
- 已知限制:多 PCB 工程暂取名称序第一个;引脚网络需由"带网络名的导线"承载 (原生虚拟网络标签)才可交换。

类型
关键词
扩展信息
| 版本 | v0.3.2 |
| 发布者 | liuem |
| 发布时间 | 2026-09-23 11:45:22 |
| 名称 | lceda-sch-header-swap |
| UUID | fe570e25713925c53f575bd465ad4b29 |
| 适用EDA版本: | ^3.2.0 |
| 报告 | 报告滥用 |
评论