kukucaicndy/embedded_ai_skills/wiring
Claude Code and agent skill by kukucaicndy/embedded_ai_skills
- community
Checking that the SKILL.md file is still in the repository.
Wire routing, net labeling, and connection management for EasyEDA Pro schematics. Invoke when drawing wires, adding net labels, creating power/ground symbols, or managing signal connections.
Install
npx vskill@latest install kukucaicndy/embedded_ai_skills/wiringSKILL.md
连线与网络管理
导线绘制、网络标签、总线、电源/地符号的完整指南。
核心原则
多使用网络标号,避免复杂连线。 网络标号可以减少导线交叉,提高可读性。
0. 关键规则(必读)
0.1 导线必须设置网络名
⚠️ 导线无网络名 = 电气连接不建立在 EasyEDA 中,导线的net属性为空时,该导线不参与电气网络构建。这会导致:网络表导出错误、PCB Layout 无法建立连接关系、DRC 检测不到开路/短路。正确做法(参考 POWER 页风格):- 每创建一条导线必须指定网络名- 芯片引脚到网络标签的导线:网络名 = 标签的网络名- 同网络名的标签 + 导线 = 完整的电气连接- 模块内部导线(开关→二极管):至少指定行/列网络名
0.2 防止跨网络自动合并(API 坑)
⚠️ EasyEDA `sch_PrimitiveWire.create()` 的 net 参数陷阱:当net参数为undefined(未指定)时,API 会自动从触碰的图元继承网络名:- 导线触碰一个已有网络的导线 → 新导线自动继承该网络名- 导线触碰多个不同网络的图元 → 创建失败这会导致跨网络合并:AI 画 ROW0 导线时,如果不指定 net,而导线端点碰巧触碰到 ROW1 的导线,新导线会静默变成 ROW1,造成电气短路。防护措施:1. CLI 已修复:draw_cli.py wire不指定 net 时传空字符串""而非undefined,阻止自动继承2. 安全模式:wire --safe先检查坐标是否触碰不同网络导线,冲突时中止创建3. 批量安全:wire-batch逐条调用安全模式,适合大规模走线4. 冲突检测:check-wire-conflicts检测已存在的导线网络冲突
0.3 标签唯一性:同一坐标不能有重复标签
⚠️ 禁止在同一坐标放置多个标签同一网络只需一个标签。重复放置会导致视觉叠加、网络冲突、DRC 异常。放置标签前先检查:```bash./scripts/draw_cli.py check-duplicates```
0.3 NC 未用引脚标记
⚠️ 不使用 IC 引脚必须标记 NCNC 标记告诉 DRC "此引脚有意不连接"。必须使用 CLI 的原生 NC API(禁止放置文本 "NC"):```bash# ✅ 正确:原生 NC 标记(引脚上显示标准叉号,DRC 正确识别)./scripts/draw_cli.py mark-nc U1 14./scripts/draw_cli.py mark-nc U1 14,16```原理:mark-nc调用sch_PrimitiveComponent.setState_NoConnected(true),EasyEDA 在引脚上显示标准 NC 叉号,DRC 将其识别为"有意不连接"。
0.4 电源/地优先级规则
参考 POWER 页风格: 电源/地使用 NetFlag (Power/Ground),信号仅用延伸导线(导线已含网络名)。- VCC/VDD/VBAT →createNetFlag("Power", ...)- GND/AGND/DGND →createNetFlag("Ground", ...)- 信号 (I2C/SPI/UART/GPIO) → 仅wire延伸,不附加任何标签/文本⚠️ 不使用 NetPort/文本标注 的原因:导线本身已承载网络名,额外的符号或文本只会增加 BBox 重叠风险。
1. 导线绘制
基本绘制
多段导线
多段独立导线
⚠️ 注意: 如果多段线彼此无任何连接,创建会失败。
修改已有导线的网络名
2. 网络标签 (Net Flag) — 电源/地专用
网络标签用于标识电源和地,是最常用的连接方式。
电源标签
地标签
电源命名规范
| 网络名 | 用途 | |
|---|---|---|
VCC | 通用电源 | |
VCC_3V3 | 3.3V 电源 | |
VCC_5V | 5V 电源 | |
VCC_1V8 | 1.8V 电源 | |
VBAT | 电池电源 | |
VBUS | USB 总线电源 | |
VDD | 数字电源 | |
VSS | 数字地 | |
GND | 通用接地 | |
AGND | 模拟地 | |
DGND | 数字地 | |
PGND | 电源地 |
3. 信号标注 — 延伸导线-only
⚠️ NetPort 已不推荐,文本标注也已不推荐。导线本身承载网络名,无需额外符号或文本。
策略 A — 信号引脚:仅延伸导线,导线网络名即信号名,不附加任何额外标签/文本。
策略 B — 电源/地引脚:延伸导线 + NetFlag。NetFlag 坐标必须 = 导线终点(否则电气不连接)。
标签摆放规则:
- 左侧引脚:文字左对齐,靠近导线末端,但远离 PIN 脚编号
- 右侧引脚:文字右对齐,同上
- 上侧引脚:文字上对齐,同上
- 下侧引脚:文字下对齐,同上
- 若文字覆盖编号:旋转 180° 或缩短导线长度
策略 C — 同侧同名电源/地合并:连续同名引脚,竖线段短接 → 一根水平引出 → 共 1 个 NetFlag。
若已有页面使用了 NetPort,可一键转换:
// 创建总线 await eda.sch_PrimitiveBus.create( [x1, y1, x2, y2], // 总线路径 "DATA[7:0]", // 总线名 null, null, null );
两个引脚需要连接时:
┌─ 同一功能模块内?─┐ │ │ YES NO │ │ ▼ ▼ 用导线 芯片引脚引出? │ │ │ YES │ NO │ │ │ │ │ ▼ │ ▼ │ 用网络标签 │ 导线会交叉/绕路? │ + 短导线 │ │ │ │ YES NO │ │ │ │ │ │ ▼ ▼ │ │ 调整器件 直接导线 │ │ 位置/方向 │ │ 简化走线 └────────────────────┘
// 按键 pin2 → 二极管 A(L 形 2 段导线) await eda.sch_PrimitiveWire.create([220, 210, 220, 300, 200, 300]);
// 行线:连接多个二极管 K 端(必须指定网络名) await eda.sch_PrimitiveWire.create([200, 340, 600, 340], 'ROW0');
// 列线:连接同列开关 pin3,延伸到标签位置 await eda.sch_PrimitiveWire.create([180, 170, 180, 390], 'COL0');
import utils from './scripts/draw-utils.js';
// 示例:开关 pin2(220, 210) 需要连接到二极管 A 端 // 二极管当前在 (200, 320),A 端在 (200, 300) // pin2 x=220, D.A x=200 → 水平偏移 20
// ❌ 错误:硬拉 L 形线 await utils.addWire([220, 210, 220, 300, 200, 300]);
// ✅ 正确:先把二极管移到 x=220 对齐,再画直线 const comps = await eda.sch_PrimitiveComponent.get(["二极管ID"]); const ac = comps[0].toAsync(); ac.setState_X(220); // 移动到与 pin2 对齐 ac.done(); // 现在 D.A 在 (220, 300),pin2 在 (220, 210) await utils.addWire([220, 210, 220, 300], 'MATRIX_NET'); // 一段垂直直线
// 二极管默认水平放置:A 在左 K 在右 // 旋转 270° 后:A 在上 K 在下,正好对接开关(上)和行线(下) const comps = await eda.sch_PrimitiveComponent.get(["二极管ID"]); const ac = comps[0].toAsync(); ac.setState_Rotation(270); ac.done();
❌ 二极管水平放置:A(左) K(右) 开关在上,行线在下 → 需要 3 段折线
✅ 二极管旋转 270°:A(上) K(下) 开关→A 直线,K→行线直线 → 2 段直线
// 检查间距:开关 pin y=210,二极管 A y=300 → 间距 90 // 如果间距 < 60,导线太短不美观,移动器件拉开距离
// 移动器件到新坐标 const comps = await eda.sch_PrimitiveComponent.get([primitiveId]); const ac = comps[0].toAsync(); ac.setState_X(newX); ac.setState_Y(newY); ac.done();
// 旋转器件 const ac2 = comps[0].toAsync(); ac2.setState_Rotation(90); // 0, 90, 180, 270 ac2.done();
// 镜像器件 const ac3 = comps[0].toAsync(); ac3.setState_Mirror(true); ac3.done();
按键 ──导线── 二极管 ──导线(行线)── 文本标注 ──┐ │ 主控引脚 ──导线── 文本标注 ────────────────────┘
VCC_BAT ──[保险丝]── VCC_5V ──[LDO]── VCC_3V3 ──[滤波]── MCU_VCC │ ├── OLED_VCC ├── SENSOR_VCC └── LED_VCC
// 在 IC 电源引脚附近放置去耦电容 await eda.sch_PrimitiveComponent.create( { libraryUuid: "库UUID", uuid: "电容UUID" }, icX + 20, icY, "", 0, false, true, true );
// 连接电容到电源和地(必须指定网络名) await eda.sch_PrimitiveWire.create([icX + 20, icY, icX + 20, icY - 20], "VCC_3V3", null, null, null); await eda.sch_PrimitiveComponent.createNetFlag("Power", "VCC_3V3", icX + 20, icY - 20, 0, false); await eda.sch_PrimitiveWire.create([icX + 20, icY + 10, icX + 20, icY + 30], "GND", null, null, null); await eda.sch_PrimitiveComponent.createNetFlag("Ground", "GND", icX + 20, icY + 30, 0, false);
正确: 引脚 ───┬─── 网络标签 │ └─── 导线
错误: 引脚 ───┐ └───┐ └─── 网络标签
正确 (T 形): ────┬──── │ └────
错误 (四向交叉): ────┼──── │ ────┘
./scripts/draw_cli.py get-wire <primitiveId>
修改网络名
./scripts/draw_cli.py modify-wire <id> --net "NEW_NET"
修改坐标(移动导线)
./scripts/draw_cli.py modify-wire <id> --line "100,200,150,200"
修改线宽
./scripts/draw_cli.py modify-wire <id> --width 3
修改线型(实线/短划线/点线/点划线)
./scripts/draw_cli.py modify-wire <id> --dashed ./scripts/draw_cli.py modify-wire <id> --solid
修改颜色
./scripts/draw_cli.py modify-wire <id> --color "#ff0000"
虚线导线
./scripts/draw_cli.py wire "100,100,200,100" NET --dashed
红色粗线
./scripts/draw_cli.py wire "100,100,200,100" NET --color "#ff0000" --width 5
./scripts/draw_cli.py bus "DATA[7:0]" "100,200,300,200,300,500"
列出所有总线
./scripts/draw_cli.py list-buses
删除指定总线
./scripts/draw_cli.py delete-buses id1 id2
实线框(无填充)
./scripts/draw_cli.py polygon "100,100,300,100,300,300,100,300"
虚线框 + 浅色填充
./scripts/draw_cli.py polygon "100,100,300,100,300,300,100,300" \ --dashed --fill "#f0f0f0"
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingtools/easyeda-draw/wiring/skill.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/kukucaicndy/embedded_ai_skills/wiring)