Skip to content

V3.2.186: sys_Tool.netlistComparison 使用 PCB document UUID 时全部网络解析为空,File↔File 却 0 diff,导致 DRC Netlist Error 假阳性 #39

Description

@python-rust

环境

  • EasyEDA Pro 3.2.186(macOS,Electron 36.3.2 / Chrome 136)
  • 扩展内直接调用官方 eda.* API
  • 自动化调用层:easyeda-agent 1.4.8(CLI / daemon / connector 全部同版,仅作为 API 调用与结果记录 harness)
  • 2 层 PCB,10 个器件、60 个 schematic pin / PCB pad、6 个有名网络

现象

原生 PCB DRC 持续报告:

Netlist Error
PCB and schematic netlist does not match.
Rule: Import Changes

进一步用官方 eda.sys_Tool.netlistComparison() 做 A/B 对照后发现,问题不是实际 SCH/PCB 网表不一致,而是 PCB document UUID 作为比较输入时,PCB 侧所有网络成员都会被解析成空数组

同一块 PCB:

  • eda.pcb_Net.getNetlist() 能读取完整网表;
  • eda.pcb_ManufactureData.getNetlistFile() 导出的 .enet 完整;
  • 60 个 SCH pin ↔ 60 个 PCB pad 的 pinNumber/padNumber + net 逐项一致;
  • SCH .enet ↔ PCB .enetnetlistComparison(File, File) 比较为 0 diff
  • 但只要 PCB 一侧改为 PCB document UUID,同一个 netlistComparison 就返回全部 6 个网络不一致,且 PCB 一侧都是 []

最小复现 / A-B 对照

工程中有一个 Board,正确绑定一个 schematic 和一个 PCB;先分别获取两边制造网表文件:

// 在对应文档前台时分别获取
const schFile = await eda.sch_ManufactureData.getNetlistFile('sch.enet');
const pcbFile = await eda.pcb_ManufactureData.getNetlistFile('pcb.enet');

已知:

schematicUuid = 9512daf99412dc4e
pcbUuid       = 6143c28f343de7bf

1. File ↔ File:正确

await eda.sys_Tool.netlistComparison(schFile, pcbFile)

结果:

[]

count = 0

2. schematic UUID ↔ SCH File:正确

await eda.sys_Tool.netlistComparison(schematicUuid, schFile)

结果同样为:

[]

3. PCB UUID ↔ PCB File:错误

await eda.sys_Tool.netlistComparison(pcbUuid, pcbFile)

结果为 6 条 NET 差异;UUID 一侧全部为空。例如:

{
  "net1": [],
  "net2": ["C1.2", "C2.2", "J1.21", "R1.1", "SW1.2"],
  "object": "'5V_SW'",
  "type": "NET"
}

其余网络同样如此:

5V_SW         UUID side = []
PWR_LED_A     UUID side = []
VIN_5V        UUID side = []
VIN_FUSED     UUID side = []
VIN_PROTECTED UUID side = []
GND           UUID side = []

4. schematic UUID ↔ PCB UUID:复现 DRC 的假差异

await eda.sys_Tool.netlistComparison(schematicUuid, pcbUuid)

返回 6 条差异,例如:

{
  "net1": ["C1.2", "C2.2", "J1.21", "R1.1", "SW1.2"],
  "net2": [],
  "object": "'5V_SW'",
  "type": "NET"
}

与原生 PCB DRC 的 Import Changes / Netlist Error 行为一致。

反证:PCB 网表数据本身并不为空

当前 PCB 上:

components = 10
pads       = 60
nets       = 6
tracks     = 17

eda.pcb_Net.getNetlist() 可读到完整的 JLCEDA 2.0.0 网表(10 个 components),eda.pcb_ManufactureData.getNetlistFile() 也导出完整 .enet

将 SCH/PCB .enet 直接传给同一个 eda.sys_Tool.netlistComparison(File, File) 时为 0 diff,因此并不是:

  • pin number ↔ pad number 不匹配;
  • pad net 丢失;
  • Board 绑定错 schematic;
  • PCB 制造网表为空。

已排除的状态/缓存因素

已经做过以下测试,问题仍稳定复现:

  1. importChanges() 再同步;
  2. 保存 + reload schematic / PCB;
  3. Board 重新绑定到同一正确 schematic UUID + PCB UUID;
  4. 完整退出 EasyEDA Pro 后重新启动;
  5. 重启后重新确认只有一个新窗口,重新运行上述 UUID/File A-B 对照;
  6. eda.pcb_Net.getNetlist() 读出的 PCB 网表仍完整,但 netlistComparison(pcbUuid, pcbFile) 的 UUID 一侧仍为空。

因此看起来不是旧窗口或临时缓存,而是 SYS_Tool.netlistComparison 在解析 PCB document UUID 输入时使用的 document-level netlist view 与 pcb_Net / pcb_ManufactureData 状态发生了分叉

期望

对于同一个 PCB 文档:

netlistComparison(pcbUuid, pcbFile)

应返回 0 diff;至少应与:

netlistComparison(pcbFile, pcbFile)

以及 pcb_Net.getNetlist() / pcb_ManufactureData.getNetlistFile() 所描述的 PCB 网络一致。

原生 DRC 的 Import Changes / Netlist Error 也不应因为 PCB UUID resolver 返回空网络而产生假阳性。

建议排查点

建议检查 SYS_Tool.netlistComparison()PCB document UUID 的内部解析路径:它似乎没有读取当前 PCB pad/net 或当前 PCB netlist,而 schematic UUID 路径是正常的。

如果该比较器和原生 DRC Import Changes 共用同一 document-netlist resolver,这也可以解释为什么 DRC 与 UUID comparison 同时出现完全相同的假差异。

相关 Issue

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingseems like AIIssue suspected to be generated by AI and not checked by humans

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions