
局部网表分析器
局部网表分析器
14790897abc3局部网表分析器 — Local Netlist Analyzer
嘉立创 EDA 专业版扩展插件。框选原理图区域,自动提取选中元件关联的局部网表,用于 AI 电路分析或人工快速查看连接关系。
为什么需要这个插件
现有 EDA AI 插件要么只能查全量网表(数据太多),要么只能查单个元件(粒度太粗)。这个插件填补了中间地带——只导出你关心的那片电路的网表。
功能
- 🖱️ 框选模式:原理图中框选元件 → 自动识别所有选中器件(网表 + 引脚对应关系)
- 🌍 整图模式:一键分析整张原理图,无需框选(v1.5.0+)
- 🤖 AI 一键分析:把网表 + 器件型号/LCSC 编号送给 AI,自动分析电路功能、电源轨、信号路径与潜在风险(v1.4.0+ 起在 prompt 里带
DeviceName/Value/LCSC Part Name) - 📋 结构化展示:dialog 简显 + 完整数据存到
__nl_data,手动 AI 提问也能用 - 💾 可选 CSV/JSON 导出(默认关闭,需在 AI 设置中开启)
- 🎨 暗色主题 UI,与 EDA 编辑器风格一致
演示
启动后,顶部菜单多出 局部网表 一栏:

点击后展开 6 个子项 — 局部网表分析、AI 一键、整图分析、AI 设置、AI 对话:

整图分析:一键出 AI 分析,自动列出 56 个元件的 LCSC 编号清单 + 让 deepseek-v4-pro 推理:

未框选时点"分析选中区域"会提示先框选:

安装
- 下载最新的
.eext文件(从 GitHub Releases 选最新版本) - 打开嘉立创 EDA 专业版
- 顶部菜单 → 设置 → 扩展 → 扩展管理器 → 导入扩展
- 选择
.eext文件即可 - 导入后,到 高级 → 扩展管理器 → 已安装 → 找到本扩展 → 勾选"在顶部菜单显示" 才能让菜单出现在顶栏(默认仅在原理图右键菜单)
使用
模式 A:整图分析(推荐,无需框选)
- 打开一个原理图
- 顶部菜单 → 局部网表 → 分析整张原理图(只出网表 dialog)或 AI 分析整张原理图(直接开 AI 面板自动分析)
- dialog 给出
整图分析: 56元件 40网络+ 前 6 个网络明细;AI 面板给完整分析
模式 B:框选局部
- 打开一个原理图
- 在画布上拖框选择一片电路(必须包含至少 1 个器件或 pin)
- 顶部菜单 → 局部网表 → 分析选中区域网表 或 AI 分析局部网表
- dialog 给出
37选中 16元件 13网络 · $1N20473(2pin) · GND(3pin) · ...;第二行是器件型号清单U1: ESP32-C3-WROOM-02-N4 · 2.4GHz · R1: 10kΩ ...
AI 设置
顶部菜单 → 局部网表 → AI 设置 配 endpoint / API key / model,以及是否保存网表文件。
技术栈
- TypeScript + 嘉立创 EDA Pro API SDK
- 使用的核心 API:
SCH_SelectControl.getSelectedPrimitives()— 获取框选元件SCH_Netlist.getNetlist()— 获取全量网表SCH_PrimitiveComponent.getAllPins()— 获取元件引脚SCH_PrimitiveComponent.getState_*()— 获取元件属性
开发
# 克隆 SDK
git clone https://github.com/easyeda/pro-api-sdk.git
# 安装依赖
npm install
# 开发
修改 src/index.ts
# 构建
npm run build
# 输出: build/dist/local-netlist-analyzer_vX.X.X.eext
参考文档
- API 参考总览
- SCH_SelectControl — 选择控制
- SCH_Netlist — 网表获取
- ISCH_Primitive / ISCH_PrimitiveComponent — 图元类型定义
- 官方 API 文档
- SDK 类型定义
License
Apache-2.0
1.5.2
修复 (banner 图片未入库 — 驳回问题)
- 根因: v1.5.1 的 commit
105d5b6虽然把banner.png转成banner.jpg(1920×810 JPEG, 64:27) 并更新了extension.json,但漏掉了git add,导致images/banner.jpg一直是未追踪状态。GitHub 仓库的 git 树里从来没有这个文件,所以 CI 打的 .eext (1,363,168 B / 36 条目) 也没有images/banner.jpg。 - 审核员驳回信息: "extension.json 包含 banner 字段, 但在指定路径下未检测到对应的 banner 图片"。
- 修复: commit
dca1202把现有的images/banner.jpg(70,911 B, JPEG 1920×810) 真正git add进仓库,这样 CI 重新 build 的 .eext 会包含 banner。 extension.json/package.jsonversion bump1.5.1 → 1.5.2,重新打 tag 触发 release。- 运行时无任何变化,只是 eext 真正带上 banner.jpg,审核后端能读到。
1.5.1
改动 (重新打包 + 包含演示截图)
.edaignore移掉/docs/排除(只剩/docs/screenshots/不被排除)- eext 现在带
docs/screenshots/*.png4 张 +docs/api/*.md3 张 +docs/API-REFERENCE.md/docs/TESTING.md文档 - 目的: 重新发布 eext 时,下载后解压即可看到 README 引用的演示截图
- eext 大小: 100 KB → 3.1 MB(主要是 4 张 PNG 占 3.2 MB)
- 运行时无变化(代码层完全跟 v1.5.0 一致)
1.5.0
新增 (整图分析 + AI 一键分析)
之前 analyzeSelection 只能分析框选区域。v1.5.0 新增"整图分析"入口,直接读当前 sch 页的全集网表,不依赖 selection。
-
analyzeWholeSchematic()(顶菜单): 不读sch_SelectControl,直接getNetlistFile('netlist', 'JLCEDA')→ 拿全 sch 元件 → 出 dialog:整图分析: 57元件 95网络 · 3V3(34pin) · GND(28pin) · EN(1pin) · GPIO9(2pin) · VBUS(2pin) · NET_PB8(1pin) U1: ESP32-C3-WROOM-02-N4 · 2.4GHz · R1: 0603WAF1002T5E · 10kΩ · C1: 100nF · L1: 10uH · Q1: AO3401A第一行用 "整图分析" 前缀,跟
analyzeSelection的 "37选中 16元件" 明显区分。 -
aiAnalyzeWholeSchematic()(顶菜单): 同上,但走 AI 路径,自动开 chat.html + 设__ai_prefill提示词,模板说"基于整张原理图"而不是"基于框选":请基于以下整张原理图(共 57 个元件、95 个网络), 用中文给出结构化分析。覆盖以下要点: 1) 这张电路的主要功能(1-2 句话)和它大致在做什么产品/模块 2) 涉及的电源轨(VCC/GND/特殊电压) 3) 关键信号路径(输入→处理→输出), 识别主控/通信接口/传感器 4) 整体元件分工: U/R/C/Q/L/LED/M 各起什么作用、是否齐全 5) 任何值得注意的设计要点或潜在问题(缺件/未连接的 net/异常 value 等)compInfo 同样拼进 prompt(沿用 v1.4.0),AI 知道每个 desig 是什么型号。
-
菜单 (3 处):
- 顶菜单
headerMenus.home加 2 项: "AI 分析整张原理图" / "分析整张原理图" - 顶菜单
headerMenus.sch加 2 项 (同上) - 右键菜单
contextMenus.sch加 1 项: "分析整张原理图"
- 顶菜单
-
复用:
getNetlistText()/extractCompInfo()/compInfoShortLine()/buildCompInfoPrompt()/storeResult()/loadAIConfig()/loadFileConfig()全部复用iframe/chat.html0 改动 —__nl_data.compInfo跟选中路径走同一条读取链路,手动提问也带 compInfo__file_config.saveToDisk沿用 v1.3.9 默认 false 语义, opt-in 才写 CSV/JSON
-
不做 (明确):
- ❌ 跨多 sch 页合并 — 只当前 sch 页
- ❌ 大原理图性能阈值 — 直接全量
- ❌ 新增 IFrame — 复用 chat.html
1.4.0
新增 (分析结果带器件型号, dialog/AI 都知道每个 desig 是什么)
之前 analyzeSelection 的 dialog 只显示 R5, U1, C2 这种 designator 引用编号,AI 收到的 prompt 也只有 desig 列表。AI 只能猜 "U 系列是 IC, R 是电阻",经常猜错型号 / 封装。
JLCEDA v2.0.0 网表 JSON 的 props 实际带有 30+ 字段(Dump 实测: Value / DeviceName / Manufacturer / Manufacturer Part / Supplier Part / LCSC Part Name / Footprint / FootprintName / Description / Datasheet ...)。parseV2Netlist 之前只读 Designator,其余全丢。
-
parseV2Netlist→extractCompInfo(props): 新 helper 从 v2.0.0props抽公共字段到扁平ComponentInfo(value/name/manufacturer/mfrPart/lcsc/lcscDesc/footprint/footprintName/description/datasheet)。每个 symbol 自带啥模板字段就抽啥,字段缺失不报错。Name字段跳过={Value}模板占位符,真值走Value。 -
dialog 第二行加器件型号:
3选中 3元件 5网络 · 3V3(1pin) · GND(3pin) · NET_PB8(1pin) · NET_PB9(1pin) · VCC(1pin) U1: ESP32-C3-WROOM-02-N4 · 2.4GHz · R1: 0603WAF1002T5E · 10kΩ · R2: 0603WAF4701T5E · 4.7kΩcompInfoShortLine优先DeviceName(IC 看型号),后跟Value(电阻/电容看值);再补Footprint区分封装。 -
__nl_data多存compInfo: Record<desig, ComponentInfo>:- AI 路径(aiAnalyzeSelection)的
__ai_prefill会多塞一段"器件型号清单",格式:--- 器件型号清单(来自网表 props)--- 器件清单(按 Designator 排序): R1: 10kΩ (UNI-ROYAL(厚声)) [LCSC: C25804] — 厚声 0603 10kΩ ±1% 1/10W U1: ESP32-C3-WROOM-02-N4 (ESPRESSIF(乐鑫)) [LCSC: C2934560] — 不带固件 2.4GHz Wi-Fi(802.11b/g/n)+ 蓝牙5模组 - 手动
AI 对话也吃到(chat.html 同样拼 compInfo 段进 system context),用户问"U1 是什么芯片?" 现在能答"ESP32-C3-WROOM-02-N4"。
- AI 路径(aiAnalyzeSelection)的
-
向后兼容:
compInfo字段对旧 chat.html 透明(没找到字段就忽略,跟之前行为一致)。
1.3.9
调整 (文件保存默认关闭)
-
saveToDisk默认值从true改为false: 之前 v1.3.8 默认开, 新装扩展的用户首次分析时会在工程目录意外写local-netlist.csv/netlist-raw.json, 体验上像是 bug。现在默认关闭, 用户在 settings.html 显式勾选 "分析后自动保存到本地" 才会写文件。 -
settings.html: checkbox 去掉 HTML
checked属性, 改用 JS 显式cb.checked = (fcfg.saveToDisk === true)控制。
1.3.8
新增 (文件保存配置开关)
-
settings.html 加 "文件保存设置" 分组: 跟 AI 设置并列, 一个 checkbox 控制
__file_config.saveToDisk。默认true(保持 v1.3.7 行为), 关闭后analyzeSelection和aiAnalyzeSelection都不写local-netlist.csv/netlist-raw.json, 只在 dialog/iframe 展示结果。 -
__file_config独立 storage key: 跟__ai_config分开, 互不污染, 重置 AI 配置不会影响文件保存设置。 -
loadFileConfig()helper: 默认{ saveToDisk: true }, 调用sys_Storage.getExtensionUserConfig('__file_config'), 解析失败或不存在时回退默认。
1.3.7
修复 (analyzeSelection dialog 视觉混淆)
- dialog 分隔符 | 改成 ·: 原来用 ASCII
|分隔 summary + detail, 但嘉立创 dialog 用的是中文字体, ASCII|字符被渲染成"中"字形, 看上去像 "37选中中 54元件 40网络"(实际是 "37选中 | 54元件 40网络"), 用户疑惑。改为·(中点) 作为分隔符, 任意中文字体都能正确显示。
1.3.6
修复 (deepseek-v4-pro reasoning 超时)
-
chat.html AbortController timeout 从 60s 改为 180s: 实测
deepseek-v4-pro(reasoning model) 在max_tokens=4000+ 包含 16 元件 13 网络 system context 的完整网表分析 prompt 下, 真实响应时间是 60-120s(76s 实测). 60s AbortController 太短, 总是 abort 后才拿到 200 OK, 报"请求超时(60s)". 改 180s 给 reasoning 模型充足时间。 -
错误信息具体化: "请求超时(60s),请检查网络或 API 配置" → "请求超时(180s)。deepseek-v4-pro 等推理模型思考时间较长,如频繁超时请检查网络或换更快的模型"。
1.3.5
修复 (嘉立创 V3.2 沙箱兼容)
-
枚举值改用 V3.2 字符串:
getState_PrimitiveType()在 V3.2 返回'Component' / 'ComponentPin' / 'Wire'(字符串, 见 prodocs ESCH_PrimitiveType 枚举), 旧代码用'COMPONENT' / 6等数字/大写全部静默不匹配. 改为同时接受'Component' / 'COMPONENT' / 6三种形式. -
Pin owner 反查改用
getAllPinsByPrimitiveId: V3.2 的ISCH_PrimitivePin / ISCH_PrimitiveComponentPin父类根本没有getState_OwnerComponentDesignator()方法 (pro-api-types 0.3.6 类型定义中也没有). 改为: 先记下选中 pin 的 primitiveId, 再eda.sch_PrimitiveComponent.getAll()+getAllPinsByPrimitiveId(primitiveId)反查 owner designator. -
空选区时区分"没选"vs"API 不可用": 之前 ids 为空时一律报"请先在原理图中框选". 现在先检查
eda.sch_SelectControl.getAllSelectedPrimitives是否真的存在(可能在 V3.2 沙箱初始化失败时不存在), 如果 API 不可用, 报"当前环境未提供 sch_SelectControl API。请在原理图页面打开,或刷新编辑器重试 (V3.2 沙箱需要 sch canvas 已激活)". -
右键菜单注册: extension.json 缺
contextMenus字段, 右键菜单从来没注册. 加上contextMenus.sch.local-netlist-ctx(分析选中区域网表 / AI 分析选中区域网表). V3.2 推荐同时在activate()里调eda.sys_RightClickMenu.changeMenu()二次注册.
1.3.4
修复 (installV32Shim 三档判定)
installV32Shim v1.3.3 在 V3.2 sandbox 里 alias eda = _EXTAPI_ROOT_, 但 sandbox 自己的 eda 已经是 V3.0 兼容, 覆盖反而破坏. 改为 tier-based: V3.0/3.1 不动, V3.2 sandbox 不动, 只在 V3.2 main page 缺 eda 时才 shim.
1.3.3
修复 (V3.2 防御性兼容 shim)
V3.2 把 eda 从 window.eda 移到 _EXTAPI_SCRIPT_SPACES_[uuid].eda 沙箱, primitive 从 getter (getState_*) 改为 plain property. 加 installV32Shim() 自动探测: V3.0/3.1 沙箱不动; V3.2 沙箱 alias eda 到 root; V3.2 主页面缺 eda 时同样 alias + 包装 4 个 primitive 返回方法 (getAllSelectedPrimitives / getSelectedPrimitives / getPrimitivesByPrimitiveId / getPrimitiveByPrimitiveId) 把 plain property 适配回 getter.
1.3.2
修复
-
框选失效,默认包含全部元件:原
doAnalyze只收集"完整 component"作为过滤依据(getState_PrimitiveType() === 'COMPONENT')。如果用户框选时只覆盖到了引脚/连线(没选到 component 主体),selectedDesigs集合为空,旧代码if (selectedDesigs.size > 0 && !selectedDesigs.has(desig))会直接跳过过滤,结果整张网表的所有元件都被当成"选中",看似"默认全部"。新的过滤逻辑同时识别三种选区:
- component 主体:直接按 Designator 收录
- pin:通过
getState_OwnerComponentDesignator + getState_PinNumber反推所属 component - wire:通过
getState_Net收集网络,再反推"任何引脚落在这些网络上的 component" - 如果只选了 wire(没 component/pin),includeDesigs 为空,自动切到"按网络反推 component"模式
- 如果完全没有任何可用信息(空选区),直接报错"请先框选",不再静默退回全表
1.3.1
新增
- 显示 AI 思考过程:deepseek-v4-pro 等 reasoning 模型在 API 返回的
message.reasoning_content字段里有完整的思考链,之前 chat.html 只读了content,把思考过程丢掉了。现在每次 AI 回复会在回复上方插入一个可折叠的<details>块(短思考<200字符默认展开,长思考默认折叠),样式淡灰色 + 💭 图标 + 字符数统计,点击"思考过程"展开/收起。完成后正常显示打字机效果。
1.3.0
新增
-
AI 回复打字机效果:AI 消息不再一次性全部渲染,而是按字符(中文 1 字符/14ms,英文 2 字符/14ms)逐字显示,让用户能看到 AI "正在写"。完成后自动切换到完整 Markdown 渲染(包含代码块/表格/列表)。
-
AI 分析局部网表 预设提示:点击 "局部网表 → AI 分析局部网表" 后,会基于当前选中的元件数和网络数生成结构化的中文分析 prompt(功能、电源轨、信号路径、元件分工、潜在问题),自动填入对话框并发送。用户不再需要手写问题。
实现方式:菜单函数把预填文本写入
__ai_prefillstorage,chat.html init 时检测到非空就自动填充 textarea + 触发 doSend(),并清空 prefill 防止重开重复发送。
1.2.2
修复
- 网表解析过滤过宽:原
parseV2Netlist用desig.length > 20过滤过宽,导致原理图里如果存在 Designator 是长文本的元件(比如"分析这个电路的SPI总线部分,使用了哪些引脚1",刚好 20 字符)会被误当成真实元件加入网表,并把子部分(1-1、1-2、1-3...)作为引脚加入网络。AI 看到这种异常的 Designator 就会胡说八道。改为length > 10+ 严格正则^[A-Za-z][A-Za-z0-9_]*\d+$,任何不符合标准 refdes 格式(U1/R16/C5 这类)的字符串一律过滤。
1.2.1
修复
- AI 对话无回复:
iframe/chat.html里的局部变量history覆盖了浏览器的window.history(History API),导致history.push()抛 TypeError。doSend 走到用户消息入队时就崩溃,后面的 fetch 没发、按钮永远 disabled。改为chatMessages避免冲突。
1.2.0
变更
- 使用纯 ESLint 的代码格式化方式
- 打包时额外进行压缩,可以获得更小的扩展包
1.1.1
变更
- 为了符合隐私政策,禁止在 extension.json、README.md、CHANGELOG.md、LICENSE 内添加电子邮箱地址作为联系方式
1.1.0
新增
- 新增扩展注册头部菜单的多语言翻译支持
- 新增更新日志(CHANGELOG.md)
变更
- 替换已弃用的方法(SYS_Dialog.showInformationMessage)
1.0.0
初始版本

类型
关键词
扩展信息
| 版本 | v1.5.2 |
| 发布者 | OSHWHub |
| 发布时间 | 2026-07-24 11:07:23 |
| 名称 | local-netlist-analyzer |
| UUID | 7bdb0024e09b43129fe600321240eb6d |
| 适用EDA版本: | ^3.0.0 |
| 报告 | 报告滥用 |
评论