环境
- 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 .enet 用 netlistComparison(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 制造网表为空。
已排除的状态/缓存因素
已经做过以下测试,问题仍稳定复现:
importChanges() 再同步;
- 保存 + reload schematic / PCB;
- Board 重新绑定到同一正确 schematic UUID + PCB UUID;
- 完整退出 EasyEDA Pro 后重新启动;
- 重启后重新确认只有一个新窗口,重新运行上述 UUID/File A-B 对照;
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
环境
3.2.186(macOS,Electron 36.3.2 / Chrome 136)eda.*API1.4.8(CLI / daemon / connector 全部同版,仅作为 API 调用与结果记录 harness)现象
原生 PCB DRC 持续报告:
进一步用官方
eda.sys_Tool.netlistComparison()做 A/B 对照后发现,问题不是实际 SCH/PCB 网表不一致,而是 PCB document UUID 作为比较输入时,PCB 侧所有网络成员都会被解析成空数组。同一块 PCB:
eda.pcb_Net.getNetlist()能读取完整网表;eda.pcb_ManufactureData.getNetlistFile()导出的.enet完整;pinNumber/padNumber + net逐项一致;.enet↔ PCB.enet用netlistComparison(File, File)比较为 0 diff;netlistComparison就返回全部 6 个网络不一致,且 PCB 一侧都是[]。最小复现 / A-B 对照
工程中有一个 Board,正确绑定一个 schematic 和一个 PCB;先分别获取两边制造网表文件:
已知:
1. File ↔ File:正确
结果:
即
count = 0。2. schematic UUID ↔ SCH File:正确
结果同样为:
3. PCB UUID ↔ PCB File:错误
结果为 6 条 NET 差异;UUID 一侧全部为空。例如:
{ "net1": [], "net2": ["C1.2", "C2.2", "J1.21", "R1.1", "SW1.2"], "object": "'5V_SW'", "type": "NET" }其余网络同样如此:
4. schematic UUID ↔ PCB UUID:复现 DRC 的假差异
返回 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 上:
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,因此并不是:已排除的状态/缓存因素
已经做过以下测试,问题仍稳定复现:
importChanges()再同步;eda.pcb_Net.getNetlist()读出的 PCB 网表仍完整,但netlistComparison(pcbUuid, pcbFile)的 UUID 一侧仍为空。因此看起来不是旧窗口或临时缓存,而是
SYS_Tool.netlistComparison在解析 PCB document UUID 输入时使用的 document-level netlist view 与pcb_Net/pcb_ManufactureData状态发生了分叉。期望
对于同一个 PCB 文档:
应返回 0 diff;至少应与:
以及
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
Netlist Error缺少结构化差异导致 headless 流程难以定位”;本 Issue 是进一步定位出的独立问题:官方netlistComparison已经能给结构化差异,但 PCB UUID 输入本身解析错误,与 File 输入结果矛盾。