R2:底板 / 刀片布局布线脚本、快照、截图与规划文档更新(含外壳、打印件、布线归档)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-10-04 19:24:45 +08:00
共同撰写人 Claude Opus 5.5
父节点 cd01640c40
当前提交 cf7cc9cf90
共修改 759 个文件,包含 76962 行新增和 5299 行删除
文件差异因一行或多行过长而隐藏
+45
查看文件
@@ -0,0 +1,45 @@
=== prune
via:POGO5_VUP 3
已删并存盘;板上剩余导线 1314 / 过孔 485
=== fanout --only
载板扇出:板框 220 × 135,元件面 (1, 2),GND -> layer 16
注意:板上已有 537 个过孔,它们也会被当障碍
--only:这一轮只扇 36 个焊盘 Q405.2 U21.8 Q403.2 Q504.2 R523.2 Q505.2 U33.8 C739.1 R421.2 Q404.2 R525.2 Q503.2 C604.1 Q103.2 Q104.2 Q105.2 Q203.2 Q204.2 Q205.2 Q303.2 Q304.2 Q305.2 R121.2 R123.2 R125.2 R221.2 R223.2 R225.2 R321.2 R323.2 R325.2 R425.2 U22.8 R521.2 C605.1 R423.2
GND:贴片焊盘 36 个要扇出到 layer 16
注意:板上已有 1407 条走线,它们也会被当障碍(同层比线、过孔不分层)
第二遍(72 角 / 4 mm):1 个里救回 1 个
放下 36 个过孔,失败 0 个
引线长度 中位 0.65 / 最长 0.90 mm
下发:过孔 36 / 短线 36,板上过孔总数 521
=== dump
-> D:\DCDC\.claude\pcb2-copper.json
=== route_sig
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 846 / 过孔 327 / 铜层导线 340(摘掉本脚本自己负责的旧铜 1273 件)
网络表里没有这些网络:['KEY_SER', 'KEY_SRCLK', 'KEY_RCLK', 'KEY_OE#', 'SR_CAS', 'SR_CAS2', 'K1_PWR', 'K1_VUP', 'K1_VDN', 'K2_PWR', 'K2_VUP', 'K2_VDN', 'K3_PWR', 'K3_VUP', 'K3_VDN', 'K4_PWR', 'K4_VUP', 'K4_VDN', 'K5_PWR', 'K5_VUP', 'K5_VDN']
=== drc
21. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J84_2钻孔 (+3V3_HUB): e2065底层对象 1到对象 2距离为0mil,应该>= 7.9mil
22. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J84_2钻孔 (+3V3_HUB): e2066底层对象 1到对象 2距离为0mil,应该>= 7.9mil
23. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J84_2钻孔 (+3V3_HUB): e2067底层对象 1到对象 2距离为0mil,应该>= 7.9mil
24. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J84_2钻孔 (+3V3_HUB): e2068底层对象 1到对象 2距离为0mil,应该>= 7.9mil
25. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C831_2钻孔 (K2_VDN): e2069底层对象 1到对象 2距离为0mil,应该>= 7.9mil
26. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C831_2钻孔 (K2_VDN): e2070底层对象 1到对象 2距离为0mil,应该>= 7.9mil
27. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C831_2钻孔 (K2_VDN): e2071底层对象 1到对象 2距离为0mil,应该>= 7.9mil
28. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C831_2钻孔 (K2_VDN): e2072底层对象 1到对象 2距离为0mil,应该>= 7.9mil
29. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J81_2钻孔 ($24N122): e2105底层对象 1到对象 2距离为0mil,应该>= 7.9mil
30. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J81_2钻孔 ($24N122): e2106底层对象 1到对象 2距离为0mil,应该>= 7.9mil
31. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J81_2钻孔 ($24N122): e2107底层对象 1到对象 2距离为0mil,应该>= 7.9mil
32. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J81_2钻孔 ($24N122): e2108底层对象 1到对象 2距离为0mil,应该>= 7.9mil
33. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J82_2钻孔 (K4_VDN): e2109底层对象 1到对象 2距离为0mil,应该>= 7.9mil
34. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J82_2钻孔 (K4_VDN): e2110底层对象 1到对象 2距离为0mil,应该>= 7.9mil
35. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J82_2钻孔 (K4_VDN): e2111底层对象 1到对象 2距离为0mil,应该>= 7.9mil
36. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J82_2钻孔 (K4_VDN): e2112底层对象 1到对象 2距离为0mil,应该>= 7.9mil
37. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (POGO1_PWR): J41_1钻孔 ($24N125): e2711顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
38. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (POGO1_VUP): J42_1钻孔 ($24N125): e2714顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
39. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (POGO2_PWR): J45_1钻孔 (GND): e2719顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
40. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (POGO2_VDN): J47_1钻孔 (GND): e2722顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 同封装内间距错误 (115) ──
── 贴片焊盘 到 贴片焊盘 (115) ──
+217
查看文件
@@ -0,0 +1,217 @@
=== [PCB2] route_dp --dump
障碍表已存:焊盘 1007 / 过孔 521 / 铜层导线 1145
=== [PCB2] route_sig --push
SR_CAS 3 段路径 / 18 导线 / 6 过孔 2.1s
SR_CAS2 3 段路径 / 7 导线 / 2 过孔 0.1s
[!!] K1_PWR 布不通:(113.48,54.06) -> (63.59,119.14)
K1_PWR 2 段路径 / 2 导线 / 0 过孔 21.8s ← 有端点没连上
[!!] K1_VUP 布不通:(113.48,55.33) -> (60.09,119.14)
K1_VUP 2 段路径 / 2 导线 / 0 过孔 22.0s ← 有端点没连上
[!!] K1_VDN 布不通:(113.48,56.60) -> (56.59,119.14)
K1_VDN 2 段路径 / 2 导线 / 0 过孔 22.3s ← 有端点没连上
K2_PWR 3 段路径 / 12 导线 / 4 过孔 2.5s
K2_VUP 3 段路径 / 13 导线 / 4 过孔 2.1s
K2_VDN 3 段路径 / 12 导线 / 2 过孔 2.1s
[!!] K3_PWR 布不通:(117.98,71.40) -> (206.59,119.14)
K3_PWR 2 段路径 / 2 导线 / 0 过孔 22.3s ← 有端点没连上
[!!] K3_VUP 布不通:(117.98,70.13) -> (203.09,119.14)
K3_VUP 2 段路径 / 2 导线 / 0 过孔 23.1s ← 有端点没连上
[!!] K3_VDN 布不通:(117.98,68.86) -> (199.59,119.14)
K3_VDN 2 段路径 / 2 导线 / 0 过孔 22.2s ← 有端点没连上
[!!] K4_PWR 布不通:(49.25,16.02) -> (122.48,54.06)
K4_PWR 2 段路径 / 2 导线 / 0 过孔 74.8s ← 有端点没连上
[!!] K4_VUP 布不通:(52.75,16.02) -> (122.48,55.33)
K4_VUP 2 段路径 / 2 导线 / 0 过孔 68.0s ← 有端点没连上
[!!] K4_VDN 布不通:(56.25,16.02) -> (122.48,56.60)
K4_VDN 2 段路径 / 2 导线 / 0 过孔 61.6s ← 有端点没连上
[!!] K5_PWR 布不通:(120.75,16.02) -> (122.48,61.68)
K5_PWR 2 段路径 / 2 导线 / 0 过孔 64.8s ← 有端点没连上
[!!] K5_VUP 布不通:(124.25,16.02) -> (123.76,60.41)
K5_VUP 1 段路径 / 1 导线 / 0 过孔 23.3s ← 有端点没连上
[!!] K5_VDN 布不通:(127.75,16.02) -> (122.48,59.14)
K5_VDN 2 段路径 / 2 导线 / 0 过孔 64.9s ← 有端点没连上
POGO1_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 7 导线 / 2 过孔 0.4s
123 个网络 / 597 条路径 / 1314 段导线 / 236 个过孔 (737 秒)
⚠️ 15 个网络没布通:+3V3_HUB EDL_EN3 KEY_SRCLK K1_PWR K1_VUP K1_VDN K3_PWR K3_VUP K3_VDN K4_PWR K4_VUP K4_VDN K5_PWR K5_VUP K5_VDN
45° 化:直角拐点 70 -> 3(4 秒)
[!!] 切不动: $22N139 (82.00, 87.80) 转向 47°
[!!] 切不动: +3V3_HUB#3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB#3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
[!!] 线-过孔 POGO2_PWR vs GND L1 净距 -0.405 段(140.48,120.75)-(139.80,121.50)
[!!] 线-过孔 POGO2_VDN vs GND L1 净距 -0.405 段(138.18,121.14)-(131.70,121.10)
[!!] 过孔-焊盘 KEY_OE vs U33.13(KEY_OE#) L2 净距 -0.271 段(125.10,69.20)-(125.10,69.20)
[!!] 线-旧线 $22N139 vs GND L2 净距 -0.200 段(81.72,88.11)-(82.00,87.80)
[!!] 线-焊盘 KEY_OE vs U21.13(KEY_OE#) L2 净距 -0.100 段(120.24,57.87)-(121.52,57.87)
[!!] 线-焊盘 KEY_OE vs U33.13(KEY_OE#) L2 净距 -0.100 段(124.74,68.86)-(126.02,68.86)
[!!] 线-焊盘 KEY_OE vs R609.1(KEY_OE#) L2 净距 -0.100 段(131.50,58.07)-(131.50,57.48)
[!!] 线-焊盘 KEY_OE vs U22.13(KEY_OE#) L2 净距 -0.100 段(129.24,57.87)-(130.52,57.87)
[!!] 线-焊盘 KEY_OE vs J32.11(KEY_OE#) L2 净距 -0.100 段(143.30,72.10)-(146.57,68.77)
[!!] 过孔-焊盘 KEY_OE vs U22.13(KEY_OE#) L2 净距 -0.005 段(130.52,57.87)-(130.52,57.87)
(同类重复 8 条已折叠)
路径已存 _pcb2_sig_routes.json
!! 净距还有问题,不下发。
=== [PCB2] reload
重载前 windowId 5799078c-8693-4808-bdce-91a40e58562f,删铺铜边框 7
已重载,新 windowId 0552b2a0-1471-4f5f-8c52-11c9e04903a9(10 s)
=== [PCB2] drc
全部 942 条 = 间距错误 133 + 连接性错误 694(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 导线 (12) ──
1. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DP): e9867贴片焊盘 (EDL_EN3): U21_6底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DP): e9867贴片焊盘 (KEY_SRCLK): U22_11底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DP): e9867贴片焊盘 (KEY_SRCLK): U21_11底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DP): e9867贴片焊盘 (K5_VUP): U22_6底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DM): e9872贴片焊盘 (EDL_EN3): U21_6底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DM): e9872贴片焊盘 (KEY_SRCLK): U22_11底层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DM): e9872贴片焊盘 (KEY_SRCLK): U21_11底层对象 1到对象 2距离为0mil,应该>= 7.9mil
8. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (UP_DM): e9872贴片焊盘 (K5_VUP): U22_6底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12049贴片焊盘 ($21N157): U41_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
10. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12052贴片焊盘 ($21N157): J61_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12075贴片焊盘 ($22N139): U42_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12078贴片焊盘 ($22N139): J62_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 导线 到 过孔 (16) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10036过孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10037过孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10039过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10041过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10040过孔 ($24N125): e2268底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10047过孔 (+3V3_HUB): e2275底层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10048过孔 ($25N122): e2276底层对象 1到对象 2距离为0mil,应该>= 7.9mil
8. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10057过孔 (K5_VUP): e2285底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10058过孔 (GND): e2286底层对象 1到对象 2距离为0mil,应该>= 7.9mil
10. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10063过孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10062过孔 ($25N135): e2290底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12012过孔 (K1_PWR): e2665底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12011过孔 (K1_PWR): e2665顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12408过孔 : e2744底层对象 1到对象 2距离为6.3mil,应该>= 7.9mil
15. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12407过孔 : e2744底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12406过孔 : e2744顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 导线 (15) ──
1. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10036钻孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10037钻孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10039钻孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10041钻孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10040钻孔 ($24N125): e2268底层对象 1到对象 2距离为0mil,应该>= 7.9mil
=== [PCB1] outline
File "D:\DCDC\.claude\pcb_place.py", line 144, in put
assert des in PARTS, u'位号不存在: %s' % des
^^^^^^^^^^^^
AssertionError: 位号不存在: J2
=== [PCB1] place check
去耦贴身(+3V3 脚 -> 芯片电源脚,上限见 DECAP 表):
C602 -> U20 .2 1.46 mm(上限 3.0) 摆在 (98.15, 10.57) rot 90
C601 -> U20 .2 3.31 mm(上限 8.0) 摆在 (99.65, 10.57) rot 90
C606 -> U23 .24 0.84 mm(上限 3.0) 摆在 (72.14, 52.79) rot 90
C607 -> U6 .15 1.31 mm(上限 3.0) 摆在 (79.50, 40.79) rot 0
C610 -> U7 .15 1.31 mm(上限 3.0) 摆在 (109.49, 37.49) rot 0
安排了 290 / 290 个元件
!! 2 个问题:
J24 有 8 根针对错网络!前 4 条: pin11(GND)->载板pin12(POGO4_PWR) / pin12(GND)->载板pin11(POGO1_PWR) / pin13(GND)->载板pin14(POGO4_VUP) / pin14(GND)->载板pin13(POGO1_VUP)
J25 有 13 根针对错网络!前 4 条: pin6(KEY_SER)->载板pin5(POGO2_PWR) / pin7(GND)->载板pin8(EDL_EN5) / pin8(KEY_SRCLK)->载板pin7(POGO2_VUP) / pin10(KEY_RCLK)->载板pin9(POGO2_VDN)
=== [PCB1] route_sig
拆线重布:$14N680 的一段(4 点 127.50→131.47 mm)布不回去,放弃
[!!] $14N676 布不通:(131.13,47.50) -> (129.87,45.50)
拆线重布:理想路径要压掉 5 条(连坐后 12,上限 10),放弃
[!!] $14N676 布不通:(131.13,47.50) -> (126.25,44.05)
拆线重布:$2N687 的一段(4 点 20.27→21.56 mm)布不回去,放弃
[!!] $2N680 布不通:(17.73,46.25) -> (23.43,45.50)
拆线重布:$12N866 的一段(4 点 47.97→51.92 mm)布不回去,放弃
[!!] $12N859 布不通:(49.42,46.28) -> (55.10,45.50)
拆线重布:$8N687 的一段(3 点 50.16→47.62 mm)布不回去,放弃
[!!] $8N680 布不通:(50.15,79.25) -> (44.46,80.00)
… 25/34 个网络,已连 8 条,布不通 26 条,904 s
拆线重布:EFUSE_EN5 的一段(2 点 134.30→134.30 mm)布不回去,放弃
[!!] $14N680 布不通:(128.93,46.25) -> (134.63,45.50)
拆线重布:理想路径要压掉 6 条(连坐后 11,上限 10),放弃
[!!] $10N680 布不通:(138.53,79.24) -> (132.84,80.00)
拆线重布:$12N859 的一段(4 点 47.97→51.95 mm)布不回去,放弃
[!!] $12N866 布不通:(49.51,45.81) -> (53.69,47.50)
拆线重布:$14N676 的一段(2 点 130.93→131.52 mm)布不回去,放弃
[!!] $14N687 布不通:(129.03,45.79) -> (133.22,47.50)
拆线重布:$8N680 的一段(4 点 51.59→47.60 mm)布不回去,放弃
[!!] $8N676 布不通:(51.48,81.04) -> (47.96,78.00)
… 30/34 个网络,已连 8 条,布不通 31 条,996 s
拆线重布:EFUSE_EN2 的一段(4 点 42.70→44.79 mm)布不回去,放弃
[!!] $8N727 布不通:(46.25,73.37) -> (42.56,74.50)
拆线重布:EFUSE_EN3 的一段(4 点 133.20→133.17 mm)布不回去,放弃
[!!] $10N727 布不通:(134.52,73.06) -> (130.94,74.50)
[!!] $6N532 布不通:(77.54,41.07) -> (78.83,39.74)
[!!] $6N547 布不通:(107.54,37.77) -> (108.82,36.44)
… 34/34 个网络,已连 8 条,布不通 35 条,1167 s
拆线重布:试了 35 次,成 0 次;拆掉 0 条、重布回来 0 条
没成的理由:重布不回去 x17 要拆的太多 x12 拆光也不通 x6
45° 化:直角拐点 4 -> 0
本轮:11 条路径 / 134 段线 / 39 个过孔,总长 446.2 mm
---- 校核 ----
[!!] GND 布完还剩 4 个碎片(原来 4)
[!!] SDA 布完还剩 4 个碎片(原来 4)
[!!] SCL 布完还剩 3 个碎片(原来 3)
[!!] INA_ALERT 布完还剩 3 个碎片(原来 3)
[!!] +5V 布完还剩 2 个碎片(原来 2)
[!!] VDAC2 布完还剩 2 个碎片(原来 2)
[!!] EFUSE_PG2 布完还剩 2 个碎片(原来 2)
[!!] EFUSE_FLT4 布完还剩 3 个碎片(原来 3)
[!!] $8N698 布完还剩 2 个碎片(原来 2)
[!!] $12N877 布完还剩 2 个碎片(原来 2)
[!!] $10N698 布完还剩 2 个碎片(原来 2)
[!!] $14N698 布完还剩 2 个碎片(原来 2)
[!!] $10N676 布完还剩 3 个碎片(原来 3)
[!!] $14N676 布完还剩 3 个碎片(原来 3)
[!!] $2N680 布完还剩 2 个碎片(原来 2)
净距 0 / 钻孔 0 / 铺铜 0(**只有这三样拦下发**) | 直角 0 / 连通 26(只报告);布不通 35 条
✅ 铜本身没问题(净距 / 钻孔 / 铺铜 全 0);其余是「还没布完」,不拦下发
下发:新建 134 线 / 39 孔;板上共 3118 线 / 985 孔
回读:板上 3118 线 / 985 孔;本轮 134 段里没被实测铜盖住的 **0** 条,39 个孔里找不到的 **0** 个
累计计划:4826 条路径 -> _pcb1_sig_plan_all.json
⚠️ 新过孔穿过内层平面,那里现在还没有反焊盘 —— **接着必须跑 `pcb1_pour.py --push`**,再 `drc_read.py`。
=== [PCB1] pour
· R315.2 走线:CH3 的 +3V3(5 个,50 mA):同上
· R318.1 走线:CH3 的 +3V3(5 个,50 mA):同上
· R608.1 走线:IOEXP_INT# 上拉,10 kΩ;沿 U23 西缘走 6 mm 顶层线搭到 C606.1
· U10.1 走线:CH3 的 +3V3(5 个,50 mA):同上
· U10.6 走线:CH3 的 +3V3(5 个,50 mA):同上
· U13.6 走线:INA226 的 VS+,陪 U13 一起挖出去(C11 就在旁边)
· U9.2 走线:CH2 的 +3V3(5 个,50 mA):沿 y≈84 走顶层到中间那块
· U9.6 走线:CH2 的 +3V3(5 个,50 mA):沿 y≈84 走顶层到中间那块
Top $1N223 2 个焊盘:落在铜上 2 / 有意走线 0 / **没着落 0**
Top $1N227 6 个焊盘:落在铜上 4 / 有意走线 2 / **没着落 0**
· C1.1 走线:Q1 栅极 RC 的上端,µA 级;同 DZ1.1
· DZ1.1 走线:Q1 栅极钳位齐纳的上端,µA 级;夹在 F1.1 与 Q1.4 之间只有 3.1 mm,走细线
Top $1N236 12 个焊盘:落在铜上 11 / 有意走线 1 / **没着落 0**
· U13.10 走线:Kelvin(VIN+)。§10.4:Rs6 满量程才 40 mV,取样脚单独引细线到 Rs6.1,不能从大铜面上随便找个点接
实测铺铜和计划对得上。
=== [PCB1] reload
{"success": true, "result": {"ok": 1}, "windowId": "0552b2a0-1471-4f5f-8c52-11c9e04903a9"}
已重载,windowId 0552b2a0-1471-4f5f-8c52-11c9e04903a9 -> 1f155639-9428-4cb5-af89-03a295528569
=== [PCB1] drc
失败: {"httpError": 500, "body": "{\"success\":false,\"error\":\"Error: 指定的主题消息在对应的画布内没有相关订阅\"}"}
二进制
查看文件
二进制文件未显示。
+52
查看文件
@@ -0,0 +1,52 @@
=== [PCB1] outline
板框: 220 × 135,左下角 (-30,-5),R5;删旧 1
定位孔: 删旧 4 / 新建 6(Φ3.2 / 焊盘 Φ6.0 / 接 GND)
=== [PCB2] place push
排母焊盘坐标已导出: D:\DCDC\.claude\pcb2-header-pads.json(80 个)
U24 (L2) pin1 [36.241, 100.711, 2] pin4 [38.941, 102.611, 2]
J31 (L2) pin1 [37.869, 68.77, 12] pin2 [37.869, 66.23, 12]
=== [PCB2] dumps
障碍表已存:焊盘 1007 / 过孔 521 / 铜层导线 1145
geom U21.1 [(114.26, 62.06)]
-> D:\DCDC\.claude\pcb2-copper.json
=== [PCB2] route_sig --push
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
[!!] K1_PWR 布不通:(112.98,62.05) -> (63.59,119.14)
[!!] K1_VUP 布不通:(112.98,63.32) -> (60.09,119.14)
[!!] K1_VDN 布不通:(112.98,64.59) -> (56.59,119.14)
[!!] K2_PWR 布不通:(189.48,66.59) -> (135.09,119.14)
[!!] K2_VUP 布不通:(189.48,64.05) -> (131.59,119.14)
[!!] K2_VDN 布不通:(189.48,65.32) -> (128.09,119.14)
[!!] K4_PWR 布不通:(49.25,16.02) -> (123.98,62.05)
[!!] K4_VUP 布不通:(52.75,16.02) -> (125.26,63.32)
[!!] K4_VDN 布不通:(56.25,16.02) -> (123.98,64.59)
[!!] K5_VUP 布不通:(124.25,16.02) -> (123.98,68.40)
[!!] K5_VDN 布不通:(127.75,16.02) -> (123.98,67.13)
123 个网络 / 604 条路径 / 1404 段导线 / 250 个过孔 (529 秒)
⚠️ 12 个网络没布通:+3V3_HUB K1_PWR K1_VUP K1_VDN K2_PWR K2_VUP K2_VDN K4_PWR K4_VUP K4_VDN K5_VUP K5_VDN
[!!] 切不动: $22N139 (82.00, 87.80) 转向 47°
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
[!!] 线-过孔 POGO2_PWR vs GND L1 净距 -0.405 段(140.48,120.75)-(139.80,121.50)
[!!] 线-过孔 POGO2_VDN vs GND L1 净距 -0.405 段(138.18,121.14)-(131.70,121.10)
[!!] 线-旧线 $22N139 vs GND L2 净距 -0.200 段(81.72,88.11)-(82.00,87.80)
!! 净距还有问题,不下发。
=== [PCB2] reload+drc
已重载,新 windowId 08ae4a27-f6de-4bab-aab5-abafbf77b46e(5 s)
全部 946 条 = 间距错误 131 + 连接性错误 700(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 导线 (6) ──
1. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12049贴片焊盘 ($21N157): U41_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12052贴片焊盘 ($21N157): J61_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12075贴片焊盘 ($22N139): U42_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12078贴片焊盘 ($22N139): J62_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12465贴片焊盘 (K4_VUP): U22_2底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12467贴片焊盘 (K4_VUP): U22_2底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 贴片焊盘 到 过孔 (52) ──
1. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (K4_VUP): U22_2过孔 (GND): e2778底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (K4_VUP): U22_2过孔 (GND): e2780底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (VO1_P): C804_2过孔 (VO4_P): e2264底层对象 1到对象 2距离为6mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (VO1_P): C805_2过孔 (VO4_P): e2265底层对象 1到对象 2距离为6mil,应该>= 7.9mil
5. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (VO1_P): J81_1过孔 (GND): e2267底层对象 1到对象 2距离为6.7mil,应该>= 7.9mil
+49
查看文件
@@ -0,0 +1,49 @@
=== [PCB2] route_sig --push (v3)
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
[!!] K3_VDN 布不通:(189.48,67.86) -> (199.59,119.14)
[!!] K5_VDN 布不通:(127.75,16.02) -> (123.98,67.13)
[!!] EDL_EN2 布不通:(112.98,69.67) -> (107.29,105.71)
[!!] EDL_EN3 布不通:(179.57,106.66) -> (112.98,68.40)
[!!] EDL_EN5 布不通:(112.98,67.13) -> (148.55,29.45)
[!!] VBUS_EN5 布不通:(155.32,34.07) -> (138.95,66.23)
[!!] +5V 布不通:(182.13,66.23) -> (136.41,66.23)
123 个网络 / 609 条路径 / 1599 段导线 / 294 个过孔 (530 秒)
⚠️ 8 个网络没布通:+3V3_HUB K3_VDN K5_VDN EDL_EN2 EDL_EN3 EDL_EN5 VBUS_EN5 +5V
45° 化后有 3 条压线,把 $22N139 退回未切的版本
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
[!!] 线-旧线 $22N139 vs GND L2 净距 -0.200 段(81.72,88.11)-(81.70,90.70)
!! 净距还有问题,不下发。
=== [PCB2] reload+drc
已重载,新 windowId d828d3ee-37e4-4cb6-aa9e-49d7a03fe069(5 s)
全部 923 条 = 间距错误 121 + 连接性错误 687(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 导线 (4) ──
1. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12049贴片焊盘 ($21N157): U41_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12052贴片焊盘 ($21N157): J61_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12075贴片焊盘 ($22N139): U42_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12078贴片焊盘 ($22N139): J62_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 导线 到 过孔 (16) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10036过孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10037过孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10039过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10041过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10040过孔 ($24N125): e2268底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10047过孔 (+3V3_HUB): e2275底层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10048过孔 ($25N122): e2276底层对象 1到对象 2距离为0mil,应该>= 7.9mil
8. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10057过孔 (K5_VUP): e2285底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10058过孔 (GND): e2286底层对象 1到对象 2距离为0mil,应该>= 7.9mil
10. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10063过孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10062过孔 ($25N135): e2290底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12012过孔 (K1_PWR): e2665底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12011过孔 (K1_PWR): e2665顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12408过孔 : e2744底层对象 1到对象 2距离为6.3mil,应该>= 7.9mil
15. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12407过孔 : e2744底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12406过孔 : e2744顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 导线 (15) ──
1. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10036钻孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10037钻孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10039钻孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
+52
查看文件
@@ -0,0 +1,52 @@
=== dumps
障碍表已存:焊盘 1007 / 过孔 513 / 铜层导线 1139
-> D:\DCDC\.claude\pcb2-copper.json
=== [PCB2] route_sig --push (v4)
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
[!!] K3_VDN 布不通:(189.48,67.86) -> (199.59,119.14)
[!!] K5_VDN 布不通:(127.75,16.02) -> (123.98,67.13)
[!!] EDL_EN2 布不通:(112.98,69.67) -> (107.29,105.71)
[!!] EDL_EN3 布不通:(179.57,106.66) -> (112.98,68.40)
[!!] EDL_EN5 布不通:(112.98,67.13) -> (148.55,29.45)
[!!] VBUS_EN5 布不通:(155.32,34.07) -> (138.95,66.23)
[!!] +5V 布不通:(182.13,66.23) -> (136.41,66.23)
123 个网络 / 609 条路径 / 1608 段导线 / 291 个过孔 (510 秒)
⚠️ 8 个网络没布通:+3V3_HUB K3_VDN K5_VDN EDL_EN2 EDL_EN3 EDL_EN5 VBUS_EN5 +5V
45° 化后有 3 条压线,把 $22N139 退回未切的版本
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
[!!] 线-旧线 $22N139 vs GND L2 净距 -0.200 段(81.72,88.11)-(81.70,90.70)
!! 净距还有问题,不下发。
=== [PCB2] reload+drc
已重载,新 windowId 88919cd9-dada-4af1-85b3-620d75c11829(5 s)
全部 923 条 = 间距错误 121 + 连接性错误 687(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 导线 (4) ──
1. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12049贴片焊盘 ($21N157): U41_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 ($24N130): e12052贴片焊盘 ($21N157): J61_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12075贴片焊盘 ($22N139): U42_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 导线copperThickness1oz导线 (GND): e12078贴片焊盘 ($22N139): J62_1底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 导线 到 过孔 (16) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10036过孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10037过孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10039过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10041过孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO1_P): e10040过孔 ($24N125): e2268底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10047过孔 (+3V3_HUB): e2275底层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO2_P): e10048过孔 ($25N122): e2276底层对象 1到对象 2距离为0mil,应该>= 7.9mil
8. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10057过孔 (K5_VUP): e2285底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10058过孔 (GND): e2286底层对象 1到对象 2距离为0mil,应该>= 7.9mil
10. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10063过孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10062过孔 ($25N135): e2290底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12012过孔 (K1_PWR): e2665底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 过孔copperThickness1oz导线 ($20N324): e12011过孔 (K1_PWR): e2665顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12408过孔 : e2744底层对象 1到对象 2距离为6.3mil,应该>= 7.9mil
15. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12407过孔 : e2744底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 过孔copperThickness1oz导线 (SDA): e12406过孔 : e2744顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 导线 (15) ──
1. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10036钻孔 (VO4_P): e2264底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10037钻孔 (VO4_P): e2265底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO1_P): e10039钻孔 (GND): e2267底层对象 1到对象 2距离为0mil,应该>= 7.9mil
+33
查看文件
@@ -0,0 +1,33 @@
=== dumps
障碍表已存:焊盘 1007 / 过孔 513 / 铜层导线 1139
-> D:\DCDC\.claude\pcb2-copper.json
=== [PCB2] route_sig --push --force (v5 pass1)
=== dumps2
障碍表已存:焊盘 1007 / 过孔 513 / 铜层导线 1139
=== [PCB2] pass2 failed nets
=== [PCB2] reload+drc
已重载,新 windowId d7cdf0b6-980a-494c-960b-b4db530f34bb(5 s)
全部 853 条 = 间距错误 64 + 连接性错误 674(连接性 = 还没布线,预期之内)
── 导线 到 导线 (17) ──
1. [间距错误] 导线 到 导线copperThickness1oz导线 ($24N130): e12051导线 ($21N157): e12478底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 导线copperThickness1oz导线 (GND): e12076导线 ($22N139): e12479底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 导线copperThickness1oz导线 ($21N157): e12477导线 ($24N130): e12050底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 导线copperThickness1oz导线 ($22N139): e12480导线 (GND): e12077底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 导线 到 导线copperThickness1oz导线 (NONREM0): e11622导线 (GND): e12471顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11768导线 (EDL_EN2): e12473顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11770导线 (EDL_EN2): e12473顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
8. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11771导线 (EDL_EN2): e12473顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11772导线 (EDL_EN2): e12473顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
10. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11773导线 (EDL_EN2): e12473顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e11796导线 (EDL_EN3): e12476顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN3): e12476导线 (+3V3_HUB): e11794顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 导线copperThickness1oz导线 (GND): e12470导线 (NONREM0): e11619顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 导线copperThickness1oz导线 ($24N140): e12472导线 (+3V3_HUB): e11764顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
15. [间距错误] 导线 到 导线copperThickness1oz导线 ($24N140): e12472导线 (+3V3_HUB): e11762顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN1): e12474导线 (+3V3_HUB): e11774顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
17. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN1): e12475导线 (+3V3_HUB): e11777顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 导线 到 过孔 (3) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (GND): e12471过孔 (NONREM0): e2608顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 过孔copperThickness1oz导线 (EDL_EN1): e12474过孔 (+3V3_HUB): e2629顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
+56
查看文件
@@ -0,0 +1,56 @@
=== del mislabeled GND lines touching NONREM0
deleted 0
=== dumps
障碍表已存:焊盘 1007 / 过孔 513 / 铜层导线 1139
-> D:\DCDC\.claude\pcb2-copper.json
=== [PCB2] route_sig --push --force (pass1)
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
[!!] K3_VDN 布不通:(189.48,67.86) -> (199.59,119.14)
[!!] K5_VDN 布不通:(127.75,16.02) -> (123.98,67.13)
[!!] EDL_EN2 布不通:(112.98,69.67) -> (107.29,105.71)
[!!] EDL_EN3 布不通:(179.57,106.66) -> (112.98,68.40)
[!!] EDL_EN5 布不通:(112.98,67.13) -> (148.55,29.45)
[!!] VBUS_EN5 布不通:(155.32,34.07) -> (138.95,66.23)
[!!] +5V 布不通:(182.13,66.23) -> (136.41,66.23)
123 个网络 / 610 条路径 / 1589 段导线 / 292 个过孔 (511 秒)
⚠️ 8 个网络没布通:+3V3_HUB K3_VDN K5_VDN EDL_EN2 EDL_EN3 EDL_EN5 VBUS_EN5 +5V
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
全部通过 ✔
下发失败: {"httpError": 500, "body": "{\"success\":false,\"error\":\"Request cc12d53b-d57b-4690-8708-15f749fc9d46 timed out after 30000ms\"}"}
=== dumps2
障碍表已存:焊盘 1007 / 过孔 632 / 铜层导线 1962
=== [PCB2] pass2
8 个网络 / 134 条路径 / 318 段导线 / 38 个过孔 (44 秒)
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
全部通过 ✔
下发完成:先删 477 线 / 96 孔,再画 306 线 / 38 孔
=== [PCB2] reload+drc
已重载,新 windowId 5aad9bba-2676-4919-9761-f07443ebe962(5 s)
全部 941 条 = 间距错误 319 + 连接性错误 507(连接性 = 还没布线,预期之内)
── 导线 到 导线 (178) ──
1. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12800导线 (+5V): e14494底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12804导线 (+3V3_HUB): e14335底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_EN4): e13512导线 (+3V3_HUB): e14335底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14282底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
5. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14244底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
6. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12807导线 (+3V3_HUB): e14282底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
7. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12807导线 (+3V3_HUB): e14244底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
8. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14286底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14288导线 (XTAL2): e12832底层对象 1到对象 2距离为6mil,应该>= 7.9mil
10. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14291导线 (XTAL2): e12832底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14302导线 (XTAL2): e12832底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 导线copperThickness1oz导线 (NONREM0): e12853导线 (+5V): e14491底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 导线copperThickness1oz导线 (K1_VDN): e13224导线 (+5V): e14491底层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 导线copperThickness1oz导线 (+5V): e14491导线 (K1_VDN): e13223底层对象 1到对象 2距离为0mil,应该>= 7.9mil
15. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SER): e13084导线 (+3V3_HUB): e14328底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN4): e13417导线 (+3V3_HUB): e14328底层对象 1到对象 2距离为0mil,应该>= 7.9mil
17. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14328导线 (KEY_SRCLK): e13091底层对象 1到对象 2距离为0mil,应该>= 7.9mil
18. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14328导线 (KEY_SRCLK): e13088底层对象 1到对象 2距离为0mil,应该>= 7.9mil
19. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14328导线 (KEY_RCLK): e13105底层对象 1到对象 2距离为0mil,应该>= 7.9mil
20. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14328导线 (KEY_RCLK): e13102底层对象 1到对象 2距离为0mil,应该>= 7.9mil
21. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14328导线 (EDL_EN4): e13420底层对象 1到对象 2距离为0mil,应该>= 7.9mil
+41
查看文件
@@ -0,0 +1,41 @@
=== dumps
障碍表已存:焊盘 1007 / 过孔 574 / 铜层导线 1799
=== [PCB2] pass2 (redo)
8 个网络 / 134 条路径 / 318 段导线 / 38 个过孔 (42 秒)
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
全部通过 ✔
下发完成:先删 315 线 / 38 孔,再画 306 线 / 38 孔(分批,每批 250)
=== [PCB2] reload+drc
已重载,新 windowId 1a78c210-c358-4ef1-b272-b06d61f125ab(5 s)
全部 926 条 = 间距错误 319 + 连接性错误 492(连接性 = 还没布线,预期之内)
── 导线 到 导线 (178) ──
1. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12800导线 (+5V): e14805底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12804导线 (+3V3_HUB): e14646底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14646导线 (VBUS_EN4): e13512底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14593底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
5. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14555底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
6. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12807导线 (+3V3_HUB): e14593底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
7. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14555导线 (RBIAS): e12807底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
8. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14597底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14599底层对象 1到对象 2距离为6mil,应该>= 7.9mil
10. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14602底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14613导线 (XTAL2): e12832底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 导线copperThickness1oz导线 (NONREM0): e12853导线 (+5V): e14802底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 导线copperThickness1oz导线 (+5V): e14802导线 (K1_VDN): e13223底层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 导线copperThickness1oz导线 (+5V): e14802导线 (K1_VDN): e13224底层对象 1到对象 2距离为0mil,应该>= 7.9mil
15. [间距错误] 导线 到 导线copperThickness1oz导线 (HUB_RST): e12884导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SRCLK): e13098导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
17. [间距错误] 导线 到 导线copperThickness1oz导线 (K2_PWR): e13250导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
18. [间距错误] 导线 到 导线copperThickness1oz导线 (K2_VUP): e13260导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
19. [间距错误] 导线 到 导线copperThickness1oz导线 (K3_VUP): e13297导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
20. [间距错误] 导线 到 导线copperThickness1oz导线 (K3_VUP): e13299导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
21. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_EN3): e13490导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
22. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SER): e13083导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
23. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SER): e13084导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
24. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SRCLK): e13088导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
25. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_RCLK): e13102导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
26. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_RCLK): e13105导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
27. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN4): e13417导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
+51
查看文件
@@ -0,0 +1,51 @@
=== dumps
障碍表已存:焊盘 1007 / 过孔 574 / 铜层导线 1784
=== [PCB2] pass2 (redo 2)
障碍表:焊盘 1007 / 过孔 536 / 铜层导线 1484(摘掉本脚本自己负责的旧铜 338 件)
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
[!!] K3_VDN 布不通:(189.48,67.86) -> (199.59,119.14)
[!!] K5_VDN 布不通:(127.75,16.02) -> (123.98,67.13)
[!!] EDL_EN2 布不通:(112.98,69.67) -> (107.29,105.71)
[!!] EDL_EN3 布不通:(179.57,106.66) -> (112.98,68.40)
[!!] EDL_EN5 布不通:(112.98,67.13) -> (148.55,29.45)
[!!] VBUS_EN5 布不通:(155.32,34.07) -> (138.95,66.23)
[!!] +5V 布不通:(182.13,66.23) -> (136.41,66.23)
8 个网络 / 126 条路径 / 316 段导线 / 47 个过孔 (289 秒)
⚠️ 8 个网络没布通:+3V3_HUB K3_VDN K5_VDN EDL_EN2 EDL_EN3 EDL_EN5 VBUS_EN5 +5V
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
全部通过 ✔
!! 还有 8 个网络没布通,要下发请加 --force。(没布通的网络只会落下几截悬空的出线段,下一轮 --push 会把它们连同别的一起删掉重画。)
=== [PCB2] reload+drc
已重载,新 windowId 4a8be3d9-822d-46a7-9eac-9719079523e6(5 s)
全部 926 条 = 间距错误 319 + 连接性错误 492(连接性 = 还没布线,预期之内)
── 导线 到 导线 (178) ──
1. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12800导线 (+5V): e14805底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_UP): e12804导线 (+3V3_HUB): e14646底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14646导线 (VBUS_EN4): e13512底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14593底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
5. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12805导线 (+3V3_HUB): e14555底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
6. [间距错误] 导线 到 导线copperThickness1oz导线 (RBIAS): e12807导线 (+3V3_HUB): e14593底层对象 1到对象 2距离为1.7mil,应该>= 7.9mil
7. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14555导线 (RBIAS): e12807底层对象 1到对象 2距离为2.7mil,应该>= 7.9mil
8. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14597底层对象 1到对象 2距离为0mil,应该>= 7.9mil
9. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14599底层对象 1到对象 2距离为6mil,应该>= 7.9mil
10. [间距错误] 导线 到 导线copperThickness1oz导线 (XTAL2): e12832导线 (+3V3_HUB): e14602底层对象 1到对象 2距离为0mil,应该>= 7.9mil
11. [间距错误] 导线 到 导线copperThickness1oz导线 (+3V3_HUB): e14613导线 (XTAL2): e12832底层对象 1到对象 2距离为0mil,应该>= 7.9mil
12. [间距错误] 导线 到 导线copperThickness1oz导线 (NONREM0): e12853导线 (+5V): e14802底层对象 1到对象 2距离为0mil,应该>= 7.9mil
13. [间距错误] 导线 到 导线copperThickness1oz导线 (+5V): e14802导线 (K1_VDN): e13223底层对象 1到对象 2距离为0mil,应该>= 7.9mil
14. [间距错误] 导线 到 导线copperThickness1oz导线 (+5V): e14802导线 (K1_VDN): e13224底层对象 1到对象 2距离为0mil,应该>= 7.9mil
15. [间距错误] 导线 到 导线copperThickness1oz导线 (HUB_RST): e12884导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
16. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SRCLK): e13098导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
17. [间距错误] 导线 到 导线copperThickness1oz导线 (K2_PWR): e13250导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
18. [间距错误] 导线 到 导线copperThickness1oz导线 (K2_VUP): e13260导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
19. [间距错误] 导线 到 导线copperThickness1oz导线 (K3_VUP): e13297导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
20. [间距错误] 导线 到 导线copperThickness1oz导线 (K3_VUP): e13299导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
21. [间距错误] 导线 到 导线copperThickness1oz导线 (VBUS_EN3): e13490导线 (K3_VDN): e14712底层对象 1到对象 2距离为0mil,应该>= 7.9mil
22. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SER): e13083导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
23. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SER): e13084导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
24. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_SRCLK): e13088导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
25. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_RCLK): e13102导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
26. [间距错误] 导线 到 导线copperThickness1oz导线 (KEY_RCLK): e13105导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
27. [间距错误] 导线 到 导线copperThickness1oz导线 (EDL_EN4): e13417导线 (+3V3_HUB): e14639底层对象 1到对象 2距离为0mil,应该>= 7.9mil
+29
查看文件
@@ -0,0 +1,29 @@
=== [PCB2] pass2 --force (clean bad copper)
下发完成:先删 300 线 / 38 孔,再画 297 线 / 47 孔(分批,每批 250)
=== [PCB2] reload+drc
已重载,新 windowId f0fa850a-0e3b-4e24-835f-fcdb47a4ac95(5 s)
全部 636 条 = 间距错误 15 + 连接性错误 506(连接性 = 还没布线,预期之内)
── 导线 到 过孔 (1) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10063过孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 导线 (1) ──
1. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO3_P): e10063钻孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 贴片焊盘 到 过孔 (7) ──
1. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (VO3_P): J83_1过孔 (GND): e2289底层对象 1到对象 2距离为6.7mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2043底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2045底层对象 1到对象 2距离为0mil,应该>= 7.9mil
=== [PCB2] net conn
USB3_DMJ 2 焊盘 / 0 过孔 / 4 线 -> 1 个连通域 OK
USB4_DP 2 焊盘 / 2 过孔 / 10 线 -> 1 个连通域 OK
USB4_DM 2 焊盘 / 2 过孔 / 8 线 -> 1 个连通域 OK
USB4_DPJ 2 焊盘 / 2 过孔 / 7 线 -> 1 个连通域 OK
USB4_DMJ 2 焊盘 / 0 过孔 / 4 线 -> 1 个连通域 OK
USB5_DP 2 焊盘 / 2 过孔 / 13 线 -> 1 个连通域 OK
USB5_DM 2 焊盘 / 2 过孔 / 17 线 -> 1 个连通域 OK
USB5_DPJ 2 焊盘 / 2 过孔 / 7 线 -> 1 个连通域 OK
USB5_DMJ 2 焊盘 / 0 过孔 / 4 线 -> 1 个连通域 OK
UP_DP 3 焊盘 / 2 过孔 / 10 线 -> 1 个连通域 OK
UP_DM 3 焊盘 / 2 过孔 / 12 线 -> 1 个连通域 OK
0 / 22 个网络不连通
+76
查看文件
@@ -0,0 +1,76 @@
计划建 7 块铜面(**表的顺序就是优先级**,数字小的先铺、占地盘):
VO1-INNER1 net=VO1_P layer=15 prio=1 9 点 / 0 段弧
VO2-INNER1 net=VO2_P layer=15 prio=2 11 点 / 0 段弧
VO3-INNER1 net=VO3_P layer=15 prio=3 13 点 / 0 段弧
VO4-INNER1 net=VO4_P layer=15 prio=4 13 点 / 0 段弧
VO5-INNER1 net=VO5_P layer=15 prio=5 13 点 / 0 段弧
GND-INNER1 net=GND layer=15 prio=6 11 点 / 4 段弧
GND-INNER2 net=GND layer=16 prio=1 11 点 / 4 段弧
清掉旧铜面: 0 块
已建: VO1-INNER1(prio 1) VO2-INNER1(prio 3) VO3-INNER1(prio 5) VO4-INNER1(prio 7) VO5-INNER1(prio 9) GND-INNER1(prio 11) GND-INNER2(prio 1)
优先级次序 OK:L15 VO1-INNER1(1) < VO2-INNER1(3) < VO3-INNER1(5) < VO4-INNER1(7) < VO5-INNER1(9) < GND-INNER1(11) | L16 GND-INNER2(1)
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
填充 0 / 7
!! 填充一直上不去。看看窗口最底下是不是有条卡在 0% 的进度条 ——
那是客户端卡在后台任务上,跑 location.reload() 重载再来(skill §9k)。
⚠️ 重载会丢掉已建的边框,重载后要从 --push 头上重跑。
EXIT 1
+31
查看文件
@@ -0,0 +1,31 @@
计划建 7 块铜面(**表的顺序就是优先级**,数字小的先铺、占地盘):
VO1-INNER1 net=VO1_P layer=15 prio=1 9 点 / 0 段弧
VO2-INNER1 net=VO2_P layer=15 prio=2 11 点 / 0 段弧
VO3-INNER1 net=VO3_P layer=15 prio=3 13 点 / 0 段弧
VO4-INNER1 net=VO4_P layer=15 prio=4 13 点 / 0 段弧
VO5-INNER1 net=VO5_P layer=15 prio=5 13 点 / 0 段弧
GND-INNER1 net=GND layer=15 prio=6 11 点 / 4 段弧
GND-INNER2 net=GND layer=16 prio=1 11 点 / 4 段弧
清掉旧铜面: 0 块
已建: VO1-INNER1(prio 1) VO2-INNER1(prio 3) VO3-INNER1(prio 5) VO4-INNER1(prio 7) VO5-INNER1(prio 9) GND-INNER1(prio 11) GND-INNER2(prio 1)
优先级次序 OK:L15 VO1-INNER1(1) < VO2-INNER1(3) < VO3-INNER1(5) < VO4-INNER1(7) < VO5-INNER1(9) < GND-INNER1(11) | L16 GND-INNER2(1)
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 180, 213]
VO1-INNER1 net=VO1_P layer=15
VO2-INNER1 net=VO2_P layer=15
VO3-INNER1 net=VO3_P layer=15
VO4-INNER1 net=VO4_P layer=15
VO5-INNER1 net=VO5_P layer=15
GND-INNER1 net=GND layer=15
GND-INNER2 net=GND layer=16
──── 铺铜实测(读回 getState_PourFills)────
VO1-INNER1 prio=1 layer=15 1 段 / 30 环 / 126 点 包围盒 12.6,67.7 ~ 63.9,127.9
VO2-INNER1 prio=3 layer=15 1 段 / 32 环 / 133 点 包围盒 80.1,67.7 ~ 135.4,127.9
VO3-INNER1 prio=5 layer=15 1 段 / 32 环 / 137 点 包围盒 152.1,67.7 ~ 206.9,127.9
VO4-INNER1 prio=7 layer=15 1 段 / 46 环 / 207 点 包围盒 48.9,6.6 ~ 86.9,67.3
VO5-INNER1 prio=9 layer=15 1 段 / 40 环 / 212 点 包围盒 120.4,6.6 ~ 171.9,67.3
GND-INNER1 prio=11 layer=15 180 段 / 387 环 / 1356 点 包围盒 0.6,0.6 ~ 219.4,134.4
GND-INNER2 prio=1 layer=16 213 段 / 599 环 / 1803 点 包围盒 0.6,0.6 ~ 219.4,134.4
EXIT 0
+31
查看文件
@@ -0,0 +1,31 @@
计划建 7 块铜面(**表的顺序就是优先级**,数字小的先铺、占地盘):
VO1-INNER1 net=VO1_P layer=15 prio=1 9 点 / 0 段弧
VO2-INNER1 net=VO2_P layer=15 prio=2 11 点 / 0 段弧
VO3-INNER1 net=VO3_P layer=15 prio=3 13 点 / 0 段弧
VO4-INNER1 net=VO4_P layer=15 prio=4 13 点 / 0 段弧
VO5-INNER1 net=VO5_P layer=15 prio=5 13 点 / 0 段弧
GND-INNER1 net=GND layer=15 prio=6 11 点 / 4 段弧
GND-INNER2 net=GND layer=16 prio=1 11 点 / 4 段弧
清掉旧铜面: 7 块
已建: VO1-INNER1(prio 1) VO2-INNER1(prio 3) VO3-INNER1(prio 5) VO4-INNER1(prio 7) VO5-INNER1(prio 9) GND-INNER1(prio 11) GND-INNER2(prio 1)
优先级次序 OK:L15 VO1-INNER1(1) < VO2-INNER1(3) < VO3-INNER1(5) < VO4-INNER1(7) < VO5-INNER1(9) < GND-INNER1(11) | L16 GND-INNER2(1)
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 180, 213]
VO1-INNER1 net=VO1_P layer=15
VO2-INNER1 net=VO2_P layer=15
VO3-INNER1 net=VO3_P layer=15
VO4-INNER1 net=VO4_P layer=15
VO5-INNER1 net=VO5_P layer=15
GND-INNER1 net=GND layer=15
GND-INNER2 net=GND layer=16
──── 铺铜实测(读回 getState_PourFills)────
VO1-INNER1 prio=1 layer=15 1 段 / 30 环 / 126 点 包围盒 12.6,67.7 ~ 63.9,127.9
VO2-INNER1 prio=3 layer=15 1 段 / 32 环 / 133 点 包围盒 80.1,67.7 ~ 135.4,127.9
VO3-INNER1 prio=5 layer=15 1 段 / 32 环 / 137 点 包围盒 152.1,67.7 ~ 206.9,127.9
VO4-INNER1 prio=7 layer=15 1 段 / 46 环 / 207 点 包围盒 48.9,6.6 ~ 86.9,67.3
VO5-INNER1 prio=9 layer=15 1 段 / 40 环 / 212 点 包围盒 120.4,6.6 ~ 171.9,67.3
GND-INNER1 prio=11 layer=15 180 段 / 387 环 / 1356 点 包围盒 0.6,0.6 ~ 219.4,134.4
GND-INNER2 prio=1 layer=16 213 段 / 599 环 / 1803 点 包围盒 0.6,0.6 ~ 219.4,134.4
EXIT 0
+31
查看文件
@@ -0,0 +1,31 @@
计划建 7 块铜面(**表的顺序就是优先级**,数字小的先铺、占地盘):
VO1-INNER1 net=VO1_P layer=15 prio=1 9 点 / 0 段弧
VO2-INNER1 net=VO2_P layer=15 prio=2 11 点 / 0 段弧
VO3-INNER1 net=VO3_P layer=15 prio=3 13 点 / 0 段弧
VO4-INNER1 net=VO4_P layer=15 prio=4 13 点 / 0 段弧
VO5-INNER1 net=VO5_P layer=15 prio=5 13 点 / 0 段弧
GND-INNER1 net=GND layer=15 prio=6 11 点 / 4 段弧
GND-INNER2 net=GND layer=16 prio=1 11 点 / 4 段弧
清掉旧铜面: 7 块
已建: VO1-INNER1(prio 1) VO2-INNER1(prio 3) VO3-INNER1(prio 5) VO4-INNER1(prio 7) VO5-INNER1(prio 9) GND-INNER1(prio 11) GND-INNER2(prio 1)
优先级次序 OK:L15 VO1-INNER1(1) < VO2-INNER1(3) < VO3-INNER1(5) < VO4-INNER1(7) < VO5-INNER1(9) < GND-INNER1(11) | L16 GND-INNER2(1)
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 180, 213]
VO1-INNER1 net=VO1_P layer=15
VO2-INNER1 net=VO2_P layer=15
VO3-INNER1 net=VO3_P layer=15
VO4-INNER1 net=VO4_P layer=15
VO5-INNER1 net=VO5_P layer=15
GND-INNER1 net=GND layer=15
GND-INNER2 net=GND layer=16
──── 铺铜实测(读回 getState_PourFills)────
VO1-INNER1 prio=1 layer=15 1 段 / 30 环 / 126 点 包围盒 12.6,67.7 ~ 63.9,127.9
VO2-INNER1 prio=3 layer=15 1 段 / 33 环 / 135 点 包围盒 80.1,67.7 ~ 135.4,127.9
VO3-INNER1 prio=5 layer=15 1 段 / 32 环 / 137 点 包围盒 152.1,67.7 ~ 206.9,127.9
VO4-INNER1 prio=7 layer=15 1 段 / 46 环 / 207 点 包围盒 48.9,6.6 ~ 86.9,67.3
VO5-INNER1 prio=9 layer=15 1 段 / 39 环 / 209 点 包围盒 120.4,6.6 ~ 171.9,67.3
GND-INNER1 prio=11 layer=15 180 段 / 388 环 / 1359 点 包围盒 0.6,0.6 ~ 219.4,134.4
GND-INNER2 prio=1 layer=16 213 段 / 601 环 / 1809 点 包围盒 0.6,0.6 ~ 219.4,134.4
EXIT 0
+31
查看文件
@@ -0,0 +1,31 @@
计划建 7 块铜面(**表的顺序就是优先级**,数字小的先铺、占地盘):
VO1-INNER1 net=VO1_P layer=15 prio=1 9 点 / 0 段弧
VO2-INNER1 net=VO2_P layer=15 prio=2 11 点 / 0 段弧
VO3-INNER1 net=VO3_P layer=15 prio=3 13 点 / 0 段弧
VO4-INNER1 net=VO4_P layer=15 prio=4 13 点 / 0 段弧
VO5-INNER1 net=VO5_P layer=15 prio=5 13 点 / 0 段弧
GND-INNER1 net=GND layer=15 prio=6 11 点 / 4 段弧
GND-INNER2 net=GND layer=16 prio=1 11 点 / 4 段弧
清掉旧铜面: 0 块
已建: VO1-INNER1(prio 1) VO2-INNER1(prio 3) VO3-INNER1(prio 5) VO4-INNER1(prio 7) VO5-INNER1(prio 9) GND-INNER1(prio 11) GND-INNER2(prio 1)
优先级次序 OK:L15 VO1-INNER1(1) < VO2-INNER1(3) < VO3-INNER1(5) < VO4-INNER1(7) < VO5-INNER1(9) < GND-INNER1(11) | L16 GND-INNER2(1)
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 180, 213]
VO1-INNER1 net=VO1_P layer=15
VO2-INNER1 net=VO2_P layer=15
VO3-INNER1 net=VO3_P layer=15
VO4-INNER1 net=VO4_P layer=15
VO5-INNER1 net=VO5_P layer=15
GND-INNER1 net=GND layer=15
GND-INNER2 net=GND layer=16
──── 铺铜实测(读回 getState_PourFills)────
VO1-INNER1 prio=1 layer=15 1 段 / 30 环 / 126 点 包围盒 12.6,67.7 ~ 63.9,127.9
VO2-INNER1 prio=3 layer=15 1 段 / 33 环 / 135 点 包围盒 80.1,67.7 ~ 135.4,127.9
VO3-INNER1 prio=5 layer=15 1 段 / 32 环 / 137 点 包围盒 152.1,67.7 ~ 206.9,127.9
VO4-INNER1 prio=7 layer=15 1 段 / 46 环 / 207 点 包围盒 48.9,6.6 ~ 86.9,67.3
VO5-INNER1 prio=9 layer=15 1 段 / 39 环 / 209 点 包围盒 120.4,6.6 ~ 171.9,67.3
GND-INNER1 prio=11 layer=15 180 段 / 388 环 / 1359 点 包围盒 0.6,0.6 ~ 219.4,134.4
GND-INNER2 prio=1 layer=16 213 段 / 601 环 / 1809 点 包围盒 0.6,0.6 ~ 219.4,134.4
EXIT 0
+15
查看文件
@@ -0,0 +1,15 @@
改完后 30 个孔都干净 ✔(删 26 线 / 2 过孔,新画 15 条路径)
下发:删 23 线(计划 26)/ 1 孔(计划 2),画 63 段 / 25 孔
!! 删掉的数量和计划不符,去板上看看
已重载,新 windowId 8a1c29ba-d794-46ed-9fcb-66bcd9a0dd7f(5 s)
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 180, 213]
5
全部 247 条 = 间距错误 15 + 连接性错误 117(连接性 = 还没布线,预期之内)
── 导线 到 过孔 (1) ──
── 钻孔 到 导线 (1) ──
── 贴片焊盘 到 过孔 (7) ──
── 钻孔 到 贴片焊盘 (6) ──
── 同封装内间距错误 (115) ──
── 贴片焊盘 到 贴片焊盘 (115) ──
EXIT 0
+520
查看文件
@@ -0,0 +1,520 @@
安排了 218 个元件(顶层 20 / 底层 198)
本地检查通过:无重叠、无越框、没人压槽、顶层只有顶针、底层件避开了螺钉头
下发失败: {"httpError": 500, "body": "{\"success\":false,\"error\":\"Request 049d59b1-aef6-453a-8167-20b867501a96 timed out after 30000ms\"}"}
安排了 218 个元件(顶层 20 / 底层 198)
本地检查通过:无重叠、无越框、没人压槽、顶层只有顶针、底层件避开了螺钉头
板框: 220 × 135 mm,一条闭合多段线(R5 圆角)
穿线槽: 建 10 / 失败 [](删旧 10);板上 layer12 填充 10 个
CH1-bat x 43.20~53.20 y 128.20~131.20 (10.0 × 3.0)
CH1-tail x 8.00~27.00 y 128.20~131.20 (19.0 × 3.0)
CH2-bat x 114.70~124.70 y 128.20~131.20 (10.0 × 3.0)
CH2-tail x 79.50~98.50 y 128.20~131.20 (19.0 × 3.0)
CH3-bat x 186.20~196.20 y 128.20~131.20 (10.0 × 3.0)
CH3-tail x 151.00~170.00 y 128.20~131.20 (19.0 × 3.0)
CH4-bat x 59.55~69.55 y 3.30~6.30 (10.0 × 3.0)
CH4-tail x 85.75~104.75 y 3.30~6.30 (19.0 × 3.0)
CH5-bat x 131.05~141.05 y 3.30~6.30 (10.0 × 3.0)
CH5-tail x 157.25~176.25 y 3.30~6.30 (19.0 × 3.0)
载板自己的 M3 定位孔: 8 个(Φ3.2 / 焊盘 Φ6.0 / 接 GND)
已摆 50 / 218
已摆 100 / 218
已摆 150 / 218
已摆 200 / 218
已摆 218 / 218
布局已下发并保存:218 个元件
排母焊盘坐标已导出: D:\DCDC\.claude\pcb2-header-pads.json(80 个)
元件按层: {'1': 20, '2': 198}
✔ J23 信号焊盘在中心西侧 (x≈212.39),口朝 +X
✔ R717.pin1 (209.43,64.50) -> J23.A5 (212.39,63.25) 距 3.21
✔ R718.pin1 (209.43,59.50) -> J23.B5 (212.39,60.25) 距 3.05
J71 (L2) pin1 [23.701, 93.061, 2] / pin2 [23.701, 90.94, 2] / pin49 [15.301, 93.061, 2] / pin50 [15.301, 90.94, 2]
J71 pin4(DMJ) [23.35, 90.94, 2] / pin6(DPJ) [23, 90.94, 2] / pin51(VBUS) [25.53, 92.001, 2] / pin52(GND) [13.47, 92.001, 2]
✔ J71 pin51(VBUS)/pin6(DPJ) 在本体 −u 侧 —— 与 §24.3「VBUS 落到 −X 端」一致(底层 rot 0 + 站向)
U51 (L2) pin1 [22.25, 88.649, 2] pin6 [22.25, 86.35, 2]
C801 (L2) pin1 [41.999, 115.7, 2] pin2 [33.401, 115.7, 2]
R761 (L2) pin1 [20.201, 88.999, 2] pin2 [19.334, 88.999, 2]
U24 (L2) pin1 [36.149, 100.051, 2] pin4 [38.849, 101.951, 2]
J31 (L2) pin1 [37.869, 68.77, 12] pin2 [37.869, 66.23, 12]
载板扇出:板框 220 × 135,元件面 (1, 2),GND -> layer 16
跳过 65 个焊盘(由别的脚本接管):J71×13 J72×13 J73×13 J74×13 J75×13
GND:贴片焊盘 182 个要扇出到 layer 16
散热/大焊盘 21 个走盘内阵列,共 254 个过孔:
U32 pin65 4.80 x 4.80 mm 间距 0.65 -> 49 个
J84 pin2 1.10 x 4.00 mm 间距 0.65 -> 5 个
C801 pin2 4.30 x 1.65 mm 间距 0.65 -> 12 个
J64 pin4 2.10 x 3.00 mm 间距 0.65 -> 12 个
J64 pin3 2.10 x 3.00 mm 间距 0.65 -> 12 个
C811 pin2 4.30 x 1.65 mm 间距 0.65 -> 12 个
J85 pin2 1.10 x 4.00 mm 间距 0.65 -> 5 个
C821 pin2 4.30 x 1.65 mm 间距 0.65 -> 12 个
... 还有 13 个
第二遍(72 角 / 4 mm):4 个里救回 4 个
放下 415 个过孔,失败 0 个
引线长度 中位 0.00 / 最长 1.75 mm
其中 2 条用了窄线出线(细间距 QFN):R710 [email protected] U32 [email protected]
下发:过孔 415 / 短线 161,板上过孔总数 415
C801 VO1_P 过孔 ( 42.000, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C801#2 VO1_P 过孔 ( 42.000, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C801#3 VO1_P 过孔 ( 43.308, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C802 VO1_P 过孔 ( 58.107, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C803 VO1_P 过孔 ( 58.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C804 VO1_P 过孔 ( 53.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C805 VO1_P 过孔 ( 46.207, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C806 VO1_P 过孔 ( 53.330, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J81 VO1_P 过孔 ( 53.225, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J81#2 VO1_P 过孔 ( 53.225, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J81#3 VO1_P 过孔 ( 53.897, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C811 VO2_P 过孔 ( 113.500, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C811#2 VO2_P 过孔 ( 113.500, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C811#3 VO2_P 过孔 ( 114.808, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C812 VO2_P 过孔 ( 129.607, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C813 VO2_P 过孔 ( 130.107, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C814 VO2_P 过孔 ( 125.107, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C815 VO2_P 过孔 ( 117.707, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C816 VO2_P 过孔 ( 124.830, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J82 VO2_P 过孔 ( 124.725, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J82#2 VO2_P 过孔 ( 124.725, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J82#3 VO2_P 过孔 ( 125.397, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C821 VO3_P 过孔 ( 185.000, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C821#2 VO3_P 过孔 ( 185.000, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C821#3 VO3_P 过孔 ( 186.308, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C822 VO3_P 过孔 ( 201.107, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C823 VO3_P 过孔 ( 201.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C824 VO3_P 过孔 ( 196.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C825 VO3_P 过孔 ( 189.208, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C826 VO3_P 过孔 ( 196.330, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J83 VO3_P 过孔 ( 196.225, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J83#2 VO3_P 过孔 ( 196.225, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J83#3 VO3_P 过孔 ( 196.897, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C831 VO4_P 过孔 ( 70.750, 20.100) 离焊盘中心 1.30 线宽 1.00 1 段
C831#2 VO4_P 过孔 ( 70.750, 17.500) 离焊盘中心 1.30 线宽 1.00 1 段
C831#3 VO4_P 过孔 ( 72.058, 20.108) 离焊盘中心 1.85 线宽 1.00 1 段
C832 VO4_P 过孔 ( 55.843, 23.850) 离焊盘中心 1.35 线宽 1.00 1 段
C833 VO4_P 过孔 ( 55.343, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C834 VO4_P 过孔 ( 60.343, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C835 VO4_P 过孔 ( 66.543, 26.000) 离焊盘中心 1.20 线宽 1.00 1 段
C836 VO4_P 过孔 ( 59.420, 22.500) 离焊盘中心 0.75 线宽 1.00 1 段
J84 VO4_P 过孔 ( 59.525, 23.525) 离焊盘中心 1.45 线宽 1.00 1 段
J84#2 VO4_P 过孔 ( 59.525, 21.475) 离焊盘中心 1.45 线宽 1.00 1 段
J84#3 VO4_P 过孔 ( 58.853, 24.197) 离焊盘中心 2.40 线宽 1.00 1 段
C841 VO5_P 过孔 ( 142.250, 20.100) 离焊盘中心 1.30 线宽 1.00 1 段
C841#2 VO5_P 过孔 ( 142.250, 17.500) 离焊盘中心 1.30 线宽 1.00 1 段
C841#3 VO5_P 过孔 ( 143.558, 20.108) 离焊盘中心 1.85 线宽 1.00 1 段
C842 VO5_P 过孔 ( 127.343, 23.850) 离焊盘中心 1.35 线宽 1.00 1 段
C843 VO5_P 过孔 ( 126.843, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C844 VO5_P 过孔 ( 131.843, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C845 VO5_P 过孔 ( 138.042, 26.000) 离焊盘中心 1.20 线宽 1.00 1 段
C846 VO5_P 过孔 ( 130.920, 22.500) 离焊盘中心 0.75 线宽 1.00 1 段
J85 VO5_P 过孔 ( 131.025, 23.525) 离焊盘中心 1.45 线宽 1.00 1 段
J85#2 VO5_P 过孔 ( 131.025, 21.475) 离焊盘中心 1.45 线宽 1.00 1 段
J85#3 VO5_P 过孔 ( 130.353, 24.197) 离焊盘中心 2.40 线宽 1.00 1 段
55/55 个过孔搞定(35 个焊盘):55 段导线 / 55 个过孔
直角拐点 0(每条只有一段直线,应当是 0)
净距校核(一般 0.20 mm):
[!!] 线-新线 VO1_P#C801-1 vs VO1_P#C801-2 L2 净距 -1.000 段(42.00,115.70)-(42.00,117.00)
[!!] 线-新线 VO1_P#C801-1 vs VO1_P#C801-3 L2 净距 -1.000 段(42.00,115.70)-(42.00,117.00)
[!!] 线-新线 VO1_P#C801-2 vs VO1_P#C801-1 L2 净距 -1.000 段(42.00,115.70)-(42.00,114.40)
[!!] 线-新线 VO1_P#C801-2 vs VO1_P#C801-3 L2 净距 -1.000 段(42.00,115.70)-(42.00,114.40)
[!!] 线-新线 VO1_P#C801-3 vs VO1_P#C801-1 L2 净距 -1.000 段(42.00,115.70)-(43.31,117.01)
[!!] 线-新线 VO1_P#C801-3 vs VO1_P#C801-2 L2 净距 -1.000 段(42.00,115.70)-(43.31,117.01)
[!!] 线-新线 VO1_P#J81-1 vs VO1_P#J81-2 L2 净距 -1.000 段(52.20,112.00)-(53.23,113.03)
[!!] 线-新线 VO1_P#J81-1 vs VO1_P#J81-3 L2 净距 -1.000 段(52.20,112.00)-(53.23,113.03)
[!!] 线-新线 VO1_P#J81-2 vs VO1_P#J81-1 L2 净距 -1.000 段(52.20,112.00)-(53.23,110.97)
[!!] 线-新线 VO1_P#J81-2 vs VO1_P#J81-3 L2 净距 -1.000 段(52.20,112.00)-(53.23,110.97)
[!!] 线-新线 VO1_P#J81-3 vs VO1_P#J81-1 L2 净距 -1.000 段(52.20,112.00)-(53.90,113.70)
[!!] 线-新线 VO1_P#J81-3 vs VO1_P#J81-2 L2 净距 -1.000 段(52.20,112.00)-(53.90,113.70)
[!!] 线-新线 VO2_P#C811-1 vs VO2_P#C811-2 L2 净距 -1.000 段(113.50,115.70)-(113.50,117.00)
[!!] 线-新线 VO2_P#C811-1 vs VO2_P#C811-3 L2 净距 -1.000 段(113.50,115.70)-(113.50,117.00)
[!!] 线-新线 VO2_P#C811-2 vs VO2_P#C811-1 L2 净距 -1.000 段(113.50,115.70)-(113.50,114.40)
[!!] 线-新线 VO2_P#C811-2 vs VO2_P#C811-3 L2 净距 -1.000 段(113.50,115.70)-(113.50,114.40)
[!!] 线-新线 VO2_P#C811-3 vs VO2_P#C811-1 L2 净距 -1.000 段(113.50,115.70)-(114.81,117.01)
[!!] 线-新线 VO2_P#C811-3 vs VO2_P#C811-2 L2 净距 -1.000 段(113.50,115.70)-(114.81,117.01)
[!!] 线-新线 VO2_P#J82-1 vs VO2_P#J82-2 L2 净距 -1.000 段(123.70,112.00)-(124.73,113.03)
[!!] 线-新线 VO2_P#J82-1 vs VO2_P#J82-3 L2 净距 -1.000 段(123.70,112.00)-(124.73,113.03)
[!!] 线-新线 VO2_P#J82-2 vs VO2_P#J82-1 L2 净距 -1.000 段(123.70,112.00)-(124.73,110.97)
[!!] 线-新线 VO2_P#J82-2 vs VO2_P#J82-3 L2 净距 -1.000 段(123.70,112.00)-(124.73,110.97)
[!!] 线-新线 VO2_P#J82-3 vs VO2_P#J82-1 L2 净距 -1.000 段(123.70,112.00)-(125.40,113.70)
[!!] 线-新线 VO2_P#J82-3 vs VO2_P#J82-2 L2 净距 -1.000 段(123.70,112.00)-(125.40,113.70)
[!!] 线-新线 VO3_P#C821-1 vs VO3_P#C821-2 L2 净距 -1.000 段(185.00,115.70)-(185.00,117.00)
[!!] 线-新线 VO3_P#C821-1 vs VO3_P#C821-3 L2 净距 -1.000 段(185.00,115.70)-(185.00,117.00)
[!!] 线-新线 VO3_P#C821-2 vs VO3_P#C821-1 L2 净距 -1.000 段(185.00,115.70)-(185.00,114.40)
[!!] 线-新线 VO3_P#C821-2 vs VO3_P#C821-3 L2 净距 -1.000 段(185.00,115.70)-(185.00,114.40)
[!!] 线-新线 VO3_P#C821-3 vs VO3_P#C821-1 L2 净距 -1.000 段(185.00,115.70)-(186.31,117.01)
[!!] 线-新线 VO3_P#C821-3 vs VO3_P#C821-2 L2 净距 -1.000 段(185.00,115.70)-(186.31,117.01)
[!!] 线-新线 VO3_P#J83-1 vs VO3_P#J83-2 L2 净距 -1.000 段(195.20,112.00)-(196.23,113.03)
[!!] 线-新线 VO3_P#J83-1 vs VO3_P#J83-3 L2 净距 -1.000 段(195.20,112.00)-(196.23,113.03)
[!!] 线-新线 VO3_P#J83-2 vs VO3_P#J83-1 L2 净距 -1.000 段(195.20,112.00)-(196.23,110.97)
[!!] 线-新线 VO3_P#J83-2 vs VO3_P#J83-3 L2 净距 -1.000 段(195.20,112.00)-(196.23,110.97)
[!!] 线-新线 VO3_P#J83-3 vs VO3_P#J83-1 L2 净距 -1.000 段(195.20,112.00)-(196.90,113.70)
[!!] 线-新线 VO3_P#J83-3 vs VO3_P#J83-2 L2 净距 -1.000 段(195.20,112.00)-(196.90,113.70)
[!!] 线-新线 VO4_P#C831-1 vs VO4_P#C831-2 L2 净距 -1.000 段(70.75,18.80)-(70.75,20.10)
[!!] 线-新线 VO4_P#C831-1 vs VO4_P#C831-3 L2 净距 -1.000 段(70.75,18.80)-(70.75,20.10)
[!!] 线-新线 VO4_P#C831-2 vs VO4_P#C831-1 L2 净距 -1.000 段(70.75,18.80)-(70.75,17.50)
[!!] 线-新线 VO4_P#C831-2 vs VO4_P#C831-3 L2 净距 -1.000 段(70.75,18.80)-(70.75,17.50)
[!!] 线-新线 VO4_P#C831-3 vs VO4_P#C831-1 L2 净距 -1.000 段(70.75,18.80)-(72.06,20.11)
[!!] 线-新线 VO4_P#C831-3 vs VO4_P#C831-2 L2 净距 -1.000 段(70.75,18.80)-(72.06,20.11)
[!!] 线-新线 VO4_P#J84-1 vs VO4_P#J84-2 L2 净距 -1.000 段(60.55,22.50)-(59.52,23.53)
[!!] 线-新线 VO4_P#J84-1 vs VO4_P#J84-3 L2 净距 -1.000 段(60.55,22.50)-(59.52,23.53)
[!!] 线-新线 VO4_P#J84-2 vs VO4_P#J84-1 L2 净距 -1.000 段(60.55,22.50)-(59.52,21.47)
[!!] 线-新线 VO4_P#J84-2 vs VO4_P#J84-3 L2 净距 -1.000 段(60.55,22.50)-(59.52,21.47)
[!!] 线-新线 VO4_P#J84-3 vs VO4_P#J84-1 L2 净距 -1.000 段(60.55,22.50)-(58.85,24.20)
[!!] 线-新线 VO4_P#J84-3 vs VO4_P#J84-2 L2 净距 -1.000 段(60.55,22.50)-(58.85,24.20)
[!!] 线-新线 VO5_P#C841-1 vs VO5_P#C841-2 L2 净距 -1.000 段(142.25,18.80)-(142.25,20.10)
[!!] 线-新线 VO5_P#C841-1 vs VO5_P#C841-3 L2 净距 -1.000 段(142.25,18.80)-(142.25,20.10)
[!!] 线-新线 VO5_P#C841-2 vs VO5_P#C841-1 L2 净距 -1.000 段(142.25,18.80)-(142.25,17.50)
[!!] 线-新线 VO5_P#C841-2 vs VO5_P#C841-3 L2 净距 -1.000 段(142.25,18.80)-(142.25,17.50)
[!!] 线-新线 VO5_P#C841-3 vs VO5_P#C841-1 L2 净距 -1.000 段(142.25,18.80)-(143.56,20.11)
[!!] 线-新线 VO5_P#C841-3 vs VO5_P#C841-2 L2 净距 -1.000 段(142.25,18.80)-(143.56,20.11)
[!!] 线-新线 VO5_P#J85-1 vs VO5_P#J85-2 L2 净距 -1.000 段(132.05,22.50)-(131.02,23.53)
[!!] 线-新线 VO5_P#J85-1 vs VO5_P#J85-3 L2 净距 -1.000 段(132.05,22.50)-(131.02,23.53)
[!!] 线-新线 VO5_P#J85-2 vs VO5_P#J85-1 L2 净距 -1.000 段(132.05,22.50)-(131.02,21.47)
[!!] 线-新线 VO5_P#J85-2 vs VO5_P#J85-3 L2 净距 -1.000 段(132.05,22.50)-(131.02,21.47)
[!!] 线-新线 VO5_P#J85-3 vs VO5_P#J85-1 L2 净距 -1.000 段(132.05,22.50)-(130.35,24.20)
[!!] 线-新线 VO5_P#J85-3 vs VO5_P#J85-2 L2 净距 -1.000 段(132.05,22.50)-(130.35,24.20)
[!!] 过孔-新线 VO2_P#J82-1 vs VO2_P#J82-3 L2 净距 -0.805 段(124.73,113.03)-(124.73,113.03)
[!!] 过孔-新线 VO4_P#J84-1 vs VO4_P#J84-3 L2 净距 -0.805 段(59.52,23.53)-(59.52,23.53)
[!!] 过孔-新线 VO5_P#J85-1 vs VO5_P#J85-3 L2 净距 -0.805 段(131.02,23.53)-(131.02,23.53)
[!!] 过孔-新线 VO3_P#J83-1 vs VO3_P#J83-3 L2 净距 -0.805 段(196.23,113.03)-(196.23,113.03)
[!!] 过孔-新线 VO1_P#J81-1 vs VO1_P#J81-3 L2 净距 -0.805 段(53.23,113.03)-(53.23,113.03)
[!!] 线-焊盘 VO1_P#C801-1 vs C801.1(VO1_P) L2 净距 -0.500 段(42.00,115.70)-(42.00,117.00)
[!!] 线-焊盘 VO1_P#C801-2 vs C801.1(VO1_P) L2 净距 -0.500 段(42.00,115.70)-(42.00,114.40)
[!!] 线-焊盘 VO1_P#C801-3 vs C801.1(VO1_P) L2 净距 -0.500 段(42.00,115.70)-(43.31,117.01)
[!!] 线-焊盘 VO1_P#C802 vs C802.2(VO1_P) L2 净距 -0.500 段(56.91,112.00)-(58.11,112.00)
[!!] 线-焊盘 VO1_P#C803 vs C803.2(VO1_P) L2 净距 -0.500 段(57.41,108.50)-(58.61,108.50)
[!!] 线-焊盘 VO1_P#C804 vs C804.2(VO1_P) L2 净距 -0.500 段(52.41,108.50)-(53.61,108.50)
[!!] 线-焊盘 VO1_P#C805 vs C805.2(VO1_P) L2 净距 -0.500 段(47.41,108.50)-(46.21,108.50)
[!!] 线-焊盘 VO1_P#C806 vs C806.2(VO1_P) L2 净距 -0.500 段(53.93,112.00)-(53.33,112.00)
[!!] 线-焊盘 VO1_P#J81-1 vs J81.1(VO1_P) L2 净距 -0.500 段(52.20,112.00)-(53.23,113.03)
[!!] 线-焊盘 VO1_P#J81-2 vs J81.1(VO1_P) L2 净距 -0.500 段(52.20,112.00)-(53.23,110.97)
[!!] 线-焊盘 VO1_P#J81-3 vs J81.1(VO1_P) L2 净距 -0.500 段(52.20,112.00)-(53.90,113.70)
[!!] 线-焊盘 VO2_P#C811-1 vs C811.1(VO2_P) L2 净距 -0.500 段(113.50,115.70)-(113.50,117.00)
[!!] 线-焊盘 VO2_P#C811-2 vs C811.1(VO2_P) L2 净距 -0.500 段(113.50,115.70)-(113.50,114.40)
[!!] 线-焊盘 VO2_P#C811-3 vs C811.1(VO2_P) L2 净距 -0.500 段(113.50,115.70)-(114.81,117.01)
[!!] 线-焊盘 VO2_P#C812 vs C812.2(VO2_P) L2 净距 -0.500 段(128.41,112.00)-(129.61,112.00)
[!!] 线-焊盘 VO2_P#C813 vs C813.2(VO2_P) L2 净距 -0.500 段(128.91,108.50)-(130.11,108.50)
[!!] 线-焊盘 VO2_P#C814 vs C814.2(VO2_P) L2 净距 -0.500 段(123.91,108.50)-(125.11,108.50)
[!!] 线-焊盘 VO2_P#C815 vs C815.2(VO2_P) L2 净距 -0.500 段(118.91,108.50)-(117.71,108.50)
[!!] 线-焊盘 VO2_P#C816 vs C816.2(VO2_P) L2 净距 -0.500 段(125.43,112.00)-(124.83,112.00)
[!!] 线-焊盘 VO2_P#J82-1 vs J82.1(VO2_P) L2 净距 -0.500 段(123.70,112.00)-(124.73,113.03)
[!!] 线-焊盘 VO2_P#J82-2 vs J82.1(VO2_P) L2 净距 -0.500 段(123.70,112.00)-(124.73,110.97)
[!!] 线-焊盘 VO2_P#J82-3 vs J82.1(VO2_P) L2 净距 -0.500 段(123.70,112.00)-(125.40,113.70)
[!!] 线-焊盘 VO3_P#C821-1 vs C821.1(VO3_P) L2 净距 -0.500 段(185.00,115.70)-(185.00,117.00)
[!!] 线-焊盘 VO3_P#C821-2 vs C821.1(VO3_P) L2 净距 -0.500 段(185.00,115.70)-(185.00,114.40)
[!!] 线-焊盘 VO3_P#C821-3 vs C821.1(VO3_P) L2 净距 -0.500 段(185.00,115.70)-(186.31,117.01)
[!!] 线-焊盘 VO3_P#C822 vs C822.2(VO3_P) L2 净距 -0.500 段(199.91,112.00)-(201.11,112.00)
[!!] 线-焊盘 VO3_P#C823 vs C823.2(VO3_P) L2 净距 -0.500 段(200.41,108.50)-(201.61,108.50)
[!!] 线-焊盘 VO3_P#C824 vs C824.2(VO3_P) L2 净距 -0.500 段(195.41,108.50)-(196.61,108.50)
[!!] 线-焊盘 VO3_P#C825 vs C825.2(VO3_P) L2 净距 -0.500 段(190.41,108.50)-(189.21,108.50)
[!!] 线-焊盘 VO3_P#C826 vs C826.2(VO3_P) L2 净距 -0.500 段(196.93,112.00)-(196.33,112.00)
[!!] 线-焊盘 VO3_P#J83-1 vs J83.1(VO3_P) L2 净距 -0.500 段(195.20,112.00)-(196.23,113.03)
[!!] 线-焊盘 VO3_P#J83-2 vs J83.1(VO3_P) L2 净距 -0.500 段(195.20,112.00)-(196.23,110.97)
[!!] 线-焊盘 VO3_P#J83-3 vs J83.1(VO3_P) L2 净距 -0.500 段(195.20,112.00)-(196.90,113.70)
[!!] 线-焊盘 VO4_P#C831-1 vs C831.1(VO4_P) L2 净距 -0.500 段(70.75,18.80)-(70.75,20.10)
[!!] 线-焊盘 VO4_P#C831-2 vs C831.1(VO4_P) L2 净距 -0.500 段(70.75,18.80)-(70.75,17.50)
[!!] 线-焊盘 VO4_P#C831-3 vs C831.1(VO4_P) L2 净距 -0.500 段(70.75,18.80)-(72.06,20.11)
[!!] 线-焊盘 VO4_P#C832 vs C832.2(VO4_P) L2 净距 -0.500 段(55.84,22.50)-(55.84,23.85)
[!!] 线-焊盘 VO4_P#C833 vs C833.2(VO4_P) L2 净距 -0.500 段(55.34,26.00)-(55.34,27.35)
[!!] 线-焊盘 VO4_P#C834 vs C834.2(VO4_P) L2 净距 -0.500 段(60.34,26.00)-(60.34,27.35)
[!!] 线-焊盘 VO4_P#C835 vs C835.2(VO4_P) L2 净距 -0.500 段(65.34,26.00)-(66.54,26.00)
[!!] 线-焊盘 VO4_P#C836 vs C836.2(VO4_P) L2 净距 -0.500 段(58.82,22.50)-(59.42,22.50)
[!!] 线-焊盘 VO4_P#J84-1 vs J84.1(VO4_P) L2 净距 -0.500 段(60.55,22.50)-(59.52,23.53)
[!!] 线-焊盘 VO4_P#J84-2 vs J84.1(VO4_P) L2 净距 -0.500 段(60.55,22.50)-(59.52,21.47)
[!!] 线-焊盘 VO4_P#J84-3 vs J84.1(VO4_P) L2 净距 -0.500 段(60.55,22.50)-(58.85,24.20)
[!!] 线-焊盘 VO5_P#C841-1 vs C841.1(VO5_P) L2 净距 -0.500 段(142.25,18.80)-(142.25,20.10)
[!!] 线-焊盘 VO5_P#C841-2 vs C841.1(VO5_P) L2 净距 -0.500 段(142.25,18.80)-(142.25,17.50)
[!!] 线-焊盘 VO5_P#C841-3 vs C841.1(VO5_P) L2 净距 -0.500 段(142.25,18.80)-(143.56,20.11)
[!!] 线-焊盘 VO5_P#C842 vs C842.2(VO5_P) L2 净距 -0.500 段(127.34,22.50)-(127.34,23.85)
[!!] 线-焊盘 VO5_P#C843 vs C843.2(VO5_P) L2 净距 -0.500 段(126.84,26.00)-(126.84,27.35)
[!!] 线-焊盘 VO5_P#C844 vs C844.2(VO5_P) L2 净距 -0.500 段(131.84,26.00)-(131.84,27.35)
[!!] 线-焊盘 VO5_P#C845 vs C845.2(VO5_P) L2 净距 -0.500 段(136.84,26.00)-(138.04,26.00)
[!!] 线-焊盘 VO5_P#C846 vs C846.2(VO5_P) L2 净距 -0.500 段(130.32,22.50)-(130.92,22.50)
[!!] 线-焊盘 VO5_P#J85-1 vs J85.1(VO5_P) L2 净距 -0.500 段(132.05,22.50)-(131.02,23.53)
[!!] 线-焊盘 VO5_P#J85-2 vs J85.1(VO5_P) L2 净距 -0.500 段(132.05,22.50)-(131.02,21.47)
[!!] 线-焊盘 VO5_P#J85-3 vs J85.1(VO5_P) L2 净距 -0.500 段(132.05,22.50)-(130.35,24.20)
[!!] 线-新线 VO1_P#C806 vs VO1_P#J81-1 L2 净距 -0.201 段(53.93,112.00)-(53.33,112.00)
[!!] 线-新线 VO1_P#C806 vs VO1_P#J81-2 L2 净距 -0.201 段(53.93,112.00)-(53.33,112.00)
[!!] 线-新线 VO1_P#J81-1 vs VO1_P#C806 L2 净距 -0.201 段(52.20,112.00)-(53.23,113.03)
[!!] 线-新线 VO1_P#J81-2 vs VO1_P#C806 L2 净距 -0.201 段(52.20,112.00)-(53.23,110.97)
[!!] 线-新线 VO4_P#C836 vs VO4_P#J84-1 L2 净距 -0.201 段(58.82,22.50)-(59.42,22.50)
[!!] 线-新线 VO4_P#C836 vs VO4_P#J84-2 L2 净距 -0.201 段(58.82,22.50)-(59.42,22.50)
[!!] 线-新线 VO4_P#C836 vs VO4_P#J84-3 L2 净距 -0.201 段(58.82,22.50)-(59.42,22.50)
[!!] 线-新线 VO4_P#J84-1 vs VO4_P#C836 L2 净距 -0.201 段(60.55,22.50)-(59.52,23.53)
[!!] 线-新线 VO4_P#J84-2 vs VO4_P#C836 L2 净距 -0.201 段(60.55,22.50)-(59.52,21.47)
[!!] 线-新线 VO4_P#J84-3 vs VO4_P#C836 L2 净距 -0.201 段(60.55,22.50)-(58.85,24.20)
[!!] 线-新线 VO5_P#C846 vs VO5_P#J85-1 L2 净距 -0.201 段(130.32,22.50)-(130.92,22.50)
[!!] 线-新线 VO5_P#C846 vs VO5_P#J85-2 L2 净距 -0.201 段(130.32,22.50)-(130.92,22.50)
[!!] 线-新线 VO5_P#C846 vs VO5_P#J85-3 L2 净距 -0.201 段(130.32,22.50)-(130.92,22.50)
[!!] 线-新线 VO5_P#J85-1 vs VO5_P#C846 L2 净距 -0.201 段(132.05,22.50)-(131.02,23.53)
[!!] 线-新线 VO5_P#J85-2 vs VO5_P#C846 L2 净距 -0.201 段(132.05,22.50)-(131.02,21.47)
[!!] 线-新线 VO5_P#J85-3 vs VO5_P#C846 L2 净距 -0.201 段(132.05,22.50)-(130.35,24.20)
[!!] 线-新线 VO1_P#C806 vs VO1_P#J81-3 L2 净距 -0.201 段(53.93,112.00)-(53.33,112.00)
[!!] 线-新线 VO1_P#J81-3 vs VO1_P#C806 L2 净距 -0.201 段(52.20,112.00)-(53.90,113.70)
[!!] 线-新线 VO2_P#C816 vs VO2_P#J82-1 L2 净距 -0.201 段(125.43,112.00)-(124.83,112.00)
[!!] 线-新线 VO2_P#C816 vs VO2_P#J82-2 L2 净距 -0.201 段(125.43,112.00)-(124.83,112.00)
[!!] 线-新线 VO2_P#C816 vs VO2_P#J82-3 L2 净距 -0.201 段(125.43,112.00)-(124.83,112.00)
[!!] 线-新线 VO2_P#J82-1 vs VO2_P#C816 L2 净距 -0.201 段(123.70,112.00)-(124.73,113.03)
[!!] 线-新线 VO2_P#J82-2 vs VO2_P#C816 L2 净距 -0.201 段(123.70,112.00)-(124.73,110.97)
[!!] 线-新线 VO2_P#J82-3 vs VO2_P#C816 L2 净距 -0.201 段(123.70,112.00)-(125.40,113.70)
[!!] 线-新线 VO3_P#C826 vs VO3_P#J83-1 L2 净距 -0.201 段(196.93,112.00)-(196.33,112.00)
[!!] 线-新线 VO3_P#C826 vs VO3_P#J83-2 L2 净距 -0.201 段(196.93,112.00)-(196.33,112.00)
[!!] 线-新线 VO3_P#C826 vs VO3_P#J83-3 L2 净距 -0.201 段(196.93,112.00)-(196.33,112.00)
[!!] 线-新线 VO3_P#J83-1 vs VO3_P#C826 L2 净距 -0.201 段(195.20,112.00)-(196.23,113.03)
[!!] 线-新线 VO3_P#J83-2 vs VO3_P#C826 L2 净距 -0.201 段(195.20,112.00)-(196.23,110.97)
[!!] 线-新线 VO3_P#J83-3 vs VO3_P#C826 L2 净距 -0.201 段(195.20,112.00)-(196.90,113.70)
[!!] 过孔-新线 VO1_P#C806 vs VO1_P#J81-1 L2 净距 -0.006 段(53.33,112.00)-(53.33,112.00)
[!!] 过孔-新线 VO1_P#C806 vs VO1_P#J81-2 L2 净距 -0.006 段(53.33,112.00)-(53.33,112.00)
[!!] 过孔-新线 VO4_P#C836 vs VO4_P#J84-1 L2 净距 -0.006 段(59.42,22.50)-(59.42,22.50)
[!!] 过孔-新线 VO4_P#C836 vs VO4_P#J84-2 L2 净距 -0.006 段(59.42,22.50)-(59.42,22.50)
[!!] 过孔-新线 VO4_P#C836 vs VO4_P#J84-3 L2 净距 -0.006 段(59.42,22.50)-(59.42,22.50)
[!!] 过孔-新线 VO5_P#C846 vs VO5_P#J85-1 L2 净距 -0.006 段(130.92,22.50)-(130.92,22.50)
[!!] 过孔-新线 VO5_P#C846 vs VO5_P#J85-2 L2 净距 -0.006 段(130.92,22.50)-(130.92,22.50)
[!!] 过孔-新线 VO5_P#C846 vs VO5_P#J85-3 L2 净距 -0.006 段(130.92,22.50)-(130.92,22.50)
[!!] 过孔-新线 VO1_P#C806 vs VO1_P#J81-3 L2 净距 -0.006 段(53.33,112.00)-(53.33,112.00)
[!!] 过孔-新线 VO2_P#C816 vs VO2_P#J82-1 L2 净距 -0.006 段(124.83,112.00)-(124.83,112.00)
[!!] 过孔-新线 VO2_P#C816 vs VO2_P#J82-2 L2 净距 -0.006 段(124.83,112.00)-(124.83,112.00)
[!!] 过孔-新线 VO2_P#C816 vs VO2_P#J82-3 L2 净距 -0.006 段(124.83,112.00)-(124.83,112.00)
[!!] 过孔-新线 VO3_P#C826 vs VO3_P#J83-1 L2 净距 -0.006 段(196.33,112.00)-(196.33,112.00)
[!!] 过孔-新线 VO3_P#C826 vs VO3_P#J83-2 L2 净距 -0.006 段(196.33,112.00)-(196.33,112.00)
[!!] 过孔-新线 VO3_P#C826 vs VO3_P#J83-3 L2 净距 -0.006 段(196.33,112.00)-(196.33,112.00)
[!!] 线-焊盘 VO5_P#C846 vs J85.1(VO5_P) L2 净距 +0.080 段(130.32,22.50)-(130.92,22.50)
[!!] 线-焊盘 VO4_P#C836 vs J84.1(VO4_P) L2 净距 +0.080 段(58.82,22.50)-(59.42,22.50)
[!!] 线-焊盘 VO1_P#C806 vs J81.1(VO1_P) L2 净距 +0.080 段(53.93,112.00)-(53.33,112.00)
[!!] 线-焊盘 VO2_P#C816 vs J82.1(VO2_P) L2 净距 +0.080 段(125.43,112.00)-(124.83,112.00)
[!!] 线-焊盘 VO3_P#C826 vs J83.1(VO3_P) L2 净距 +0.080 段(196.93,112.00)-(196.33,112.00)
[!!] 过孔-新线 VO1_P#C801-1 vs VO1_P#C801-3 L2 净距 +0.114 段(42.00,117.00)-(42.00,117.00)
[!!] 过孔-新线 VO2_P#C811-1 vs VO2_P#C811-3 L2 净距 +0.114 段(113.50,117.00)-(113.50,117.00)
[!!] 过孔-新线 VO3_P#C821-1 vs VO3_P#C821-3 L2 净距 +0.114 段(185.00,117.00)-(185.00,117.00)
[!!] 过孔-新线 VO4_P#C831-1 vs VO4_P#C831-3 L2 净距 +0.114 段(70.75,20.10)-(70.75,20.10)
[!!] 过孔-新线 VO5_P#C841-1 vs VO5_P#C841-3 L2 净距 +0.114 段(142.25,20.10)-(142.25,20.10)
[!!] 过孔-新线 VO5_P#J85-3 vs VO5_P#J85-1 L2 净距 +0.145 段(130.35,24.20)-(130.35,24.20)
[!!] 过孔-新线 VO4_P#J84-3 vs VO4_P#J84-1 L2 净距 +0.145 段(58.85,24.20)-(58.85,24.20)
[!!] 过孔-新线 VO1_P#J81-3 vs VO1_P#J81-1 L2 净距 +0.145 段(53.90,113.70)-(53.90,113.70)
[!!] 过孔-新线 VO2_P#J82-3 vs VO2_P#J82-1 L2 净距 +0.145 段(125.40,113.70)-(125.40,113.70)
[!!] 过孔-新线 VO3_P#J83-3 vs VO3_P#J83-1 L2 净距 +0.145 段(196.90,113.70)-(196.90,113.70)
[!!] 过孔-焊盘 VO2_P#C813 vs C813.2(VO2_P) L2 净距 +0.152 段(130.11,108.50)-(130.11,108.50)
[!!] 过孔-焊盘 VO3_P#C824 vs C824.2(VO3_P) L2 净距 +0.152 段(196.61,108.50)-(196.61,108.50)
[!!] 过孔-焊盘 VO1_P#C802 vs C802.2(VO1_P) L2 净距 +0.152 段(58.11,112.00)-(58.11,112.00)
[!!] 过孔-焊盘 VO3_P#C823 vs C823.2(VO3_P) L2 净距 +0.152 段(201.61,108.50)-(201.61,108.50)
[!!] 过孔-焊盘 VO4_P#C835 vs C835.2(VO4_P) L2 净距 +0.152 段(66.54,26.00)-(66.54,26.00)
[!!] 过孔-焊盘 VO2_P#C812 vs C812.2(VO2_P) L2 净距 +0.152 段(129.61,112.00)-(129.61,112.00)
[!!] 过孔-焊盘 VO1_P#C804 vs C804.2(VO1_P) L2 净距 +0.152 段(53.61,108.50)-(53.61,108.50)
[!!] 过孔-焊盘 VO1_P#C803 vs C803.2(VO1_P) L2 净距 +0.152 段(58.61,108.50)-(58.61,108.50)
[!!] 过孔-焊盘 VO5_P#C845 vs C845.2(VO5_P) L2 净距 +0.152 段(138.04,26.00)-(138.04,26.00)
[!!] 过孔-焊盘 VO3_P#C822 vs C822.2(VO3_P) L2 净距 +0.152 段(201.11,112.00)-(201.11,112.00)
[!!] 过孔-焊盘 VO2_P#C814 vs C814.2(VO2_P) L2 净距 +0.152 段(125.11,108.50)-(125.11,108.50)
[!!] 过孔-焊盘 VO2_P#C815 vs C815.2(VO2_P) L2 净距 +0.152 段(117.71,108.50)-(117.71,108.50)
[!!] 过孔-焊盘 VO1_P#C805 vs C805.2(VO1_P) L2 净距 +0.152 段(46.21,108.50)-(46.21,108.50)
[!!] 过孔-焊盘 VO3_P#C825 vs C825.2(VO3_P) L2 净距 +0.152 段(189.21,108.50)-(189.21,108.50)
[!!] 过孔-焊盘 VO1_P#C801-1 vs C801.1(VO1_P) L2 净距 +0.169 段(42.00,117.00)-(42.00,117.00)
[!!] 过孔-焊盘 VO2_P#C811-1 vs C811.1(VO2_P) L2 净距 +0.169 段(113.50,117.00)-(113.50,117.00)
[!!] 过孔-焊盘 VO3_P#C821-1 vs C821.1(VO3_P) L2 净距 +0.169 段(185.00,117.00)-(185.00,117.00)
[!!] 过孔-焊盘 VO4_P#C831-2 vs C831.1(VO4_P) L2 净距 +0.169 段(70.75,17.50)-(70.75,17.50)
[!!] 过孔-焊盘 VO5_P#C841-2 vs C841.1(VO5_P) L2 净距 +0.169 段(142.25,17.50)-(142.25,17.50)
[!!] 过孔-焊盘 VO4_P#C831-1 vs C831.1(VO4_P) L2 净距 +0.170 段(70.75,20.10)-(70.75,20.10)
[!!] 过孔-焊盘 VO5_P#C841-1 vs C841.1(VO5_P) L2 净距 +0.170 段(142.25,20.10)-(142.25,20.10)
[!!] 过孔-焊盘 VO1_P#C801-2 vs C801.1(VO1_P) L2 净距 +0.170 段(42.00,114.40)-(42.00,114.40)
[!!] 过孔-焊盘 VO2_P#C811-2 vs C811.1(VO2_P) L2 净距 +0.170 段(113.50,114.40)-(113.50,114.40)
[!!] 过孔-焊盘 VO3_P#C821-2 vs C821.1(VO3_P) L2 净距 +0.170 段(185.00,114.40)-(185.00,114.40)
[!!] 过孔-焊盘 VO2_P#J82-1 vs J82.1(VO2_P) L2 净距 +0.170 段(124.73,113.03)-(124.73,113.03)
[!!] 过孔-焊盘 VO2_P#J82-2 vs J82.1(VO2_P) L2 净距 +0.170 段(124.73,110.97)-(124.73,110.97)
[!!] 过孔-焊盘 VO3_P#J83-1 vs J83.1(VO3_P) L2 净距 +0.170 段(196.23,113.03)-(196.23,113.03)
[!!] 过孔-焊盘 VO3_P#J83-2 vs J83.1(VO3_P) L2 净距 +0.170 段(196.23,110.97)-(196.23,110.97)
[!!] 过孔-焊盘 VO5_P#J85-1 vs J85.1(VO5_P) L2 净距 +0.170 段(131.02,23.53)-(131.02,23.53)
[!!] 过孔-焊盘 VO5_P#J85-2 vs J85.1(VO5_P) L2 净距 +0.170 段(131.02,21.47)-(131.02,21.47)
[!!] 过孔-焊盘 VO4_P#J84-1 vs J84.1(VO4_P) L2 净距 +0.170 段(59.52,23.53)-(59.52,23.53)
[!!] 过孔-焊盘 VO4_P#J84-2 vs J84.1(VO4_P) L2 净距 +0.170 段(59.52,21.47)-(59.52,21.47)
[!!] 过孔-焊盘 VO1_P#J81-1 vs J81.1(VO1_P) L2 净距 +0.170 段(53.23,113.03)-(53.23,113.03)
[!!] 过孔-焊盘 VO1_P#J81-2 vs J81.1(VO1_P) L2 净距 +0.170 段(53.23,110.97)-(53.23,110.97)
[!!] 过孔-焊盘 VO4_P#C831-3 vs C831.1(VO4_P) L2 净距 +0.178 段(72.06,20.11)-(72.06,20.11)
[!!] 过孔-焊盘 VO5_P#C841-3 vs C841.1(VO5_P) L2 净距 +0.178 段(143.56,20.11)-(143.56,20.11)
[!!] 过孔-焊盘 VO1_P#C801-3 vs C801.1(VO1_P) L2 净距 +0.178 段(43.31,117.01)-(43.31,117.01)
[!!] 过孔-焊盘 VO2_P#C811-3 vs C811.1(VO2_P) L2 净距 +0.178 段(114.81,117.01)-(114.81,117.01)
[!!] 过孔-焊盘 VO3_P#C821-3 vs C821.1(VO3_P) L2 净距 +0.178 段(186.31,117.01)-(186.31,117.01)
[!!] 过孔-焊盘 VO4_P#C833 vs C833.2(VO4_P) L2 净距 +0.181 段(55.34,27.35)-(55.34,27.35)
[!!] 过孔-焊盘 VO4_P#C834 vs C834.2(VO4_P) L2 净距 +0.181 段(60.34,27.35)-(60.34,27.35)
[!!] 过孔-焊盘 VO5_P#C843 vs C843.2(VO5_P) L2 净距 +0.181 段(126.84,27.35)-(126.84,27.35)
[!!] 过孔-焊盘 VO5_P#C844 vs C844.2(VO5_P) L2 净距 +0.181 段(131.84,27.35)-(131.84,27.35)
[!!] 过孔-焊盘 VO4_P#C832 vs C832.2(VO4_P) L2 净距 +0.181 段(55.84,23.85)-(55.84,23.85)
[!!] 过孔-焊盘 VO5_P#C842 vs C842.2(VO5_P) L2 净距 +0.181 段(127.34,23.85)-(127.34,23.85)
[!!] 过孔-焊盘 VO3_P#C826 vs C826.2(VO3_P) L2 净距 +0.195 段(196.33,112.00)-(196.33,112.00)
[!!] 过孔-焊盘 VO2_P#C816 vs C816.2(VO2_P) L2 净距 +0.195 段(124.83,112.00)-(124.83,112.00)
[!!] 过孔-焊盘 VO1_P#C806 vs C806.2(VO1_P) L2 净距 +0.195 段(53.33,112.00)-(53.33,112.00)
[!!] 过孔-焊盘 VO4_P#C836 vs C836.2(VO4_P) L2 净距 +0.195 段(59.42,22.50)-(59.42,22.50)
[!!] 过孔-焊盘 VO5_P#C846 vs C846.2(VO5_P) L2 净距 +0.195 段(130.92,22.50)-(130.92,22.50)
!! 有未解决的问题,不下发。
C801 VO1_P 过孔 ( 42.000, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C801#2 VO1_P 过孔 ( 42.000, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C801#3 VO1_P 过孔 ( 43.308, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C802 VO1_P 过孔 ( 58.107, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C803 VO1_P 过孔 ( 58.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C804 VO1_P 过孔 ( 53.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C805 VO1_P 过孔 ( 46.207, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C806 VO1_P 过孔 ( 53.330, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J81 VO1_P 过孔 ( 53.225, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J81#2 VO1_P 过孔 ( 53.225, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J81#3 VO1_P 过孔 ( 53.897, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C811 VO2_P 过孔 ( 113.500, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C811#2 VO2_P 过孔 ( 113.500, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C811#3 VO2_P 过孔 ( 114.808, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C812 VO2_P 过孔 ( 129.607, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C813 VO2_P 过孔 ( 130.107, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C814 VO2_P 过孔 ( 125.107, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C815 VO2_P 过孔 ( 117.707, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C816 VO2_P 过孔 ( 124.830, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J82 VO2_P 过孔 ( 124.725, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J82#2 VO2_P 过孔 ( 124.725, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J82#3 VO2_P 过孔 ( 125.397, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C821 VO3_P 过孔 ( 185.000, 117.000) 离焊盘中心 1.30 线宽 1.00 1 段
C821#2 VO3_P 过孔 ( 185.000, 114.400) 离焊盘中心 1.30 线宽 1.00 1 段
C821#3 VO3_P 过孔 ( 186.308, 117.008) 离焊盘中心 1.85 线宽 1.00 1 段
C822 VO3_P 过孔 ( 201.107, 112.000) 离焊盘中心 1.20 线宽 1.00 1 段
C823 VO3_P 过孔 ( 201.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C824 VO3_P 过孔 ( 196.607, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C825 VO3_P 过孔 ( 189.208, 108.500) 离焊盘中心 1.20 线宽 1.00 1 段
C826 VO3_P 过孔 ( 196.330, 112.000) 离焊盘中心 0.75 线宽 1.00 1 段
J83 VO3_P 过孔 ( 196.225, 113.025) 离焊盘中心 1.45 线宽 1.00 1 段
J83#2 VO3_P 过孔 ( 196.225, 110.975) 离焊盘中心 1.45 线宽 1.00 1 段
J83#3 VO3_P 过孔 ( 196.897, 113.697) 离焊盘中心 2.40 线宽 1.00 1 段
C831 VO4_P 过孔 ( 70.750, 20.100) 离焊盘中心 1.30 线宽 1.00 1 段
C831#2 VO4_P 过孔 ( 70.750, 17.500) 离焊盘中心 1.30 线宽 1.00 1 段
C831#3 VO4_P 过孔 ( 72.058, 20.108) 离焊盘中心 1.85 线宽 1.00 1 段
C832 VO4_P 过孔 ( 55.843, 23.850) 离焊盘中心 1.35 线宽 1.00 1 段
C833 VO4_P 过孔 ( 55.343, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C834 VO4_P 过孔 ( 60.343, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C835 VO4_P 过孔 ( 66.543, 26.000) 离焊盘中心 1.20 线宽 1.00 1 段
C836 VO4_P 过孔 ( 59.420, 22.500) 离焊盘中心 0.75 线宽 1.00 1 段
J84 VO4_P 过孔 ( 59.525, 23.525) 离焊盘中心 1.45 线宽 1.00 1 段
J84#2 VO4_P 过孔 ( 59.525, 21.475) 离焊盘中心 1.45 线宽 1.00 1 段
J84#3 VO4_P 过孔 ( 58.853, 24.197) 离焊盘中心 2.40 线宽 1.00 1 段
C841 VO5_P 过孔 ( 142.250, 20.100) 离焊盘中心 1.30 线宽 1.00 1 段
C841#2 VO5_P 过孔 ( 142.250, 17.500) 离焊盘中心 1.30 线宽 1.00 1 段
C841#3 VO5_P 过孔 ( 143.558, 20.108) 离焊盘中心 1.85 线宽 1.00 1 段
C842 VO5_P 过孔 ( 127.343, 23.850) 离焊盘中心 1.35 线宽 1.00 1 段
C843 VO5_P 过孔 ( 126.843, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C844 VO5_P 过孔 ( 131.843, 27.350) 离焊盘中心 1.35 线宽 1.00 1 段
C845 VO5_P 过孔 ( 138.042, 26.000) 离焊盘中心 1.20 线宽 1.00 1 段
C846 VO5_P 过孔 ( 130.920, 22.500) 离焊盘中心 0.75 线宽 1.00 1 段
J85 VO5_P 过孔 ( 131.025, 23.525) 离焊盘中心 1.45 线宽 1.00 1 段
J85#2 VO5_P 过孔 ( 131.025, 21.475) 离焊盘中心 1.45 线宽 1.00 1 段
J85#3 VO5_P 过孔 ( 130.353, 24.197) 离焊盘中心 2.40 线宽 1.00 1 段
55/55 个过孔搞定(35 个焊盘):55 段导线 / 55 个过孔
直角拐点 0(每条只有一段直线,应当是 0)
净距校核(一般 0.20 mm):
全部通过 ✔
下发完成:先删 0 线 / 0 孔,再画 55 线 / 55 孔
⚠️ 下一步必须重铺:/c/Python314/python .claude/pcb2_pour.py --push
45° 化:直角拐点 5 -> 0
27 个网络 / 182 段导线 / 26 个过孔
[!!] 端点没落在本网焊盘上:
UP_DP#2 (212.392, 62.250)
UP_DP#2 (212.392, 61.250)
UP_DM#2 (212.392, 61.750)
UP_DM#2 (212.392, 62.750)
净距校核(一般 0.20 / 对内 0.15 mm):
[!!] 线-过孔 USB5_DP vs GND L2 净距 -0.369 段(110.30,75.15)-(110.30,61.60)
[!!] 线-过孔 USB1_DPJ vs GND L1 净距 -0.364 段(22.00,90.00)-(24.80,89.60)
[!!] 线-过孔 USB3_DPJ vs GND L1 净距 -0.364 段(165.00,90.00)-(167.80,89.60)
[!!] 线-过孔 USB2_DPJ vs GND L1 净距 -0.364 段(93.50,90.00)-(96.30,89.60)
[!!] 线-新线 UP_DP vs UP_DP#2 L2 净距 -0.280 段(206.13,61.25)-(212.39,61.25)
[!!] 线-新线 UP_DM vs UP_DM#2 L2 净距 -0.280 段(205.95,61.75)-(212.39,61.75)
[!!] 线-新线 UP_DP#2 vs UP_DP L2 净距 -0.280 段(213.20,61.25)-(212.39,61.25)
[!!] 线-新线 UP_DM#2 vs UP_DM L2 净距 -0.280 段(212.39,61.75)-(213.20,61.75)
[!!] 线-过孔 USB2_DMJ vs GND L2 净距 -0.266 段(94.85,90.15)-(93.75,89.05)
[!!] 线-过孔 USB3_DMJ vs GND L2 净距 -0.266 段(166.35,90.15)-(165.25,89.05)
[!!] 线-过孔 USB1_DMJ vs GND L2 净距 -0.266 段(23.35,90.15)-(22.25,89.05)
[!!] 线-旧线 USB5_DP vs GND L2 净距 -0.214 段(110.30,75.15)-(110.30,61.60)
[!!] 线-焊盘 UP_DP#2 vs J23.A6(UP_DP) L2 净距 -0.140 段(212.39,62.25)-(213.85,62.25)
[!!] 线-焊盘 UP_DP#2 vs J23.B6(UP_DP) L2 净距 -0.140 段(213.20,61.25)-(212.39,61.25)
[!!] 线-焊盘 UP_DM#2 vs J23.A7(UP_DM) L2 净距 -0.140 段(212.39,61.75)-(213.20,61.75)
[!!] 线-焊盘 UP_DM#2 vs J23.B7(UP_DM) L2 净距 -0.140 段(213.20,62.75)-(212.39,62.75)
[!!] 线-过孔 UP_DP vs GND L2 净距 -0.131 段(98.75,63.55)-(98.75,60.47)
[!!] 线-旧线 USB2_DMJ vs GND L2 净距 -0.111 段(94.85,90.15)-(93.75,89.05)
[!!] 线-旧线 USB3_DMJ vs GND L2 净距 -0.111 段(166.35,90.15)-(165.25,89.05)
[!!] 线-旧线 USB1_DMJ vs GND L2 净距 -0.111 段(23.35,90.15)-(22.25,89.05)
[!!] 线-过孔 USB4_DM vs GND L1 净距 -0.090 段(91.98,67.73)-(91.98,52.00)
[!!] 线-过孔 USB5_DM vs GND L2 净距 -0.089 段(93.47,69.60)-(93.47,75.63)
[!!] 线-过孔 USB2_DM vs GND L2 净距 +0.011 段(89.27,65.60)-(89.27,80.00)
[!!] 线-旧线 UP_DP vs GND L2 净距 +0.024 段(98.75,63.55)-(98.75,60.47)
[!!] 线-旧线 USB5_DM vs GND L2 净距 +0.066 段(93.47,69.60)-(93.47,75.63)
[!!] 过孔-新线 UP_DP#2 vs UP_DM#2 L2 净距 +0.164 段(213.85,62.25)-(213.85,62.25)
[!!] 线-旧线 USB2_DM vs GND L2 净距 +0.166 段(89.27,65.60)-(89.27,80.00)
(同类重复 23 条已折叠)
长度 / 对内偏斜:
UP_DM 116.36 UP_DP 117.34 偏斜 0.97 mm ✔
USB1_DM 95.23 USB1_DP 94.84 偏斜 0.39 mm ✔
USB1_DMJ 2.75 USB1_DPJ 5.60 偏斜 2.85 mm ✔
USB2_DM 29.19 USB2_DP 28.80 偏斜 0.39 mm ✔
USB2_DMJ 2.75 USB2_DPJ 5.60 偏斜 2.85 mm ✔
USB3_DM 99.46 USB3_DP 99.06 偏斜 0.39 mm ✔
USB3_DMJ 2.75 USB3_DPJ 5.60 偏斜 2.85 mm ✔
USB4_DM 23.40 USB4_DP 25.46 偏斜 2.06 mm ✔
USB4_DMJ 2.75 USB4_DPJ 5.60 偏斜 2.85 mm ✔
USB5_DM 104.04 USB5_DP 99.29 偏斜 4.75 mm ✔
USB5_DMJ 2.75 USB5_DPJ 5.60 偏斜 2.85 mm ✔
!! 有未解决的问题,不下发。
=== dp dump
障碍表已存:焊盘 1004 / 过孔 0 / 铜层导线 0
=== dp push
净距校核(一般 0.20 / 对内 0.15 mm):
全部通过 ✔
长度 / 对内偏斜:
UP_DM 116.36 UP_DP 117.34 偏斜 0.97 mm ✔
USB1_DM 95.23 USB1_DP 94.84 偏斜 0.39 mm ✔
USB1_DMJ 2.75 USB1_DPJ 5.60 偏斜 2.85 mm ✔
USB2_DM 29.19 USB2_DP 28.80 偏斜 0.39 mm ✔
USB2_DMJ 2.75 USB2_DPJ 5.60 偏斜 2.85 mm ✔
USB3_DM 99.46 USB3_DP 99.06 偏斜 0.39 mm ✔
USB3_DMJ 2.75 USB3_DPJ 5.60 偏斜 2.85 mm ✔
USB4_DM 23.40 USB4_DP 25.46 偏斜 2.06 mm ✔
USB4_DMJ 2.75 USB4_DPJ 5.60 偏斜 2.85 mm ✔
USB5_DM 104.04 USB5_DP 99.29 偏斜 4.75 mm ✔
USB5_DMJ 2.75 USB5_DPJ 5.60 偏斜 2.85 mm ✔
下发完成:先删 0 线 / 0 孔,再画 182 线 / 26 孔
=== dp dump
障碍表已存:焊盘 1004 / 过孔 26 / 铜层导线 178
=== vo_vias push
净距校核(一般 0.20 mm):
全部通过 ✔
下发完成:先删 0 线 / 0 孔,再画 55 线 / 55 孔
⚠️ 下一步必须重铺:/c/Python314/python .claude/pcb2_pour.py --push
=== dump_pads
-> D:\DCDC\.claude\pcb2-copper.json
=== fanout push
... 还有 13 个
第二遍(72 角 / 4 mm):5 个里救回 5 个
放下 415 个过孔,失败 0 个
引线长度 中位 0.00 / 最长 1.92 mm
其中 2 条用了窄线出线(细间距 QFN):R710 [email protected] U32 [email protected]
下发:过孔 415 / 短线 161,板上过孔总数 496
=== dp dump
障碍表已存:焊盘 1004 / 过孔 496 / 铜层导线 390
=== dp check
净距校核(一般 0.20 / 对内 0.15 mm):
[!!] 线-过孔 UP_DP vs GND L2 净距 +0.200 段(98.75,63.55)-(98.75,60.47)
长度 / 对内偏斜:
UP_DM 116.36 UP_DP 117.34 偏斜 0.97 mm ✔
USB1_DM 95.23 USB1_DP 94.84 偏斜 0.39 mm ✔
USB1_DMJ 2.75 USB1_DPJ 5.60 偏斜 2.85 mm ✔
USB2_DM 29.19 USB2_DP 28.80 偏斜 0.39 mm ✔
USB2_DMJ 2.75 USB2_DPJ 5.60 偏斜 2.85 mm ✔
USB3_DM 99.46 USB3_DP 99.06 偏斜 0.39 mm ✔
USB3_DMJ 2.75 USB3_DPJ 5.60 偏斜 2.85 mm ✔
USB4_DM 23.40 USB4_DP 25.46 偏斜 2.06 mm ✔
USB4_DMJ 2.75 USB4_DPJ 5.60 偏斜 2.85 mm ✔
USB5_DM 104.04 USB5_DP 99.29 偏斜 4.75 mm ✔
USB5_DMJ 2.75 USB5_DPJ 5.60 偏斜 2.85 mm ✔
+149
查看文件
@@ -0,0 +1,149 @@
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 1004 / 过孔 492 / 铜层导线 375(摘掉本脚本自己负责的旧铜 19 件)
+3V3_HUB 保留 pcb2_dp_long 画的 3 条前置段(16 段导线 / 4 个孔)
预留出线段 357 条
GND 110 段路径 / 135 导线 / 50 过孔 0.0s
THERM_1 3 段路径 / 8 导线 / 2 过孔 0.2s
THERM_2 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_3 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_4 3 段路径 / 8 导线 / 2 过孔 0.6s
THERM_5 3 段路径 / 8 导线 / 2 过孔 0.6s
CC1_1 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_2 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_3 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_4 3 段路径 / 5 导线 / 0 过孔 0.1s
CC1_5 3 段路径 / 5 导线 / 0 过孔 0.1s
VBUS_UP 7 段路径 / 30 导线 / 7 过孔 2.0s
RBIAS 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18PLL 3 段路径 / 5 导线 / 0 过孔 9.0s
XTAL1 4 段路径 / 8 导线 / 2 过孔 10.6s
XTAL2 4 段路径 / 10 导线 / 2 过孔 13.2s
CFGSEL0 3 段路径 / 10 导线 / 2 过孔 0.4s
CFGSEL1 3 段路径 / 4 导线 / 0 过孔 1.7s
NONREM0 3 段路径 / 16 导线 / 4 过孔 0.1s
NONREM1 3 段路径 / 3 导线 / 0 过孔 0.1s
PRTDIS6 3 段路径 / 6 导线 / 2 过孔 0.4s
PRTDIS7 3 段路径 / 6 导线 / 0 过孔 0.1s
[!!] HUB_RST 布不通:(108.47,66.45) -> (189.48,71.67)
HUB_RST 4 段路径 / 5 导线 / 0 过孔 60.6s ← 有端点没连上
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.70,106.00)
+3V3_HUB 81 段路径 / 164 导线 / 41 过孔 100.9s ← 有端点没连上
VBUS_DET 5 段路径 / 9 导线 / 0 过孔 1.4s
KEY_SER 2 段路径 / 5 导线 / 2 过孔 1.1s
KEY_SRCLK 6 段路径 / 15 导线 / 4 过孔 1.9s
KEY_RCLK 6 段路径 / 16 导线 / 6 过孔 3.0s
KEY_OE# 8 段路径 / 15 导线 / 7 过孔 4.3s
SR_CAS 3 段路径 / 6 导线 / 2 过孔 2.1s
SR_CAS2 3 段路径 / 10 导线 / 4 过孔 0.6s
K1_PWR 3 段路径 / 10 导线 / 4 过孔 1.5s
K1_VUP 3 段路径 / 10 导线 / 4 过孔 1.5s
K1_VDN 3 段路径 / 13 导线 / 4 过孔 1.5s
K2_PWR 3 段路径 / 6 导线 / 2 过孔 1.6s
K2_VUP 3 段路径 / 9 导线 / 2 过孔 1.7s
K2_VDN 3 段路径 / 10 导线 / 6 过孔 1.8s
K3_PWR 3 段路径 / 7 导线 / 2 过孔 0.7s
K3_VUP 3 段路径 / 8 导线 / 4 过孔 0.7s
K3_VDN 3 段路径 / 12 导线 / 6 过孔 0.6s
K4_PWR 3 段路径 / 10 导线 / 4 过孔 2.0s
K4_VUP 3 段路径 / 14 导线 / 4 过孔 1.9s
[!!] K4_VDN 布不通:(56.25,16.02) -> (129.41,62.48)
K4_VDN 2 段路径 / 2 导线 / 0 过孔 46.8s ← 有端点没连上
K5_PWR 3 段路径 / 21 导线 / 6 过孔 5.6s
[!!] K5_VUP 布不通:(124.25,16.02) -> (125.60,62.48)
K5_VUP 2 段路径 / 2 导线 / 0 过孔 92.3s ← 有端点没连上
[!!] K5_VDN 布不通:(127.75,16.02) -> (126.87,62.48)
K5_VDN 2 段路径 / 2 导线 / 0 过孔 91.6s ← 有端点没连上
EDL_EN1 5 段路径 / 10 导线 / 4 过孔 3.2s
EDL_EN2 5 段路径 / 12 导线 / 4 过孔 0.6s
EDL_EN3 5 段路径 / 13 导线 / 4 过孔 1.3s
EDL_EN4 5 段路径 / 14 导线 / 6 过孔 1.0s
EDL_EN5 5 段路径 / 24 导线 / 10 过孔 1.0s
VBUS_EN1 4 段路径 / 7 导线 / 3 过孔 0.9s
VBUS_EN2 4 段路径 / 11 导线 / 5 过孔 5.8s
VBUS_EN3 4 段路径 / 10 导线 / 3 过孔 0.5s
VBUS_EN4 4 段路径 / 9 导线 / 3 过孔 0.8s
VBUS_EN5 4 段路径 / 13 导线 / 7 过孔 0.7s
UP_VBUS_DET 4 段路径 / 6 导线 / 1 过孔 0.2s
[!!] +5V 布不通:(182.13,66.23) -> (65.81,66.23)
+5V 26 段路径 / 66 导线 / 23 过孔 53.6s ← 有端点没连上
$16N222 3 段路径 / 10 导线 / 2 过孔 0.5s
$16N224 3 段路径 / 6 导线 / 2 过孔 0.5s
$20N304 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N314 3 段路径 / 8 导线 / 2 过孔 0.1s
$20N324 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N334 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N344 3 段路径 / 5 导线 / 2 过孔 0.1s
$21N139 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N140 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N143 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N148 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N153 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N157 2 段路径 / 4 导线 / 2 过孔 1.0s
$21N158 2 段路径 / 4 导线 / 2 过孔 1.0s
$22N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N139 2 段路径 / 4 导线 / 2 过孔 1.0s
$22N140 2 段路径 / 4 导线 / 2 过孔 0.8s
$23N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N139 2 段路径 / 5 导线 / 2 过孔 1.0s
$23N140 2 段路径 / 4 导线 / 2 过孔 0.9s
$24N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$24N140 2 段路径 / 4 导线 / 2 过孔 1.1s
$25N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$25N140 2 段路径 / 4 导线 / 2 过孔 1.0s
VBUS1 11 段路径 / 17 导线 / 6 过孔 9.4s
VBUS2 11 段路径 / 23 导线 / 6 过孔 2.8s
VBUS3 10 段路径 / 26 导线 / 6 过孔 11.0s
VBUS4 11 段路径 / 20 导线 / 6 过孔 0.9s
VBUS5 11 段路径 / 16 导线 / 6 过孔 0.9s
POGO1_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 8 导线 / 2 过孔 0.4s
123 个网络 / 611 条路径 / 1280 段导线 / 368 个过孔 (580 秒)
⚠️ 6 个网络没布通:HUB_RST +3V3_HUB K4_VDN K5_VUP K5_VDN +5V
45° 化:直角拐点 101 -> 4(28 秒)
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
[!!] 切不动: K5_PWR3 (121.80, 71.38) 转向 46°
[!!] 切不动: K5_PWR3 (121.30, 70.90) 转向 46°
净距校核(0.20 mm):
全部通过 ✔
路径已存 _pcb2_sig_routes.json
!! 还有 6 个网络没布通,要下发请加 --force。(没布通的网络只会落下几截悬空的出线段,下一轮 --push 会把它们连同别的一起删掉重画。)
EXIT 1

之后

宽度:  |  高度:  |  大小: 9.1 KiB

+144
查看文件
@@ -0,0 +1,144 @@
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 1004 / 过孔 492 / 铜层导线 375(摘掉本脚本自己负责的旧铜 19 件)
+3V3_HUB 保留 pcb2_dp_long 画的 3 条前置段(16 段导线 / 4 个孔)
预留出线段 357 条
GND 110 段路径 / 135 导线 / 50 过孔 0.0s
THERM_1 3 段路径 / 8 导线 / 2 过孔 0.2s
THERM_2 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_3 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_4 3 段路径 / 8 导线 / 2 过孔 0.5s
THERM_5 3 段路径 / 8 导线 / 2 过孔 0.5s
CC1_1 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_2 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_3 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_4 3 段路径 / 5 导线 / 0 过孔 0.1s
CC1_5 3 段路径 / 5 导线 / 0 过孔 0.1s
VBUS_UP 7 段路径 / 30 导线 / 7 过孔 1.9s
RBIAS 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18PLL 3 段路径 / 5 导线 / 0 过孔 8.4s
XTAL1 4 段路径 / 8 导线 / 2 过孔 11.0s
XTAL2 4 段路径 / 10 导线 / 2 过孔 13.4s
CFGSEL0 3 段路径 / 10 导线 / 2 过孔 0.4s
CFGSEL1 3 段路径 / 4 导线 / 0 过孔 1.7s
NONREM0 3 段路径 / 16 导线 / 4 过孔 0.1s
NONREM1 3 段路径 / 3 导线 / 0 过孔 0.1s
PRTDIS6 3 段路径 / 6 导线 / 2 过孔 0.4s
PRTDIS7 3 段路径 / 6 导线 / 0 过孔 0.1s
[!!] HUB_RST 布不通:(108.47,66.45) -> (189.48,71.67)
HUB_RST 4 段路径 / 5 导线 / 0 过孔 60.0s ← 有端点没连上
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.70,106.00)
+3V3_HUB 81 段路径 / 164 导线 / 41 过孔 99.6s ← 有端点没连上
VBUS_DET 5 段路径 / 9 导线 / 0 过孔 1.4s
K1_PWR 3 段路径 / 10 导线 / 4 过孔 1.5s
K1_VUP 3 段路径 / 10 导线 / 4 过孔 1.6s
K1_VDN 3 段路径 / 13 导线 / 4 过孔 1.6s
K2_PWR 3 段路径 / 6 导线 / 2 过孔 1.7s
K2_VUP 3 段路径 / 9 导线 / 2 过孔 1.7s
K2_VDN 3 段路径 / 10 导线 / 6 过孔 1.8s
K3_PWR 3 段路径 / 8 导线 / 2 过孔 0.7s
K3_VUP 3 段路径 / 10 导线 / 2 过孔 0.7s
K3_VDN 3 段路径 / 12 导线 / 6 过孔 0.6s
K4_PWR 3 段路径 / 8 导线 / 4 过孔 1.9s
K4_VUP 3 段路径 / 11 导线 / 4 过孔 2.0s
K4_VDN 3 段路径 / 14 导线 / 6 过孔 1.8s
K5_PWR 3 段路径 / 10 导线 / 4 过孔 0.5s
K5_VUP 3 段路径 / 14 导线 / 6 过孔 0.4s
K5_VDN 3 段路径 / 12 导线 / 6 过孔 0.3s
KEY_SER 2 段路径 / 5 导线 / 2 过孔 1.0s
KEY_SRCLK 6 段路径 / 15 导线 / 4 过孔 1.8s
KEY_RCLK 6 段路径 / 18 导线 / 6 过孔 1.9s
KEY_OE# 8 段路径 / 20 导线 / 9 过孔 4.4s
SR_CAS 3 段路径 / 12 导线 / 2 过孔 2.0s
SR_CAS2 3 段路径 / 9 导线 / 4 过孔 0.5s
EDL_EN1 5 段路径 / 9 导线 / 2 过孔 3.2s
EDL_EN2 5 段路径 / 12 导线 / 4 过孔 0.6s
EDL_EN3 5 段路径 / 13 导线 / 4 过孔 1.4s
EDL_EN4 5 段路径 / 14 导线 / 6 过孔 1.0s
EDL_EN5 5 段路径 / 17 导线 / 6 过孔 1.0s
VBUS_EN1 4 段路径 / 7 导线 / 3 过孔 1.0s
VBUS_EN2 4 段路径 / 22 导线 / 9 过孔 1.1s
VBUS_EN3 4 段路径 / 10 导线 / 3 过孔 0.5s
VBUS_EN4 4 段路径 / 9 导线 / 3 过孔 0.8s
VBUS_EN5 4 段路径 / 10 导线 / 7 过孔 0.7s
UP_VBUS_DET 4 段路径 / 6 导线 / 1 过孔 0.2s
[!!] +5V 布不通:(182.13,66.23) -> (65.81,66.23)
+5V 26 段路径 / 62 导线 / 25 过孔 57.1s ← 有端点没连上
$16N222 3 段路径 / 10 导线 / 2 过孔 0.6s
$16N224 3 段路径 / 6 导线 / 2 过孔 0.6s
$20N304 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N314 3 段路径 / 10 导线 / 2 过孔 0.1s
$20N324 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N334 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N344 3 段路径 / 5 导线 / 2 过孔 0.1s
$21N139 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N140 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N143 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N148 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N153 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N157 2 段路径 / 4 导线 / 2 过孔 0.9s
$21N158 2 段路径 / 4 导线 / 2 过孔 0.9s
$22N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N139 2 段路径 / 4 导线 / 2 过孔 1.0s
$22N140 2 段路径 / 4 导线 / 2 过孔 0.9s
$23N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N139 2 段路径 / 5 导线 / 2 过孔 1.0s
$23N140 2 段路径 / 4 导线 / 2 过孔 0.9s
$24N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$24N140 2 段路径 / 4 导线 / 2 过孔 1.1s
$25N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N130 4 段路径 / 8 导线 / 0 过孔 0.6s
$25N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$25N140 2 段路径 / 4 导线 / 2 过孔 1.0s
VBUS1 11 段路径 / 17 导线 / 6 过孔 9.9s
VBUS2 11 段路径 / 24 导线 / 4 过孔 2.7s
VBUS3 10 段路径 / 23 导线 / 8 过孔 0.5s
VBUS4 11 段路径 / 20 导线 / 6 过孔 0.9s
VBUS5 11 段路径 / 16 导线 / 6 过孔 0.9s
POGO1_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 8 导线 / 2 过孔 0.5s
123 个网络 / 614 条路径 / 1309 段导线 / 384 个过孔 (333 秒)
⚠️ 3 个网络没布通:HUB_RST +3V3_HUB +5V
45° 化:直角拐点 101 -> 4(29 秒)
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
[!!] 切不动: VBUS27 (105.92, 99.60) 转向 46°
[!!] 切不动: VBUS27 (106.40, 99.10) 转向 46°
净距校核(0.20 mm):
全部通过 ✔
路径已存 _pcb2_sig_routes.json
EXIT 0

之后

宽度:  |  高度:  |  大小: 8.6 KiB

+145
查看文件
@@ -0,0 +1,145 @@
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 1004 / 过孔 492 / 铜层导线 375(摘掉本脚本自己负责的旧铜 19 件)
+3V3_HUB 保留 pcb2_dp_long 画的 3 条前置段(16 段导线 / 4 个孔)
预留出线段 357 条
GND 110 段路径 / 135 导线 / 50 过孔 0.0s
THERM_1 3 段路径 / 8 导线 / 2 过孔 0.2s
THERM_2 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_3 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_4 3 段路径 / 8 导线 / 2 过孔 0.6s
THERM_5 3 段路径 / 8 导线 / 2 过孔 0.6s
CC1_1 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_2 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_3 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_4 3 段路径 / 5 导线 / 0 过孔 0.1s
CC1_5 3 段路径 / 5 导线 / 0 过孔 0.1s
VBUS_UP 7 段路径 / 30 导线 / 7 过孔 2.1s
RBIAS 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18PLL 3 段路径 / 5 导线 / 0 过孔 8.5s
XTAL1 4 段路径 / 8 导线 / 2 过孔 11.3s
XTAL2 4 段路径 / 10 导线 / 2 过孔 13.3s
CFGSEL0 3 段路径 / 10 导线 / 2 过孔 0.4s
CFGSEL1 3 段路径 / 4 导线 / 0 过孔 1.8s
NONREM0 3 段路径 / 16 导线 / 4 过孔 0.1s
NONREM1 3 段路径 / 3 导线 / 0 过孔 0.1s
PRTDIS6 3 段路径 / 6 导线 / 2 过孔 0.4s
PRTDIS7 3 段路径 / 6 导线 / 0 过孔 0.1s
[!!] HUB_RST 布不通:(108.47,66.45) -> (189.48,71.67)
HUB_RST 4 段路径 / 5 导线 / 0 过孔 61.5s ← 有端点没连上
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.70,106.00)
+3V3_HUB 81 段路径 / 164 导线 / 41 过孔 102.4s ← 有端点没连上
VBUS_DET 5 段路径 / 9 导线 / 0 过孔 1.4s
K1_PWR 3 段路径 / 10 导线 / 4 过孔 1.5s
K1_VUP 3 段路径 / 10 导线 / 4 过孔 1.6s
K1_VDN 3 段路径 / 13 导线 / 4 过孔 1.6s
K2_PWR 3 段路径 / 6 导线 / 2 过孔 1.6s
K2_VUP 3 段路径 / 9 导线 / 2 过孔 1.7s
K2_VDN 3 段路径 / 10 导线 / 6 过孔 1.8s
K3_PWR 3 段路径 / 8 导线 / 2 过孔 0.7s
K3_VUP 3 段路径 / 10 导线 / 2 过孔 0.7s
K3_VDN 3 段路径 / 12 导线 / 6 过孔 0.6s
K4_PWR 3 段路径 / 8 导线 / 4 过孔 2.1s
K4_VUP 3 段路径 / 11 导线 / 4 过孔 2.0s
K4_VDN 3 段路径 / 14 导线 / 6 过孔 1.8s
K5_PWR 3 段路径 / 10 导线 / 4 过孔 0.5s
K5_VUP 3 段路径 / 14 导线 / 6 过孔 0.4s
K5_VDN 3 段路径 / 12 导线 / 6 过孔 0.4s
KEY_SER 2 段路径 / 5 导线 / 2 过孔 1.0s
KEY_SRCLK 6 段路径 / 15 导线 / 4 过孔 1.9s
KEY_RCLK 6 段路径 / 18 导线 / 6 过孔 1.7s
KEY_OE# 8 段路径 / 20 导线 / 9 过孔 4.4s
SR_CAS 3 段路径 / 12 导线 / 2 过孔 2.0s
SR_CAS2 3 段路径 / 9 导线 / 4 过孔 0.6s
EDL_EN1 5 段路径 / 9 导线 / 2 过孔 3.1s
EDL_EN2 5 段路径 / 12 导线 / 4 过孔 0.6s
EDL_EN3 5 段路径 / 13 导线 / 4 过孔 1.3s
EDL_EN4 5 段路径 / 14 导线 / 6 过孔 1.0s
EDL_EN5 5 段路径 / 17 导线 / 6 过孔 0.9s
VBUS_EN1 4 段路径 / 7 导线 / 3 过孔 1.0s
VBUS_EN2 4 段路径 / 22 导线 / 9 过孔 1.0s
VBUS_EN3 4 段路径 / 10 导线 / 3 过孔 0.5s
VBUS_EN4 4 段路径 / 9 导线 / 3 过孔 0.8s
VBUS_EN5 4 段路径 / 10 导线 / 7 过孔 0.7s
UP_VBUS_DET 4 段路径 / 6 导线 / 1 过孔 0.2s
[!!] +5V 布不通:(182.13,66.23) -> (65.81,66.23)
+5V 26 段路径 / 62 导线 / 25 过孔 54.6s ← 有端点没连上
$16N222 3 段路径 / 10 导线 / 2 过孔 0.5s
$16N224 3 段路径 / 6 导线 / 2 过孔 0.5s
$20N304 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N314 3 段路径 / 10 导线 / 2 过孔 0.1s
$20N324 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N334 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N344 3 段路径 / 5 导线 / 2 过孔 0.1s
$21N139 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N140 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N143 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N148 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N153 4 段路径 / 8 导线 / 0 过孔 0.2s
$21N157 2 段路径 / 4 导线 / 2 过孔 1.0s
$21N158 2 段路径 / 4 导线 / 2 过孔 1.0s
$22N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$22N139 2 段路径 / 4 导线 / 2 过孔 0.8s
$22N140 2 段路径 / 4 导线 / 2 过孔 0.8s
$23N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$23N139 2 段路径 / 5 导线 / 2 过孔 0.9s
$23N140 2 段路径 / 4 导线 / 2 过孔 0.8s
$24N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N130 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$24N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$24N140 2 段路径 / 4 导线 / 2 过孔 1.0s
$25N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N125 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N130 4 段路径 / 8 导线 / 0 过孔 0.6s
$25N135 4 段路径 / 8 导线 / 0 过孔 0.2s
$25N139 2 段路径 / 4 导线 / 2 过孔 1.1s
$25N140 2 段路径 / 4 导线 / 2 过孔 0.9s
VBUS1 11 段路径 / 17 导线 / 6 过孔 9.5s
VBUS2 11 段路径 / 24 导线 / 4 过孔 2.8s
VBUS3 10 段路径 / 23 导线 / 8 过孔 0.5s
VBUS4 11 段路径 / 20 导线 / 6 过孔 0.9s
VBUS5 11 段路径 / 16 导线 / 6 过孔 0.9s
POGO1_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 8 导线 / 2 过孔 0.5s
123 个网络 / 614 条路径 / 1309 段导线 / 384 个过孔 (334 秒)
⚠️ 3 个网络没布通:HUB_RST +3V3_HUB +5V
45° 化:直角拐点 101 -> 4(28 秒)
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
[!!] 切不动: VBUS27 (105.92, 99.60) 转向 46°
[!!] 切不动: VBUS27 (106.40, 99.10) 转向 46°
净距校核(0.20 mm):
全部通过 ✔
路径已存 _pcb2_sig_routes.json
下发完成:先删 15 线 / 4 孔,再画 1339 线 / 384 孔(分批,每批 250)
EXIT 0

之后

宽度:  |  高度:  |  大小: 8.7 KiB

+161
查看文件
@@ -0,0 +1,161 @@
障碍表已存:焊盘 1004 / 过孔 891 / 铜层导线 1751
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 1006 / 过孔 492 / 铜层导线 375(摘掉本脚本自己负责的旧铜 1775 件)
+3V3_HUB 保留 pcb2_dp_long 画的 3 条前置段(16 段导线 / 4 个孔)
预留出线段 357 条
GND 110 段路径 / 135 导线 / 50 过孔 0.0s
THERM_1 3 段路径 / 8 导线 / 2 过孔 0.2s
THERM_2 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_3 3 段路径 / 8 导线 / 2 过孔 0.1s
THERM_4 3 段路径 / 8 导线 / 2 过孔 0.5s
THERM_5 3 段路径 / 8 导线 / 2 过孔 0.6s
CC1_1 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_2 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_3 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_4 3 段路径 / 5 导线 / 0 过孔 0.1s
CC1_5 3 段路径 / 5 导线 / 0 过孔 0.1s
HUB_RST 5 段路径 / 12 导线 / 2 过孔 1.2s
VBUS_UP 7 段路径 / 27 导线 / 6 过孔 5.7s
RBIAS 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18PLL 3 段路径 / 5 导线 / 0 过孔 19.7s
XTAL1 4 段路径 / 9 导线 / 2 过孔 22.9s
XTAL2 4 段路径 / 22 导线 / 2 过孔 58.2s
CFGSEL0 3 段路径 / 10 导线 / 2 过孔 0.4s
CFGSEL1 3 段路径 / 4 导线 / 0 过孔 1.7s
NONREM0 3 段路径 / 16 导线 / 4 过孔 0.1s
NONREM1 3 段路径 / 3 导线 / 0 过孔 0.1s
PRTDIS6 3 段路径 / 6 导线 / 0 过孔 1.7s
PRTDIS7 3 段路径 / 5 导线 / 0 过孔 0.1s
+3V3_HUB 82 段路径 / 195 导线 / 52 过孔 147.3s
VBUS_DET 5 段路径 / 10 导线 / 0 过孔 1.4s
K1_PWR 3 段路径 / 9 导线 / 2 过孔 1.3s
K1_VUP 3 段路径 / 10 导线 / 4 过孔 1.5s
K1_VDN 3 段路径 / 8 导线 / 4 过孔 1.6s
K2_PWR 3 段路径 / 6 导线 / 2 过孔 1.6s
K2_VUP 3 段路径 / 9 导线 / 2 过孔 1.8s
K2_VDN 3 段路径 / 13 导线 / 4 过孔 1.8s
K3_PWR 3 段路径 / 9 导线 / 2 过孔 3.6s
K3_VUP 3 段路径 / 10 导线 / 2 过孔 0.7s
K3_VDN 3 段路径 / 17 导线 / 2 过孔 0.6s
K4_PWR 3 段路径 / 8 导线 / 4 过孔 2.0s
K4_VUP 3 段路径 / 13 导线 / 6 过孔 1.9s
K4_VDN 3 段路径 / 15 导线 / 6 过孔 1.8s
K5_PWR 3 段路径 / 10 导线 / 4 过孔 0.4s
K5_VUP 3 段路径 / 14 导线 / 6 过孔 0.4s
K5_VDN 3 段路径 / 12 导线 / 6 过孔 0.4s
KEY_SER 2 段路径 / 5 导线 / 2 过孔 4.4s
KEY_SRCLK 6 段路径 / 18 导线 / 6 过孔 5.0s
KEY_RCLK 6 段路径 / 15 导线 / 7 过孔 4.6s
KEY_OE# 8 段路径 / 23 导线 / 7 过孔 9.7s
SR_CAS 3 段路径 / 8 导线 / 2 过孔 0.1s
SR_CAS2 3 段路径 / 11 导线 / 6 过孔 0.5s
EDL_EN1 5 段路径 / 12 导线 / 4 过孔 3.1s
EDL_EN2 5 段路径 / 12 导线 / 4 过孔 0.6s
EDL_EN3 5 段路径 / 16 导线 / 4 过孔 1.2s
EDL_EN4 5 段路径 / 14 导线 / 6 过孔 0.9s
EDL_EN5 5 段路径 / 22 导线 / 8 过孔 0.9s
VBUS_EN1 4 段路径 / 9 导线 / 4 过孔 0.8s
VBUS_EN2 4 段路径 / 16 导线 / 7 过孔 7.2s
VBUS_EN3 4 段路径 / 10 导线 / 3 过孔 0.4s
VBUS_EN4 4 段路径 / 10 导线 / 3 过孔 0.7s
VBUS_EN5 4 段路径 / 15 导线 / 7 过孔 0.5s
UP_VBUS_DET 4 段路径 / 7 导线 / 1 过孔 0.2s
+5V 27 段路径 / 97 导线 / 30 过孔 184.7s
$16N222 3 段路径 / 10 导线 / 2 过孔 0.5s
$16N224 3 段路径 / 7 导线 / 2 过孔 0.5s
$20N304 3 段路径 / 6 导线 / 0 过孔 0.1s
$20N314 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N324 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N334 3 段路径 / 5 导线 / 2 过孔 0.1s
$20N344 3 段路径 / 5 导线 / 2 过孔 0.1s
$21N139 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N140 2 段路径 / 4 导线 / 2 过孔 0.1s
$21N143 4 段路径 / 9 导线 / 0 过孔 0.2s
$21N148 4 段路径 / 9 导线 / 0 过孔 0.2s
$21N153 4 段路径 / 9 导线 / 0 过孔 0.2s
$21N157 2 段路径 / 4 导线 / 2 过孔 3.9s
$21N158 2 段路径 / 4 导线 / 2 过孔 4.1s
$22N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$22N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$22N130 4 段路径 / 9 导线 / 0 过孔 0.2s
$22N135 4 段路径 / 9 导线 / 0 过孔 0.2s
$22N139 2 段路径 / 4 导线 / 2 过孔 4.1s
$22N140 2 段路径 / 4 导线 / 2 过孔 4.0s
$23N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$23N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$23N130 4 段路径 / 9 导线 / 0 过孔 0.2s
$23N135 4 段路径 / 9 导线 / 0 过孔 0.2s
$23N139 2 段路径 / 4 导线 / 2 过孔 4.1s
$23N140 2 段路径 / 4 导线 / 2 过孔 4.0s
$24N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$24N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$24N130 4 段路径 / 9 导线 / 0 过孔 0.2s
$24N135 4 段路径 / 9 导线 / 0 过孔 0.6s
$24N139 2 段路径 / 4 导线 / 2 过孔 4.4s
$24N140 2 段路径 / 4 导线 / 2 过孔 4.3s
$25N121 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N122 2 段路径 / 4 导线 / 2 过孔 0.1s
$25N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$25N130 4 段路径 / 9 导线 / 0 过孔 0.6s
$25N135 4 段路径 / 9 导线 / 0 过孔 0.2s
$25N139 2 段路径 / 4 导线 / 2 过孔 4.5s
$25N140 2 段路径 / 4 导线 / 2 过孔 4.3s
VBUS1 11 段路径 / 17 导线 / 6 过孔 26.9s
VBUS2 11 段路径 / 20 导线 / 6 过孔 2.4s
VBUS3 10 段路径 / 19 导线 / 9 过孔 0.8s
VBUS4 11 段路径 / 25 导线 / 8 过孔 0.8s
VBUS5 11 段路径 / 16 导线 / 6 过孔 0.9s
POGO1_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 3 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 9 导线 / 4 过孔 0.4s
123 个网络 / 617 条路径 / 1422 段导线 / 404 个过孔 (592 秒)
换层点直角:244 -> 29(切了 236 处)
端点复接:补了 24 段
45° 化:直角拐点 132 -> 28(74 秒)
[!!] 切不动: $16N2223 (210.23, 64.05) 转向 46°
[!!] 切不动: $16N2243 (210.18, 59.85) 转向 46°
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
[!!] 切不动: +3V3_HUB3 (92.12, 70.09) 转向 52°
[!!] 切不动: +3V3_HUB5 (109.51, 66.36) 转向 67°
[!!] 切不动: +3V3_HUB51 (95.14, 61.98) 转向 62°
[!!] 切不动: +3V3_HUB53 (104.84, 62.16) 转向 67°
[!!] 切不动: +3V3_HUB54 (101.30, 59.77) 转向 47°
[!!] 切不动: +3V3_HUB63 (123.80, 70.60) 转向 46°
[!!] 切不动: +3V3_HUB67 (84.60, 60.70) 转向 49°
[!!] 切不动: +3V3_HUB77 (29.40, 105.20) 转向 46°
[!!] 切不动: +5V10 (147.35, 63.30) 转向 48°
[!!] 切不动: +5V10 (147.30, 63.35) 转向 48°
[!!] 切不动: +5V24 (81.35, 58.15) 转向 51°
[!!] 切不动: +5V25 (72.15, 34.40) 转向 47°
[!!] 切不动: EDL_EN14 (194.00, 65.70) 转向 67°
[!!] 切不动: EDL_EN35 (169.17, 102.60) 转向 68°
[!!] 切不动: EDL_EN54 (117.12, 70.96) 转向 46°
[!!] 切不动: EDL_EN54 (125.90, 71.50) 转向 67°
(还有 8 处)
净距校核(0.20 mm):
全部通过 ✔
路径已存 _pcb2_sig_routes.json
下发完成:先删 1376 线 / 399 孔,再画 1659 线 / 404 孔(分批,每批 250)
EXIT 0
+50
查看文件
@@ -0,0 +1,50 @@
=== reload
重载前 windowId 8a1c29ba-d794-46ed-9fcb-66bcd9a0dd7f,删铺铜边框 0
已重载,新 windowId 3ccfada8-445b-4198-9115-12e392ddde4e(5 s)
=== pour
VO3-INNER1 net=VO3_P layer=15
VO4-INNER1 net=VO4_P layer=15
VO5-INNER1 net=VO5_P layer=15
GND-INNER1 net=GND layer=15
GND-INNER2 net=GND layer=16
──── 铺铜实测(读回 getState_PourFills)────
VO1-INNER1 prio=1 layer=15 1 段 / 41 环 / 187 点 包围盒 12.6,67.7 ~ 63.9,127.9
VO2-INNER1 prio=3 layer=15 1 段 / 43 环 / 198 点 包围盒 80.1,67.7 ~ 135.4,127.9
VO3-INNER1 prio=5 layer=15 1 段 / 50 环 / 223 点 包围盒 152.1,67.7 ~ 206.9,127.9
VO4-INNER1 prio=7 layer=15 1 段 / 52 环 / 234 点 包围盒 48.9,6.6 ~ 86.9,67.3
VO5-INNER1 prio=9 layer=15 1 段 / 67 环 / 302 点 包围盒 120.4,6.6 ~ 171.9,67.3
GND-INNER1 prio=11 layer=15 184 段 / 388 环 / 1388 点 包围盒 0.6,0.6 ~ 219.4,134.4
GND-INNER2 prio=1 layer=16 217 段 / 682 环 / 2100 点 包围盒 0.6,0.6 ~ 219.4,134.4
=== inner1_verify
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 28.25 @ y=116.28 最窄纵断面 15.15 @ x=12.68 ✅
VO2-INNER1 VO2_P 43 环 / 4 连通域,主域 1831 mm²(占本网铜的 100.0%)
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.00 @ y=73.08 最窄纵断面 5.30 @ x=97.28 ❌
VO3-INNER1 VO3_P 50 环 / 1 连通域,主域 2099 mm²(占本网铜的 100.0%)
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.20 @ y=67.78 最窄纵断面 11.90 @ x=168.58 ✅
VO4-INNER1 VO4_P 52 环 / 3 连通域,主域 1935 mm²(占本网铜的 100.0%)
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.70 @ y=66.03 最窄纵断面 19.20 @ x=86.63 ✅
VO5-INNER1 VO5_P 67 环 / 1 连通域,主域 2188 mm²(占本网铜的 100.0%)
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.60 @ y=65.13 最窄纵断面 17.65 @ x=170.93 ✅
GND-INNER1 GND 208 环
GND-INNER2 GND 466 环
!! 实测有不达标的岛。
=== reload
已重载,新 windowId 982e73e4-2f9d-44e4-ba50-c845d96c0d92(5 s)
=== drc
全部 591 条 = 间距错误 4 + 连接性错误 472(连接性 = 还没布线,预期之内)
── 挖槽区域 到 导线 (2) ──
1. [间距错误] 挖槽区域 到 导线copperThickness1oz导线 ($16N224): e17116挖槽区域 : e56底层对象 1到对象 2距离为0.2mil,应该>= 11.8mil
2. [间距错误] 挖槽区域 到 导线copperThickness1oz导线 ($16N224): e17117挖槽区域 : e56顶层对象 1到对象 2距离为0.2mil,应该>= 11.8mil
── 挖槽区域 到 过孔 (1) ──
1. [间距错误] 挖槽区域 到 过孔copperThickness1oz过孔 ($16N224): e4563挖槽区域 : e56顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 挖槽区域 (1) ──
1. [间距错误] 钻孔 到 挖槽区域copperThickness1oz钻孔 ($16N224): e4563挖槽区域 : e56多层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 同封装内间距错误 (115) ──
── 贴片焊盘 到 贴片焊盘 (115) ──
+6
查看文件
@@ -0,0 +1,6 @@
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 28.75 @ y=116.38 最窄纵断面 15.15 @ x=12.68 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.05 @ y=67.78 最窄纵断面 7.30 @ x=87.28 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.20 @ y=67.78 最窄纵断面 9.80 @ x=166.28 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.70 @ y=66.03 最窄纵断面 18.10 @ x=86.63 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.60 @ y=65.13 最窄纵断面 17.65 @ x=170.93 ✅
0 / 22 个网络不连通
+20
查看文件
@@ -0,0 +1,20 @@
=== pour
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 184, 217]
=== drc (no reload)
全部 129 条 = 间距错误 4 + 连接性错误 10(连接性 = 还没布线,预期之内)
── 挖槽区域 到 导线 (2) ──
1. [间距错误] 挖槽区域 到 导线copperThickness1oz导线 ($16N224): e17116挖槽区域 : e56底层对象 1到对象 2距离为0.2mil,应该>= 11.8mil
2. [间距错误] 挖槽区域 到 导线copperThickness1oz导线 ($16N224): e17117挖槽区域 : e56顶层对象 1到对象 2距离为0.2mil,应该>= 11.8mil
── 挖槽区域 到 过孔 (1) ──
1. [间距错误] 挖槽区域 到 过孔copperThickness1oz过孔 ($16N224): e4563挖槽区域 : e56顶层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 挖槽区域 (1) ──
1. [间距错误] 钻孔 到 挖槽区域copperThickness1oz钻孔 ($16N224): e4563挖槽区域 : e56多层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 同封装内间距错误 (115) ──
── 贴片焊盘 到 贴片焊盘 (115) ──
二进制
查看文件
二进制文件未显示。
+15
查看文件
@@ -0,0 +1,15 @@
=== route_sig --net VBUS2 +3V3_HUB --push
+3V3_HUB 82 段路径 / 192 导线 / 54 过孔 85.5s
VBUS2 11 段路径 / 24 导线 / 4 过孔 2.6s
端点复接:补了 3 段
全部通过 ✔
下发完成:先删 203 线 / 58 孔,再画 216 线 / 58 孔(分批,每批 250)
=== reload
已重载,新 windowId 18e855fa-4e3b-417a-88ad-af7f2bfe4042(5 s)
=== pour
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 184, 217]
=== drc
全部 138 条 = 间距错误 23 + 连接性错误 ?(连接性 = 还没布线,预期之内)
── 导线 到 导线 (7) ──
二进制
查看文件
二进制文件未显示。
+15
查看文件
@@ -0,0 +1,15 @@
=== inner1_verify
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 28.55 @ y=102.28 最窄纵断面 15.15 @ x=12.68 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.00 @ y=73.08 最窄纵断面 7.30 @ x=87.28 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.20 @ y=67.78 最窄纵断面 11.90 @ x=168.58 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.70 @ y=66.03 最窄纵断面 19.20 @ x=86.63 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.60 @ y=65.13 最窄纵断面 17.65 @ x=170.93 ✅
=== net_conn
USB5_DMJ 2 焊盘 / 0 过孔 / 4 线 -> 1 个连通域 OK
UP_DP 3 焊盘 / 2 过孔 / 10 线 -> 1 个连通域 OK
UP_DM 3 焊盘 / 2 过孔 / 12 线 -> 1 个连通域 OK
0 / 22 个网络不连通
=== via_relabel (check)
第 1 轮:改 0
过孔要改 0 / 导线要改 0
(未加 --push,没有改动)
+16
查看文件
@@ -0,0 +1,16 @@
=== reload
已重载,新 windowId c8b8f80c-17e2-4d3e-9d7c-a9e6feeacbd9(5 s)
=== pour
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 184, 217]
=== inner1_verify
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 28.75 @ y=116.38 最窄纵断面 15.15 @ x=12.68 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.05 @ y=67.78 最窄纵断面 7.30 @ x=87.28 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.20 @ y=67.78 最窄纵断面 9.80 @ x=166.28 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.70 @ y=66.03 最窄纵断面 18.10 @ x=86.63 ✅
3 焊盘 + 11 过孔 全在主域 ✔ 最窄横断面 7.60 @ y=65.13 最窄纵断面 17.65 @ x=170.93 ✅
=== drc
全部 117 条 = 间距错误 115 + 连接性错误 2(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 贴片焊盘 (115) ──
=== net_conn
0 / 22 个网络不连通
+14
查看文件
@@ -0,0 +1,14 @@
=== route_sig --refresh --net KEY_RCLK --push
KEY_RCLK 6 段路径 / 21 导线 / 7 过孔 3.6s
换层点直角:6 -> 0(切了 6 处)
端点复接:补了 1 段
全部通过 ✔
下发完成:先删 19 线 / 7 孔,再画 22 线 / 7 孔(分批,每批 250)
=== reload
已重载,新 windowId 5fa85b61-f1fc-446c-833b-e2e6161f72c4(5 s)
=== pour
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 184, 217]
=== drc
全部 117 条 = 间距错误 115 + 连接性错误 2(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 贴片焊盘 (115) ──
+12
查看文件
@@ -0,0 +1,12 @@
=== route_sig --refresh --net KEY_RCLK --push
KEY_RCLK 6 段路径 / 21 导线 / 7 过孔 3.7s
全部通过 ✔
下发完成:先删 21 线 / 7 孔,再画 24 线 / 7 孔(分批,每批 250)
=== reload
已重载,新 windowId 53b7d582-ad00-4a2f-91ec-e8351cdeb49e(5 s)
=== pour
填充 7 / 7
完成:铜面 7 块,各自填充 [1, 1, 1, 1, 1, 184, 217]
=== drc
全部 115 条 = 间距错误 115 + 连接性错误 ?(连接性 = 还没布线,预期之内)
── 贴片焊盘 到 贴片焊盘 (115) ──
+29
查看文件
@@ -0,0 +1,29 @@
全部 247 条 = 间距错误 15 + 连接性错误 117(连接性 = 还没布线,预期之内)
── 导线 到 过孔 (1) ──
1. [间距错误] 导线 到 过孔copperThickness1oz导线 (VO3_P): e10063过孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 导线 (1) ──
1. [间距错误] 钻孔 到 导线copperThickness1oz导线 (VO3_P): e10063钻孔 (GND): e2289底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 贴片焊盘 到 过孔 (7) ──
1. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (VO3_P): J83_1过孔 (GND): e2289底层对象 1到对象 2距离为6.7mil,应该>= 7.9mil
2. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2043底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2045底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2046底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): J63_3过孔 : e2048底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): C801_2过孔 (VO4_P): e2049底层对象 1到对象 2距离为0mil,应该>= 7.9mil
7. [间距错误] 贴片焊盘 到 过孔copperThickness1oz贴片焊盘 (GND): C801_2过孔 (VO4_P): e2052底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 钻孔 到 贴片焊盘 (6) ──
1. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J63_3钻孔 : e2043底层对象 1到对象 2距离为0mil,应该>= 7.9mil
2. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J63_3钻孔 : e2045底层对象 1到对象 2距离为0mil,应该>= 7.9mil
3. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J63_3钻孔 : e2046底层对象 1到对象 2距离为0mil,应该>= 7.9mil
4. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): J63_3钻孔 : e2048底层对象 1到对象 2距离为0mil,应该>= 7.9mil
5. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C801_2钻孔 (VO4_P): e2049底层对象 1到对象 2距离为0mil,应该>= 7.9mil
6. [间距错误] 钻孔 到 贴片焊盘copperThickness1oz贴片焊盘 (GND): C801_2钻孔 (VO4_P): e2052底层对象 1到对象 2距离为0mil,应该>= 7.9mil
── 同封装内间距错误 (115) ──
── 贴片焊盘 到 贴片焊盘 (115) ──
+16
查看文件
@@ -0,0 +1,16 @@
import sys, json, re
sys.argv.append('--pcb2'); sys.path.insert(0,'.')
import drc_read as D
r = D.call(D.JS_TREE % (D.PCB, u''))
tree = r['tree']
conn = tree.split(u'连接性错误',1)[1] if u'连接性错误' in tree else ''
print('CONN TREE:', conn[:600])
cats = re.findall(r'([^()\d][^()]*?) \((\d+)\)', conn)
for name, n in cats[:6]:
name=name.strip()
d = D.call(D.JS_DETAIL % json.dumps(u'%s (%s)' % (name, n), ensure_ascii=False))
txt = d.get('detail','').split(u'input::-webkit')[0]
rows = re.findall(r'(\d+)(间距错误|物理错误|制造错误|连接性错误)(.+?)(?=\d+(?:间距错误|物理错误|制造错误|连接性错误)|$)', txt)
print(u'── %s (%s) ──' % (name, n))
for idx, kind, body in rows[:25]:
print(u' %s. %s' % (idx, body.strip()[:160]))
+9
查看文件
@@ -0,0 +1,9 @@
import sys, json, re
sys.argv.append('--pcb2'); sys.path.insert(0,'.')
import drc_read as D
for name, n in [('KEY_SRCLK',2),('KEY_RCLK',2),('VBUS2',2),('+3V3_HUB',2),('+5V',2)]:
d = D.call(D.JS_DETAIL % json.dumps(u'%s (%s)' % (name, n), ensure_ascii=False))
txt = d.get('detail','').split(u'input::-webkit')[0]
rows = re.findall(r'(\d+)(间距错误|物理错误|制造错误|连接性错误)(.+?)(?=\d+(?:间距错误|物理错误|制造错误|连接性错误)|$)', txt)
print(u'── %s ──' % name)
for idx, kind, body in rows: print(u' %s. %s' % (idx, body.strip()[:200]))
+19 -19
查看文件
@@ -76,41 +76,41 @@
"9": "IO16"
},
"r2_base": {
"EFUSE_EN1": 21,
"EFUSE_EN2": 20,
"EFUSE_EN1": 17,
"EFUSE_EN2": 18,
"EFUSE_EN3": 19,
"EFUSE_EN4": 18,
"EFUSE_EN5": 17,
"FAN_EN": 7,
"FAN_PWM": 6,
"FAN_TACH_IN": 5,
"FAN_TACH_OUT": 4,
"EFUSE_EN4": 20,
"EFUSE_EN5": 21,
"FAN_EN": 25,
"FAN_PWM": 24,
"FAN_TACH_IN": 23,
"FAN_TACH_OUT": 22,
"HUB_RST": 12,
"INA_ALERT": 31,
"INT#": 32,
"IO0": 27,
"MUX_RST#": 33,
"NTC1": 39,
"NTC2": 38,
"PRSNT1#": 11,
"PRSNT2#": 10,
"PRSNT3#": 9,
"PRSNT4#": 8,
"PRSNT5#": 22,
"NTC1": 4,
"NTC2": 5,
"PRSNT1#": 8,
"PRSNT2#": 9,
"PRSNT3#": 10,
"PRSNT4#": 11,
"PRSNT5#": 7,
"SCL": 35,
"SDA": 34,
"UP_VBUS_DET": 23,
"UP_VBUS_DET": 6,
"USB6_DM": 13,
"USB6_DP": 14
},
"r2_base_nc": {
"15": "IO3 strapping(JTAG_SEL)",
"16": "IO46 strapping + input-only",
"24": "IO47 备用",
"25": "IO48 备用",
"26": "IO45 strapping(VDD_SPI)",
"28": "IO35 留给 R8 版八线 PSRAM",
"29": "IO36 同上",
"30": "IO37 同上"
"30": "IO37 同上",
"38": "IO2 方案 B 空出(NTC2 挪到 IO5)",
"39": "IO1 方案 B 空出(NTC1 挪到 IO4)"
}
}
+14
查看文件
@@ -0,0 +1,14 @@
import time, sys
sys.path.insert(0,'.')
t=time.time()
import pcb2_gnd_patch as G, pcb2_route_dp as R
print('import %.1fs'%(time.time()-t)); t=time.time()
pads,vias,lines=R.geom()
print('geom %.1fs pads %d vias %d lines %d'%(time.time()-t,len(pads),len(vias),len(lines))); t=time.time()
pads,vias,lines=G.drop_mine(pads,vias,lines)
print('drop_mine %.1fs'%(time.time()-t)); t=time.time()
n=sum(1 for p in pads if p['net']=='GND')+sum(1 for v in vias if v['net']=='GND')+sum(1 for l in lines if l['net']=='GND')
print('GND items',n)
left=G.clusters(pads,vias,lines)
print('clusters %.1fs floating %d'%(time.time()-t,len(left)))
for cl in left: print(' ',[ (o[0], o[2].get('ref'), o[2].get('num')) for o in cl][:6])
文件差异内容过多而无法显示 加载差异
+256
查看文件
@@ -0,0 +1,256 @@
{
"opened": true,
"seq": [
{
"top": 0,
"txt": "C604\n\t\t\t\t\n\n\t增加元件\tC604\t-\tC604\n\nC605\n\t\t\t\t\n\n\t增加元件\tC605\t-\tC605\n\nC701\n\t\t\t\t\n\n\t增加元件\tC701\t-\tC701\n\nC702\n\t\t\t\t\n\n\t增加元件\tC702\t-\tC702\n\nC703\n\t\t\t\t\n\n\t增加元件\tC703\t-\tC703\n\nC704\n\t\t\t\t\n\n\t增加元件\tC704\t-\tC704\n\nC705\n\t\t\t\t\n\n\t增加元件\tC705\t-\tC705"
},
{
"top": 188,
"txt": "C604\n\t\t\t\t\n\n\t增加元件\tC604\t-\tC604\n\nC605\n\t\t\t\t\n\n\t增加元件\tC605\t-\tC605\n\nC701\n\t\t\t\t\n\n\t增加元件\tC701\t-\tC701\n\nC702\n\t\t\t\t\n\n\t增加元件\tC702\t-\tC702\n\nC703\n\t\t\t\t\n\n\t增加元件\tC703\t-\tC703\n\nC704\n\t\t\t\t\n\n\t增加元件\tC704\t-\tC704\n\nC705\n\t\t\t\t\n\n\t增加元件\tC705\t-\tC705\n\nC711\n\t\t\t\t\n\n\t增加元件\tC711\t-\tC711\n\nC712\n\t\t\t\t\n\n\t增加元件\tC712\t-\tC712\n\nC713\n\t\t\t\t\n\n\t增加元件\tC713\t-\tC713\n\nC714\n\t\t\t\t\n\n\t增加元件\tC714\t-\tC714\n\nC715\n\t\t\t\t\n\n\t增加元件\tC715\t-\tC715\n\nC721\n\t\t\t\t\n\n\t增加元件\tC721\t-\tC721\n\nC722\n\t\t\t\t\n\n\t增加元件\tC722\t-\tC722\n\nC723\n\t\t\t\t\n\n\t增加元件\tC723\t-\tC723\n\nC724\n\t\t\t\t\n\n\t增加元件\tC724\t-\tC724"
},
{
"top": 376,
"txt": "\t增加元件\tC701\t-\tC701\n\nC702\n\t\t\t\t\n\n\t增加元件\tC702\t-\tC702\n\nC703\n\t\t\t\t\n\n\t增加元件\tC703\t-\tC703\n\nC704\n\t\t\t\t\n\n\t增加元件\tC704\t-\tC704\n\nC705\n\t\t\t\t\n\n\t增加元件\tC705\t-\tC705\n\nC711\n\t\t\t\t\n\n\t增加元件\tC711\t-\tC711\n\nC712\n\t\t\t\t\n\n\t增加元件\tC712\t-\tC712\n\nC713\n\t\t\t\t\n\n\t增加元件\tC713\t-\tC713\n\nC714\n\t\t\t\t\n\n\t增加元件\tC714\t-\tC714\n\nC715\n\t\t\t\t\n\n\t增加元件\tC715\t-\tC715\n\nC721\n\t\t\t\t\n\n\t增加元件\tC721\t-\tC721\n\nC722\n\t\t\t\t\n\n\t增加元件\tC722\t-\tC722\n\nC723\n\t\t\t\t\n\n\t增加元件\tC723\t-\tC723\n\nC724\n\t\t\t\t\n\n\t增加元件\tC724\t-\tC724\n\nC725\n\t\t\t\t\n\n\t增加元件\tC725\t-\tC725\n\nC736\n\t\t\t\t\n\n\t增加元件\tC736\t-\tC736\n\nC737\n\t\t\t\t\n\n\t增加元件\tC737\t-\tC737\n\nC739\n\t\t\t\t\n\n\t增加元件\tC739\t-\tC739"
},
{
"top": 564,
"txt": "C705\n\t\t\t\t\n\n\t增加元件\tC705\t-\tC705\n\nC711\n\t\t\t\t\n\n\t增加元件\tC711\t-\tC711\n\nC712\n\t\t\t\t\n\n\t增加元件\tC712\t-\tC712\n\nC713\n\t\t\t\t\n\n\t增加元件\tC713\t-\tC713\n\nC714\n\t\t\t\t\n\n\t增加元件\tC714\t-\tC714\n\nC715\n\t\t\t\t\n\n\t增加元件\tC715\t-\tC715\n\nC721\n\t\t\t\t\n\n\t增加元件\tC721\t-\tC721\n\nC722\n\t\t\t\t\n\n\t增加元件\tC722\t-\tC722\n\nC723\n\t\t\t\t\n\n\t增加元件\tC723\t-\tC723\n\nC724\n\t\t\t\t\n\n\t增加元件\tC724\t-\tC724\n\nC725\n\t\t\t\t\n\n\t增加元件\tC725\t-\tC725\n\nC736\n\t\t\t\t\n\n\t增加元件\tC736\t-\tC736\n\nC737\n\t\t\t\t\n\n\t增加元件\tC737\t-\tC737\n\nC739\n\t\t\t\t\n\n\t增加元件\tC739\t-\tC739\n\nC740\n\t\t\t\t\n\n\t增加元件\tC740\t-\tC740\n\nC741\n\t\t\t\t\n\n\t增加元件\tC741\t-\tC741\n\nC742\n\t\t\t\t\n\n\t增加元件\tC742\t-\tC742\n\nC743\n\t\t\t\t"
},
{
"top": 752,
"txt": "C714\n\t\t\t\t\n\n\t增加元件\tC714\t-\tC714\n\nC715\n\t\t\t\t\n\n\t增加元件\tC715\t-\tC715\n\nC721\n\t\t\t\t\n\n\t增加元件\tC721\t-\tC721\n\nC722\n\t\t\t\t\n\n\t增加元件\tC722\t-\tC722\n\nC723\n\t\t\t\t\n\n\t增加元件\tC723\t-\tC723\n\nC724\n\t\t\t\t\n\n\t增加元件\tC724\t-\tC724\n\nC725\n\t\t\t\t\n\n\t增加元件\tC725\t-\tC725\n\nC736\n\t\t\t\t\n\n\t增加元件\tC736\t-\tC736\n\nC737\n\t\t\t\t\n\n\t增加元件\tC737\t-\tC737\n\nC739\n\t\t\t\t\n\n\t增加元件\tC739\t-\tC739\n\nC740\n\t\t\t\t\n\n\t增加元件\tC740\t-\tC740\n\nC741\n\t\t\t\t\n\n\t增加元件\tC741\t-\tC741\n\nC742\n\t\t\t\t\n\n\t增加元件\tC742\t-\tC742\n\nC743\n\t\t\t\t\n\n\t增加元件\tC743\t-\tC743\n\nC744\n\t\t\t\t\n\n\t增加元件\tC744\t-\tC744\n\nC745\n\t\t\t\t\n\n\t增加元件\tC745\t-\tC745\n\nC746\n\t\t\t\t\n\n\t增加元件\tC746\t-\tC746\n\nC747\n\t\t\t\t"
},
{
"top": 940,
"txt": "\t增加元件\tC722\t-\tC722\n\nC723\n\t\t\t\t\n\n\t增加元件\tC723\t-\tC723\n\nC724\n\t\t\t\t\n\n\t增加元件\tC724\t-\tC724\n\nC725\n\t\t\t\t\n\n\t增加元件\tC725\t-\tC725\n\nC736\n\t\t\t\t\n\n\t增加元件\tC736\t-\tC736\n\nC737\n\t\t\t\t\n\n\t增加元件\tC737\t-\tC737\n\nC739\n\t\t\t\t\n\n\t增加元件\tC739\t-\tC739\n\nC740\n\t\t\t\t\n\n\t增加元件\tC740\t-\tC740\n\nC741\n\t\t\t\t\n\n\t增加元件\tC741\t-\tC741\n\nC742\n\t\t\t\t\n\n\t增加元件\tC742\t-\tC742\n\nC743\n\t\t\t\t\n\n\t增加元件\tC743\t-\tC743\n\nC744\n\t\t\t\t\n\n\t增加元件\tC744\t-\tC744\n\nC745\n\t\t\t\t\n\n\t增加元件\tC745\t-\tC745\n\nC746\n\t\t\t\t\n\n\t增加元件\tC746\t-\tC746\n\nC747\n\t\t\t\t\n\n\t增加元件\tC747\t-\tC747\n\nC748\n\t\t\t\t\n\n\t增加元件\tC748\t-\tC748\n\nC749\n\t\t\t\t\n\n\t增加元件\tC749\t-\tC749\n\nC750\n\t\t\t\t\n\n\t增加元件\tC750\t-\tC750"
},
{
"top": 1128,
"txt": "\t增加元件\tC736\t-\tC736\n\nC737\n\t\t\t\t\n\n\t增加元件\tC737\t-\tC737\n\nC739\n\t\t\t\t\n\n\t增加元件\tC739\t-\tC739\n\nC740\n\t\t\t\t\n\n\t增加元件\tC740\t-\tC740\n\nC741\n\t\t\t\t\n\n\t增加元件\tC741\t-\tC741\n\nC742\n\t\t\t\t\n\n\t增加元件\tC742\t-\tC742\n\nC743\n\t\t\t\t\n\n\t增加元件\tC743\t-\tC743\n\nC744\n\t\t\t\t\n\n\t增加元件\tC744\t-\tC744\n\nC745\n\t\t\t\t\n\n\t增加元件\tC745\t-\tC745\n\nC746\n\t\t\t\t\n\n\t增加元件\tC746\t-\tC746\n\nC747\n\t\t\t\t\n\n\t增加元件\tC747\t-\tC747\n\nC748\n\t\t\t\t\n\n\t增加元件\tC748\t-\tC748\n\nC749\n\t\t\t\t\n\n\t增加元件\tC749\t-\tC749\n\nC750\n\t\t\t\t\n\n\t增加元件\tC750\t-\tC750\n\nC751\n\t\t\t\t\n\n\t增加元件\tC751\t-\tC751\n\nC760\n\t\t\t\t\n\n\t增加元件\tC760\t-\tC760\n\nC761\n\t\t\t\t\n\n\t增加元件\tC761\t-\tC761\n\nC762\n\t\t\t\t\n\n\t增加元件\tC762\t-\tC762"
},
{
"top": 1316,
"txt": "C741\n\t\t\t\t\n\n\t增加元件\tC741\t-\tC741\n\nC742\n\t\t\t\t\n\n\t增加元件\tC742\t-\tC742\n\nC743\n\t\t\t\t\n\n\t增加元件\tC743\t-\tC743\n\nC744\n\t\t\t\t\n\n\t增加元件\tC744\t-\tC744\n\nC745\n\t\t\t\t\n\n\t增加元件\tC745\t-\tC745\n\nC746\n\t\t\t\t\n\n\t增加元件\tC746\t-\tC746\n\nC747\n\t\t\t\t\n\n\t增加元件\tC747\t-\tC747\n\nC748\n\t\t\t\t\n\n\t增加元件\tC748\t-\tC748\n\nC749\n\t\t\t\t\n\n\t增加元件\tC749\t-\tC749\n\nC750\n\t\t\t\t\n\n\t增加元件\tC750\t-\tC750\n\nC751\n\t\t\t\t\n\n\t增加元件\tC751\t-\tC751\n\nC760\n\t\t\t\t\n\n\t增加元件\tC760\t-\tC760\n\nC761\n\t\t\t\t\n\n\t增加元件\tC761\t-\tC761\n\nC762\n\t\t\t\t\n\n\t增加元件\tC762\t-\tC762\n\nC763\n\t\t\t\t\n\n\t增加元件\tC763\t-\tC763\n\nC764\n\t\t\t\t\n\n\t增加元件\tC764\t-\tC764\n\nC765\n\t\t\t\t\n\n\t增加元件\tC765\t-\tC765\n\nC801\n\t\t\t\t"
},
{
"top": 1504,
"txt": "C745\n\t\t\t\t\n\n\t增加元件\tC745\t-\tC745\n\nC746\n\t\t\t\t\n\n\t增加元件\tC746\t-\tC746\n\nC747\n\t\t\t\t\n\n\t增加元件\tC747\t-\tC747\n\nC748\n\t\t\t\t\n\n\t增加元件\tC748\t-\tC748\n\nC749\n\t\t\t\t\n\n\t增加元件\tC749\t-\tC749\n\nC750\n\t\t\t\t\n\n\t增加元件\tC750\t-\tC750\n\nC751\n\t\t\t\t\n\n\t增加元件\tC751\t-\tC751\n\nC760\n\t\t\t\t\n\n\t增加元件\tC760\t-\tC760\n\nC761\n\t\t\t\t\n\n\t增加元件\tC761\t-\tC761\n\nC762\n\t\t\t\t\n\n\t增加元件\tC762\t-\tC762\n\nC763\n\t\t\t\t\n\n\t增加元件\tC763\t-\tC763\n\nC764\n\t\t\t\t\n\n\t增加元件\tC764\t-\tC764\n\nC765\n\t\t\t\t\n\n\t增加元件\tC765\t-\tC765\n\nC801\n\t\t\t\t\n\n\t增加元件\tC801\t-\tC801\n\nC802\n\t\t\t\t\n\n\t增加元件\tC802\t-\tC802\n\nC803\n\t\t\t\t\n\n\t增加元件\tC803\t-\tC803\n\nC804\n\t\t\t\t\n\n\t增加元件\tC804\t-\tC804\n\nC805\n\t\t\t\t"
},
{
"top": 1692,
"txt": "\t增加元件\tC748\t-\tC748\n\nC749\n\t\t\t\t\n\n\t增加元件\tC749\t-\tC749\n\nC750\n\t\t\t\t\n\n\t增加元件\tC750\t-\tC750\n\nC751\n\t\t\t\t\n\n\t增加元件\tC751\t-\tC751\n\nC760\n\t\t\t\t\n\n\t增加元件\tC760\t-\tC760\n\nC761\n\t\t\t\t\n\n\t增加元件\tC761\t-\tC761\n\nC762\n\t\t\t\t\n\n\t增加元件\tC762\t-\tC762\n\nC763\n\t\t\t\t\n\n\t增加元件\tC763\t-\tC763\n\nC764\n\t\t\t\t\n\n\t增加元件\tC764\t-\tC764\n\nC765\n\t\t\t\t\n\n\t增加元件\tC765\t-\tC765\n\nC801\n\t\t\t\t\n\n\t增加元件\tC801\t-\tC801\n\nC802\n\t\t\t\t\n\n\t增加元件\tC802\t-\tC802\n\nC803\n\t\t\t\t\n\n\t增加元件\tC803\t-\tC803\n\nC804\n\t\t\t\t\n\n\t增加元件\tC804\t-\tC804\n\nC805\n\t\t\t\t\n\n\t增加元件\tC805\t-\tC805\n\nC806\n\t\t\t\t\n\n\t增加元件\tC806\t-\tC806\n\nC811\n\t\t\t\t\n\n\t增加元件\tC811\t-\tC811\n\nC812\n\t\t\t\t\n\n\t增加元件\tC812\t-\tC812"
},
{
"top": 1880,
"txt": "\t增加元件\tC760\t-\tC760\n\nC761\n\t\t\t\t\n\n\t增加元件\tC761\t-\tC761\n\nC762\n\t\t\t\t\n\n\t增加元件\tC762\t-\tC762\n\nC763\n\t\t\t\t\n\n\t增加元件\tC763\t-\tC763\n\nC764\n\t\t\t\t\n\n\t增加元件\tC764\t-\tC764\n\nC765\n\t\t\t\t\n\n\t增加元件\tC765\t-\tC765\n\nC801\n\t\t\t\t\n\n\t增加元件\tC801\t-\tC801\n\nC802\n\t\t\t\t\n\n\t增加元件\tC802\t-\tC802\n\nC803\n\t\t\t\t\n\n\t增加元件\tC803\t-\tC803\n\nC804\n\t\t\t\t\n\n\t增加元件\tC804\t-\tC804\n\nC805\n\t\t\t\t\n\n\t增加元件\tC805\t-\tC805\n\nC806\n\t\t\t\t\n\n\t增加元件\tC806\t-\tC806\n\nC811\n\t\t\t\t\n\n\t增加元件\tC811\t-\tC811\n\nC812\n\t\t\t\t\n\n\t增加元件\tC812\t-\tC812\n\nC813\n\t\t\t\t\n\n\t增加元件\tC813\t-\tC813\n\nC814\n\t\t\t\t\n\n\t增加元件\tC814\t-\tC814\n\nC815\n\t\t\t\t\n\n\t增加元件\tC815\t-\tC815\n\nC816\n\t\t\t\t\n\n\t增加元件\tC816\t-\tC816"
},
{
"top": 2068,
"txt": "C764\n\t\t\t\t\n\n\t增加元件\tC764\t-\tC764\n\nC765\n\t\t\t\t\n\n\t增加元件\tC765\t-\tC765\n\nC801\n\t\t\t\t\n\n\t增加元件\tC801\t-\tC801\n\nC802\n\t\t\t\t\n\n\t增加元件\tC802\t-\tC802\n\nC803\n\t\t\t\t\n\n\t增加元件\tC803\t-\tC803\n\nC804\n\t\t\t\t\n\n\t增加元件\tC804\t-\tC804\n\nC805\n\t\t\t\t\n\n\t增加元件\tC805\t-\tC805\n\nC806\n\t\t\t\t\n\n\t增加元件\tC806\t-\tC806\n\nC811\n\t\t\t\t\n\n\t增加元件\tC811\t-\tC811\n\nC812\n\t\t\t\t\n\n\t增加元件\tC812\t-\tC812\n\nC813\n\t\t\t\t\n\n\t增加元件\tC813\t-\tC813\n\nC814\n\t\t\t\t\n\n\t增加元件\tC814\t-\tC814\n\nC815\n\t\t\t\t\n\n\t增加元件\tC815\t-\tC815\n\nC816\n\t\t\t\t\n\n\t增加元件\tC816\t-\tC816\n\nC821\n\t\t\t\t\n\n\t增加元件\tC821\t-\tC821\n\nC822\n\t\t\t\t\n\n\t增加元件\tC822\t-\tC822\n\nC823\n\t\t\t\t\n\n\t增加元件\tC823\t-\tC823\n\nC824\n\t\t\t\t"
},
{
"top": 2256,
"txt": "C803\n\t\t\t\t\n\n\t增加元件\tC803\t-\tC803\n\nC804\n\t\t\t\t\n\n\t增加元件\tC804\t-\tC804\n\nC805\n\t\t\t\t\n\n\t增加元件\tC805\t-\tC805\n\nC806\n\t\t\t\t\n\n\t增加元件\tC806\t-\tC806\n\nC811\n\t\t\t\t\n\n\t增加元件\tC811\t-\tC811\n\nC812\n\t\t\t\t\n\n\t增加元件\tC812\t-\tC812\n\nC813\n\t\t\t\t\n\n\t增加元件\tC813\t-\tC813\n\nC814\n\t\t\t\t\n\n\t增加元件\tC814\t-\tC814\n\nC815\n\t\t\t\t\n\n\t增加元件\tC815\t-\tC815\n\nC816\n\t\t\t\t\n\n\t增加元件\tC816\t-\tC816\n\nC821\n\t\t\t\t\n\n\t增加元件\tC821\t-\tC821\n\nC822\n\t\t\t\t\n\n\t增加元件\tC822\t-\tC822\n\nC823\n\t\t\t\t\n\n\t增加元件\tC823\t-\tC823\n\nC824\n\t\t\t\t\n\n\t增加元件\tC824\t-\tC824\n\nC825\n\t\t\t\t\n\n\t增加元件\tC825\t-\tC825\n\nC826\n\t\t\t\t\n\n\t增加元件\tC826\t-\tC826\n\nC831\n\t\t\t\t\n\n\t增加元件\tC831\t-\tC831\n\nC832\n\t\t\t\t"
},
{
"top": 2444,
"txt": "\t增加元件\tC806\t-\tC806\n\nC811\n\t\t\t\t\n\n\t增加元件\tC811\t-\tC811\n\nC812\n\t\t\t\t\n\n\t增加元件\tC812\t-\tC812\n\nC813\n\t\t\t\t\n\n\t增加元件\tC813\t-\tC813\n\nC814\n\t\t\t\t\n\n\t增加元件\tC814\t-\tC814\n\nC815\n\t\t\t\t\n\n\t增加元件\tC815\t-\tC815\n\nC816\n\t\t\t\t\n\n\t增加元件\tC816\t-\tC816\n\nC821\n\t\t\t\t\n\n\t增加元件\tC821\t-\tC821\n\nC822\n\t\t\t\t\n\n\t增加元件\tC822\t-\tC822\n\nC823\n\t\t\t\t\n\n\t增加元件\tC823\t-\tC823\n\nC824\n\t\t\t\t\n\n\t增加元件\tC824\t-\tC824\n\nC825\n\t\t\t\t\n\n\t增加元件\tC825\t-\tC825\n\nC826\n\t\t\t\t\n\n\t增加元件\tC826\t-\tC826\n\nC831\n\t\t\t\t\n\n\t增加元件\tC831\t-\tC831\n\nC832\n\t\t\t\t\n\n\t增加元件\tC832\t-\tC832\n\nC833\n\t\t\t\t\n\n\t增加元件\tC833\t-\tC833\n\nC834\n\t\t\t\t\n\n\t增加元件\tC834\t-\tC834\n\nC835\n\t\t\t\t\n\n\t增加元件\tC835\t-\tC835"
},
{
"top": 2632,
"txt": "\t增加元件\tC814\t-\tC814\n\nC815\n\t\t\t\t\n\n\t增加元件\tC815\t-\tC815\n\nC816\n\t\t\t\t\n\n\t增加元件\tC816\t-\tC816\n\nC821\n\t\t\t\t\n\n\t增加元件\tC821\t-\tC821\n\nC822\n\t\t\t\t\n\n\t增加元件\tC822\t-\tC822\n\nC823\n\t\t\t\t\n\n\t增加元件\tC823\t-\tC823\n\nC824\n\t\t\t\t\n\n\t增加元件\tC824\t-\tC824\n\nC825\n\t\t\t\t\n\n\t增加元件\tC825\t-\tC825\n\nC826\n\t\t\t\t\n\n\t增加元件\tC826\t-\tC826\n\nC831\n\t\t\t\t\n\n\t增加元件\tC831\t-\tC831\n\nC832\n\t\t\t\t\n\n\t增加元件\tC832\t-\tC832\n\nC833\n\t\t\t\t\n\n\t增加元件\tC833\t-\tC833\n\nC834\n\t\t\t\t\n\n\t增加元件\tC834\t-\tC834\n\nC835\n\t\t\t\t\n\n\t增加元件\tC835\t-\tC835\n\nC836\n\t\t\t\t\n\n\t增加元件\tC836\t-\tC836\n\nC841\n\t\t\t\t\n\n\t增加元件\tC841\t-\tC841\n\nC842\n\t\t\t\t\n\n\t增加元件\tC842\t-\tC842\n\nC843\n\t\t\t\t\n\n\t增加元件\tC843\t-\tC843"
},
{
"top": 2820,
"txt": "C822\n\t\t\t\t\n\n\t增加元件\tC822\t-\tC822\n\nC823\n\t\t\t\t\n\n\t增加元件\tC823\t-\tC823\n\nC824\n\t\t\t\t\n\n\t增加元件\tC824\t-\tC824\n\nC825\n\t\t\t\t\n\n\t增加元件\tC825\t-\tC825\n\nC826\n\t\t\t\t\n\n\t增加元件\tC826\t-\tC826\n\nC831\n\t\t\t\t\n\n\t增加元件\tC831\t-\tC831\n\nC832\n\t\t\t\t\n\n\t增加元件\tC832\t-\tC832\n\nC833\n\t\t\t\t\n\n\t增加元件\tC833\t-\tC833\n\nC834\n\t\t\t\t\n\n\t增加元件\tC834\t-\tC834\n\nC835\n\t\t\t\t\n\n\t增加元件\tC835\t-\tC835\n\nC836\n\t\t\t\t\n\n\t增加元件\tC836\t-\tC836\n\nC841\n\t\t\t\t\n\n\t增加元件\tC841\t-\tC841\n\nC842\n\t\t\t\t\n\n\t增加元件\tC842\t-\tC842\n\nC843\n\t\t\t\t\n\n\t增加元件\tC843\t-\tC843\n\nC844\n\t\t\t\t\n\n\t增加元件\tC844\t-\tC844\n\nC845\n\t\t\t\t\n\n\t增加元件\tC845\t-\tC845\n\nC846\n\t\t\t\t\n\n\t增加元件\tC846\t-\tC846\n\nJ23\n\t\t\t\t"
},
{
"top": 3008,
"txt": "C826\n\t\t\t\t\n\n\t增加元件\tC826\t-\tC826\n\nC831\n\t\t\t\t\n\n\t增加元件\tC831\t-\tC831\n\nC832\n\t\t\t\t\n\n\t增加元件\tC832\t-\tC832\n\nC833\n\t\t\t\t\n\n\t增加元件\tC833\t-\tC833\n\nC834\n\t\t\t\t\n\n\t增加元件\tC834\t-\tC834\n\nC835\n\t\t\t\t\n\n\t增加元件\tC835\t-\tC835\n\nC836\n\t\t\t\t\n\n\t增加元件\tC836\t-\tC836\n\nC841\n\t\t\t\t\n\n\t增加元件\tC841\t-\tC841\n\nC842\n\t\t\t\t\n\n\t增加元件\tC842\t-\tC842\n\nC843\n\t\t\t\t\n\n\t增加元件\tC843\t-\tC843\n\nC844\n\t\t\t\t\n\n\t增加元件\tC844\t-\tC844\n\nC845\n\t\t\t\t\n\n\t增加元件\tC845\t-\tC845\n\nC846\n\t\t\t\t\n\n\t增加元件\tC846\t-\tC846\n\nJ23\n\t\t\t\t\n\n\t增加元件\tJ23\t-\tJ23\n\nJ31\n\t\t\t\t\n\n\t增加元件\tJ31\t-\tJ31\n\nJ32\n\t\t\t\t\n\n\t增加元件\tJ32\t-\tJ32\n\nJ41\n\t\t\t\t\n\n\t增加元件\tJ41\t-\tJ41\n\nJ42\n\t\t\t\t"
},
{
"top": 3196,
"txt": "\t增加元件\tC833\t-\tC833\n\nC834\n\t\t\t\t\n\n\t增加元件\tC834\t-\tC834\n\nC835\n\t\t\t\t\n\n\t增加元件\tC835\t-\tC835\n\nC836\n\t\t\t\t\n\n\t增加元件\tC836\t-\tC836\n\nC841\n\t\t\t\t\n\n\t增加元件\tC841\t-\tC841\n\nC842\n\t\t\t\t\n\n\t增加元件\tC842\t-\tC842\n\nC843\n\t\t\t\t\n\n\t增加元件\tC843\t-\tC843\n\nC844\n\t\t\t\t\n\n\t增加元件\tC844\t-\tC844\n\nC845\n\t\t\t\t\n\n\t增加元件\tC845\t-\tC845\n\nC846\n\t\t\t\t\n\n\t增加元件\tC846\t-\tC846\n\nJ23\n\t\t\t\t\n\n\t增加元件\tJ23\t-\tJ23\n\nJ31\n\t\t\t\t\n\n\t增加元件\tJ31\t-\tJ31\n\nJ32\n\t\t\t\t\n\n\t增加元件\tJ32\t-\tJ32\n\nJ41\n\t\t\t\t\n\n\t增加元件\tJ41\t-\tJ41\n\nJ42\n\t\t\t\t\n\n\t增加元件\tJ42\t-\tJ42\n\nJ43\n\t\t\t\t\n\n\t增加元件\tJ43\t-\tJ43\n\nJ44\n\t\t\t\t\n\n\t增加元件\tJ44\t-\tJ44\n\nJ45\n\t\t\t\t\n\n\t增加元件\tJ45\t-\tJ45"
},
{
"top": 3384,
"txt": "\t增加元件\tC841\t-\tC841\n\nC842\n\t\t\t\t\n\n\t增加元件\tC842\t-\tC842\n\nC843\n\t\t\t\t\n\n\t增加元件\tC843\t-\tC843\n\nC844\n\t\t\t\t\n\n\t增加元件\tC844\t-\tC844\n\nC845\n\t\t\t\t\n\n\t增加元件\tC845\t-\tC845\n\nC846\n\t\t\t\t\n\n\t增加元件\tC846\t-\tC846\n\nJ23\n\t\t\t\t\n\n\t增加元件\tJ23\t-\tJ23\n\nJ31\n\t\t\t\t\n\n\t增加元件\tJ31\t-\tJ31\n\nJ32\n\t\t\t\t\n\n\t增加元件\tJ32\t-\tJ32\n\nJ41\n\t\t\t\t\n\n\t增加元件\tJ41\t-\tJ41\n\nJ42\n\t\t\t\t\n\n\t增加元件\tJ42\t-\tJ42\n\nJ43\n\t\t\t\t\n\n\t增加元件\tJ43\t-\tJ43\n\nJ44\n\t\t\t\t\n\n\t增加元件\tJ44\t-\tJ44\n\nJ45\n\t\t\t\t\n\n\t增加元件\tJ45\t-\tJ45\n\nJ46\n\t\t\t\t\n\n\t增加元件\tJ46\t-\tJ46\n\nJ47\n\t\t\t\t\n\n\t增加元件\tJ47\t-\tJ47\n\nJ48\n\t\t\t\t\n\n\t增加元件\tJ48\t-\tJ48\n\nJ49\n\t\t\t\t\n\n\t增加元件\tJ49\t-\tJ49"
},
{
"top": 3572,
"txt": "C845\n\t\t\t\t\n\n\t增加元件\tC845\t-\tC845\n\nC846\n\t\t\t\t\n\n\t增加元件\tC846\t-\tC846\n\nJ23\n\t\t\t\t\n\n\t增加元件\tJ23\t-\tJ23\n\nJ31\n\t\t\t\t\n\n\t增加元件\tJ31\t-\tJ31\n\nJ32\n\t\t\t\t\n\n\t增加元件\tJ32\t-\tJ32\n\nJ41\n\t\t\t\t\n\n\t增加元件\tJ41\t-\tJ41\n\nJ42\n\t\t\t\t\n\n\t增加元件\tJ42\t-\tJ42\n\nJ43\n\t\t\t\t\n\n\t增加元件\tJ43\t-\tJ43\n\nJ44\n\t\t\t\t\n\n\t增加元件\tJ44\t-\tJ44\n\nJ45\n\t\t\t\t\n\n\t增加元件\tJ45\t-\tJ45\n\nJ46\n\t\t\t\t\n\n\t增加元件\tJ46\t-\tJ46\n\nJ47\n\t\t\t\t\n\n\t增加元件\tJ47\t-\tJ47\n\nJ48\n\t\t\t\t\n\n\t增加元件\tJ48\t-\tJ48\n\nJ49\n\t\t\t\t\n\n\t增加元件\tJ49\t-\tJ49\n\nJ50\n\t\t\t\t\n\n\t增加元件\tJ50\t-\tJ50\n\nJ51\n\t\t\t\t\n\n\t增加元件\tJ51\t-\tJ51\n\nJ52\n\t\t\t\t\n\n\t增加元件\tJ52\t-\tJ52\n\nJ53\n\t\t\t\t"
},
{
"top": 3760,
"txt": "J32\n\t\t\t\t\n\n\t增加元件\tJ32\t-\tJ32\n\nJ41\n\t\t\t\t\n\n\t增加元件\tJ41\t-\tJ41\n\nJ42\n\t\t\t\t\n\n\t增加元件\tJ42\t-\tJ42\n\nJ43\n\t\t\t\t\n\n\t增加元件\tJ43\t-\tJ43\n\nJ44\n\t\t\t\t\n\n\t增加元件\tJ44\t-\tJ44\n\nJ45\n\t\t\t\t\n\n\t增加元件\tJ45\t-\tJ45\n\nJ46\n\t\t\t\t\n\n\t增加元件\tJ46\t-\tJ46\n\nJ47\n\t\t\t\t\n\n\t增加元件\tJ47\t-\tJ47\n\nJ48\n\t\t\t\t\n\n\t增加元件\tJ48\t-\tJ48\n\nJ49\n\t\t\t\t\n\n\t增加元件\tJ49\t-\tJ49\n\nJ50\n\t\t\t\t\n\n\t增加元件\tJ50\t-\tJ50\n\nJ51\n\t\t\t\t\n\n\t增加元件\tJ51\t-\tJ51\n\nJ52\n\t\t\t\t\n\n\t增加元件\tJ52\t-\tJ52\n\nJ53\n\t\t\t\t\n\n\t增加元件\tJ53\t-\tJ53\n\nJ54\n\t\t\t\t\n\n\t增加元件\tJ54\t-\tJ54\n\nJ55\n\t\t\t\t\n\n\t增加元件\tJ55\t-\tJ55\n\nJ56\n\t\t\t\t\n\n\t增加元件\tJ56\t-\tJ56\n\nJ57\n\t\t\t\t"
},
{
"top": 3948,
"txt": "\t增加元件\tJ43\t-\tJ43\n\nJ44\n\t\t\t\t\n\n\t增加元件\tJ44\t-\tJ44\n\nJ45\n\t\t\t\t\n\n\t增加元件\tJ45\t-\tJ45\n\nJ46\n\t\t\t\t\n\n\t增加元件\tJ46\t-\tJ46\n\nJ47\n\t\t\t\t\n\n\t增加元件\tJ47\t-\tJ47\n\nJ48\n\t\t\t\t\n\n\t增加元件\tJ48\t-\tJ48\n\nJ49\n\t\t\t\t\n\n\t增加元件\tJ49\t-\tJ49\n\nJ50\n\t\t\t\t\n\n\t增加元件\tJ50\t-\tJ50\n\nJ51\n\t\t\t\t\n\n\t增加元件\tJ51\t-\tJ51\n\nJ52\n\t\t\t\t\n\n\t增加元件\tJ52\t-\tJ52\n\nJ53\n\t\t\t\t\n\n\t增加元件\tJ53\t-\tJ53\n\nJ54\n\t\t\t\t\n\n\t增加元件\tJ54\t-\tJ54\n\nJ55\n\t\t\t\t\n\n\t增加元件\tJ55\t-\tJ55\n\nJ56\n\t\t\t\t\n\n\t增加元件\tJ56\t-\tJ56\n\nJ57\n\t\t\t\t\n\n\t增加元件\tJ57\t-\tJ57\n\nJ58\n\t\t\t\t\n\n\t增加元件\tJ58\t-\tJ58\n\nJ59\n\t\t\t\t\n\n\t增加元件\tJ59\t-\tJ59\n\nJ60\n\t\t\t\t\n\n\t增加元件\tJ60\t-\tJ60"
},
{
"top": 4136,
"txt": "\t增加元件\tJ47\t-\tJ47\n\nJ48\n\t\t\t\t\n\n\t增加元件\tJ48\t-\tJ48\n\nJ49\n\t\t\t\t\n\n\t增加元件\tJ49\t-\tJ49\n\nJ50\n\t\t\t\t\n\n\t增加元件\tJ50\t-\tJ50\n\nJ51\n\t\t\t\t\n\n\t增加元件\tJ51\t-\tJ51\n\nJ52\n\t\t\t\t\n\n\t增加元件\tJ52\t-\tJ52\n\nJ53\n\t\t\t\t\n\n\t增加元件\tJ53\t-\tJ53\n\nJ54\n\t\t\t\t\n\n\t增加元件\tJ54\t-\tJ54\n\nJ55\n\t\t\t\t\n\n\t增加元件\tJ55\t-\tJ55\n\nJ56\n\t\t\t\t\n\n\t增加元件\tJ56\t-\tJ56\n\nJ57\n\t\t\t\t\n\n\t增加元件\tJ57\t-\tJ57\n\nJ58\n\t\t\t\t\n\n\t增加元件\tJ58\t-\tJ58\n\nJ59\n\t\t\t\t\n\n\t增加元件\tJ59\t-\tJ59\n\nJ60\n\t\t\t\t\n\n\t增加元件\tJ60\t-\tJ60\n\nJ61\n\t\t\t\t\n\n\t增加元件\tJ61\t-\tJ61\n\nJ62\n\t\t\t\t\n\n\t增加元件\tJ62\t-\tJ62\n\nJ63\n\t\t\t\t\n\n\t增加元件\tJ63\t-\tJ63\n\nJ64\n\t\t\t\t\n\n\t增加元件\tJ64\t-\tJ64"
},
{
"top": 4324,
"txt": "J51\n\t\t\t\t\n\n\t增加元件\tJ51\t-\tJ51\n\nJ52\n\t\t\t\t\n\n\t增加元件\tJ52\t-\tJ52\n\nJ53\n\t\t\t\t\n\n\t增加元件\tJ53\t-\tJ53\n\nJ54\n\t\t\t\t\n\n\t增加元件\tJ54\t-\tJ54\n\nJ55\n\t\t\t\t\n\n\t增加元件\tJ55\t-\tJ55\n\nJ56\n\t\t\t\t\n\n\t增加元件\tJ56\t-\tJ56\n\nJ57\n\t\t\t\t\n\n\t增加元件\tJ57\t-\tJ57\n\nJ58\n\t\t\t\t\n\n\t增加元件\tJ58\t-\tJ58\n\nJ59\n\t\t\t\t\n\n\t增加元件\tJ59\t-\tJ59\n\nJ60\n\t\t\t\t\n\n\t增加元件\tJ60\t-\tJ60\n\nJ61\n\t\t\t\t\n\n\t增加元件\tJ61\t-\tJ61\n\nJ62\n\t\t\t\t\n\n\t增加元件\tJ62\t-\tJ62\n\nJ63\n\t\t\t\t\n\n\t增加元件\tJ63\t-\tJ63\n\nJ64\n\t\t\t\t\n\n\t增加元件\tJ64\t-\tJ64\n\nJ65\n\t\t\t\t\n\n\t增加元件\tJ65\t-\tJ65\n\nJ71\n\t\t\t\t\n\n\t增加元件\tJ71\t-\tJ71\n\nJ72\n\t\t\t\t\n\n\t增加元件\tJ72\t-\tJ72\n\nJ73\n\t\t\t\t"
},
{
"top": 4512,
"txt": "J55\n\t\t\t\t\n\n\t增加元件\tJ55\t-\tJ55\n\nJ56\n\t\t\t\t\n\n\t增加元件\tJ56\t-\tJ56\n\nJ57\n\t\t\t\t\n\n\t增加元件\tJ57\t-\tJ57\n\nJ58\n\t\t\t\t\n\n\t增加元件\tJ58\t-\tJ58\n\nJ59\n\t\t\t\t\n\n\t增加元件\tJ59\t-\tJ59\n\nJ60\n\t\t\t\t\n\n\t增加元件\tJ60\t-\tJ60\n\nJ61\n\t\t\t\t\n\n\t增加元件\tJ61\t-\tJ61\n\nJ62\n\t\t\t\t\n\n\t增加元件\tJ62\t-\tJ62\n\nJ63\n\t\t\t\t\n\n\t增加元件\tJ63\t-\tJ63\n\nJ64\n\t\t\t\t\n\n\t增加元件\tJ64\t-\tJ64\n\nJ65\n\t\t\t\t\n\n\t增加元件\tJ65\t-\tJ65\n\nJ71\n\t\t\t\t\n\n\t增加元件\tJ71\t-\tJ71\n\nJ72\n\t\t\t\t\n\n\t增加元件\tJ72\t-\tJ72\n\nJ73\n\t\t\t\t\n\n\t增加元件\tJ73\t-\tJ73\n\nJ74\n\t\t\t\t\n\n\t增加元件\tJ74\t-\tJ74\n\nJ75\n\t\t\t\t\n\n\t增加元件\tJ75\t-\tJ75\n\nJ81\n\t\t\t\t\n\n\t增加元件\tJ81\t-\tJ81\n\nJ82\n\t\t\t\t"
},
{
"top": 4700,
"txt": "J59\n\t\t\t\t\n\n\t增加元件\tJ59\t-\tJ59\n\nJ60\n\t\t\t\t\n\n\t增加元件\tJ60\t-\tJ60\n\nJ61\n\t\t\t\t\n\n\t增加元件\tJ61\t-\tJ61\n\nJ62\n\t\t\t\t\n\n\t增加元件\tJ62\t-\tJ62\n\nJ63\n\t\t\t\t\n\n\t增加元件\tJ63\t-\tJ63\n\nJ64\n\t\t\t\t\n\n\t增加元件\tJ64\t-\tJ64\n\nJ65\n\t\t\t\t\n\n\t增加元件\tJ65\t-\tJ65\n\nJ71\n\t\t\t\t\n\n\t增加元件\tJ71\t-\tJ71\n\nJ72\n\t\t\t\t\n\n\t增加元件\tJ72\t-\tJ72\n\nJ73\n\t\t\t\t\n\n\t增加元件\tJ73\t-\tJ73\n\nJ74\n\t\t\t\t\n\n\t增加元件\tJ74\t-\tJ74\n\nJ75\n\t\t\t\t\n\n\t增加元件\tJ75\t-\tJ75\n\nJ81\n\t\t\t\t\n\n\t增加元件\tJ81\t-\tJ81\n\nJ82\n\t\t\t\t\n\n\t增加元件\tJ82\t-\tJ82\n\nJ83\n\t\t\t\t\n\n\t增加元件\tJ83\t-\tJ83\n\nJ84\n\t\t\t\t\n\n\t增加元件\tJ84\t-\tJ84\n\nJ85\n\t\t\t\t\n\n\t增加元件\tJ85\t-\tJ85\n\nQ103\n\t\t\t\t"
},
{
"top": 4888,
"txt": "\t增加元件\tJ62\t-\tJ62\n\nJ63\n\t\t\t\t\n\n\t增加元件\tJ63\t-\tJ63\n\nJ64\n\t\t\t\t\n\n\t增加元件\tJ64\t-\tJ64\n\nJ65\n\t\t\t\t\n\n\t增加元件\tJ65\t-\tJ65\n\nJ71\n\t\t\t\t\n\n\t增加元件\tJ71\t-\tJ71\n\nJ72\n\t\t\t\t\n\n\t增加元件\tJ72\t-\tJ72\n\nJ73\n\t\t\t\t\n\n\t增加元件\tJ73\t-\tJ73\n\nJ74\n\t\t\t\t\n\n\t增加元件\tJ74\t-\tJ74\n\nJ75\n\t\t\t\t\n\n\t增加元件\tJ75\t-\tJ75\n\nJ81\n\t\t\t\t\n\n\t增加元件\tJ81\t-\tJ81\n\nJ82\n\t\t\t\t\n\n\t增加元件\tJ82\t-\tJ82\n\nJ83\n\t\t\t\t\n\n\t增加元件\tJ83\t-\tJ83\n\nJ84\n\t\t\t\t\n\n\t增加元件\tJ84\t-\tJ84\n\nJ85\n\t\t\t\t\n\n\t增加元件\tJ85\t-\tJ85\n\nQ103\n\t\t\t\t\n\n\t增加元件\tQ103\t-\tQ103\n\nQ104\n\t\t\t\t\n\n\t增加元件\tQ104\t-\tQ104\n\nQ105\n\t\t\t\t\n\n\t增加元件\tQ105\t-\tQ105\n\nQ203\n\t\t\t\t\n\n\t增加元件\tQ203\t-\tQ203"
},
{
"top": 5076,
"txt": "\t增加元件\tJ71\t-\tJ71\n\nJ72\n\t\t\t\t\n\n\t增加元件\tJ72\t-\tJ72\n\nJ73\n\t\t\t\t\n\n\t增加元件\tJ73\t-\tJ73\n\nJ74\n\t\t\t\t\n\n\t增加元件\tJ74\t-\tJ74\n\nJ75\n\t\t\t\t\n\n\t增加元件\tJ75\t-\tJ75\n\nJ81\n\t\t\t\t\n\n\t增加元件\tJ81\t-\tJ81\n\nJ82\n\t\t\t\t\n\n\t增加元件\tJ82\t-\tJ82\n\nJ83\n\t\t\t\t\n\n\t增加元件\tJ83\t-\tJ83\n\nJ84\n\t\t\t\t\n\n\t增加元件\tJ84\t-\tJ84\n\nJ85\n\t\t\t\t\n\n\t增加元件\tJ85\t-\tJ85\n\nQ103\n\t\t\t\t\n\n\t增加元件\tQ103\t-\tQ103\n\nQ104\n\t\t\t\t\n\n\t增加元件\tQ104\t-\tQ104\n\nQ105\n\t\t\t\t\n\n\t增加元件\tQ105\t-\tQ105\n\nQ203\n\t\t\t\t\n\n\t增加元件\tQ203\t-\tQ203\n\nQ204\n\t\t\t\t\n\n\t增加元件\tQ204\t-\tQ204\n\nQ205\n\t\t\t\t\n\n\t增加元件\tQ205\t-\tQ205\n\nQ303\n\t\t\t\t\n\n\t增加元件\tQ303\t-\tQ303\n\nQ304\n\t\t\t\t\n\n\t增加元件\tQ304\t-\tQ304"
},
{
"top": 5264,
"txt": "J75\n\t\t\t\t\n\n\t增加元件\tJ75\t-\tJ75\n\nJ81\n\t\t\t\t\n\n\t增加元件\tJ81\t-\tJ81\n\nJ82\n\t\t\t\t\n\n\t增加元件\tJ82\t-\tJ82\n\nJ83\n\t\t\t\t\n\n\t增加元件\tJ83\t-\tJ83\n\nJ84\n\t\t\t\t\n\n\t增加元件\tJ84\t-\tJ84\n\nJ85\n\t\t\t\t\n\n\t增加元件\tJ85\t-\tJ85\n\nQ103\n\t\t\t\t\n\n\t增加元件\tQ103\t-\tQ103\n\nQ104\n\t\t\t\t\n\n\t增加元件\tQ104\t-\tQ104\n\nQ105\n\t\t\t\t\n\n\t增加元件\tQ105\t-\tQ105\n\nQ203\n\t\t\t\t\n\n\t增加元件\tQ203\t-\tQ203\n\nQ204\n\t\t\t\t\n\n\t增加元件\tQ204\t-\tQ204\n\nQ205\n\t\t\t\t\n\n\t增加元件\tQ205\t-\tQ205\n\nQ303\n\t\t\t\t\n\n\t增加元件\tQ303\t-\tQ303\n\nQ304\n\t\t\t\t\n\n\t增加元件\tQ304\t-\tQ304\n\nQ305\n\t\t\t\t\n\n\t增加元件\tQ305\t-\tQ305\n\nQ403\n\t\t\t\t\n\n\t增加元件\tQ403\t-\tQ403\n\nQ404\n\t\t\t\t\n\n\t增加元件\tQ404\t-\tQ404\n\nQ405\n\t\t\t\t"
},
{
"top": 5452,
"txt": "J84\n\t\t\t\t\n\n\t增加元件\tJ84\t-\tJ84\n\nJ85\n\t\t\t\t\n\n\t增加元件\tJ85\t-\tJ85\n\nQ103\n\t\t\t\t\n\n\t增加元件\tQ103\t-\tQ103\n\nQ104\n\t\t\t\t\n\n\t增加元件\tQ104\t-\tQ104\n\nQ105\n\t\t\t\t\n\n\t增加元件\tQ105\t-\tQ105\n\nQ203\n\t\t\t\t\n\n\t增加元件\tQ203\t-\tQ203\n\nQ204\n\t\t\t\t\n\n\t增加元件\tQ204\t-\tQ204\n\nQ205\n\t\t\t\t\n\n\t增加元件\tQ205\t-\tQ205\n\nQ303\n\t\t\t\t\n\n\t增加元件\tQ303\t-\tQ303\n\nQ304\n\t\t\t\t\n\n\t增加元件\tQ304\t-\tQ304\n\nQ305\n\t\t\t\t\n\n\t增加元件\tQ305\t-\tQ305\n\nQ403\n\t\t\t\t\n\n\t增加元件\tQ403\t-\tQ403\n\nQ404\n\t\t\t\t\n\n\t增加元件\tQ404\t-\tQ404\n\nQ405\n\t\t\t\t\n\n\t增加元件\tQ405\t-\tQ405\n\nQ503\n\t\t\t\t\n\n\t增加元件\tQ503\t-\tQ503\n\nQ504\n\t\t\t\t\n\n\t增加元件\tQ504\t-\tQ504\n\nQ505\n\t\t\t\t\n\n\t增加元件\tQ505\t-\tQ505\n\nR120\n\t\t\t\t"
},
{
"top": 5640,
"txt": "\t增加元件\tQ104\t-\tQ104\n\nQ105\n\t\t\t\t\n\n\t增加元件\tQ105\t-\tQ105\n\nQ203\n\t\t\t\t\n\n\t增加元件\tQ203\t-\tQ203\n\nQ204\n\t\t\t\t\n\n\t增加元件\tQ204\t-\tQ204\n\nQ205\n\t\t\t\t\n\n\t增加元件\tQ205\t-\tQ205\n\nQ303\n\t\t\t\t\n\n\t增加元件\tQ303\t-\tQ303\n\nQ304\n\t\t\t\t\n\n\t增加元件\tQ304\t-\tQ304\n\nQ305\n\t\t\t\t\n\n\t增加元件\tQ305\t-\tQ305\n\nQ403\n\t\t\t\t\n\n\t增加元件\tQ403\t-\tQ403\n\nQ404\n\t\t\t\t\n\n\t增加元件\tQ404\t-\tQ404\n\nQ405\n\t\t\t\t\n\n\t增加元件\tQ405\t-\tQ405\n\nQ503\n\t\t\t\t\n\n\t增加元件\tQ503\t-\tQ503\n\nQ504\n\t\t\t\t\n\n\t增加元件\tQ504\t-\tQ504\n\nQ505\n\t\t\t\t\n\n\t增加元件\tQ505\t-\tQ505\n\nR120\n\t\t\t\t\n\n\t增加元件\tR120\t-\tR120\n\nR121\n\t\t\t\t\n\n\t增加元件\tR121\t-\tR121\n\nR122\n\t\t\t\t\n\n\t增加元件\tR122\t-\tR122\n\nR123\n\t\t\t\t\n\n\t增加元件\tR123\t-\tR123"
},
{
"top": 5828,
"txt": "\t增加元件\tQ205\t-\tQ205\n\nQ303\n\t\t\t\t\n\n\t增加元件\tQ303\t-\tQ303\n\nQ304\n\t\t\t\t\n\n\t增加元件\tQ304\t-\tQ304\n\nQ305\n\t\t\t\t\n\n\t增加元件\tQ305\t-\tQ305\n\nQ403\n\t\t\t\t\n\n\t增加元件\tQ403\t-\tQ403\n\nQ404\n\t\t\t\t\n\n\t增加元件\tQ404\t-\tQ404\n\nQ405\n\t\t\t\t\n\n\t增加元件\tQ405\t-\tQ405\n\nQ503\n\t\t\t\t\n\n\t增加元件\tQ503\t-\tQ503\n\nQ504\n\t\t\t\t\n\n\t增加元件\tQ504\t-\tQ504\n\nQ505\n\t\t\t\t\n\n\t增加元件\tQ505\t-\tQ505\n\nR120\n\t\t\t\t\n\n\t增加元件\tR120\t-\tR120\n\nR121\n\t\t\t\t\n\n\t增加元件\tR121\t-\tR121\n\nR122\n\t\t\t\t\n\n\t增加元件\tR122\t-\tR122\n\nR123\n\t\t\t\t\n\n\t增加元件\tR123\t-\tR123\n\nR124\n\t\t\t\t\n\n\t增加元件\tR124\t-\tR124\n\nR125\n\t\t\t\t\n\n\t增加元件\tR125\t-\tR125\n\nR220\n\t\t\t\t\n\n\t增加元件\tR220\t-\tR220\n\nR221\n\t\t\t\t\n\n\t增加元件\tR221\t-\tR221"
},
{
"top": 6016,
"txt": "Q403\n\t\t\t\t\n\n\t增加元件\tQ403\t-\tQ403\n\nQ404\n\t\t\t\t\n\n\t增加元件\tQ404\t-\tQ404\n\nQ405\n\t\t\t\t\n\n\t增加元件\tQ405\t-\tQ405\n\nQ503\n\t\t\t\t\n\n\t增加元件\tQ503\t-\tQ503\n\nQ504\n\t\t\t\t\n\n\t增加元件\tQ504\t-\tQ504\n\nQ505\n\t\t\t\t\n\n\t增加元件\tQ505\t-\tQ505\n\nR120\n\t\t\t\t\n\n\t增加元件\tR120\t-\tR120\n\nR121\n\t\t\t\t\n\n\t增加元件\tR121\t-\tR121\n\nR122\n\t\t\t\t\n\n\t增加元件\tR122\t-\tR122\n\nR123\n\t\t\t\t\n\n\t增加元件\tR123\t-\tR123\n\nR124\n\t\t\t\t\n\n\t增加元件\tR124\t-\tR124\n\nR125\n\t\t\t\t\n\n\t增加元件\tR125\t-\tR125\n\nR220\n\t\t\t\t\n\n\t增加元件\tR220\t-\tR220\n\nR221\n\t\t\t\t\n\n\t增加元件\tR221\t-\tR221\n\nR222\n\t\t\t\t\n\n\t增加元件\tR222\t-\tR222\n\nR223\n\t\t\t\t\n\n\t增加元件\tR223\t-\tR223\n\nR224\n\t\t\t\t\n\n\t增加元件\tR224\t-\tR224\n\nR225\n\t\t\t\t"
},
{
"top": 6204,
"txt": "Q504\n\t\t\t\t\n\n\t增加元件\tQ504\t-\tQ504\n\nQ505\n\t\t\t\t\n\n\t增加元件\tQ505\t-\tQ505\n\nR120\n\t\t\t\t\n\n\t增加元件\tR120\t-\tR120\n\nR121\n\t\t\t\t\n\n\t增加元件\tR121\t-\tR121\n\nR122\n\t\t\t\t\n\n\t增加元件\tR122\t-\tR122\n\nR123\n\t\t\t\t\n\n\t增加元件\tR123\t-\tR123\n\nR124\n\t\t\t\t\n\n\t增加元件\tR124\t-\tR124\n\nR125\n\t\t\t\t\n\n\t增加元件\tR125\t-\tR125\n\nR220\n\t\t\t\t\n\n\t增加元件\tR220\t-\tR220\n\nR221\n\t\t\t\t\n\n\t增加元件\tR221\t-\tR221\n\nR222\n\t\t\t\t\n\n\t增加元件\tR222\t-\tR222\n\nR223\n\t\t\t\t\n\n\t增加元件\tR223\t-\tR223\n\nR224\n\t\t\t\t\n\n\t增加元件\tR224\t-\tR224\n\nR225\n\t\t\t\t\n\n\t增加元件\tR225\t-\tR225\n\nR320\n\t\t\t\t\n\n\t增加元件\tR320\t-\tR320\n\nR321\n\t\t\t\t\n\n\t增加元件\tR321\t-\tR321\n\nR322\n\t\t\t\t\n\n\t增加元件\tR322\t-\tR322\n\nR323\n\t\t\t\t"
},
{
"top": 6392,
"txt": "\t增加元件\tR121\t-\tR121\n\nR122\n\t\t\t\t\n\n\t增加元件\tR122\t-\tR122\n\nR123\n\t\t\t\t\n\n\t增加元件\tR123\t-\tR123\n\nR124\n\t\t\t\t\n\n\t增加元件\tR124\t-\tR124\n\nR125\n\t\t\t\t\n\n\t增加元件\tR125\t-\tR125\n\nR220\n\t\t\t\t\n\n\t增加元件\tR220\t-\tR220\n\nR221\n\t\t\t\t\n\n\t增加元件\tR221\t-\tR221\n\nR222\n\t\t\t\t\n\n\t增加元件\tR222\t-\tR222\n\nR223\n\t\t\t\t\n\n\t增加元件\tR223\t-\tR223\n\nR224\n\t\t\t\t\n\n\t增加元件\tR224\t-\tR224\n\nR225\n\t\t\t\t\n\n\t增加元件\tR225\t-\tR225\n\nR320\n\t\t\t\t\n\n\t增加元件\tR320\t-\tR320\n\nR321\n\t\t\t\t\n\n\t增加元件\tR321\t-\tR321\n\nR322\n\t\t\t\t\n\n\t增加元件\tR322\t-\tR322\n\nR323\n\t\t\t\t\n\n\t增加元件\tR323\t-\tR323\n\nR324\n\t\t\t\t\n\n\t增加元件\tR324\t-\tR324\n\nR325\n\t\t\t\t\n\n\t增加元件\tR325\t-\tR325\n\nR420\n\t\t\t\t\n\n\t增加元件\tR420\t-\tR420"
},
{
"top": 6580,
"txt": "\t增加元件\tR125\t-\tR125\n\nR220\n\t\t\t\t\n\n\t增加元件\tR220\t-\tR220\n\nR221\n\t\t\t\t\n\n\t增加元件\tR221\t-\tR221\n\nR222\n\t\t\t\t\n\n\t增加元件\tR222\t-\tR222\n\nR223\n\t\t\t\t\n\n\t增加元件\tR223\t-\tR223\n\nR224\n\t\t\t\t\n\n\t增加元件\tR224\t-\tR224\n\nR225\n\t\t\t\t\n\n\t增加元件\tR225\t-\tR225\n\nR320\n\t\t\t\t\n\n\t增加元件\tR320\t-\tR320\n\nR321\n\t\t\t\t\n\n\t增加元件\tR321\t-\tR321\n\nR322\n\t\t\t\t\n\n\t增加元件\tR322\t-\tR322\n\nR323\n\t\t\t\t\n\n\t增加元件\tR323\t-\tR323\n\nR324\n\t\t\t\t\n\n\t增加元件\tR324\t-\tR324\n\nR325\n\t\t\t\t\n\n\t增加元件\tR325\t-\tR325\n\nR420\n\t\t\t\t\n\n\t增加元件\tR420\t-\tR420\n\nR421\n\t\t\t\t\n\n\t增加元件\tR421\t-\tR421\n\nR422\n\t\t\t\t\n\n\t增加元件\tR422\t-\tR422\n\nR423\n\t\t\t\t\n\n\t增加元件\tR423\t-\tR423\n\nR424\n\t\t\t\t\n\n\t增加元件\tR424\t-\tR424"
},
{
"top": 6768,
"txt": "R223\n\t\t\t\t\n\n\t增加元件\tR223\t-\tR223\n\nR224\n\t\t\t\t\n\n\t增加元件\tR224\t-\tR224\n\nR225\n\t\t\t\t\n\n\t增加元件\tR225\t-\tR225\n\nR320\n\t\t\t\t\n\n\t增加元件\tR320\t-\tR320\n\nR321\n\t\t\t\t\n\n\t增加元件\tR321\t-\tR321\n\nR322\n\t\t\t\t\n\n\t增加元件\tR322\t-\tR322\n\nR323\n\t\t\t\t\n\n\t增加元件\tR323\t-\tR323\n\nR324\n\t\t\t\t\n\n\t增加元件\tR324\t-\tR324\n\nR325\n\t\t\t\t\n\n\t增加元件\tR325\t-\tR325\n\nR420\n\t\t\t\t\n\n\t增加元件\tR420\t-\tR420\n\nR421\n\t\t\t\t\n\n\t增加元件\tR421\t-\tR421\n\nR422\n\t\t\t\t\n\n\t增加元件\tR422\t-\tR422\n\nR423\n\t\t\t\t\n\n\t增加元件\tR423\t-\tR423\n\nR424\n\t\t\t\t\n\n\t增加元件\tR424\t-\tR424\n\nR425\n\t\t\t\t\n\n\t增加元件\tR425\t-\tR425\n\nR520\n\t\t\t\t\n\n\t增加元件\tR520\t-\tR520\n\nR521\n\t\t\t\t\n\n\t增加元件\tR521\t-\tR521\n\nR522\n\t\t\t\t"
},
{
"top": 6956,
"txt": "R321\n\t\t\t\t\n\n\t增加元件\tR321\t-\tR321\n\nR322\n\t\t\t\t\n\n\t增加元件\tR322\t-\tR322\n\nR323\n\t\t\t\t\n\n\t增加元件\tR323\t-\tR323\n\nR324\n\t\t\t\t\n\n\t增加元件\tR324\t-\tR324\n\nR325\n\t\t\t\t\n\n\t增加元件\tR325\t-\tR325\n\nR420\n\t\t\t\t\n\n\t增加元件\tR420\t-\tR420\n\nR421\n\t\t\t\t\n\n\t增加元件\tR421\t-\tR421\n\nR422\n\t\t\t\t\n\n\t增加元件\tR422\t-\tR422\n\nR423\n\t\t\t\t\n\n\t增加元件\tR423\t-\tR423\n\nR424\n\t\t\t\t\n\n\t增加元件\tR424\t-\tR424\n\nR425\n\t\t\t\t\n\n\t增加元件\tR425\t-\tR425\n\nR520\n\t\t\t\t\n\n\t增加元件\tR520\t-\tR520\n\nR521\n\t\t\t\t\n\n\t增加元件\tR521\t-\tR521\n\nR522\n\t\t\t\t\n\n\t增加元件\tR522\t-\tR522\n\nR523\n\t\t\t\t\n\n\t增加元件\tR523\t-\tR523\n\nR524\n\t\t\t\t\n\n\t增加元件\tR524\t-\tR524\n\nR525\n\t\t\t\t\n\n\t增加元件\tR525\t-\tR525\n\nR609\n\t\t\t\t"
},
{
"top": 7144,
"txt": "\t增加元件\tR324\t-\tR324\n\nR325\n\t\t\t\t\n\n\t增加元件\tR325\t-\tR325\n\nR420\n\t\t\t\t\n\n\t增加元件\tR420\t-\tR420\n\nR421\n\t\t\t\t\n\n\t增加元件\tR421\t-\tR421\n\nR422\n\t\t\t\t\n\n\t增加元件\tR422\t-\tR422\n\nR423\n\t\t\t\t\n\n\t增加元件\tR423\t-\tR423\n\nR424\n\t\t\t\t\n\n\t增加元件\tR424\t-\tR424\n\nR425\n\t\t\t\t\n\n\t增加元件\tR425\t-\tR425\n\nR520\n\t\t\t\t\n\n\t增加元件\tR520\t-\tR520\n\nR521\n\t\t\t\t\n\n\t增加元件\tR521\t-\tR521\n\nR522\n\t\t\t\t\n\n\t增加元件\tR522\t-\tR522\n\nR523\n\t\t\t\t\n\n\t增加元件\tR523\t-\tR523\n\nR524\n\t\t\t\t\n\n\t增加元件\tR524\t-\tR524\n\nR525\n\t\t\t\t\n\n\t增加元件\tR525\t-\tR525\n\nR609\n\t\t\t\t\n\n\t增加元件\tR609\t-\tR609\n\nR701\n\t\t\t\t\n\n\t增加元件\tR701\t-\tR701\n\nR702\n\t\t\t\t\n\n\t增加元件\tR702\t-\tR702\n\nR703\n\t\t\t\t\n\n\t增加元件\tR703\t-\tR703"
},
{
"top": 7332,
"txt": "\t增加元件\tR422\t-\tR422\n\nR423\n\t\t\t\t\n\n\t增加元件\tR423\t-\tR423\n\nR424\n\t\t\t\t\n\n\t增加元件\tR424\t-\tR424\n\nR425\n\t\t\t\t\n\n\t增加元件\tR425\t-\tR425\n\nR520\n\t\t\t\t\n\n\t增加元件\tR520\t-\tR520\n\nR521\n\t\t\t\t\n\n\t增加元件\tR521\t-\tR521\n\nR522\n\t\t\t\t\n\n\t增加元件\tR522\t-\tR522\n\nR523\n\t\t\t\t\n\n\t增加元件\tR523\t-\tR523\n\nR524\n\t\t\t\t\n\n\t增加元件\tR524\t-\tR524\n\nR525\n\t\t\t\t\n\n\t增加元件\tR525\t-\tR525\n\nR609\n\t\t\t\t\n\n\t增加元件\tR609\t-\tR609\n\nR701\n\t\t\t\t\n\n\t增加元件\tR701\t-\tR701\n\nR702\n\t\t\t\t\n\n\t增加元件\tR702\t-\tR702\n\nR703\n\t\t\t\t\n\n\t增加元件\tR703\t-\tR703\n\nR704\n\t\t\t\t\n\n\t增加元件\tR704\t-\tR704\n\nR705\n\t\t\t\t\n\n\t增加元件\tR705\t-\tR705\n\nR708\n\t\t\t\t\n\n\t增加元件\tR708\t-\tR708\n\nR709\n\t\t\t\t\n\n\t增加元件\tR709\t-\tR709"
},
{
"top": 7520,
"txt": "R520\n\t\t\t\t\n\n\t增加元件\tR520\t-\tR520\n\nR521\n\t\t\t\t\n\n\t增加元件\tR521\t-\tR521\n\nR522\n\t\t\t\t\n\n\t增加元件\tR522\t-\tR522\n\nR523\n\t\t\t\t\n\n\t增加元件\tR523\t-\tR523\n\nR524\n\t\t\t\t\n\n\t增加元件\tR524\t-\tR524\n\nR525\n\t\t\t\t\n\n\t增加元件\tR525\t-\tR525\n\nR609\n\t\t\t\t\n\n\t增加元件\tR609\t-\tR609\n\nR701\n\t\t\t\t\n\n\t增加元件\tR701\t-\tR701\n\nR702\n\t\t\t\t\n\n\t增加元件\tR702\t-\tR702\n\nR703\n\t\t\t\t\n\n\t增加元件\tR703\t-\tR703\n\nR704\n\t\t\t\t\n\n\t增加元件\tR704\t-\tR704\n\nR705\n\t\t\t\t\n\n\t增加元件\tR705\t-\tR705\n\nR708\n\t\t\t\t\n\n\t增加元件\tR708\t-\tR708\n\nR709\n\t\t\t\t\n\n\t增加元件\tR709\t-\tR709\n\nR710\n\t\t\t\t\n\n\t增加元件\tR710\t-\tR710\n\nR711\n\t\t\t\t\n\n\t增加元件\tR711\t-\tR711\n\nR712\n\t\t\t\t\n\n\t增加元件\tR712\t-\tR712\n\nR716\n\t\t\t\t"
},
{
"top": 7708,
"txt": "R524\n\t\t\t\t\n\n\t增加元件\tR524\t-\tR524\n\nR525\n\t\t\t\t\n\n\t增加元件\tR525\t-\tR525\n\nR609\n\t\t\t\t\n\n\t增加元件\tR609\t-\tR609\n\nR701\n\t\t\t\t\n\n\t增加元件\tR701\t-\tR701\n\nR702\n\t\t\t\t\n\n\t增加元件\tR702\t-\tR702\n\nR703\n\t\t\t\t\n\n\t增加元件\tR703\t-\tR703\n\nR704\n\t\t\t\t\n\n\t增加元件\tR704\t-\tR704\n\nR705\n\t\t\t\t\n\n\t增加元件\tR705\t-\tR705\n\nR708\n\t\t\t\t\n\n\t增加元件\tR708\t-\tR708\n\nR709\n\t\t\t\t\n\n\t增加元件\tR709\t-\tR709\n\nR710\n\t\t\t\t\n\n\t增加元件\tR710\t-\tR710\n\nR711\n\t\t\t\t\n\n\t增加元件\tR711\t-\tR711\n\nR712\n\t\t\t\t\n\n\t增加元件\tR712\t-\tR712\n\nR716\n\t\t\t\t\n\n\t增加元件\tR716\t-\tR716\n\nR717\n\t\t\t\t\n\n\t增加元件\tR717\t-\tR717\n\nR718\n\t\t\t\t\n\n\t增加元件\tR718\t-\tR718\n\nR719\n\t\t\t\t\n\n\t增加元件\tR719\t-\tR719\n\nR720\n\t\t\t\t"
},
{
"top": 7896,
"txt": "\t增加元件\tR701\t-\tR701\n\nR702\n\t\t\t\t\n\n\t增加元件\tR702\t-\tR702\n\nR703\n\t\t\t\t\n\n\t增加元件\tR703\t-\tR703\n\nR704\n\t\t\t\t\n\n\t增加元件\tR704\t-\tR704\n\nR705\n\t\t\t\t\n\n\t增加元件\tR705\t-\tR705\n\nR708\n\t\t\t\t\n\n\t增加元件\tR708\t-\tR708\n\nR709\n\t\t\t\t\n\n\t增加元件\tR709\t-\tR709\n\nR710\n\t\t\t\t\n\n\t增加元件\tR710\t-\tR710\n\nR711\n\t\t\t\t\n\n\t增加元件\tR711\t-\tR711\n\nR712\n\t\t\t\t\n\n\t增加元件\tR712\t-\tR712\n\nR716\n\t\t\t\t\n\n\t增加元件\tR716\t-\tR716\n\nR717\n\t\t\t\t\n\n\t增加元件\tR717\t-\tR717\n\nR718\n\t\t\t\t\n\n\t增加元件\tR718\t-\tR718\n\nR719\n\t\t\t\t\n\n\t增加元件\tR719\t-\tR719\n\nR720\n\t\t\t\t\n\n\t增加元件\tR720\t-\tR720\n\nR721\n\t\t\t\t\n\n\t增加元件\tR721\t-\tR721\n\nR722\n\t\t\t\t\n\n\t增加元件\tR722\t-\tR722\n\nR741\n\t\t\t\t\n\n\t增加元件\tR741\t-\tR741"
},
{
"top": 8084,
"txt": "\t增加元件\tR705\t-\tR705\n\nR708\n\t\t\t\t\n\n\t增加元件\tR708\t-\tR708\n\nR709\n\t\t\t\t\n\n\t增加元件\tR709\t-\tR709\n\nR710\n\t\t\t\t\n\n\t增加元件\tR710\t-\tR710\n\nR711\n\t\t\t\t\n\n\t增加元件\tR711\t-\tR711\n\nR712\n\t\t\t\t\n\n\t增加元件\tR712\t-\tR712\n\nR716\n\t\t\t\t\n\n\t增加元件\tR716\t-\tR716\n\nR717\n\t\t\t\t\n\n\t增加元件\tR717\t-\tR717\n\nR718\n\t\t\t\t\n\n\t增加元件\tR718\t-\tR718\n\nR719\n\t\t\t\t\n\n\t增加元件\tR719\t-\tR719\n\nR720\n\t\t\t\t\n\n\t增加元件\tR720\t-\tR720\n\nR721\n\t\t\t\t\n\n\t增加元件\tR721\t-\tR721\n\nR722\n\t\t\t\t\n\n\t增加元件\tR722\t-\tR722\n\nR741\n\t\t\t\t\n\n\t增加元件\tR741\t-\tR741\n\nR742\n\t\t\t\t\n\n\t增加元件\tR742\t-\tR742\n\nR743\n\t\t\t\t\n\n\t增加元件\tR743\t-\tR743\n\nR744\n\t\t\t\t\n\n\t增加元件\tR744\t-\tR744\n\nR745\n\t\t\t\t\n\n\t增加元件\tR745\t-\tR745"
},
{
"top": 8272,
"txt": "R711\n\t\t\t\t\n\n\t增加元件\tR711\t-\tR711\n\nR712\n\t\t\t\t\n\n\t增加元件\tR712\t-\tR712\n\nR716\n\t\t\t\t\n\n\t增加元件\tR716\t-\tR716\n\nR717\n\t\t\t\t\n\n\t增加元件\tR717\t-\tR717\n\nR718\n\t\t\t\t\n\n\t增加元件\tR718\t-\tR718\n\nR719\n\t\t\t\t\n\n\t增加元件\tR719\t-\tR719\n\nR720\n\t\t\t\t\n\n\t增加元件\tR720\t-\tR720\n\nR721\n\t\t\t\t\n\n\t增加元件\tR721\t-\tR721\n\nR722\n\t\t\t\t\n\n\t增加元件\tR722\t-\tR722\n\nR741\n\t\t\t\t\n\n\t增加元件\tR741\t-\tR741\n\nR742\n\t\t\t\t\n\n\t增加元件\tR742\t-\tR742\n\nR743\n\t\t\t\t\n\n\t增加元件\tR743\t-\tR743\n\nR744\n\t\t\t\t\n\n\t增加元件\tR744\t-\tR744\n\nR745\n\t\t\t\t\n\n\t增加元件\tR745\t-\tR745\n\nR761\n\t\t\t\t\n\n\t增加元件\tR761\t-\tR761\n\nR762\n\t\t\t\t\n\n\t增加元件\tR762\t-\tR762\n\nR763\n\t\t\t\t\n\n\t增加元件\tR763\t-\tR763\n\nR764\n\t\t\t\t"
},
{
"top": 8460,
"txt": "R718\n\t\t\t\t\n\n\t增加元件\tR718\t-\tR718\n\nR719\n\t\t\t\t\n\n\t增加元件\tR719\t-\tR719\n\nR720\n\t\t\t\t\n\n\t增加元件\tR720\t-\tR720\n\nR721\n\t\t\t\t\n\n\t增加元件\tR721\t-\tR721\n\nR722\n\t\t\t\t\n\n\t增加元件\tR722\t-\tR722\n\nR741\n\t\t\t\t\n\n\t增加元件\tR741\t-\tR741\n\nR742\n\t\t\t\t\n\n\t增加元件\tR742\t-\tR742\n\nR743\n\t\t\t\t\n\n\t增加元件\tR743\t-\tR743\n\nR744\n\t\t\t\t\n\n\t增加元件\tR744\t-\tR744\n\nR745\n\t\t\t\t\n\n\t增加元件\tR745\t-\tR745\n\nR761\n\t\t\t\t\n\n\t增加元件\tR761\t-\tR761\n\nR762\n\t\t\t\t\n\n\t增加元件\tR762\t-\tR762\n\nR763\n\t\t\t\t\n\n\t增加元件\tR763\t-\tR763\n\nR764\n\t\t\t\t\n\n\t增加元件\tR764\t-\tR764\n\nR765\n\t\t\t\t\n\n\t增加元件\tR765\t-\tR765\n\nR771\n\t\t\t\t\n\n\t增加元件\tR771\t-\tR771\n\nR772\n\t\t\t\t\n\n\t增加元件\tR772\t-\tR772\n\nR773\n\t\t\t\t"
},
{
"top": 8648,
"txt": "\t增加元件\tR721\t-\tR721\n\nR722\n\t\t\t\t\n\n\t增加元件\tR722\t-\tR722\n\nR741\n\t\t\t\t\n\n\t增加元件\tR741\t-\tR741\n\nR742\n\t\t\t\t\n\n\t增加元件\tR742\t-\tR742\n\nR743\n\t\t\t\t\n\n\t增加元件\tR743\t-\tR743\n\nR744\n\t\t\t\t\n\n\t增加元件\tR744\t-\tR744\n\nR745\n\t\t\t\t\n\n\t增加元件\tR745\t-\tR745\n\nR761\n\t\t\t\t\n\n\t增加元件\tR761\t-\tR761\n\nR762\n\t\t\t\t\n\n\t增加元件\tR762\t-\tR762\n\nR763\n\t\t\t\t\n\n\t增加元件\tR763\t-\tR763\n\nR764\n\t\t\t\t\n\n\t增加元件\tR764\t-\tR764\n\nR765\n\t\t\t\t\n\n\t增加元件\tR765\t-\tR765\n\nR771\n\t\t\t\t\n\n\t增加元件\tR771\t-\tR771\n\nR772\n\t\t\t\t\n\n\t增加元件\tR772\t-\tR772\n\nR773\n\t\t\t\t\n\n\t增加元件\tR773\t-\tR773\n\nR774\n\t\t\t\t\n\n\t增加元件\tR774\t-\tR774\n\nR775\n\t\t\t\t\n\n\t增加元件\tR775\t-\tR775\n\nR781\n\t\t\t\t\n\n\t增加元件\tR781\t-\tR781"
},
{
"top": 8836,
"txt": "\t增加元件\tR743\t-\tR743\n\nR744\n\t\t\t\t\n\n\t增加元件\tR744\t-\tR744\n\nR745\n\t\t\t\t\n\n\t增加元件\tR745\t-\tR745\n\nR761\n\t\t\t\t\n\n\t增加元件\tR761\t-\tR761\n\nR762\n\t\t\t\t\n\n\t增加元件\tR762\t-\tR762\n\nR763\n\t\t\t\t\n\n\t增加元件\tR763\t-\tR763\n\nR764\n\t\t\t\t\n\n\t增加元件\tR764\t-\tR764\n\nR765\n\t\t\t\t\n\n\t增加元件\tR765\t-\tR765\n\nR771\n\t\t\t\t\n\n\t增加元件\tR771\t-\tR771\n\nR772\n\t\t\t\t\n\n\t增加元件\tR772\t-\tR772\n\nR773\n\t\t\t\t\n\n\t增加元件\tR773\t-\tR773\n\nR774\n\t\t\t\t\n\n\t增加元件\tR774\t-\tR774\n\nR775\n\t\t\t\t\n\n\t增加元件\tR775\t-\tR775\n\nR781\n\t\t\t\t\n\n\t增加元件\tR781\t-\tR781\n\nR782\n\t\t\t\t\n\n\t增加元件\tR782\t-\tR782\n\nR783\n\t\t\t\t\n\n\t增加元件\tR783\t-\tR783\n\nR784\n\t\t\t\t\n\n\t增加元件\tR784\t-\tR784\n\nR785\n\t\t\t\t\n\n\t增加元件\tR785\t-\tR785"
},
{
"top": 9024,
"txt": "R762\n\t\t\t\t\n\n\t增加元件\tR762\t-\tR762\n\nR763\n\t\t\t\t\n\n\t增加元件\tR763\t-\tR763\n\nR764\n\t\t\t\t\n\n\t增加元件\tR764\t-\tR764\n\nR765\n\t\t\t\t\n\n\t增加元件\tR765\t-\tR765\n\nR771\n\t\t\t\t\n\n\t增加元件\tR771\t-\tR771\n\nR772\n\t\t\t\t\n\n\t增加元件\tR772\t-\tR772\n\nR773\n\t\t\t\t\n\n\t增加元件\tR773\t-\tR773\n\nR774\n\t\t\t\t\n\n\t增加元件\tR774\t-\tR774\n\nR775\n\t\t\t\t\n\n\t增加元件\tR775\t-\tR775\n\nR781\n\t\t\t\t\n\n\t增加元件\tR781\t-\tR781\n\nR782\n\t\t\t\t\n\n\t增加元件\tR782\t-\tR782\n\nR783\n\t\t\t\t\n\n\t增加元件\tR783\t-\tR783\n\nR784\n\t\t\t\t\n\n\t增加元件\tR784\t-\tR784\n\nR785\n\t\t\t\t\n\n\t增加元件\tR785\t-\tR785\n\nR791\n\t\t\t\t\n\n\t增加元件\tR791\t-\tR791\n\nR792\n\t\t\t\t\n\n\t增加元件\tR792\t-\tR792\n\nR793\n\t\t\t\t\n\n\t增加元件\tR793\t-\tR793\n\nR794\n\t\t\t\t"
},
{
"top": 9212,
"txt": "R771\n\t\t\t\t\n\n\t增加元件\tR771\t-\tR771\n\nR772\n\t\t\t\t\n\n\t增加元件\tR772\t-\tR772\n\nR773\n\t\t\t\t\n\n\t增加元件\tR773\t-\tR773\n\nR774\n\t\t\t\t\n\n\t增加元件\tR774\t-\tR774\n\nR775\n\t\t\t\t\n\n\t增加元件\tR775\t-\tR775\n\nR781\n\t\t\t\t\n\n\t增加元件\tR781\t-\tR781\n\nR782\n\t\t\t\t\n\n\t增加元件\tR782\t-\tR782\n\nR783\n\t\t\t\t\n\n\t增加元件\tR783\t-\tR783\n\nR784\n\t\t\t\t\n\n\t增加元件\tR784\t-\tR784\n\nR785\n\t\t\t\t\n\n\t增加元件\tR785\t-\tR785\n\nR791\n\t\t\t\t\n\n\t增加元件\tR791\t-\tR791\n\nR792\n\t\t\t\t\n\n\t增加元件\tR792\t-\tR792\n\nR793\n\t\t\t\t\n\n\t增加元件\tR793\t-\tR793\n\nR794\n\t\t\t\t\n\n\t增加元件\tR794\t-\tR794\n\nR795\n\t\t\t\t\n\n\t增加元件\tR795\t-\tR795\n\nU21\n\t\t\t\t\n\n\t增加元件\tU21\t-\tU21\n\nU22\n\t\t\t\t\n\n\t增加元件\tU22\t-\tU22\n\nU24\n\t\t\t\t"
},
{
"top": 9400,
"txt": "R775\n\t\t\t\t\n\n\t增加元件\tR775\t-\tR775\n\nR781\n\t\t\t\t\n\n\t增加元件\tR781\t-\tR781\n\nR782\n\t\t\t\t\n\n\t增加元件\tR782\t-\tR782\n\nR783\n\t\t\t\t\n\n\t增加元件\tR783\t-\tR783\n\nR784\n\t\t\t\t\n\n\t增加元件\tR784\t-\tR784\n\nR785\n\t\t\t\t\n\n\t增加元件\tR785\t-\tR785\n\nR791\n\t\t\t\t\n\n\t增加元件\tR791\t-\tR791\n\nR792\n\t\t\t\t\n\n\t增加元件\tR792\t-\tR792\n\nR793\n\t\t\t\t\n\n\t增加元件\tR793\t-\tR793\n\nR794\n\t\t\t\t\n\n\t增加元件\tR794\t-\tR794\n\nR795\n\t\t\t\t\n\n\t增加元件\tR795\t-\tR795\n\nU21\n\t\t\t\t\n\n\t增加元件\tU21\t-\tU21\n\nU22\n\t\t\t\t\n\n\t增加元件\tU22\t-\tU22\n\nU24\n\t\t\t\t\n\n\t增加元件\tU24\t-\tU24\n\nU25\n\t\t\t\t\n\n\t增加元件\tU25\t-\tU25\n\nU26\n\t\t\t\t\n\n\t增加元件\tU26\t-\tU26\n\nU27\n\t\t\t\t\n\n\t增加元件\tU27\t-\tU27\n\nU28\n\t\t\t\t"
},
{
"top": 9588,
"txt": "\t增加元件\tR783\t-\tR783\n\nR784\n\t\t\t\t\n\n\t增加元件\tR784\t-\tR784\n\nR785\n\t\t\t\t\n\n\t增加元件\tR785\t-\tR785\n\nR791\n\t\t\t\t\n\n\t增加元件\tR791\t-\tR791\n\nR792\n\t\t\t\t\n\n\t增加元件\tR792\t-\tR792\n\nR793\n\t\t\t\t\n\n\t增加元件\tR793\t-\tR793\n\nR794\n\t\t\t\t\n\n\t增加元件\tR794\t-\tR794\n\nR795\n\t\t\t\t\n\n\t增加元件\tR795\t-\tR795\n\nU21\n\t\t\t\t\n\n\t增加元件\tU21\t-\tU21\n\nU22\n\t\t\t\t\n\n\t增加元件\tU22\t-\tU22\n\nU24\n\t\t\t\t\n\n\t增加元件\tU24\t-\tU24\n\nU25\n\t\t\t\t\n\n\t增加元件\tU25\t-\tU25\n\nU26\n\t\t\t\t\n\n\t增加元件\tU26\t-\tU26\n\nU27\n\t\t\t\t\n\n\t增加元件\tU27\t-\tU27\n\nU28\n\t\t\t\t\n\n\t增加元件\tU28\t-\tU28\n\nU31\n\t\t\t\t\n\n\t增加元件\tU31\t-\tU31\n\nU32\n\t\t\t\t\n\n\t增加元件\tU32\t-\tU32\n\nU33\n\t\t\t\t\n\n\t增加元件\tU33\t-\tU33"
},
{
"top": 9776,
"txt": "\t增加元件\tR792\t-\tR792\n\nR793\n\t\t\t\t\n\n\t增加元件\tR793\t-\tR793\n\nR794\n\t\t\t\t\n\n\t增加元件\tR794\t-\tR794\n\nR795\n\t\t\t\t\n\n\t增加元件\tR795\t-\tR795\n\nU21\n\t\t\t\t\n\n\t增加元件\tU21\t-\tU21\n\nU22\n\t\t\t\t\n\n\t增加元件\tU22\t-\tU22\n\nU24\n\t\t\t\t\n\n\t增加元件\tU24\t-\tU24\n\nU25\n\t\t\t\t\n\n\t增加元件\tU25\t-\tU25\n\nU26\n\t\t\t\t\n\n\t增加元件\tU26\t-\tU26\n\nU27\n\t\t\t\t\n\n\t增加元件\tU27\t-\tU27\n\nU28\n\t\t\t\t\n\n\t增加元件\tU28\t-\tU28\n\nU31\n\t\t\t\t\n\n\t增加元件\tU31\t-\tU31\n\nU32\n\t\t\t\t\n\n\t增加元件\tU32\t-\tU32\n\nU33\n\t\t\t\t\n\n\t增加元件\tU33\t-\tU33\n\nU34\n\t\t\t\t\n\n\t增加元件\tU34\t-\tU34\n\nU41\n\t\t\t\t\n\n\t增加元件\tU41\t-\tU41\n\nU42\n\t\t\t\t\n\n\t增加元件\tU42\t-\tU42\n\nU43\n\t\t\t\t\n\n\t增加元件\tU43\t-\tU43"
},
{
"top": 9964,
"txt": "U21\n\t\t\t\t\n\n\t增加元件\tU21\t-\tU21\n\nU22\n\t\t\t\t\n\n\t增加元件\tU22\t-\tU22\n\nU24\n\t\t\t\t\n\n\t增加元件\tU24\t-\tU24\n\nU25\n\t\t\t\t\n\n\t增加元件\tU25\t-\tU25\n\nU26\n\t\t\t\t\n\n\t增加元件\tU26\t-\tU26\n\nU27\n\t\t\t\t\n\n\t增加元件\tU27\t-\tU27\n\nU28\n\t\t\t\t\n\n\t增加元件\tU28\t-\tU28\n\nU31\n\t\t\t\t\n\n\t增加元件\tU31\t-\tU31\n\nU32\n\t\t\t\t\n\n\t增加元件\tU32\t-\tU32\n\nU33\n\t\t\t\t\n\n\t增加元件\tU33\t-\tU33\n\nU34\n\t\t\t\t\n\n\t增加元件\tU34\t-\tU34\n\nU41\n\t\t\t\t\n\n\t增加元件\tU41\t-\tU41\n\nU42\n\t\t\t\t\n\n\t增加元件\tU42\t-\tU42\n\nU43\n\t\t\t\t\n\n\t增加元件\tU43\t-\tU43\n\nU44\n\t\t\t\t\n\n\t增加元件\tU44\t-\tU44\n\nU45\n\t\t\t\t\n\n\t增加元件\tU45\t-\tU45\n\nU51\n\t\t\t\t\n\n\t增加元件\tU51\t-\tU51\n\nU52\n\t\t\t\t"
},
{
"top": 10152,
"txt": "U26\n\t\t\t\t\n\n\t增加元件\tU26\t-\tU26\n\nU27\n\t\t\t\t\n\n\t增加元件\tU27\t-\tU27\n\nU28\n\t\t\t\t\n\n\t增加元件\tU28\t-\tU28\n\nU31\n\t\t\t\t\n\n\t增加元件\tU31\t-\tU31\n\nU32\n\t\t\t\t\n\n\t增加元件\tU32\t-\tU32\n\nU33\n\t\t\t\t\n\n\t增加元件\tU33\t-\tU33\n\nU34\n\t\t\t\t\n\n\t增加元件\tU34\t-\tU34\n\nU41\n\t\t\t\t\n\n\t增加元件\tU41\t-\tU41\n\nU42\n\t\t\t\t\n\n\t增加元件\tU42\t-\tU42\n\nU43\n\t\t\t\t\n\n\t增加元件\tU43\t-\tU43\n\nU44\n\t\t\t\t\n\n\t增加元件\tU44\t-\tU44\n\nU45\n\t\t\t\t\n\n\t增加元件\tU45\t-\tU45\n\nU51\n\t\t\t\t\n\n\t增加元件\tU51\t-\tU51\n\nU52\n\t\t\t\t\n\n\t增加元件\tU52\t-\tU52\n\nU53\n\t\t\t\t\n\n\t增加元件\tU53\t-\tU53\n\nU54\n\t\t\t\t\n\n\t增加元件\tU54\t-\tU54\n\nU55\n\t\t\t\t\n\n\t增加元件\tU55\t-\tU55\n\nY1\n\t\t\t\t"
},
{
"top": 10340,
"txt": "\t增加元件\tU31\t-\tU31\n\nU32\n\t\t\t\t\n\n\t增加元件\tU32\t-\tU32\n\nU33\n\t\t\t\t\n\n\t增加元件\tU33\t-\tU33\n\nU34\n\t\t\t\t\n\n\t增加元件\tU34\t-\tU34\n\nU41\n\t\t\t\t\n\n\t增加元件\tU41\t-\tU41\n\nU42\n\t\t\t\t\n\n\t增加元件\tU42\t-\tU42\n\nU43\n\t\t\t\t\n\n\t增加元件\tU43\t-\tU43\n\nU44\n\t\t\t\t\n\n\t增加元件\tU44\t-\tU44\n\nU45\n\t\t\t\t\n\n\t增加元件\tU45\t-\tU45\n\nU51\n\t\t\t\t\n\n\t增加元件\tU51\t-\tU51\n\nU52\n\t\t\t\t\n\n\t增加元件\tU52\t-\tU52\n\nU53\n\t\t\t\t\n\n\t增加元件\tU53\t-\tU53\n\nU54\n\t\t\t\t\n\n\t增加元件\tU54\t-\tU54\n\nU55\n\t\t\t\t\n\n\t增加元件\tU55\t-\tU55\n\nY1\n\t\t\t\t\n\n\t增加元件\tY1\t-\tY1"
},
{
"top": 10425,
"txt": "\t增加元件\tU33\t-\tU33\n\nU34\n\t\t\t\t\n\n\t增加元件\tU34\t-\tU34\n\nU41\n\t\t\t\t\n\n\t增加元件\tU41\t-\tU41\n\nU42\n\t\t\t\t\n\n\t增加元件\tU42\t-\tU42\n\nU43\n\t\t\t\t\n\n\t增加元件\tU43\t-\tU43\n\nU44\n\t\t\t\t\n\n\t增加元件\tU44\t-\tU44\n\nU45\n\t\t\t\t\n\n\t增加元件\tU45\t-\tU45\n\nU51\n\t\t\t\t\n\n\t增加元件\tU51\t-\tU51\n\nU52\n\t\t\t\t\n\n\t增加元件\tU52\t-\tU52\n\nU53\n\t\t\t\t\n\n\t增加元件\tU53\t-\tU53\n\nU54\n\t\t\t\t\n\n\t增加元件\tU54\t-\tU54\n\nU55\n\t\t\t\t\n\n\t增加元件\tU55\t-\tU55\n\nY1\n\t\t\t\t\n\n\t增加元件\tY1\t-\tY1"
}
],
"buttons": [
"mil",
"mm",
"格",
"点",
"无",
"格",
"点",
"无",
"刷新",
"新增",
"报告错误",
"批量操作",
"弹出窗口",
"放置",
"S",
"F",
"P",
"3D",
"导出报告",
"应用修改",
"取消"
]
}
文件差异因一行或多行过长而隐藏
文件差异内容过多而无法显示 加载差异
+1
查看文件
@@ -0,0 +1 @@
{"segs": [["GND", 1, 78.222, 35.226, 77.8, 35.4, 0.3], ["GND", 1, 108.215, 31.926, 107.2, 32.8, 0.3]], "vias": [["GND", 77.8, 35.4], ["GND", 107.2, 32.8]]}
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+54
查看文件
@@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
u"""把**下板 PCB1** 当前的全部铜/元件状态落成一个 JSON(可回滚的安全网)。
2026-09-07 从 pcb2_snapshot.py 改 PCB uuid 得到,其余一模一样。
/c/Python314/python .claude/_pcb1_snapshot.py <out.json> # 路径相对 .claude/
抓:元件 (位号,x,y,rot,layer)、导线、过孔、铺铜(含多边形)、自由焊盘、layer 11 多段线、填充。
单位 mil(EasyEDA 原生),不换算。
"""
import io, json, os, sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from eda import run
PCB = '7e9415a16a909c51'
JS = u"""
await eda.dmt_EditorControl.openDocument('%s');
await new Promise(r=>setTimeout(r,1500));
const out = {comps:[], lines:[], vias:[], pours:[], fills:[], pads:[], polys:[], arcs:[]};
for (const c of await eda.pcb_PrimitiveComponent.getAll())
out.comps.push([c.getState_Designator(), c.getState_X(), c.getState_Y(), c.getState_Rotation(), c.getState_Layer()]);
for (const l of await eda.pcb_PrimitiveLine.getAll())
out.lines.push([l.layer, l.startX, l.startY, l.endX, l.endY, l.lineWidth, l.net]);
for (const a of await eda.pcb_PrimitiveArc.getAll())
out.arcs.push([a.layer, a.net, JSON.stringify(a).slice(0, 400)]);
for (const v of await eda.pcb_PrimitiveVia.getAll())
out.vias.push([v.x, v.y, v.holeDiameter, v.diameter, v.net]);
for (const p of await eda.pcb_PrimitivePour.getAll()) {
let poly = null; try { poly = p.complexPolygon; } catch(e) {}
out.pours.push({layer: p.layer, net: p.net, name: p.pourName, prio: p.pourPriority, fill: p.pourFillMethod,
poly: poly ? JSON.parse(JSON.stringify(poly)) : null});
}
for (const f of await eda.pcb_PrimitiveFill.getAll())
out.fills.push({layer: f.layer, net: f.net, raw: JSON.parse(JSON.stringify(f)).complexPolygon || null});
for (const p of await eda.pcb_PrimitivePad.getAll()) {
const pid = p.getState_PrimitiveId();
out.pads.push([pid, p.getState_PadNumber(), p.getState_Layer(), p.getState_X(), p.getState_Y(), p.getState_Net()]);
}
for (const p of await eda.pcb_PrimitivePolyline.getAll())
out.polys.push({layer: p.layer, raw: JSON.parse(JSON.stringify(p))});
return out;
""" % PCB
if __name__ == '__main__':
r = run(JS, timeout=300)
if not r.get('success'):
print(json.dumps(r, ensure_ascii=False)[:800]); sys.exit(1)
res = r['result']
out = os.path.join(HERE, sys.argv[1] if len(sys.argv) > 1 else '_pcb2_snap.json')
io.open(out, 'w', encoding='utf-8').write(json.dumps(res))
print(u'元件 %d / 导线 %d / 弧 %d / 过孔 %d / 铺铜 %d / 填充 %d / 焊盘 %d / 多段线 %d -> %s' % (
len(res['comps']), len(res['lines']), len(res['arcs']), len(res['vias']), len(res['pours']),
len(res['fills']), len(res['pads']), len(res['polys']), out))
+291
查看文件
@@ -0,0 +1,291 @@
# 下板 PCB1:35 条布不通的逐条分析与处理方案(2026-09-06,纯本地分析,未碰桥接)
数据来源:`_pcb1_place_now.json`(21:00 route_sig 下发后回读的快照,3118 线 / 985 孔,和 `_chainB.log` 的数一致)、
`pcb1-parts.json`、`_pcb1_poured.json`、`_pcb1_polypads.json`、`_pcb1_sig_plan_all.json`(归属表,认哪些铜是布线器自己画的)。
所有探路都用引擎自己的判据(`Field` / `route_grid`,CLR 0.20 + 半线宽 + QERR),所以"通 / 不通"和 `pcb1_route_sig.py` 是同一把尺。
`pcb-copper.json` 是 20:16 抓的(删死网之前,3938 线),**已过期**,本轮没用它。
---
## 0. 结论(先看这里)
1. **35 条里只有 2 条是摆位几何上真出不去的**(`U6.16` / `U7.16` = `$6N532` / `$6N547`)。其余 33 条在"拆光布线器自己画的铜"之后
**全部能以 0.20 线宽在 0.1 / 0.05 栅格上布通**——它们是**布线顺序 / 拆线额度**的事,不是母版几何缺口。
证据:`pcb1_unrouted.py`(新工具)对每条连接做两遍探路,全铜 vs 拆光自己人;`◆` 行给出**具体要拆哪些网络的哪几段**。
2. **A 类:`ESCAPE_NUDGE` 0.30→0.50 救不了 `U6.16` / `U7.16`**(本地实测,挪完照样"几何上就出不去")。
它们被 **C609 / C612 的 GND 脚 + GND 扇出孔(西)、C607 / C610(北)、U6.15 的 +3V3 出线段(东)** 三面围死;北挪 C607 只是把北墙推远。
真正的解法是 **C609 / C612 转 180°**(VREF 脚朝南正对引脚)——转完 `$6N532` / `$6N547` 各 3.6 mm 一次布通、净距 0。
`ESCAPE_NUDGE` 按 §26.22b 照改了(0.50 / 东列 0.45,本地六项检查全过),它对 U6.5/U6.6(SCL)/U6.13 那几排仍然有用,善后清单在 §2。
3. **C 类(五路 eFuse 编程脚 → 0402 阵)**:在 CH1 上把 6 个网的旧铜拆光重布,**5/6 通,只有 OVP(`$2N676`)卡在 `R109.2 → R110.1` 那一跳**——
OVP 节点在 R110 的西脚、R109 的东脚,两个脚斜对角,中间是 U14 东侧四根出线段的落脚区。**R%10 转 180°** 之后 CH1 六个网 **6/6 一次布通、净距 0**
(`pcb1_ch_reroute.py --ch 1 --move R110:0:0:180`)。这是母版里改一处、五路复制的那种改法(§3)。
4. **B 类(USB 差分对)**:束根本没起步——**束的起点锚 `USB_A=(104,25.18)` 被 `SCL` 的顶层线压着(净距 −0.08)**,终点引出线 (147,52)-(149,52)
被 `EFUSE_EN3` 的过孔 (149.5,52.1) 压着。板上**存在一条 0.74 mm 的束走廊**:顶层 y≈17.0 沿下板边从 x 101 走到 141,再沿 x≈142~143 北上到 y 48,
全程 76.7 mm、换层 2 次(`pcb1_usb_corridor.py --a 101,17` 实测)。要做的是改 `USB_A/USB_B/USB_VIA` 三个常量并拆 EFUSE_EN3 那一小截(§4)。
5. **D 类(SDA / SCL / INA_ALERT 末端)**:六个末端焊盘(U8.3/U8.4/U9.4/U11.3/U10.5/U6.6)**在拆光自己人之后都出得去、1.2~1.3 mm 内都有合法孔位**;
现在"没有合法孔位"是因为 INA226 南侧那个口袋被 SDA/SCL/INA_ALERT **自己的出线段 + 邻脚的出线段**(0.5 pitch,各留了 0.6~1.1 mm 的直出段)填满了。
处理办法是把这三网在各 INA226 周围的自己人铜拆掉、三根一起按 0.05 栅格重布(§5)。唯一硬的一处:`SCL → U6.6` 拆光也只能 **w0.15 / 0.05 栅格**过——U6 南排 0.5 pitch + R615 那 0.612 的道,`ESCAPE_NUDGE` 0.50 正是为它。
6. **E 类**:+5V 的 `J24.8/10` 那一坨困在排针 2.54 pitch 的针缝里(缝 0.74 = 刚好卡在 §26.22b 那个 0.741 门槛上);`VDAC2`(71 mm)、`EFUSE_PG2`、`EFUSE_FLT4` 都是拆几段就通。
`GND` 剩的那个碎片是 **Inner1 铺铜的一块 0 mm² 死铜岛**,不是布线的事。
---
## 1. 逐条清单(37 条 = 33 条信号 + GND 1 个铺铜岛 + USB 4 条;日志里的 35 = 33 + GND 按对象数的 2)
符号:**几何** = 摆位几何上过不去;**自己人** = 拆光布线器自己画的铜就通(括号里是路上压到的、要拆的网络与段数);**量化** = 要 0.05 栅格才通。
两端坐标是碎片锚点。"差多少"是瓶颈格的 edt 与 0.371(0.20 线在 0.1 栅格的门槛)之差。
| # | 网络 | 类 | 连接(碎片 A ⇢ 碎片 B) | 缝 mm | 卡在哪 / 差多少 |
|--:|---|:-:|---|--:|---|
| 1 | `$6N532` | **A** | C609.2+R614.2 ⇢ **U6.16** (78.83,39.51) | 1.37 | **几何**:U6.16 拆光也出不去。西 GND 孔 (78.03,39.61) 0.50 / GND 短线 0.66;北 C607.1 (79.08,40.79) 的西缘正好在 x 78.83;东 U6.15 (0.36) 及其 +3V3 出线段 0.51。三面墙,0.03 的线都过不去 |
| 2 | `$6N547` | **A** | C612.2+R616.2 ⇢ **U7.16** (108.82,36.21) | 1.36 | 同上,镜像:GND 孔 (108.02,36.31) 0.50、C610.1、U7.15 出线段 0.51 |
| 3 | `$2N676` | C | R109.2 ⇢ R110.1 ⇢ U14.15 | 2.2 / 3.5 | 自己人(`$2N680`×1 `$2N687`×1;`$2N685`×1 `EFUSE_EN1`×3 `VO1`×1)。母版几何真正紧的一跳:R109.2(东脚) → R110.1(西脚) 斜对角,见 §3 |
| 4 | `$2N680` | C | U14.19 ⇢ R112.2 | 3.1 | 自己人(`$2N676`×6 `$2N687`×3):U14.19 的出线段被 $2N687 的线 (y 46.10) 和自家旧半截 (y 46.52) 夹住 |
| 5 | `$8N676` | C | R210.1+U15.15 ⇢ R209.2 | 2.2 | 自己人(`$8N680`×1 `$8N687`×1)。R209.2 被 EFUSE_FLT2 线 (0.55) + $8N680 线 (0.87) 夹成 0.48 的缝(要 0.74) |
| 6 | `$8N680` | C | U15.19 ⇢ R212.2 | 3.1 | 自己人(`$8N687`×1 `+3V3`×2 `EFUSE_FLT2`×1) |
| 7 | `$8N698` | C | R216.2+R217.1 ⇢ U15.3 | 12.2 | 自己人(`$8N680`×2 `$8N687`×1 `$8N699`×2 `+3V3`×2 `EFUSE_FLT2`×4 `EFUSE_PG2`×3 `SCL`×1 `SDA`×1 `VO2`×1)。U15.3 在北排,邻脚 U15.2/U15.4 出线段 0.40 |
| 8 | `$8N727` | C | Q201.3+Q202.1 ⇢ R218.2 | 3.7 | 自己人(`+3V3`×5 `EFUSE_EN2`×2)。R218.2 被 +3V3 的 0.28 线三面包住(0.65~0.71) |
| 9 | `$10N676` | C | R309.2 ⇢ R310.1 ⇢ U16.15 | 2.2 / 3.5 | 自己人(`$10N680`×1 `$10N687`×1;`$10N685`×1 `EFUSE_EN3`×3 `VO3`×1)。R309.2:EFUSE_FLT3 线 0.55 + $10N680 线 0.85 → 缝 0.48 |
| 10 | `$10N680` | C | U16.19 ⇢ R312.2 | 3.1 | 自己人(`$10N687`×1 `+3V3`×2 `EFUSE_FLT3`×1)。日志:"理想路径要压掉 6 条(连坐后 11,上限 10)" → **RIP_MAX=10 卡住** |
| 11 | `$10N698` | C | R316.2+R317.1 ⇢ U16.3 | 12.2 | 自己人(9 个网 25 段)。U16.3 北排,EFUSE_PG3 出线段 0.40 |
| 12 | `$10N727` | C | Q301.3+Q302.1 ⇢ R318.2 | 3.7 | 自己人(`$10N732`×3 `+3V3`×3 `EFUSE_PG3`×3) |
| 13 | `$12N859` | C | U17.19 ⇢ R412.2 | 3.1 | 自己人(`$12N866`×1 `$17N151`×2 `EFUSE_PG4`×2) |
| 14 | `$12N866` | C | U17.18 ⇢ C414.1 | 1.9 | 自己人(`$12N859`×1 `EFUSE_PG4`×2) |
| 15 | `$12N877` | C | U17.3 ⇢ R416.2+R417.1 | 12.2 | 自己人(9 个网 19 段) |
| 16 | `$14N676` | C | R509.2 ⇢ R510.1 ⇢ U18.15 | 2.2 / 3.5 | 自己人(`$14N680`×1 `$14N687`×1;`$14N685`×1 `$17N151`×1) |
| 17 | `$14N680` | C | U18.19 ⇢ R512.2 | 3.1 | 自己人(`$14N687`×1 `EFUSE_EN5`×1 `EFUSE_PG5`×2) |
| 18 | `$14N687` | C | U18.18 ⇢ C514.1 | 1.9 | **量化+自己人**:瓶颈 (131.50,46.10) L1,edt 0.300,差 0.071 —— 夹在 `$14N680` 自家旧半截 (y 46.52) 和 GND 孔 (131.82,45.50)/R510.2 之间 |
| 19 | `$14N698` | C | R516.2+R517.1 ⇢ U18.3 | 12.2 | 自己人(11 个网 30 段) |
| 20 | `+5V` | E | 主干 ⇢ **J24.8+J24.10** | 14.0 | 那一坨(两针 + 6 段线)整个困在 J24 针缝里:2.54 pitch − Ø1.8 = **0.74 mm 的缝**,+5V 类最细 0.30 要 0.70(准确值)/ 0.84(0.1 栅格);瓶颈 (31.70,60.00) L2 贴着 J24.19 |
| 21 | `EFUSE_FLT4` | E | R413.2 ⇢ U17.20;R413.2 ⇢ U23.7 | 6.9 / 21.6 | 自己人(`$12N855`×3 `$12N859`×2 `$12N866`×2 `EFUSE_PG4`×2;U23.7 那一跳 10 个网 27 段)。U17.20 / U23.7 拆光都出得去,最近合法孔位 0.84 / 1.24 mm |
| 22 | `EFUSE_PG2` | E | R215.1+U15.2 ⇢ U23.14 | 35.7 | 自己人(`$16N18`×2 `+3V3`×6 `+5V`×1 `EFUSE_EN2`×1 `EFUSE_PG1`×2 `EFUSE_PG3`×2)。U23.14 两侧 U23.13/15 的出线段 0.55 |
| 23 | `VDAC2` | E | U6.11+U6.12 ⇢ R208.2 | 71.5 | 自己人(`$6N530`×2 `EFUSE_FLT2`×3 `EFUSE_FLT3`×3 `EFUSE_PG1`×1 `EFUSE_PG5`×1 `INA_ALERT`×1 `SCL`×1 `SDA`×1)。长网,多跑 `--ripup` |
| 24 | `INA_ALERT` | D | 主干(R607.2…) ⇢ U11.3 | 20.3 | 自己人(12 个网 32 段,大头是 `EFUSE_PG4`×7 `EFUSE_FLT5`×5 `SCL`×5)。U11.3 拆光后合法孔位 1.29 mm (45.95,48.40) |
| 25 | `INA_ALERT` | D | U11.3 ⇢ U8.3 | 29.5 | 自己人(`$12N877`×4 `$2N699`×3 `+5V`×2 `EFUSE_PG1`×5 `SCL`×1 `SDA`×1 `VO1`×3),要 0.05 栅格 |
| 26 | `SCL` | D | 主干 ⇢ **U6.6** | 15.6 | 自己人(`$6N525`×5 `EFUSE_FLT3`×2 `SDA`×10 `VDAC4`×3)但**只有 w0.15 / 0.05 栅格**:U6.5 / U6.7 0.36、它们的出线段 0.40,全铜时 3 mm 内没有合法孔位 |
| 27 | `SCL` | D | U6.6 ⇢ U10.5 | 73.1 | 自己人(15 个网 36 段,`SDA`×11)。U10.5 拆光后合法孔位 0.22 mm (140.75,75.80) |
| 28 | `SDA` | D | 主干 ⇢ U9.4 | 1.3 | 自己人(`EFUSE_PG2`×4 `SCL`×1)——差 1.3 mm |
| 29 | `SDA` | D | U9.4 ⇢ U8.4 | 46.4 | 自己人(`$2N699`×4 `$2N727`×5 `$8N732`×3 `+3V3`×5 `EFUSE_EN1`×1 `EFUSE_PG1`×4 `INA_ALERT`×1 `SCL`×1 `VBUS_EN4`×1),要 0.05 栅格 |
| 30 | `SDA` | D | 主干 ⇢ U12.2+U12.4 | 15.6 | 自己人(`$14N698`×4 `$17N154`×2 `VBUS_EN5`×1) |
| 31 | `GND` | — | 主平面 ⇢ Inner1 一块 0 mm² 铺铜岛 | — | 铺铜死岛,布线器接不上也不该接;`pcb1_pour` / `inner1_verify` 的事 |
| 32-35 | `USB_DP` / `USB_DM` | **B** | U20.14/13 ⇢ J22.B6/B7,A6↔B6 / A7↔B7 | 61 / 1.0 | 束没起步(§4);A↔B 短接是 0.5 pitch 的量化问题(差 0.021,0.05 栅格就通) |
> 表里没有 `$2N687` / `$8N687` / `$10N687` / `$12N855` 等:它们**现在是通的**,但被别的通道网当作"要拆的"——重布 C 类时它们会被拆掉重画,顺序见 §3。
---
## 2. A 类:`U6.16` / `U7.16`(`$6N532` / `$6N547`)
### 2.1 卡在哪(`pcb1_unrouted.py`,全铜 / 拆光自己人两遍都是 ✘)
`U6.16`(VREF, 0.28×0.80, 中心 (78.83,39.51)) 周围 1.5 mm 的异网铜,按到焊盘的距离:
| 距 | 网 | 是什么 | 方向 |
|--:|---|---|---|
| 0.36 | +3V3 | U6.15 焊盘 (79.33,39.51) | 东(0.5 pitch 邻脚) |
| 0.50 | GND | **过孔 (78.03,39.61)** —— C609.1 的 GND 扇出孔 | 西 |
| 0.51 | +3V3 | U6.15 的出线段 (79.33,39.86)-(79.33,40.38) | 东北 |
| 0.66 | GND | 短线 (78.03,40.28)-(78.03,39.61) w0.30 | 西北 |
| 0.67 | GND | U6 散热盘条 (79.76,38.85) | 南 |
| 0.84 | +3V3 | **C607.1 焊盘 (79.08,40.79)**,西缘 x = 78.83 = U6.16 的 x | 北 |
目标 C609.2 在 (78.03,41.32)、R614.2 在 (77.06,40.26)——在**西北**。往西北走要从 GND 孔 + GND 短线 + C609.1(GND,(78.03,40.48))这堵 x=78.03 的墙
和 C607.1 西缘(x=78.83)之间过:**缝 0.53 mm**(78.30 → 78.83),0.20 线要 0.74。
把 C607 再北挪 0.2(总 0.50)之后,这道缝**一样宽**——墙是东西向的,北挪没用。本地实测(`pcb1_ch_reroute.py --win 73,32,87,47 --nets '$6N532' --move C607:0:0.2 --move C608:0.15:0 --move R615:0:-0.2`):
"还有 1 个几何上就出不去:U6.16",布不通。U7 同。
### 2.2 解法:C609 / C612 转 180°(已写进 `pcb1_place.SAT_FLIP`)
C609 现在 rot 90,**GND 脚 (C609.1) 在南、VREF 脚 (C609.2) 在北**,GND 扇出孔又打在 GND 脚正南——正好把 U6.16 去 VREF 脚的路堵死。
转成 rot 270 之后 VREF 脚 (78.03,40.48) 正对 U6.16、只差 0.8 mm,GND 脚到 (78.03,41.32)。
本地实测(`--move C609:0:0:180 --drop-via 78.03,39.61`):`$6N532` **3.6 mm 一次布通,净距 0 / 钻孔 0 / 铺铜 0**;U7(`--move C612:0:0:180 --drop-via 108.02,36.31`)同样 3.6 mm。
路径(可直接手写):
$6N532: (78.03,40.48)→(78.03,39.93) ; (78.03,39.93)→(78.30,40.20)→(78.83,40.21) ; (78.83,39.51)→(78.83,40.21) ; (77.06,40.26)→(77.06,40.84) ; (77.80,40.60)→(77.30,40.60)→(77.06,40.84) 全部 L1 w0.20
$6N547: (108.02,37.18)→(108.02,36.63) ; (108.02,36.63)→(108.30,36.90)→(108.82,36.91) ; (108.82,36.21)→(108.82,36.91) ; (107.05,36.95)→(107.05,37.54) ; (107.80,37.30)→(107.34,37.30)→(107.12,37.42)→(107.05,37.54)
转件的善后:
| 件 | 删 | 补 |
|---|---|---|
| C609 (78.03,40.90) rot 90→**270** | `$6N532` 短线 L1 (78.03,41.32)-(78.03,41.87) 与 (78.03,41.87)-(77.06,40.84);`GND` 短线 L1 (78.03,40.28)-(78.03,39.61);GND 孔 (78.03,39.61) | C609.1 新 GND 孔 **(77.80,42.00)**(或 (77.45,41.75))+ 0.3 短线。这个点现在压着 `EFUSE_FLT3` 两段自己画的线,先拆它们(它会自己重布回来) |
| C612 (108.02,37.60) rot 90→**270** | `$6N547` 短线 L1 (108.02,38.02)-(108.02,38.57) 与 (108.02,38.57)-(107.05,37.54);`GND` 短线 L1 (108.02,36.98)-(108.02,36.31);GND 孔 (108.02,36.31) | C612.1 新 GND 孔 **(107.30,38.00)**(压着 `$6N547` 两段旧线,本来就要拆) |
⚠️ 孔位是按"拆光布线器自己画的铜 + 删掉上面那几段老扇出"算的合法孔位(孔心离焊盘 ≥ 0.45,0.3 线可达);C609.1 周围**全铜时 2.5 mm 内一个合法孔位都没有**——被 EFUSE_FLT5 / EFUSE_FLT2 的线和孔(都是布线器画的)围着。
### 2.3 `ESCAPE_NUDGE` 0.50 / 东列 0.45(按 §26.22b 照改,本地检查全过)
`pcb1_place.py` 里已改:R615/R617 (0,−0.50)、C607/C610 (0,+0.50)、C608/C611 (+0.45,0)。`/c/Python314/python .claude/pcb1_place.py`:
**"本地检查通过:焊盘净距≥0.2 / 无重叠 / 无越框 / 不压定位孔 / 高度预算全过 / 排针阵列对上锚点 / 去耦贴身"**,C607→U6.15 去耦距 1.31→1.51(上限 3.0)。
新坐标:R615 (78.655,35.025) / C607 (79.503,40.994) / C608 (82.98,39.51) / R617 (108.648,31.726) / C610 (109.493,37.695) / C611 (112.97,36.21)。
板上现在是按 0.30 摆的(`_pcb1_place_now.json` 与 `POS` 逐件核过,只差这 6 颗的 0.20 / 0.15 和 C609/C612 的旋转)。
**再挪这 0.20 / 0.15,6 mm 内会压到 / 要重做的铜**(`pcb1_ch_reroute.py --win 70,28,120,50 --nets NONE --move …` 的碰撞清单):
| 类 | 网 | 铜 | 被谁压 |
|---|---|---|---|
| 要删(异网净距 < 0.20) | `VDAC4` | 过孔 (79.85,34.65) | R615.2,+0.185 |
| 要删 | `SDA` | L1 (110.20,32.00)-(109.30,31.10) w0.20;过孔 (108.90,31.10) | R617.2,+0.106 / +0.050(这是 `pcb1_i2c_l3` 的换层孔,它每轮重算会自己让开——§26.22 A-1 已经说过) |
| 扇出短线要按新位置重做 | `+3V3` | L1 (79.08,40.72)-(79.08,41.36) w0.45 ← C607.1;L1 (109.07,37.41)-(109.07,38.06) ← C610.1 | 元件走了,线留在原地 |
| 同上 | `GND` | L1 (83.15,40.51)-(84.00,40.51) ← C608.2;(113.14,37.21)-(114.00,37.21) ← C611.2;(78.22,35.23)-(77.80,35.40) ← R615.1;(108.22,31.93)-(107.20,32.80) ← R617.1 | |
| 同上 | `$6N530` / `$6N545` | L1 (84.35,39.48)-(83.30,38.50)、(83.30,38.50)-(82.53,38.51) ← C608.1;(114.33,36.17)-(113.30,35.20)、(113.30,35.20)-(112.52,35.21) ← C611.1 | |
加上 §2.2 的 C609/C612 转件,**下发时一共删 7 线 / 2 孔 + 重做 10 段扇出短线 + 补 2 个 GND 孔**。
---
## 3. C 类:五路母版的 `$*N676/680/698/727`(+ 685/687)
### 3.1 几何(CH1,绝对坐标 = 局部 + (8.3,15.5))
eFuse `U14`(WQFN-20,rot 180,中心 (14.3,45.8))的四个编程脚在**东列**(x 16.30,0.5 pitch):
17 ILIM (45.05) `$2N685` / 18 dVdT (45.55) `$2N687` / 19 IMON (46.05) `$2N680` / 20 FLT# (46.55) `EFUSE_FLT1`;
OVP 15 在**南排** (15.05,44.30) `$2N676`;PGTH 3 在**北排** (14.55,47.30) `$2N698`。
它们要去的 0402 阵(模板 `CH1` 里 `R%09~R%17 / C%14`,三列 × 四行,2.0 mm 行距):
| 列 x | y 47.5 | y 45.5 | y 43.5 | y 41.5 |
|---|---|---|---|---|
| 19.3 | R109 (.1 VO1 西 / **.2 OVP 东**) | R110 (**.1 OVP 西** / .2 GND 东) | R111 (.1 ILIM 西 / .2 GND) | |
| 22.8 | C114 (.1 dVdT 西 / .2 GND) | R112 (.1 GND 西 / **.2 IMON 东**) | R113 (.1 +3V3 / **.2 FLT# 东**) | |
| 26.3 | R114 (.1 EN) | R115 (.1 PGOOD) | R116 (.1 $2N699 / .2 PGTH 东) | R117 (.1 PGTH 西 / .2 GND) |
**症结只有一处**:OVP 分压的中点在 **R109 的东脚 (19.73,47.5)** 和 **R110 的西脚 (18.87,45.5)**——斜对角,而两脚之间那块 (x 18.3~19.5, y 45.8~47.2)
正是 U14 东列四根出线段(终点 x 17.7~18.3)和它们去东边 0402 阵的必经之路;再加 OVP 还要从南排 (15.05,44.3) 绕过 R110/R111 那一列过来。
拆光重布的实测:**5/6 通、只剩 `$2N676` 的 `R109.2 → R110.1` 这一跳**(`pcb1_ch_reroute.py --ch 1`)。换布线顺序(长的先)反而 4/6。
### 3.2 方案:`R%10` 转 180°(母版改一处,五路复制)
R110 转 180° 之后 **OVP 脚到东边 (19.73,45.5),正对 R109.2 (19.73,47.5)**——一根 2 mm 的竖线,离出线段落脚区 1.2 mm;GND 脚到西边 (18.87,45.5)。
实测:`pcb1_ch_reroute.py --ch 1 --move R110:0:0:180 --drop-via 20.62,45.5` → **6/6 布通,净距 0 / 钻孔 0 / 铺铜 0**,
连 `--also-efuse`(再把 EFUSE_FLT1/PG1/EN1 一起拆了重布)也是 8/9(EFUSE_EN1 单独欠一条,是长网的顺序问题)。
GND 脚的扇出孔预先打在 **(18.87,44.50)**(脚正南 1.0,离 R111.1 顶 0.425)再布,仍是 6/6(`--add-via GND:18.87,44.5`)。
六个网的路径(`--move R110:0:0:180` 那一版,可直接手写;`L1/L2` 层,w0.20):
$2N685 (18.87,43.50)→(18.28,43.50) ; (16.30,45.05)→(17.05,45.05) ; (18.28,43.50)→(17.05,45.05)
$2N687 (22.26,47.50)→(21.56,47.50) ; (16.30,45.55)→(17.88,45.55)→(18.43,46.10)→(20.27,46.10) ; (20.27,46.10)→(20.48,46.10)→(21.55,47.17)→(21.56,47.50)
$2N680 (23.23,45.50)→(23.82,45.50) ; (16.30,46.05)→(17.75,46.05)→(18.23,46.52)→(20.27,46.52) ;
(20.27,46.52)→(20.20,46.73)L1 ▽ (20.20,46.73)→(21.18,45.75)→(23.40,45.75)→(23.70,45.62)→(23.82,45.50)L2 ▽ L1
$2N676 (19.73,47.50)→(20.32,47.50) ; (19.73,45.50)→(20.32,45.50) ; (15.05,44.30)→(15.05,43.55) ;
(20.32,47.50)→(19.90,47.60)L1 ▽ (19.50,47.20)→(19.50,46.10)→(20.20,45.40)L2 ▽ (20.32,45.50)L1 ;
(19.50,45.25)→(19.50,45.05)→(19.20,44.75)→(18.25,44.75)L1 ▽ (16.80,43.30)→(15.30,43.30)L2 ▽ (15.05,43.55)L1
$2N727 (25.13,51.00)→(25.72,51.00) ; (25.72,51.00)→(27.70,51.00)→(28.30,51.60)→(28.30,54.70)→(27.30,55.70)→(25.00,55.70)→(24.50,55.20)→(24.10,55.09)→(23.10,54.05) ; (22.70,53.80)→(21.10,52.20)→(21.10,51.00)
$2N698 (14.55,47.30)→(14.55,48.05)→(14.43,48.17)→(13.38,48.17)→(12.47,49.08)L1 ▽ (11.57,49.98)L2 ; 然后 49.5 mm:
(11.40,49.80)→(10.10,49.80)L2 ▽ (10.10,58.70)→(11.00,59.60)→(29.10,59.60)→(29.80,58.90)→(29.70,45.80)L1 ▽ (27.90,44.00)L2 ▽ (26.00,42.10)→(26.00,41.70)L1
`$2N698`(PGTH,北排脚 → 第三列)绕了 49.5 mm(从 U14 西边北上、沿 y 59.6 走到 x 29.7 再下来)——通,但难看;`--also-efuse` 那版是 27.9 mm。
不想绕的话母版里要动的是 **R%16/R%17(PGTH 分压)**:它们在第三列最东(局部 (18,28)/(18,26)),离北排脚 12 mm;现在腾出来的按键区(局部 x 24~29 / y 12~26)更远,帮不上。先接受绕行。
复制到五路(`R%10` 在模板里改 rot 0→180 就全改了;下面是**板上现有铜的善后**,按通道):
| CH | 件 | 现 rot → 新 | 删 GND 短线 | 旧 GND 孔 | 新 GND 孔(脚 ±1.0,北排通道镜像) |
|---|---|---|---|---|---|
| 1 | R110 (19.30,45.50) | 0 → 180 | L1 (19.97,45.50)-(20.62,45.50) | (20.62,45.50) 可留 | (18.87,44.50) 已验证 |
| 4 | R410 (50.97,45.50) | 0 → 180 | L1 (51.63,45.50)-(52.29,45.50) | (52.29,45.50) 可留 | (50.54,44.50) |
| 5 | R510 (130.50,45.50) | 0 → 180 | L1 (131.17,45.50)-(131.82,45.50) | (131.82,45.50) 可留 | (130.07,44.50) |
| 2 | R210 (48.59,80.00) | 180 → 0 | L1 (48.16,80.22)-(48.16,80.89) | (48.16,80.89) 可留 | (49.02,81.00) |
| 3 | R310 (136.97,80.00) | 180 → 0 | L1 (136.54,80.22)-(136.54,80.89) | (136.54,80.89) 可留 | (137.40,81.00) |
每路的六个网(由焊盘签名跨五路对齐算出,已写进 `pcb1_ch_reroute.C_NETS`):
CH1 `$2N685 $2N687 $2N680 $2N676 $2N698 $2N727` / CH2 `$8N…` 同号 / CH3 `$10N…` 同号 / **CH4 `$12N864 $12N866 $12N859 $12N855 $12N877 $12N906`** / CH5 `$14N…` 同号。
布线顺序就按这个(ILIM, dVdT, IMON, OVP, PGTH, 联锁);CH2~5 的路径让 `pcb1_ch_reroute.py --ch N --move R%10:0:0:180 --json` 各算一遍再手写或交给 route_sig。
---
## 4. B 类:USB 差分对(U20 IO19/IO20 → J22)
### 4.1 现在为什么整束跳过
`usb_pair()` 第一步就失败:"USB 束(0.7 mm 宽)布不通:(104.0,25.2) -> (147.0,52.0)"。原因不是走廊,是**两个锚点被占了**:
- 起点 `USB_A=(104.0,25.18)`:`SCL` 顶层线 (104.00,25.20)-(95.90,33.30) 和 (104.03,25.18)-(107.60,28.80) **正好穿过锚点**(净距 −0.08 / −0.05),
`SCL` 换层孔 (103.30,25.40) 0.43,`EFUSE_EN5` L2 斜线 0.03,`VBUS_EN5` L2 斜线 (100.8,20.85)-(119.8,39.85) 0.70——老走廊 A→B 那条 45° 带子被 EFUSE_EN5 / VBUS_EN5 / EFUSE_FLT5(顶层 7 段)占了。
- 终点引出线 (147,52)-(149,52):`EFUSE_EN3` 的过孔 (149.50,52.10) 和线 (149.5,52.1)-(144.3,46.9) / (149.5,55.9)-(149.5,52.1) 压在上面(−0.17 / −0.19)。
(第二十轮那次 58.1 mm 布通之后,R602/R603 被 `SAT` 表挪到 J22 旁边、EFUSE_EN3 又从这里过,落点没了。)
### 4.2 板上还有的 0.74 束走廊(`pcb1_usb_corridor.py`,两层各一张 0.5 mm 格的 ASCII 图)
- **顶层 y ≈ 15.8~17.3 那条带**:从 x 101 一直空到 x 150(CH5 底 18.23 之上什么都没有,下面是板边 / 风扇座之间)。
- **底层同一条带**也是空的(x 100.8 → 150)。
- 东侧北上:顶层 x 142~154、y 17.8~33.3 整块空(CH5 东缘到 J29/J30 之间);再往北 x 147.8~155 / y 33.8~45.8;到 y 45.8~46.3 时和 J22 前面那块 (x 143~149, y 46~52) 连上。
- 中段 (x 115~135, y 20~45) 顶层被 CH5 占满、底层只剩零碎——**老走廊已经没了**。
实测 `--a 101,17`:0.74 束 **通,76.7 mm、换层 2 次**:
`(101.3,17.0)L1 → (140.9,17.0)L1 → (141.9,20.4)…(141.9,34.1)L1 ▽ (141.9,38.7)→(143.2,40.0)L2 ▽ (143.2,48.2)L1 → (146.7,51.7)L1`
(0.60 束走底层 y 17.3 到 x 131.5 再上顶层,71.5 mm。)
### 4.3 要改什么(`pcb1_route_sig.py` 三个常量 + 拆一小截)
1. `USB_A` 改到 **(102.0, 17.0)**(西引出线到 x 100,避开 +3V3 孔 (99.04,17.76) 和 +3V3 竖线 x 98.90;`--a 101,17` 会报"引出线净距不够",`--a 102,17` 束本身就通)。
`U20.13/14` (96.75, 24.54/25.81) 到束头的扇入:顶层出脚往东 1.5 mm → 翻底层 → 沿 x≈100 南下到 y 17(底层 x 98.8~103 / y 18.8~25.3 是空的)。
⇒ `USB_VIA` 的头两个孔要重选到 (99.5~100.5, 20~24) 那一带(两孔错开 ≥ 1.5),现在的 (101.2,25.814)/(99.5,24.544) 是对着老锚点选的。
2. `USB_B` 改到 **(146.0, 52.0)** 左右,同时**拆掉 `EFUSE_EN3` 那一截**:过孔 (149.50,52.10)、L1 (149.5,52.1)-(144.3,46.9)、L2 (149.5,55.9)-(149.5,52.1)
(它会被 `--ripup` 重布回去,也可以先 `--net EFUSE_EN3` 单独补)。尾孔 `USB_VIA` 也要按新的 B 重选(J22.B6/B7 (151.93, 52.75/51.25) 到 (148,52))。
`--b 146,52` 实测束通,卡在"扇入段过不去(头 / 尾)"——正是因为 `USB_VIA` 还是老坐标。
3. 让 USB 在 route_sig 里**先于 SCL / EFUSE_EN3 / EFUSE_EN5 / VBUS_EN5** 占走廊(它本来就在 ①b 先跑);这次跑之前要把 4.1 里压着锚点的那几段自己人铜拆掉,不然还是先失败、后被占。
4. 顺手:`NORIP` 里 USB 已钉死不拆,但 `SCL` 那两段是 `pcb1_i2c_l3` 画的(不在 route_sig 归属表里),route_sig 拆不到——要在 `pcb1_i2c_l3` 的障碍表里把 USB 走廊当禁区,或者先布 USB 再跑 i2c_l3。
`pcb1_usb_corridor.py --a X,Y --b X,Y` 可以离线反复试锚点(它调的是 `usb_pair()` 本尊,输出和 route_sig 一样)。孔位 `USB_VIA` 现在还得手改常量再试;本轮没找到能一次过 `_fan()` 的组合(扇入用 L 形 + 顶层直出,条件苛刻),建议下一步在 `usb_pair()` 里把 `_fan` 改成用 `connect()` 走一小段迷宫。
---
## 5. D 类:SDA / SCL / INA_ALERT 末端
六个末端焊盘周围 1.5 mm(`[自]` = 布线器自己画的,可拆;`[扇出]` = pcb_fanout 画的,不动):
| 焊盘 | 1.5 mm 内的异网铜(近 → 远) | 拆光自己人后 |
|---|---|---|
| `U11.3` INA_ALERT (45.97,49.69) | U11.2 +3V3 / U11.4 SDA 焊盘 0.36;SDA 出线段 (46.47,49.69)-(46.47,49.08) `[自]` 0.40、SDA 竖线 (46.48,49.08)-(46.48,50.62) `[自]` 0.41;+3V3 扇出 `[扇出]` 0.76;SCL 出线段 `[自]` 0.90;SDA 斜线 `[自]` 0.96 | 出得去;合法孔位 1.29 mm (45.95,48.40) |
| `U8.3` INA_ALERT (14.30,49.69) | U8.2 GND / U8.4 SDA 焊盘 0.36;SDA 出线段 `[自]` 0.40;GND 扇出 `[扇出]` 0.76;SCL 出线段 ×2 `[自]` 0.90;GND 孔 `[扇出]` 1.11;$2N698 `[自]` 1.46 | 出得去 |
| `U8.4` SDA (14.80,49.69) | U8.3 / U8.5 焊盘 0.36;SCL 出线段 ×2 `[自]` 0.40;INA_ALERT 出线段 ×2 `[自]` 0.40;INA_ALERT 斜线 `[自]` 0.94;$2N699 孔 `[自]` 1.00 | 出得去;孔位 1.20 mm (16.00,49.70) |
| `U9.4` SDA (53.09,75.81) | U9.3 / U9.5 焊盘 0.36;INA_ALERT / SCL 出线段 `[自]` 0.40;+3V3 孔 (51.92,75.83) `[自]` 0.86、+3V3 线 ×2 `[自]` 0.86 | 出得去;孔位 1.19 mm (51.90,75.80)——就是那个 +3V3 孔的位置 |
| `U10.5` SCL (140.97,75.81) | U10.4 SDA 焊盘 0.36;SDA 出线段 `[自]` 0.40 / 0.43;SDA 孔 (140.00,75.40) `[自]` 0.75;INA_ALERT 出线段 `[自]` 0.91;EFUSE_PG3 `[自]` 1.13 | 出得去;孔位 0.22 mm (140.75,75.80) |
| `U6.6` SCL (79.33,36.51) | U6.5 $6N525 / U6.7 SDA 焊盘 0.36;两者的出线段 `[自]` 0.40;U6 散热盘 0.63;$6N525 折线 ×3 `[自]` 0.76~0.89;GND 孔 `[扇出]` 0.87 | 出得去,但**只有 w0.15 / 0.05 栅格**;孔位仍没有 |
结论:**不是"器件脚下没有合法孔位",是 INA226 南侧那个 0.5 pitch 的口袋被三根 I²C 线自己的直出段 + 邻脚的直出段填满了**。
`plan_stubs()` 给每个待接脚都留 0.3 mm 直出段并当障碍,SDA/SCL/ALERT 三个相邻脚各留一根,剩下的缝正好 < 0.74。
处理:把三网在 U8/U9/U10/U11/U12 周围 3 mm 内自己画的铜全拆(`--net SDA SCL INA_ALERT --ripup`,或用 `pcb1_ch_reroute.py --win … --nets SDA SCL INA_ALERT --rip-in-win` 先离线算),
三根**一起**按 0.05 栅格重布:先布最远的那根、让它从口袋侧面出去打孔,其余两根从另一侧。
`U6.6` 那一跳靠 `ESCAPE_NUDGE`(R615 −0.50 → U6 南排道 0.812)+ 拆 `$6N525`(U6.5)的 5 段折线。
---
## 6. E 类 / GND / +5V
- `VDAC2`(U6.11/12 → R208.2,71 mm)、`EFUSE_PG2`(→ U23.14,36 mm)、`EFUSE_FLT4`(→ U17.20 / U23.7):拆光自己人 0.1 栅格就通;要拆的都是 EFUSE_* / +3V3 的若干段,多跑 `--ripup` 或把 `RIP_MAX` 临时放到 15(`$10N680` 那条日志明说"要压掉 6 条,连坐后 11,上限 10")。
- `+5V` → `J24.8/10`:那一坨((15.49,63.77)/(18.03,63.77) 两针 + 6 段 0.30 线,含北侧 y 64.85 那一横)困在 J24 针阵里。2.54 − 1.80 = **0.74 mm 的针缝**,+5V 类最细 0.30 需要 0.70(准确)/ 0.84(0.1 栅格)/ 0.77(0.05)/ 0.735(0.025)。
布线器在 0.025 档理论上塞得下(0.74 ≥ 0.735,余 5 µm),实际没成。两条路:① 手写一根 0.30 从 (19.35,62.70) 沿两排针之间(y 62.5)往东走到 +5V 的 (33.27,61.23)——共 6 个针缝,每个 5 µm 余量,别指望 DRC 不叫;
② **认了**:+5V 现在只有 4 根 J24 针,这两根不接的话按 §25.10 的分散取电就少一半——要用户拍板要不要从 J24 西端绕出去(约 36 mm 的 0.6 线)。
- `GND`:剩的碎片是 Inner1 铺铜 **0 mm²** 的一块孤岛(`pcb1_netlist` 把它当一个节点)。是 `pcb1_pour` 的事,用 `inner1_verify.py` 看一眼;布线器不该管。
---
## 7. 改了哪些脚本、怎么本地验证的
| 文件 | 改动 | 本地验证 |
|---|---|---|
| **`pcb1_unrouted.py`**(新) | 逐条连接探路:全铜 / 拆光自己人两遍、线宽阶梯、0.1/0.05 栅格、瓶颈格与"差多少"、末端焊盘出线 + 最近合法孔位、五路签名对齐分类、`--json` | `/c/Python314/python .claude/pcb1_unrouted.py --json out.json`,1m57s,输出即本报告 §1。`eda.run` 在 import 前换成抛异常的桩 |
| **`pcb1_ch_reroute.py`**(新) | 在一个窗口 / 一组网络上把布线器自己画的铜拆光,按顺序用引擎本尊重布;`--move DES:dx:dy[:rot]`(本地模型挪 / 转件 + 6 mm 碰撞清单)、`--drop-via`、`--add-via NET:x,y`、`--rip-in-win`、`--order`、`--json` | `--ch 1 --move R110:0:0:180 --drop-via 20.62,45.5` → 6/6、净距 0;`--win 73,32,87,47 --nets '$6N532' --move C609:0:0:180 --drop-via 78.03,39.61` → 通 |
| **`pcb1_usb_corridor.py`**(新) | 原样调 `usb_pair()` 看卡在哪 + 两层 0.74 束的可走格 ASCII 图 + A→B 连通性(0.74/0.60/0.50) | `--a 101,17` → 76.7 mm 通;默认锚点 → 起点被 SCL 压着 |
| `pcb1_escape_audit.py` | 「一个焊盘 + 只有自己的出线段(≤1.2 mm、无孔)」也算孤立焊盘——route_sig 现在把出线段一起下发了,原判据会报 0 个 | 跑出 30 个待审、18 个被围死(和 §1 的 A/C/D 端点一致) |
| `pcb1_place.py` | `ESCAPE_NUDGE` 0.30→**0.50 / 东列 0.45**;新增 **`SAT_FLIP = {'C609':180,'C612':180}`**(在 `place_sats()` 之后施加,rot 90→270);两段注释写明为什么 | `/c/Python314/python .claude/pcb1_place.py` 六项全过;`POS` 与板上快照逐件比对只差这 8 颗 |
没有任何脚本碰过桥接:所有新脚本 import 之前把 `eda.run` / `eda.port` 换成抛 `RuntimeError` 的桩;`pcb1_place.py` 不带 `--push/--verify` 本来就只算不发。
---
## 8. 下发顺序(等桥接空出来之后;每一步之前先 `pcb1_reload.py` 确认没人在用)
1. **A 类**(只动 8 颗,**绝不 `pcb1_place.py --push`**):
a. 按 §2.3 的坐标定点挪 R615/C607/C608/R617/C610/C611,C609/C612 旋转到 270;
b. 删 §2.2 + §2.3 表里的 7 线 / 2 孔;删 10 段旧扇出短线;
c. 补 C609.1 GND 孔 (77.80,42.00)、C612.1 GND 孔 (107.30,38.00),各接 0.3 短线;重做 C607.1/C610.1 (+3V3)、C608.2/C611.2/R615.1/R617.1 (GND)、C608.1/C611.1 ($6N530/$6N545) 的扇出;
d. `pcb1_i2c_l3.py --push`(SDA 换层孔让开 R617.2);
e. `pcb1_parts_dump.py`(§26.21 那条规矩)。
2. **C 类**:五路 `R%10` 各转 180°(模板 `CH1` 里 `('R%10', 11.0, 30.0, 0)` → rot 180,板上按 §3.2 的表定点转);删 5 段 GND 短线;补 5 个 GND 孔;
`pcb_prune_nets.py` 之外**不要**用 `--clean`——用 `pcb1_ch_reroute.py --ch N --move R%10:0:0:180 --json` 逐路算好,手写下发,或 `route_sig --net <六个网> --ripup --push`。
3. **B 类**:拆 EFUSE_EN3 那 3 段 + SCL 穿过 (104,25.2) 的 2 段;改 `USB_A/USB_B/USB_VIA`;`pcb1_usb_corridor.py` 离线确认 `usb_pair()` 通了再 `route_sig --net USB_DP USB_DM --push`。
4. **D 类**:`route_sig --net SDA SCL INA_ALERT --ripup --push`(或先用 `pcb1_ch_reroute.py --win … --rip-in-win` 离线看)。
5. 收尾固定序列:`pcb1_route_sig.py --refresh --ripup --push` → `pcb1_pour.py --push --refresh` → `pcb1_reload.py` → `drc_read.py`;`pcb1_unrouted.py` 再跑一遍看还剩几条。
+1
查看文件
@@ -0,0 +1 @@
{"lines": [["+3V3_HUB", 2, 95.926, 70.25, 96.325, 70.25, 0.24], ["+3V3_HUB", 2, 96.325, 70.25, 96.325, 68.55, 0.24], ["+3V3_HUB", 1, 103.2, 65.2, 104.2, 66.2, 0.2], ["+3V3_HUB", 1, 104.2, 66.2, 106.8, 66.2, 0.2], ["+3V3_HUB", 1, 106.8, 66.2, 106.8, 67.1, 0.2], ["+3V3_HUB", 2, 106.8, 67.1, 106.7328, 67.0499, 0.2]], "vias": [["+3V3_HUB", 103.2, 65.2], ["+3V3_HUB", 106.8, 67.1]]}
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
{"J41": [68.98004954473168, 120.7500752030495], "J42": [69.39000554202596, 123.05995118780433], "J43": [66.68007955991148, 121.13996520047624], "J44": [69.96988753819875, 125.19990117368066], "J45": [140.4800330728318, 120.7500752030495], "J46": [140.8899890701261, 123.05995118780433], "J47": [138.1800630880116, 121.13996520047624], "J48": [141.4701250662972, 125.19990117368066], "J49": [211.98001660093192, 120.7500752030495], "J50": [212.3899725982262, 123.05995118780433], "J51": [209.68004661611172, 121.13996520047624], "J52": [212.9701085943973, 125.19990117368066], "J53": [43.859957710524284, 14.409927904894479], "J54": [43.450001713229994, 12.100051920139657], "J55": [46.15992769534448, 14.020037907467751], "J56": [42.870119717057214, 9.960101934263328], "J57": [115.35994123862439, 14.409927904894479], "J58": [114.94998524133011, 12.100051920139657], "J59": [117.6599112234446, 14.020037907467751], "J60": [114.37010324515734, 9.960101934263328]}
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+102
查看文件
@@ -0,0 +1,102 @@
{
"R906": [
97.876,
77.64,
180,
6.8,
[
99.209,
77.64
]
],
"R905": [
95.208,
78.359,
0,
6.0,
[
95.644,
78.592
]
],
"R904": [
103.934,
74.329,
180,
2.0,
[
105.267,
74.329
]
],
"R903": [
105.676,
72.778,
270,
1.6,
[
106.576,
73.211
]
],
"R909": [
106.517,
70.498,
180,
2.2,
[
107.586,
69.862
]
],
"R902": [
107.514,
62.179,
90,
4.0,
[
108.414,
61.746
]
],
"R908": [
108.261,
62.05,
90,
4.4,
[
109.161,
61.617
]
],
"R901": [
104.618,
58.626,
180,
5.0,
[
105.951,
58.626
]
],
"R907": [
106.721,
59.413,
180,
5.4,
[
108.054,
59.413
]
],
"R900": [
101.743,
57.838,
0,
5.8,
[
102.21,
57.838
]
]
}
+42
查看文件
@@ -0,0 +1,42 @@
import json, sys, math
import matplotlib; matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, Circle
M=39.3701
g=json.load(open('_pcb2_route_geom.json',encoding='utf-8'))
r=json.load(open('_pcb2_sig_routes.json',encoding='utf-8'))
out=sys.argv[1]; box=[float(v) for v in sys.argv[2:6]] if len(sys.argv)>5 else None
hl=set(sys.argv[6].split(',')) if len(sys.argv)>6 else set()
col={1:'#d33',2:'#26f',15:'#8a2',16:'#a80'}
fig,ax=plt.subplots(figsize=(16,10))
for p in g['pads']:
ref,num,net,lay,x,y=p[0],p[1],p[2],p[3],p[4]/M,p[5]/M
sh=p[7] if len(p)>7 else None
c='#888' if lay==12 else col.get(lay,'#888')
if net in hl: c='#f0f'
w=h=0.6
if sh and len(sh)>=3 and isinstance(sh[1],(int,float)): w,h=sh[1]/M,sh[2]/M
rot=p[6] if len(p)>6 and isinstance(p[6],(int,float)) else 0
if rot%180==90: w,h=h,w
ax.add_patch(Rectangle((x-w/2,y-h/2),w,h,fc=c,ec='none',alpha=0.6))
if box and box[0]<=x<=box[2] and box[1]<=y<=box[3] and (box[2]-box[0])<60:
ax.text(x,y,'%s.%s\n%s'%(ref,num,net),fontsize=4,ha='center',va='center')
for v in g['vias']:
net,x,y,d=v[0],v[1]/M,v[2]/M,v[3]/M
ax.add_patch(Circle((x,y),d/2,fc='#0a0' if net=='GND' else '#000',ec='none',alpha=0.7))
for l in g['lines']:
_,net,lay,x0,y0,x1,y1,w=l
ax.plot([x0/M,x1/M],[y0/M,y1/M],color=col.get(lay,'#888'),lw=w/M*6,alpha=0.5,solid_capstyle='round')
for k,path in r.items():
net=k.split(chr(0))[0]
for a,b in zip(path,path[1:]):
if a[2]==b[2]:
ax.plot([a[0],b[0]],[a[1],b[1]],color=('#f0f' if net in hl else col.get(a[2],'#888')),lw=a[3]*6,alpha=0.9,solid_capstyle='round')
else:
ax.add_patch(Circle((a[0],a[1]),0.305,fc='#000',ec='none'))
ax.set_aspect('equal')
if box: ax.set_xlim(box[0],box[2]); ax.set_ylim(box[1],box[3])
else: ax.set_xlim(0,220); ax.set_ylim(0,135)
ax.grid(True,lw=0.2)
plt.tight_layout(); plt.savefig(out,dpi=150)
print('saved',out)
+14
查看文件
@@ -0,0 +1,14 @@
import time, sys
sys.path.insert(0,'.')
from eda import run
JS = """
const left={}; for (const l of await eda.pcb_PrimitiveLine.getAll()) { const L=l.getState_Layer(); if([1,2,15,16].includes(L)) left[L]=(left[L]||0)+1; }
return {lines:left, vias:(await eda.pcb_PrimitiveVia.getAll()).length, pours:(await eda.pcb_PrimitivePour.getAll()).length};
"""
prev=None
for i in range(40):
r=run(JS, timeout=60)
res=r.get('result'); print(time.strftime('%H:%M:%S'), res, flush=True)
if res and not res['lines'] and res['vias']==0 and res['pours']==0: print('CLEAN'); break
if res==prev: print('stalled'); break
prev=res; time.sleep(20)
二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 137 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 166 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 286 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 238 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 127 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 241 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 129 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 196 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 257 KiB

+158
查看文件
@@ -0,0 +1,158 @@
BM24 手写常量与板上实测一致(五个站 × 13 个 GND 脚 + THERM/CC1 + R76n/R77n)✔
障碍表:焊盘 1007 / 过孔 332 / 铜层导线 382(摘掉本脚本自己负责的旧铜 952 件)
+3V3_HUB 保留 pcb2_dp_long 画的 3 条前置段(16 段导线 / 4 个孔)
预留出线段 353 条
GND 110 段路径 / 135 导线 / 50 过孔 0.0s
THERM_1 3 段路径 / 7 导线 / 2 过孔 0.2s
THERM_2 3 段路径 / 7 导线 / 2 过孔 0.1s
THERM_3 3 段路径 / 7 导线 / 2 过孔 0.1s
THERM_4 3 段路径 / 8 导线 / 2 过孔 0.4s
THERM_5 3 段路径 / 8 导线 / 2 过孔 0.4s
CC1_1 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_2 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_3 3 段路径 / 4 导线 / 0 过孔 0.1s
CC1_4 3 段路径 / 5 导线 / 0 过孔 0.1s
CC1_5 3 段路径 / 5 导线 / 0 过孔 0.1s
VBUS_UP 7 段路径 / 24 导线 / 4 过孔 1.6s
RBIAS 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18 3 段路径 / 4 导线 / 0 过孔 0.1s
VDD18PLL 3 段路径 / 5 导线 / 0 过孔 8.0s
XTAL1 4 段路径 / 8 导线 / 2 过孔 10.3s
XTAL2 4 段路径 / 10 导线 / 2 过孔 11.6s
CFGSEL0 3 段路径 / 10 导线 / 2 过孔 0.3s
CFGSEL1 3 段路径 / 5 导线 / 0 过孔 1.4s
NONREM0 3 段路径 / 15 导线 / 4 过孔 0.3s
NONREM1 3 段路径 / 3 导线 / 0 过孔 0.1s
PRTDIS6 3 段路径 / 5 导线 / 0 过孔 1.4s
PRTDIS7 3 段路径 / 5 导线 / 0 过孔 0.1s
HUB_RST 5 段路径 / 12 导线 / 2 过孔 3.9s
[!!] +3V3_HUB 布不通:(88.20,71.08) -> (35.79,106.66)
+3V3_HUB 81 段路径 / 184 导线 / 31 过孔 84.1s ← 有端点没连上
VBUS_DET 5 段路径 / 8 导线 / 0 过孔 1.2s
EDL_EN1 5 段路径 / 14 导线 / 4 过孔 1.5s
EDL_EN2 5 段路径 / 11 导线 / 2 过孔 0.5s
[!!] EDL_EN3 布不通:(179.57,106.66) -> (114.76,60.41)
EDL_EN3 3 段路径 / 6 导线 / 0 过孔 16.6s ← 有端点没连上
EDL_EN4 5 段路径 / 14 导线 / 2 过孔 0.8s
EDL_EN5 5 段路径 / 13 导线 / 2 过孔 0.6s
VBUS_EN1 4 段路径 / 8 导线 / 0 过孔 0.7s
VBUS_EN2 4 段路径 / 12 导线 / 1 过孔 0.9s
VBUS_EN3 4 段路径 / 8 导线 / 0 过孔 0.4s
VBUS_EN4 4 段路径 / 8 导线 / 1 过孔 0.5s
VBUS_EN5 4 段路径 / 9 导线 / 2 过孔 0.5s
UP_VBUS_DET 4 段路径 / 4 导线 / 1 过孔 0.2s
+5V 27 段路径 / 71 导线 / 12 过孔 11.6s
$16N222 3 段路径 / 5 导线 / 0 过孔 0.1s
$16N224 3 段路径 / 7 导线 / 0 过孔 0.4s
$20N304 3 段路径 / 8 导线 / 2 过孔 0.1s
$20N314 3 段路径 / 8 导线 / 2 过孔 0.1s
$20N324 3 段路径 / 6 导线 / 2 过孔 0.1s
$20N334 3 段路径 / 7 导线 / 2 过孔 0.1s
$20N344 3 段路径 / 9 导线 / 2 过孔 0.1s
$21N139 2 段路径 / 6 导线 / 0 过孔 0.1s
$21N140 2 段路径 / 6 导线 / 0 过孔 0.1s
$21N143 4 段路径 / 9 导线 / 0 过孔 0.5s
$21N148 4 段路径 / 9 导线 / 0 过孔 0.5s
$21N153 4 段路径 / 9 导线 / 0 过孔 0.5s
$21N157 2 段路径 / 6 导线 / 0 过孔 0.9s
$21N158 2 段路径 / 9 导线 / 2 过孔 0.8s
$22N121 2 段路径 / 6 导线 / 0 过孔 0.1s
$22N122 2 段路径 / 6 导线 / 0 过孔 0.1s
$22N125 4 段路径 / 9 导线 / 0 过孔 0.5s
$22N130 4 段路径 / 9 导线 / 0 过孔 0.5s
$22N135 4 段路径 / 9 导线 / 0 过孔 0.5s
$22N139 1 段路径 / 14 导线 / 2 过孔 0.7s
$22N140 2 段路径 / 8 导线 / 0 过孔 0.8s
$23N121 2 段路径 / 6 导线 / 0 过孔 0.1s
$23N122 2 段路径 / 6 导线 / 0 过孔 0.1s
$23N125 4 段路径 / 9 导线 / 0 过孔 0.5s
$23N130 4 段路径 / 9 导线 / 0 过孔 0.5s
$23N135 4 段路径 / 9 导线 / 0 过孔 0.5s
$23N139 2 段路径 / 6 导线 / 0 过孔 0.8s
$23N140 2 段路径 / 8 导线 / 0 过孔 0.7s
$24N121 2 段路径 / 6 导线 / 0 过孔 0.1s
$24N122 2 段路径 / 8 导线 / 0 过孔 0.1s
$24N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$24N130 4 段路径 / 9 导线 / 0 过孔 0.2s
$24N135 4 段路径 / 9 导线 / 0 过孔 0.2s
$24N139 2 段路径 / 10 导线 / 2 过孔 0.9s
$24N140 2 段路径 / 8 导线 / 0 过孔 0.9s
$25N121 2 段路径 / 6 导线 / 0 过孔 0.1s
$25N122 2 段路径 / 8 导线 / 0 过孔 0.1s
$25N125 4 段路径 / 9 导线 / 0 过孔 0.2s
$25N130 4 段路径 / 9 导线 / 0 过孔 0.2s
$25N135 4 段路径 / 9 导线 / 0 过孔 0.2s
$25N139 2 段路径 / 8 导线 / 0 过孔 0.8s
$25N140 2 段路径 / 8 导线 / 0 过孔 0.8s
VBUS1 11 段路径 / 19 导线 / 5 过孔 0.7s
VBUS2 11 段路径 / 23 导线 / 8 过孔 0.7s
VBUS3 11 段路径 / 19 导线 / 5 过孔 0.7s
VBUS4 11 段路径 / 23 导线 / 7 过孔 0.9s
VBUS5 11 段路径 / 19 导线 / 5 过孔 0.7s
KEY_SER 2 段路径 / 12 导线 / 4 过孔 0.8s
[!!] KEY_SRCLK 布不通:(120.24,60.41) -> (129.24,60.41)
[!!] KEY_SRCLK 布不通:(120.24,60.41) -> (126.02,71.40)
KEY_SRCLK 2 段路径 / 4 导线 / 2 过孔 53.7s ← 有端点没连上
KEY_RCLK 6 段路径 / 20 导线 / 6 过孔 1.9s
KEY_OE# 8 段路径 / 29 导线 / 8 过孔 2.0s
SR_CAS 3 段路径 / 18 导线 / 6 过孔 2.0s
SR_CAS2 3 段路径 / 7 导线 / 2 过孔 0.1s
[!!] K1_PWR 布不通:(113.48,54.06) -> (63.59,119.14)
K1_PWR 2 段路径 / 2 导线 / 0 过孔 21.0s ← 有端点没连上
[!!] K1_VUP 布不通:(113.48,55.33) -> (60.09,119.14)
K1_VUP 2 段路径 / 2 导线 / 0 过孔 22.6s ← 有端点没连上
[!!] K1_VDN 布不通:(113.48,56.60) -> (56.59,119.14)
K1_VDN 2 段路径 / 2 导线 / 0 过孔 22.7s ← 有端点没连上
K2_PWR 3 段路径 / 12 导线 / 4 过孔 2.3s
K2_VUP 3 段路径 / 13 导线 / 4 过孔 2.4s
K2_VDN 3 段路径 / 12 导线 / 2 过孔 1.8s
[!!] K3_PWR 布不通:(117.98,71.40) -> (206.59,119.14)
K3_PWR 2 段路径 / 2 导线 / 0 过孔 22.2s ← 有端点没连上
[!!] K3_VUP 布不通:(117.98,70.13) -> (203.09,119.14)
K3_VUP 2 段路径 / 2 导线 / 0 过孔 19.9s ← 有端点没连上
[!!] K3_VDN 布不通:(117.98,68.86) -> (199.59,119.14)
K3_VDN 2 段路径 / 2 导线 / 0 过孔 20.4s ← 有端点没连上
[!!] K4_PWR 布不通:(49.25,16.02) -> (122.48,54.06)
K4_PWR 2 段路径 / 2 导线 / 0 过孔 70.0s ← 有端点没连上
[!!] K4_VUP 布不通:(52.75,16.02) -> (122.48,55.33)
K4_VUP 2 段路径 / 2 导线 / 0 过孔 65.0s ← 有端点没连上
[!!] K4_VDN 布不通:(56.25,16.02) -> (122.48,56.60)
K4_VDN 2 段路径 / 2 导线 / 0 过孔 70.4s ← 有端点没连上
[!!] K5_PWR 布不通:(120.75,16.02) -> (122.48,61.68)
K5_PWR 2 段路径 / 2 导线 / 0 过孔 58.7s ← 有端点没连上
[!!] K5_VUP 布不通:(124.25,16.02) -> (123.76,60.41)
K5_VUP 1 段路径 / 1 导线 / 0 过孔 20.9s ← 有端点没连上
[!!] K5_VDN 布不通:(127.75,16.02) -> (122.48,59.14)
K5_VDN 2 段路径 / 2 导线 / 0 过孔 59.2s ← 有端点没连上
POGO1_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO1_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO1_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_PWR 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO2_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO2_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO3_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO3_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO4_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO4_VDN 1 段路径 / 4 导线 / 1 过孔 0.1s
POGO5_PWR 1 段路径 / 3 导线 / 1 过孔 0.1s
POGO5_VUP 1 段路径 / 2 导线 / 1 过孔 0.1s
POGO5_VDN 1 段路径 / 2 导线 / 1 过孔 0.1s
SDA 2 段路径 / 8 导线 / 1 过孔 0.1s
SCL 2 段路径 / 7 导线 / 2 过孔 0.4s
123 个网络 / 597 条路径 / 1314 段导线 / 236 个过孔 (722 秒)
⚠️ 15 个网络没布通:+3V3_HUB EDL_EN3 KEY_SRCLK K1_PWR K1_VUP K1_VDN K3_PWR K3_VUP K3_VDN K4_PWR K4_VUP K4_VDN K5_PWR K5_VUP K5_VDN
45° 化:直角拐点 70 -> 3(4 秒)
[!!] 切不动: $22N139 (82.00, 87.80) 转向 47°
[!!] 切不动: +3V3_HUB3 (90.46, 69.98) 转向 51°
[!!] 切不动: +3V3_HUB3 (90.96, 70.37) 转向 51°
净距校核(0.20 mm):
[!!] 线-过孔 POGO2_PWR vs GND L1 净距 -0.405 段(140.48,120.75)-(139.80,121.50)
[!!] 线-过孔 POGO2_VDN vs GND L1 净距 -0.405 段(138.18,121.14)-(131.70,121.10)
[!!] 线-旧线 $22N139 vs GND L2 净距 -0.200 段(81.72,88.11)-(82.00,87.80)
(同类重复 2 条已折叠)
路径已存 _pcb2_sig_routes.json

之后

宽度:  |  高度:  |  大小: 10 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 244 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 425 KiB

二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 202 KiB

+19
查看文件
@@ -0,0 +1,19 @@
import base64, json, sys, os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from eda import run
x0,y0,x1,y1,out = float(sys.argv[1]),float(sys.argv[2]),float(sys.argv[3]),float(sys.argv[4]),sys.argv[5]
js = """
const sleep = ms => new Promise(r => setTimeout(r, ms));
await eda.dmt_EditorControl.openDocument('942ed1560d81c1e7');
await sleep(1200);
const MIL=39.3701;
await eda.dmt_EditorControl.zoomToRegion(%f*MIL, %f*MIL, %f*MIL, %f*MIL);
await sleep(1500);
const img = await eda.dmt_EditorControl.getCurrentRenderedAreaImage();
const bytes = new Uint8Array(await new Response(img).arrayBuffer());
let s=''; for (let i=0;i<bytes.length;i++) s += String.fromCharCode(bytes[i]);
return {b64: btoa(s)};
""" % (x0, x1, y1, y0)
r = run(js, timeout=120)
assert r.get('success'), json.dumps(r, ensure_ascii=False)[:400]
open(out, 'wb').write(base64.b64decode(r['result']['b64'])); print('->', out)
二进制
查看文件
二进制文件未显示。

之后

宽度:  |  高度:  |  大小: 273 KiB

二进制
查看文件
二进制文件未显示。
+10
查看文件
@@ -0,0 +1,10 @@
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1200));
const MIL=39.3701, r=[];
const lines=await eda.pcb_PrimitiveLine.getAll(), vias=await eda.pcb_PrimitiveVia.getAll();
const cx=126.87, cy=69.24;
for (const l of lines){ if(l.getState_Net()!=='KEY_RCLK') continue;
const sx=l.getState_StartX()/MIL, sy=l.getState_StartY()/MIL, ex=l.getState_EndX()/MIL, ey=l.getState_EndY()/MIL;
if(Math.min(Math.hypot(sx-cx,sy-cy),Math.hypot(ex-cx,ey-cy))<4.0) r.push(['L'+l.getState_Layer(), +sx.toFixed(3),+sy.toFixed(3),+ex.toFixed(3),+ey.toFixed(3), +(l.getState_LineWidth()/MIL).toFixed(2)]); }
for (const v of vias){ if(v.getState_Net()!=='KEY_RCLK') continue; const x=v.getState_X()/MIL,y=v.getState_Y()/MIL; if(Math.hypot(x-cx,y-cy)<4.0) r.push(['VIA',+x.toFixed(3),+y.toFixed(3)]); }
return r;
+11
查看文件
@@ -0,0 +1,11 @@
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1200));
const MIL=39.3701;
const cnt=async()=>{ const L=await eda.pcb_PrimitiveLine.getAll(); return L.filter(l=>l.getState_Net()==='KEY_RCLK' && Math.hypot(l.getState_StartX()/MIL-126.865,l.getState_StartY()/MIL-69.236)<0.05 || l.getState_Net()==='KEY_RCLK' && Math.hypot(l.getState_EndX()/MIL-126.865,l.getState_EndY()/MIL-69.236)<0.05).map(l=>[l.getState_PrimitiveId(), +(l.getState_StartX()/MIL).toFixed(3), +(l.getState_StartY()/MIL).toFixed(3), +(l.getState_EndX()/MIL).toFixed(3), +(l.getState_EndY()/MIL).toFixed(3)]); };
const before=await cnt();
const r=await eda.pcb_PrimitiveLine.create('KEY_RCLK', 2, 126.865*MIL, 69.236*MIL, 126.865*MIL, 70.521*MIL, 0.2*MIL);
const after=await cnt();
await eda.pcb_Document.save();
await new Promise(r=>setTimeout(r,1500));
const after2=await cnt();
return {before, created:!!r, id:r&&r.getState_PrimitiveId&&r.getState_PrimitiveId(), after, after2};
+10
查看文件
@@ -0,0 +1,10 @@
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1200));
const MIL=39.3701;
const cnt=async()=>{ const L=await eda.pcb_PrimitiveLine.getAll(); return L.filter(l=>l.getState_Net()==='KEY_RCLK' && (Math.hypot(l.getState_StartX()/MIL-126.865,l.getState_StartY()/MIL-69.236)<0.05 || Math.hypot(l.getState_EndX()/MIL-126.865,l.getState_EndY()/MIL-69.236)<0.05)).map(l=>[l.getState_PrimitiveId(), +(l.getState_StartX()/MIL).toFixed(3), +(l.getState_StartY()/MIL).toFixed(3), +(l.getState_EndX()/MIL).toFixed(3), +(l.getState_EndY()/MIL).toFixed(3)]); };
const r=await eda.pcb_PrimitiveLine.create('KEY_RCLK', 2, 126.865*MIL, 69.236*MIL, 126.865*MIL, 70.521*MIL, 0.2*MIL);
const mid=await cnt();
await eda.pcb_Document.save();
await new Promise(r=>setTimeout(r,1500));
const after=await cnt();
return {dupCreated:!!r, mid, after};
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
{"cur": "C4-SITE1", "parts": [["J81", 225, 630, 0, [["1", 205, 645], ["2", 205, 635], ["3", 205, 625], ["4", 205, 615]]], ["R781", 170, 575, 90, [["2", 170, 595], ["1", 170, 555]]], ["R791", 190, 575, 90, [["2", 190, 595], ["1", 190, 555]]], ["C801", 250, 630, 270, [["1", 250, 650], ["2", 250, 610]]], ["C802", 350, 630, 90, [["1", 350, 615], ["2", 350, 645]]], ["C803", 450, 630, 90, [["1", 450, 615], ["2", 450, 645]]], ["C804", 550, 630, 90, [["1", 550, 615], ["2", 550, 645]]], ["C805", 650, 630, 90, [["1", 650, 615], ["2", 650, 645]]], ["C806", 750, 630, 90, [["2", 750, 650], ["1", 750, 610]]], ["C761", 1060, 370, 90, [["2", 1060, 390], ["1", 1060, 350]]], ["J41", 220, 380, 0, [["1", 205, 380]]], ["J42", 320, 380, 0, [["1", 305, 380]]], ["J43", 420, 380, 0, [["1", 405, 380]]], ["J44", 520, 380, 0, [["1", 505, 380]]], ["J61", 660, 400, 0, [["1", 635, 405], ["2", 635, 395], ["3", 635, 425], ["4", 635, 375]]], ["U41", 880, 400, 0, [["1", 845, 410], ["2", 845, 400], ["3", 845, 390], ["4", 915, 390], ["5", 915, 400], ["6", 915, 410]]], ["R741", 975, 370, 90, [["2", 975, 390], ["1", 975, 350]]]], "ports": [["VO1_P", 940, 720, 0, "Netport-BI"], ["POGO1_PWR", 205, 330, 180, "Netport-BI"], ["POGO1_VUP", 305, 300, 180, "Netport-BI"], ["POGO1_VDN", 405, 270, 180, "Netport-BI"], ["EDL_EN1", 1000, 410, 0, "Netport-BI"]], "flags": [["GND", 900, 510, 0], ["GND", 505, 240, 0], ["GND", 825, 350, 0], ["GND", 600, 445, 180], ["GND", 600, 355, 0], ["GND", 975, 320, 0], ["GND", 1060, 320, 0], ["+3V3_HUB", 945, 340, 180], ["+3V3_HUB", 1060, 420, 0]], "wires": [[940, 720, 750, 720, 750, 720, 750, 650, 650, 720, 750, 720, 650, 720, 650, 645, 550, 720, 650, 720, 550, 720, 550, 645, 450, 720, 550, 720, 450, 720, 450, 645, 350, 720, 450, 720, 350, 720, 350, 645, 250, 720, 350, 720, 250, 720, 250, 650, 100, 720, 250, 720, 100, 720, 100, 645, 100, 645, 205, 645, 90, 720, 100, 720], [900, 510, 900, 540, 900, 540, 750, 540, 750, 540, 750, 610, 650, 540, 750, 540, 650, 540, 650, 615, 550, 540, 650, 540, 550, 540, 550, 615, 450, 540, 550, 540, 450, 540, 450, 615, 350, 540, 450, 540, 350, 540, 350, 615, 250, 540, 350, 540, 250, 540, 250, 610, 190, 540, 250, 540, 190, 540, 190, 555, 170, 540, 190, 540, 170, 540, 170, 555, 130, 540, 170, 540, 130, 540, 130, 635, 130, 635, 205, 635, 90, 540, 130, 540], [170, 625, 205, 625, 170, 595, 170, 625], [190, 615, 205, 615, 190, 595, 190, 615], [205, 330, 205, 380], [305, 300, 305, 380], [405, 270, 405, 380], [505, 240, 505, 380], [845, 490, 845, 410, 530, 490, 845, 490, 530, 405, 530, 490, 635, 405, 530, 405], [915, 300, 915, 390, 560, 300, 915, 300, 560, 395, 560, 300, 635, 395, 560, 395], [825, 400, 845, 400, 825, 350, 825, 400], [600, 425, 635, 425, 600, 445, 600, 425], [600, 375, 635, 375, 600, 355, 600, 375], [945, 400, 915, 400, 945, 340, 945, 400], [1000, 410, 975, 410, 975, 390, 975, 410, 915, 410, 975, 410], [975, 320, 975, 350], [1060, 420, 1060, 390], [1060, 320, 1060, 350]], "texts": []}
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
{"cur": "P6-FAN-EDL", "parts": [["U33", 250, 600, 0, [["1", 210, 635], ["2", 210, 625], ["3", 210, 615], ["4", 210, 605], ["5", 210, 595], ["6", 210, 585], ["7", 210, 575], ["8", 210, 565], ["9", 290, 565], ["10", 290, 575], ["11", 290, 585], ["12", 290, 595], ["13", 290, 605], ["14", 290, 615], ["15", 290, 625], ["16", 290, 635]]], ["C739", 520, 600, 270, [["2", 520, 580], ["1", 520, 620]]], ["Q6", 700, 330, 0, [["3", 710, 350], ["1", 680, 330], ["2", 710, 310]]], ["R733", 600, 330, 0, [["2", 620, 330], ["1", 580, 330]]], ["R734", 660, 270, 90, [["2", 660, 290], ["1", 660, 250]]], ["D2", 790, 430, 270, [["2", 790, 410], ["1", 790, 450]]], ["C738", 1090, 740, 270, [["1", 1090, 755], ["2", 1090, 725]]], ["R730", 970, 745, 270, [["2", 970, 725], ["1", 970, 765]]], ["R731", 920, 725, 0, [["2", 940, 725], ["1", 900, 725]]], ["R732", 840, 690, 270, [["2", 840, 670], ["1", 840, 710]]], ["J26", 1085, 700, 0, [["1", 1065, 710], ["2", 1065, 700], ["3", 1065, 690]]], ["J27", 1085, 620, 0, [["1", 1065, 630], ["2", 1065, 620], ["3", 1065, 610]]], ["J28", 1085, 540, 0, [["1", 1065, 550], ["2", 1065, 540], ["3", 1065, 530]]], ["J29", 1085, 460, 0, [["1", 1065, 470], ["2", 1065, 460], ["3", 1065, 450]]], ["J30", 1085, 380, 0, [["1", 1065, 390], ["2", 1065, 380], ["3", 1065, 370]]]], "ports": [["EDL_EN1", 330, 625, 0, "Netport-BI"], ["KEY_SRCLK", 330, 585, 0, "Netport-BI"], ["KEY_RCLK", 330, 595, 0, "Netport-BI"], ["KEY_OE#", 330, 605, 0, "Netport-BI"], ["SR_CAS2", 330, 615, 0, "Netport-BI"], ["FAN_PWM", 540, 330, 180, "Netport-BI"], ["FAN_TACH", 800, 725, 180, "Netport-BI"], ["K2_VUP", 170, 635, 180, "Netport-BI"], ["K2_VDN", 170, 625, 180, "Netport-BI"], ["K2_PWR", 170, 615, 180, "Netport-BI"], ["K3_VDN", 170, 605, 180, "Netport-BI"], ["K3_VUP", 170, 595, 180, "Netport-BI"], ["K3_PWR", 170, 585, 180, "Netport-BI"], ["HUB_RST", 170, 575, 180, "Netport-BI"]], "flags": [["+3V3", 400, 665, 0], ["+3V3", 400, 540, 180], ["+3V3", 520, 650, 0], ["+12V", 790, 480, 0], ["+12V", 1030, 785, 0], ["GND", 170, 535, 0], ["GND", 520, 550, 0], ["GND", 660, 225, 0], ["GND", 710, 280, 0], ["GND", 1090, 700, 0], ["GND", 840, 645, 0]], "wires": [[170, 635, 210, 635], [170, 625, 210, 625], [170, 615, 210, 615], [170, 605, 210, 605], [330, 625, 290, 625], [330, 585, 290, 585], [330, 595, 290, 595], [330, 605, 290, 605], [330, 615, 290, 615], [400, 635, 290, 635, 400, 665, 400, 635], [400, 575, 290, 575, 400, 540, 400, 575], [170, 565, 210, 565, 170, 535, 170, 565], [520, 650, 520, 620], [520, 550, 520, 580], [540, 330, 580, 330], [680, 330, 660, 330, 660, 290, 660, 330, 620, 330, 660, 330], [660, 225, 660, 250], [710, 280, 710, 310], [1000, 350, 790, 350, 790, 350, 790, 410, 710, 350, 790, 350, 1000, 350, 1000, 380, 1000, 380, 1065, 380, 1000, 460, 1000, 380, 1000, 460, 1065, 460, 1000, 540, 1000, 460, 1000, 540, 1065, 540, 1000, 620, 1000, 540, 1000, 620, 1065, 620, 1000, 700, 1000, 620, 1000, 700, 1065, 700], [790, 480, 790, 450], [1030, 710, 1065, 710, 1030, 630, 1030, 710, 1030, 630, 1065, 630, 1030, 550, 1030, 630, 1030, 550, 1065, 550, 1030, 470, 1030, 550, 1030, 470, 1065, 470, 1030, 470, 1030, 390, 1030, 390, 1065, 390, 1030, 710, 1030, 755, 1030, 755, 1090, 755, 1030, 755, 1030, 765, 1030, 765, 970, 765, 1030, 785, 1030, 765], [970, 690, 1065, 690, 970, 725, 970, 690, 940, 725, 970, 725, 970, 610, 970, 690, 970, 610, 1065, 610, 970, 610, 970, 530, 970, 530, 1065, 530, 970, 450, 970, 530, 970, 450, 1065, 450, 970, 450, 970, 370, 970, 370, 1065, 370], [1090, 700, 1090, 725], [800, 725, 840, 725, 840, 710, 840, 725, 900, 725, 840, 725], [840, 645, 840, 670], [210, 595, 170, 595], [210, 585, 170, 585], [210, 575, 170, 575]], "texts": []}
+25
查看文件
@@ -0,0 +1,25 @@
import json,sys,os
sys.path.insert(0,'.claude')
from eda import run
page=sys.argv[1]
r=run("""
await eda.dmt_EditorControl.openDocument('%s'); await new Promise(r=>setTimeout(r,1200));
const cur=(await eda.dmt_Schematic.getCurrentSchematicPageInfo()).name;
const parts=[],ports=[],flags=[];
for (const c of await eda.sch_PrimitiveComponent.getAll()){
const t=c.getState_ComponentType();
if (t==='part'){ const ps=await c.getAllPins(); parts.push([c.getState_Designator(),Math.round(c.getState_X()),Math.round(c.getState_Y()),c.getState_Rotation(),ps.map(p=>[p.getState_PinNumber(),Math.round(p.getState_X()),Math.round(p.getState_Y())])]); }
else if (t==='netport') ports.push([c.getState_Net(),Math.round(c.getState_X()),Math.round(c.getState_Y()),c.getState_Rotation(),c.getState_Component().name]);
else if (t==='netflag') flags.push([c.getState_Net(),Math.round(c.getState_X()),Math.round(c.getState_Y()),c.getState_Rotation()]);
}
const wires=(await eda.sch_PrimitiveWire.getAll()).map(w=>w.getState_Line().map(Math.round));
const texts=[];
return {cur,parts,ports,flags,wires,texts};
"""%page, timeout=300)
assert r.get('success'), json.dumps(r,ensure_ascii=False)[:500]
out=r['result']
json.dump(out,open('.claude/_tmp_page_%s.json'%page,'w',encoding='utf-8'),ensure_ascii=False)
print('page',out['cur'],'parts',len(out['parts']),'ports',len(out['ports']),'flags',len(out['flags']),'wires',len(out['wires']),'texts',len(out['texts']))
for p in out['parts']: print(' PART',p[0],p[1],p[2],p[3],p[4])
for p in out['ports']: print(' PORT',p)
for f in out['flags']: print(' FLAG',f)
+25
查看文件
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
import json,sys,os,subprocess
sys.path.insert(0,'.claude')
from eda import run
V='.claude/skills/easyeda-sch-geometry/scripts/verify_sch.py'
PAGES=[('P2-CHANNEL','e528be1438486876','p2'),('P2B-CH2','b8afe2b674df51f1','p2'),('P2C-CH3','38c5dbbf943f1a9e','p2'),
('P2D-CH4','2365af19390c50d6','p2'),('P2E-CH5','af0926ecaacd8bac','p2'),('P3-CONTROL','12f74666e70167e4','p3'),
('P3B-EXPAND','f42285b3728794d0','p3b'),('P6-FAN-EDL','fd00f13e59336392','p6'),('P5-BTB','58bacf3ddd60ed4e',None),
('C1-CONN','1cc8af8cba7ec7b2','c1'),('C6-KEYS','f44d1c8b0ad64fad','c6'),('C2-HUB','472c9bdbd7180ac4','p4b'),
('C4-SITE1','c64b3352a0a2876c','c4'),('C4-SITE2','caf6bd3899748f16','c4'),('C4-SITE3','0348577f027362cd','c4'),
('C4-SITE4','fc3e4d76ab751c0a','c4'),('C4-SITE5','e58ef2c0a55e744a','c4')]
only=sys.argv[1:]
for name,uuid,nc in PAGES:
if only and name not in only: continue
r=run("await eda.dmt_EditorControl.openDocument('%s'); await new Promise(r=>setTimeout(r,1200)); return (await eda.dmt_Schematic.getCurrentSchematicPageInfo()).name;"%uuid,timeout=120)
assert r.get('success') and r['result']==name, (name, r)
args=[sys.executable,V]
f='.claude/%s-nets-nc.json'%nc if nc else None
if f and os.path.exists(f): args+=['--nc',f]
p=subprocess.run(args,capture_output=True,text=True,encoding='utf-8',errors='replace')
lines=[l for l in p.stdout.splitlines() if l.strip()]
tail=[l for l in lines if any(k in l for k in ('悬空','单引脚','无网络名','多个名字','通过','FAIL','PASS','✅','❌','失败'))]
print('%-12s rc=%d %s'%(name,p.returncode,' | '.join(tail[-6:])[:400]))
if p.returncode!=0:
print('\n'.join(lines[-25:]))
+29
查看文件
@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
u"""把 pcb2_strap_place.py 搜出来的坐标写回 pcb2_place.GLOBAL(一次性工具)。"""
import io
import json
import os
import re
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
MAP = {'R906': ('15', 'PRT_SWP7'), 'R905': ('17', 'PRT_SWP6'), 'R904': ('31', 'PRT_SWP5'),
'R903': ('33', 'PRT_SWP4'), 'R909': ('34', 'GANG_EN'), 'R902': ('47', 'PRT_SWP3'),
'R908': ('48', 'BOOST1'), 'R901': ('49', 'PRT_SWP2'), 'R907': ('50', 'BOOST0'),
'R900': ('51', 'PRT_SWP1')}
p = os.path.join(HERE, 'pcb2_place.py')
s = io.open(p, encoding='utf-8').read()
d = json.load(io.open(os.path.join(HERE, '_pcb2_strap_place.json'), encoding='utf-8'))
n = 0
for des, (pin, fn) in MAP.items():
cx, cy, rot, r = d[des][:4]
new = u" '%s': (%.3f, %.3f, %d), # U32.%s %s,离脚 %.1f mm" % (des, cx, cy, rot, pin, fn, r)
pat = re.compile(u"^ '" + des + u"': \\([^\\n]*$", re.M)
s, k = pat.subn(lambda m: new, s)
assert k == 1, des
n += k
io.open(p, 'w', encoding='utf-8').write(s)
print(u'更新 %d 条坐标' % n)
+355
查看文件
@@ -0,0 +1,355 @@
# -*- coding: utf-8 -*-
u"""C2-HUB:把 U32(USB2517I) 从 `CFG_SEL=000`(strap 使能)改成 **`CFG_SEL=110`(strap 禁用)**。
/c/Python314/python .claude/c2_cfgsel.py # 干跑 + 全页碰撞检查
/c/Python314/python .claude/c2_cfgsel.py --push # 删 + 改 + 重写页面文字
## 为什么(2026-09-07 用户拍板,取代 c2_straps.py 那一轮)
`c2_straps.py` 给 `PRT_SWP1~5` 加的五颗 100k 下拉在**载板上摆不下**:
`pcb2_strap_solve.py` 对每颗枚举「位置 × 4 朝向 × 地过孔 × 走线」,
R903/R904 有解,而 **R900/R901/R902(= CH1/CH2/CH3 三路)走线 0 解** ——
U32 是 QFN-64 9×9 / 0.5 mm 间距,焊盘间只有约 0.2 mm 缝,穿不过 0.20 mm 的线,
唯一出路是垂直出边;而东边紧贴 R710/C750/R709 那一列(x≈106.3),
从 `U32.47` 往东只能走 0.7 mm。解不出来的正好是最关键的三路。
⇒ 改走 Table 5-2 的另一档:`110` = Internal Default Configuration • **Strap Options are Disabled**。
strap 根本不采样,一颗电阻都不用,U32 拥挤的东/南两侧一点不动。
## datasheet 依据(DS00001598C,逐条核过原文)
- **Table 5-2**(第 15~16 页):`110` 那一行**只有**「Internal Default Configuration •
Strap Options are Disabled」—— 没有 `111` 的 Ganged Power/OC Switching,
没有 `100/101` 的 Dynamic Power Switching,没有 `010` 的 Bus Power Operation。
**它是唯一干净的「关 strap」档位。**
- **Table 7-1 内部默认值**逐条核过,全是我们要的:`FAh Port Swap=00h`(极性正常)、
`F6h/F7h/F8h Boost=00h`、`09h Non-Removable=00h`、`07h CFG2=20h`
(`PORT_PWR=0`/`CURRENT_SNS=00`,而我们 PRTPWR/OCS 一根没接)、
`06h` bit7=1(自供电,正是 §15.1 边界 2 要的)。
- **Table 5-1 + 5-3 的缓冲类型**决定了三个脚各自怎么接:
| 脚 | 缓冲类型 | 复用 | 怎么接 |
|---|---|---|---|
| `CFG_SEL2`(13) | **`I`(纯输入)** | 无(原文还说「某些封装没有这个脚,那时内部按 '0' 处理」)| **直接接 +3V3_HUB,不要电阻** |
| `CFG_SEL1`(42) | `I/O12` | `HS_IND`(**输出**)| 必须经 `R712` 10k 上拉,硬接会和 HS_IND 打架 |
| `CFG_SEL0`(41) | `I/OSD12` 开漏 | `SCL/SMBCLK` | `R711` 10k 下拉,**不动** |
⇒ 交接里原计划的 `R713`(CFG_SEL2 的 10k 上拉)**不需要**:pin 13 现在就是硬接 GND 的,
改成硬接 +3V3_HUB 完全对称,而且省掉一次「在 U32 西侧找位置 + 布线」。
## ⚠️ 必须连带去掉 R714/R715
口 6/7 现在是靠 strap 关的(§21.5:两颗 10k 上拉 `USBDN6_DP`/`USBDN7_DP`)。
strap 一停这两个口就开着,而那两颗上拉对 Hub 内部 15k 下拉分压得
`3.3 × 15/25 = 1.98 V`,**正好压在全速设备「已插入」的 2.0 V 判据上**
→ 两个幽灵口反复枚举失败。去掉之后 D+/D− 悬空、被 Hub 自己的 15k 下拉拉低 = 空闲,无害。
## BOM 净 −7 颗
`R900~R904`(strap 下拉)+ `R714`/`R715`(口 6/7 禁用上拉)。
`R712` 保留,只是远端从 GND 改 +3V3_HUB。
## 页面上怎么改
- 右侧那排下拉的地母线原来是 `(920,360)—(1070,360)` 一条,`R712.2` 在 x=970 挂在中间。
拆成两半:`R711` 单独一个地旗 (920,330),`R719/R720` 沿用原来的 (995,330) 那个,
`R712.2` 往下引 30 个单位挂 `+3V3_HUB` 电源旗(Power rot=180 = 符号在下、引脚在上)。
- `CFG_SEL2` 那根横线不动,只把左端 (170,540) 的 `GND` 端口删掉重建成 `+3V3_HUB`
(§3b:端口只能删了重建,不能改网络名)。
"""
import json
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from eda import run
PAGE = '472c9bdbd7180ac4' # C2-HUB
FRAME = (20, 10, 1145, 812)
TITLE = (455, 10, 1145, 192)
# ---- 要删的整条导线图元:按「它的每一段都在这张表里」匹配(EasyEDA 会合并共线段,
# 所以只能整条删再重画,不能做外科手术,见 skill §11)
DEAD = [
# R904 / R903 的 strap 线 + 左地母线
(270, 360, 320, 360), (270, 310, 270, 360),
(270, 250, 270, 270), (310, 250, 270, 250), (310, 250, 310, 270),
(310, 340, 320, 340), (310, 310, 310, 340),
# R901 / R902 / R900 的 strap 线 + 右地母线
(700, 495, 680, 495), (700, 310, 700, 495),
(700, 250, 700, 270), (780, 250, 700, 250), (780, 250, 780, 270),
(860, 250, 780, 250), (860, 250, 860, 270),
(780, 475, 680, 475), (780, 310, 780, 475),
(860, 515, 680, 515), (860, 310, 860, 515),
# R714 / R715 及其 +3V3_HUB 母线
(935, 490, 900, 490), (935, 450, 900, 450),
(1060, 490, 975, 490), (1060, 490, 1060, 450), (1060, 450, 975, 450),
(1060, 490, 1060, 515),
# U32 的 USBDN6_DP / USBDN7_DP 到端口那两根
(760, 565, 680, 565), (760, 545, 680, 545),
# 右侧下拉的地母线(要拆成两半,整条删掉重画)
(1070, 360, 1020, 360), (1020, 360, 995, 360), (995, 330, 995, 360),
(970, 360, 995, 360), (920, 360, 970, 360),
]
NEW_W = [
(1070, 360, 1020, 360), (1020, 360, 995, 360), (995, 360, 995, 330), # R719/R720 的地
(920, 360, 920, 330), # R711 的地
# ⚠ 旗落在 305 而不是 330:放 330 时 `+3V3_HUB` 标签(宽约 43 单位)跟右边 25 单位外
# (995,330) 的地旗标签恰好相接,而且一个电源旗挂在两个地旗中间看着就像地。
# 截图才看得出来,几何验证四道全过(skill §10 那句「证明不了看着对」)。
(970, 360, 970, 305), # R712 -> +3V3_HUB
]
DEL_PARTS = ['R900', 'R901', 'R902', 'R903', 'R904', 'R714', 'R715']
DEL_FLAGS = [('GND', 270, 250), ('GND', 780, 250), ('GND', 995, 330), ('+3V3_HUB', 1060, 515)]
DEL_PORTS = [('PRTDIS6', 760, 545), ('PRTDIS7', 760, 565),
('PRTDIS6', 900, 450), ('PRTDIS7', 900, 490), ('GND', 170, 540)]
NEW_F = [('Ground', 'GND', 995, 330, 0),
('Ground', 'GND', 920, 330, 0),
('Power', '+3V3_HUB', 970, 305, 180)]
NEW_P = [('BI', '+3V3_HUB', 170, 540, 180)]
TITLE_TXT = u'【P4B-HUB】板载 USB 2.0 七口 Hub —— 对外只有一根 USB 线(§15.1 / §21)'
NOTES = [
u'U32 USB2517I CFG_SEL[2:0]=110 → 内部默认配置 + strap 禁用;寄存器 06h 默认 9Bh、bit7=1 = 自供电',
u'(声明成总线供电,主机会按每口 100mA 做预算,而手机描述符要 500mA → 拒绝配置,枚举不上)',
u'口 1~5 → CH1~CH5;口 6/7 悬空(strap 停采样后原 R714/R715 上拉分压到 1.98V 变幽灵口,已删)',
u'RBIAS 必须 12.0k±1%;晶振 24MHz±350ppm;VDD18/VDD18PLL 各 ≥1µF 且 ESR<0.1Ω',
u'VBUS_DET 接真·上游 VBUS(可插拔 Hub 必须如此),100k/100k 分压进 3.3V 逻辑',
u'PRTPWR/OCS 全不接:端口通断由 ESP32 经 TPS22918 控制(§15.2 对策 2)',
]
BOT = [
u'CFG_SEL2(13) 是纯输入(Table 5-3 = I),直接接 +3V3_HUB;CFG_SEL1 复用 HS_IND 输出,必须经 R712 上拉',
u'strap 停采样 ⇒ PRT_SWP / BOOST / GANG_EN 全不采样,Table 7-1 默认值即所需(§21.6b)',
]
def call(js, timeout=240):
r = run(js, timeout=timeout)
if not r.get('success'):
raise RuntimeError(json.dumps(r, ensure_ascii=False)[:900])
return r['result']
def open_page():
call("""
await eda.dmt_EditorControl.openDocument('%s'); await new Promise(r=>setTimeout(r,1800));
const n=(await eda.dmt_Schematic.getCurrentSchematicPageInfo()).name;
if (n!=='C2-HUB') throw new Error('page='+n);
return 1;""" % PAGE)
def build_text():
TX = [(TITLE_TXT, 45, 800, 15)]
for i, t in enumerate(NOTES):
TX.append((t, 340, 780 - 18 * i, 11))
TX.append((BOT[0], 45, 222, 10))
TX.append((BOT[1], 45, 205, 10))
return TX
def _tw(s, size):
n = sum(1 for ch in s if ord(ch) > 0x2000)
return size * (n + 0.5 * (len(s) - n))
def _on(p, a, b, tol=0.6):
(px, py), (ax, ay), (bx, by) = p, a, b
if abs(ax - bx) < tol:
return abs(px - ax) < tol and min(ay, by) - tol <= py <= max(ay, by) + tol
if abs(ay - by) < tol:
return abs(py - ay) < tol and min(ax, bx) - tol <= px <= max(ax, bx) + tol
return False
def check(geo):
u"""下发前的本地自检。geo = 当前页 dump(parts/flags/ports/wires)。"""
errs = []
# 1) 正交、非零长、坐标 5 的倍数(skill §6d / §8a-2b)
for a, b, c, e in NEW_W:
if (a == c) == (b == e):
errs.append(u'新线 %s 不是横平竖直或零长' % ((a, b, c, e),))
for v in (a, b, c, e):
if v % 5:
errs.append(u'新线坐标 %d 不是 5 的倍数' % v)
for it in NEW_F + NEW_P:
if it[2] % 5 or it[3] % 5:
errs.append(u'旗/端口 %s 坐标不是 5 的倍数' % (it,))
# 2) 旗/端口必须落在导线**端点**上(skill §8a-2 / §8a-3)
ends = set()
for a, b, c, e in NEW_W:
ends.add((a, b)); ends.add((c, e))
dead = set(DEAD) | {(c, e, a, b) for a, b, c, e in DEAD}
for w in geo['wires']:
segs = [(w[i], w[i + 1], w[i + 2], w[i + 3]) for i in range(0, len(w) - 3, 4)]
if all(s in dead for s in segs):
continue # 整条会被删掉
for a, b, c, e in segs:
ends.add((a, b)); ends.add((c, e))
for kind, net, x, y, rot in NEW_F:
if (x, y) not in ends:
errs.append(u'旗 %s@(%d,%d) 不在任何导线端点(skill §8a-3)' % (net, x, y))
for d, net, x, y, rot in NEW_P:
if (x, y) not in ends:
errs.append(u'端口 %s@(%d,%d) 不在任何导线端点' % (net, x, y))
# 3) 新线不能从任何**留下来的**元件引脚**中间穿过去**(被删元件的脚不算)。
# 终止在引脚上是正常的(那正是连接),压在线段**中段**才是错 —— 那会把不相干的
# 引脚串进这个网络,而且 verify_sch 的口径是「落在某条线段上」,它抓不到。
gone = set(DEL_PARTS)
for des, x, y, rot, pins in geo['parts']:
if des in gone:
continue
for nm, px, py in pins:
for a, b, c, e in NEW_W:
if (px, py) in ((a, b), (c, e)):
continue # 端点 = 正常连接
if _on((px, py), (a, b), (c, e)):
errs.append(u'新线 %s 从 %s.%s@(%d,%d) 中间穿过'
% ((a, b, c, e), des, nm, px, py))
# 4) 新旗/端口的净空:符号连文字按 30 单位算(skill §12a)
occupied = []
for des, x, y, rot, pins in geo['parts']:
if des not in gone:
occupied.append((des, x, y))
for net, x, y, rot in geo['flags']:
if (net, x, y) not in DEL_FLAGS:
occupied.append((u'旗' + net, x, y))
for it in NEW_F + NEW_P:
x, y = it[2], it[3]
for nm, ox, oy in occupied:
if abs(ox - x) < 25 and abs(oy - y) < 30:
errs.append(u'新旗/端口 @(%d,%d) 离 %s@(%d,%d) 太近' % (x, y, nm, ox, oy))
# 5) 文字越框 / 压标题栏
for s, x, y, size in build_text():
x2 = x + _tw(s, size)
if x < FRAME[0] or x2 > FRAME[2] or y < FRAME[1] or y > FRAME[3]:
errs.append(u'文字越框: %s… 右到 %.0f' % (s[:16], x2))
if x2 > TITLE[0] and y < TITLE[3]:
errs.append(u'文字压标题栏: %s… 右到 %.0f @y=%d' % (s[:16], x2, y))
return errs
DUMP_JS = """
const parts=[],flags=[],ports=[],wires=[];
for(const c of await eda.sch_PrimitiveComponent.getAll()){
const t=c.getState_ComponentType();
const x=Math.round(c.getState_X()), y=Math.round(c.getState_Y());
if(t==='part'){
const pins=(await c.getAllPins()).map(p=>[p.getState_PinName?p.getState_PinName():'',
Math.round(p.getState_X()),Math.round(p.getState_Y())]);
parts.push([c.getState_Designator(),x,y,Math.round(c.getState_Rotation()),pins]);
} else if(t==='netflag') flags.push([c.getState_Net(),x,y,Math.round(c.getState_Rotation())]);
else if(t==='netport') ports.push([c.getState_Net(),x,y,Math.round(c.getState_Rotation()),
c.getState_Component().name]);
}
for(const w of await eda.sch_PrimitiveWire.getAll()) wires.push(w.getState_Line().map(v=>Math.round(v)));
return {parts,flags,ports,wires};"""
def dump():
open_page()
return call(DUMP_JS)
def main():
push = '--push' in sys.argv
geo = dump()
print(u'当前页:元件 %d / 旗 %d / 端口 %d / 导线图元 %d'
% (len(geo['parts']), len(geo['flags']), len(geo['ports']), len(geo['wires'])))
errs = check(geo)
print(u'\n计划:删元件 %d / 删旗 %d / 删端口 %d / 删线段 %d;'
u'新线 %d / 新旗 %d / 新端口 %d / 文字 %d'
% (len(DEL_PARTS), len(DEL_FLAGS), len(DEL_PORTS), len(DEAD),
len(NEW_W), len(NEW_F), len(NEW_P), len(build_text())))
if errs:
print(u'\n本地自检 %d 条:' % len(errs))
for e in errs:
print(u' ' + e)
raise SystemExit(u'未通过,不下发')
print(u'本地自检通过(正交/吸附/端点/压脚/净空/文字六项)')
if not push:
print(u'\n加 --push 执行')
return
r = call("""
const DEAD=%s, tol=0.6;
const on=(p,a,b)=>{
if(Math.abs(a[0]-b[0])<tol) return Math.abs(p[0]-a[0])<tol && p[1]>=Math.min(a[1],b[1])-tol && p[1]<=Math.max(a[1],b[1])+tol;
if(Math.abs(a[1]-b[1])<tol) return Math.abs(p[1]-a[1])<tol && p[0]>=Math.min(a[0],b[0])-tol && p[0]<=Math.max(a[0],b[0])+tol;
return false;};
let dw=0;
for(const w of await eda.sch_PrimitiveWire.getAll()){
const p=w.getState_Line(); let all=p.length>=4;
for(let i=0;i+3<p.length;i+=4){
const a=[p[i],p[i+1]], b=[p[i+2],p[i+3]];
if(!DEAD.some(o=>on(a,[o[0],o[1]],[o[2],o[3]])&&on(b,[o[0],o[1]],[o[2],o[3]]))){all=false;break;}
}
if(all){await eda.sch_PrimitiveWire.delete(w.getState_PrimitiveId()); dw++;}
}
const PARTS=%s, FLAGS=%s, PORTS=%s;
let dp=0,df=0,dq=0;
for(const c of await eda.sch_PrimitiveComponent.getAll()){
const t=c.getState_ComponentType();
const x=Math.round(c.getState_X()), y=Math.round(c.getState_Y());
if(t==='part'){ if(PARTS.includes(c.getState_Designator())){
await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId()); dp++;} continue;}
const n=c.getState_Net();
if(t==='netflag' && FLAGS.some(f=>f[0]===n&&f[1]===x&&f[2]===y)){
await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId()); df++; continue;}
if(t==='netport' && PORTS.some(f=>f[0]===n&&f[1]===x&&f[2]===y)){
await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId()); dq++;}
}
for(const t of await eda.sch_PrimitiveText.getAll())
await eda.sch_PrimitiveText.delete(t.getState_PrimitiveId());
return {dw,dp,df,dq};""" % (json.dumps([list(x) for x in DEAD]), json.dumps(DEL_PARTS),
json.dumps([list(x) for x in DEL_FLAGS]),
json.dumps([list(x) for x in DEL_PORTS])))
print(u'\n已删:导线图元 %d / 元件 %d / 旗 %d / 端口 %d(文字全清)'
% (r['dw'], r['dp'], r['df'], r['dq']))
if r['dp'] != len(DEL_PARTS):
raise SystemExit(u'元件删除数对不上:期望 %d 实删 %d' % (len(DEL_PARTS), r['dp']))
if r['df'] != len(DEL_FLAGS) or r['dq'] != len(DEL_PORTS):
raise SystemExit(u'旗/端口删除数对不上:旗 %d/%d 端口 %d/%d'
% (r['df'], len(DEL_FLAGS), r['dq'], len(DEL_PORTS)))
def batch(items, size, js):
for i in range(0, len(items), size):
call(js % json.dumps(items[i:i + size], ensure_ascii=False))
batch([list(w) for w in NEW_W], 40,
"for (const s of %s) await eda.sch_PrimitiveWire.create(s); return 1;")
batch([list(f) for f in NEW_F], 20,
"for (const f of %s) await eda.sch_PrimitiveComponent.createNetFlag(f[0],f[1],f[2],f[3],f[4],false); return 1;")
batch([list(p) for p in NEW_P], 20,
"for (const p of %s) await eda.sch_PrimitiveComponent.createNetPort(p[0],p[1],p[2],p[3],p[4],false); return 1;")
batch([list(t) for t in build_text()], 10,
"for (const t of %s) await eda.sch_PrimitiveText.create(t[1],t[2],t[0],0,null,null,t[3],false,false,false,0); return 1;")
call("return await eda.sch_Document.save();")
# 回查(skill §9ad:save() 的返回值不算数,要重新数图元)
g2 = call(DUMP_JS)
print(u'落盘后回查:元件 %d / 旗 %d / 端口 %d / 导线图元 %d'
% (len(g2['parts']), len(g2['flags']), len(g2['ports']), len(g2['wires'])))
left = [p[0] for p in g2['parts'] if p[0] in DEL_PARTS]
if left:
raise SystemExit(u'这些元件没删掉:%s' % left)
got = {(f[0], f[1], f[2]) for f in g2['flags']}
for k, n, x, y, r_ in NEW_F:
if (n, x, y) not in got:
raise SystemExit(u'新旗 %s@(%d,%d) 没建出来' % (n, x, y))
gotp = {(p[0], p[1], p[2]) for p in g2['ports']}
for d, n, x, y, r_ in NEW_P:
if (n, x, y) not in gotp:
raise SystemExit(u'新端口 %s@(%d,%d) 没建出来' % (n, x, y))
print(u'推送完成并存盘,回查通过')
main()
+324
查看文件
@@ -0,0 +1,324 @@
# -*- coding: utf-8 -*-
u"""C2-HUB:给 U32(USB2517I) 的 **PRT_SWP1~5** 五个 strap 脚各加一颗 100k 下拉(R900~R904)。
/c/Python314/python .claude/c2_straps.py # 干跑 + 全页碰撞检查
/c/Python314/python .claude/c2_straps.py --push # 删旧 + 放件 + 连线 + 重写页面文字
## 依据(不是「悬空取 0」)
设计文档 §21.6 原来写「这些脚都是 Strap,悬空取默认 '0'」—— **手册里没有这句话**。
`DS00001598C`(LCSC 给 C478081 链的那一份,59 页):
- Table 5-3 缓冲类型:`IPD` = 带内部弱下拉、`IPU` = 带内部弱上拉,
而这十个脚全是 **`I/O12` = 纯输入输出缓冲**,一个字都没提内部下拉。
(同节里 `OCS[1..7]_N` 确实是 `IPU`、`TEST` 确实是 `IPD` —— §21.6 那两条是对的。)
- Table 5-2:`CFG_SEL[2:0]=000` → 「Internal Default Configuration • **Strap Options are Enabled**」,
所以这些脚**会**在 RESET_N negation 时被采样。
- §7.5 + Figure 7-3「LED STRAPPING OPTION」(第 42 页)给的推荐无源方案就是 **100 kΩ**。
## 为什么只做五颗(2026-09-07 用户拍板)
Table 7-1 的内部默认值本来就是 `FAh Port Swap = 00h`、`F6h/F8h Boost = 00h` ——
电阻并不改变设定,只是把**被采样到的值**钉成本来就该有的那个。所以按「采到 1 会怎样」筛:
| strap | 采到 '1' 的后果 | 要不要电阻 |
|---|---|---|
| `PRT_SWP1~5`(U32 51/49/47/33/31)| 对应端口 `D+`/`D−` **内部对调** → 那一路手机枚举不出来 | ✅ **R900~R904** |
| `PRT_SWP6/7`(17/15)| 口 6/7 已被 R714/R715 上拉禁用 | ❌ 无后果 |
| `BOOST0/1`(50/48)| PHY 驱动加强,只影响 SI/EMI | ❌ 无功能后果 |
| `GANG_EN`(34)| 联动通断/过流 —— 本设计 `PRTPWR`/`OCS` 一根都没接 | ❌ 无后果 |
失效长相值得记一笔:**不是板子挂掉,是某一路手机认不出来**,而且悬空脚采到什么
取决于漏电/耦合/温度,可能每次上电、每块板都不一样 —— 五机位农场上最难查的那类现象。
## 这一页的坑
页面很挤,而且**文字有三重叠影**(标题 ×3、6 条说明各 ×3,其中一份还压在 J23 上)。
本脚本顺手把文字删干净重写成 1 份,腾出 U32 下方 x 460~880 那条带子。
"""
import io
import json
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from eda import run
PAGE = '472c9bdbd7180ac4' # C2-HUB
LIB = '0819f05c4eef4c71ace90d822a990e87'
R100K = 'acc294b6661948399f609b41c77ed19f' # C25741 0402WGF1003TCE
GEO = os.path.join(HERE, '_c2hub_geo.json')
FRAME = (20, 10, 1145, 812)
TITLE = (455, 10, 1145, 192)
# (位号, U32 脚号, 脚坐标, 引出方向, 电阻 x) —— 电阻中心 y=290,pin (x,310)/(x,270)
# ⚠ 右侧不能走 x=760:那一列全是端口引脚(y 405~465),竖线穿过去就是短路。
# ⚠ 右侧 y=475/495 的横线不能超过 x≈810:PRTDIS7 端口(900,490)的标签占 813~900;
# y=515 在标签带(485~495)之上,可以往右走远一点。
STRAP = [
('R904', '31', (320, 360), 'L', 270), # PRT_SWP5
('R903', '33', (320, 340), 'L', 310), # PRT_SWP4
('R901', '49', (680, 495), 'R', 700), # PRT_SWP2
('R902', '47', (680, 475), 'R', 780), # PRT_SWP3
('R900', '51', (680, 515), 'R', 860), # PRT_SWP1
]
# 2026-09-07 用户拍板去掉的五颗(BOOST / GANG_EN / 已禁用口的 SWP6-7),
# 连同它们在上一版画的线一起删。旧版的完整表留在这里,仅用于「删干净」。
DROP = ['R905', 'R906', 'R907', 'R908', 'R909']
OLD_STRAP = [
('R906', '15', (320, 520), 'L', 190), ('R905', '17', (320, 500), 'L', 230),
('R904', '31', (320, 360), 'L', 270), ('R903', '33', (320, 340), 'L', 310),
('R901', '49', (680, 495), 'R', 700), ('R908', '48', (680, 485), 'R', 740),
('R902', '47', (680, 475), 'R', 780), ('R907', '50', (680, 505), 'R', 820),
('R900', '51', (680, 515), 'R', 860), ('R909', '34', (680, 345), 'R', 940),
]
OLD_BUS = [(190, 310, 230), (700, 940, 820)]
RY, RTOP, RBOT, BUS = 290, 310, 270, 250 # 电阻中心 / 上脚 / 下脚 / 地母线
# ⚠️ 地旗的 x **必须落在某颗电阻的分支点上**(skill §8a-3):
# EasyEDA 会把共线的两段导线合并成一条,所以「我分两段建、中间那点是端点」不成立。
# 上一版左母线的旗放在 x=250(几颗电阻之间的空档)→ 落在合并后的中段上,
# PCB 网表里那四颗的地端是 `$16N236` 而不是 GND。verify_sch 四道检查全过,只有网表抓得到。
LBUS = (270, 310, 270) # 左母线 x0,x1,地旗 x(270 = R904 的分支点)
RBUS = (700, 860, 780) # 右母线 x0,x1,地旗 x(780 = R902 的分支点)
TITLE_TXT = u'【P4B-HUB】板载 USB 2.0 七口 Hub —— 对外只有一根 USB 线(§15.1 / §21)'
NOTES = [
u'U32 USB2517I CFG_SEL[2:0]=000 → 内部默认配置 + strap 使能;寄存器 06h 默认 9Bh、bit7=1 = 自供电',
u'(声明成总线供电,主机会按每口 100mA 做预算,而手机描述符要 500mA → 拒绝配置,枚举不上)',
u'口 1~5 → CH1~CH5;口 6/7 由 R714/R715 各 10k 上拉禁用(拆掉电阻即可放出来)',
u'RBIAS 必须 12.0k±1%;晶振 24MHz±350ppm;VDD18/VDD18PLL 各 ≥1µF 且 ESR<0.1Ω',
u'VBUS_DET 接真·上游 VBUS(可插拔 Hub 必须如此),100k/100k 分压进 3.3V 逻辑',
u'PRTPWR/OCS 全不接:端口通断由 ESP32 经 TPS22918 控制(§15.2 对策 2)',
]
STRAP_TXT = u'R900~R904:PRT_SWP1~5 各 100k 下拉(I/O12 无内部下拉,采到 1 会把该口 D+/D− 对调)'
STRAP_TXT2 = u'BOOST/GANG_EN/SWP6-7 不装电阻:采到 1 也无功能后果,理由见 §21.6a'
def call(js, timeout=240):
r = run(js, timeout=timeout)
if not r.get('success'):
raise RuntimeError(json.dumps(r, ensure_ascii=False)[:900])
return r['result']
def open_page():
call("""
await eda.dmt_EditorControl.openDocument('%s'); await new Promise(r=>setTimeout(r,1800));
const n=(await eda.dmt_Schematic.getCurrentSchematicPageInfo()).name;
if (n!=='C2-HUB') throw new Error('page='+n);
return 1;""" % PAGE)
def _wires(strap, buses):
W = []
def w(net, *pts):
for i in range(len(pts) - 1):
a, b = pts[i], pts[i + 1]
assert (a[0] == b[0]) != (a[1] == b[1]), u'%s: %s->%s 非正交或零长' % (net, a, b)
for v in (a[0], a[1], b[0], b[1]):
assert v % 5 == 0, u'%s 坐标不是 5 的倍数' % net
W.append((a, b, net))
for des, pin, (px, py), side, rx in strap:
w('STRAP_' + pin, (px, py), (rx, py), (rx, RTOP))
w('GND', (rx, RBOT), (rx, BUS))
for x0, x1, fx in buses:
if x0 != fx:
w('GND', (x0, BUS), (fx, BUS))
if fx != x1:
w('GND', (fx, BUS), (x1, BUS))
return W
def build():
W = _wires(STRAP, [LBUS, RBUS])
F = [('Ground', 'GND', LBUS[2], BUS, 0), ('Ground', 'GND', RBUS[2], BUS, 0)]
PL = [(des, rx, RY, 270) for des, pin, xy, side, rx in STRAP]
TX = [(TITLE_TXT, 45, 800, 15)]
for i, t in enumerate(NOTES):
TX.append((t, 340, 780 - 18 * i, 11))
TX.append((STRAP_TXT, 45, 205, 10))
TX.append((STRAP_TXT2, 45, 188, 10))
return W, F, TX, PL
# ---------------- 检查 ----------------
def _on(p, a, b, tol=0.6):
(px, py), (ax, ay), (bx, by) = p, a, b
if abs(ax - bx) < tol:
return abs(px - ax) < tol and min(ay, by) - tol <= py <= max(ay, by) + tol
if abs(ay - by) < tol:
return abs(py - ay) < tol and min(ax, bx) - tol <= px <= max(ax, bx) + tol
return False
def _tw(s, size):
n = sum(1 for ch in s if ord(ch) > 0x2000)
return size * (n + 0.5 * (len(s) - n))
def check(W, F, TX, PL, geo):
errs = []
mine = {(px, py) for _, _, (px, py), _, _ in STRAP}
old = {(px, py) for _, _, (px, py), _, _ in OLD_STRAP}
ends = set()
for a, b, _ in W:
ends.add(a); ends.add(b)
for name, x, y in geo['pins']:
if (x, y) in old: # 上一版画到的十个脚:旧线会在下发时删掉
continue
for a, b, net in W:
if _on((x, y), a, b):
errs.append(u'新线 %s %s-%s 压住已有引脚 %s @(%d,%d)' % (net, a, b, name, x, y))
break
for des, x, y, rot in PL:
for name, ex, ey in geo['pins']:
if name.split('.')[0] in ([d for d, _, _, _, _ in OLD_STRAP] + DROP):
continue
if abs(ex - x) < 22 and abs(ey - y) < 30:
errs.append(u'新元件 %s@(%d,%d) 压住 %s' % (des, x, y, name))
n = len(W)
par = list(range(n))
def find(i):
while par[i] != i:
par[i] = par[par[i]]; i = par[i]
return i
for i in range(n):
for j in range(i + 1, n):
a1, a2, _ = W[i]; b1, b2, _ = W[j]
if _on(a1, b1, b2) or _on(a2, b1, b2) or _on(b1, a1, a2) or _on(b2, a1, a2):
ri, rj = find(i), find(j)
if ri != rj:
par[ri] = rj
grp = {}
for i in range(n):
grp.setdefault(find(i), []).append(i)
cnt = {}
for idxs in grp.values():
names = sorted({W[i][2] for i in idxs})
if len(names) > 1:
errs.append(u'短路: ' + u' + '.join(names))
cnt[names[0]] = cnt.get(names[0], 0) + 1
for k, c in cnt.items():
if c > 1 and k != 'GND':
errs.append(u'网络 %s 被拆成 %d 块' % (k, c))
for kind, net, x, y, rot in F:
if (x, y) not in ends:
errs.append(u'旗 %s @(%d,%d) 不在导线端点(skill §8a-3)' % (net, x, y))
for s, x, y, size in TX:
x2 = x + _tw(s, size)
if x < FRAME[0] or x2 > FRAME[2] or y < FRAME[1] or y > FRAME[3]:
errs.append(u'文字越框: %s… 右到 %.0f' % (s[:14], x2))
if x2 > TITLE[0] and y < TITLE[3]:
errs.append(u'文字压标题栏: %s… 右到 %.0f @y=%d' % (s[:14], x2, y))
return errs
def main():
push = '--push' in sys.argv
geo = json.load(io.open(GEO, encoding='utf-8'))
W, F, TX, PL = build()
errs = check(W, F, TX, PL, geo)
print(u'保留 %d 颗(R900~R904 = PRT_SWP1~5)/ 删 %s' % (len(PL), ','.join(DROP)))
print(u'导线 %d 段 / 地旗 %d / 文字 %d' % (len(W), len(F), len(TX)))
if errs:
print(u'\n检查 %d 条:' % len(errs))
for e in errs:
print(u' ' + e)
raise SystemExit(u'未通过,不下发')
print(u'全页碰撞检查通过')
if not push:
print(u'加 --push 执行')
return
open_page()
# 1) 删掉上一版画的所有 strap 线(判据:整条图元的每一段都被旧声明覆盖)
oldW = _wires(OLD_STRAP, OLD_BUS)
dead = [[a[0], a[1], b[0], b[1]] for a, b, _ in oldW]
r = call("""
const OLD = %s, tol = 0.6;
const MYFLAG = [230, 250, 270, 780, 820]; // 本脚本历次版本放过地旗的 x
const on = (p, a, b) => {
if (Math.abs(a[0]-b[0]) < tol) return Math.abs(p[0]-a[0]) < tol && p[1] >= Math.min(a[1],b[1])-tol && p[1] <= Math.max(a[1],b[1])+tol;
if (Math.abs(a[1]-b[1]) < tol) return Math.abs(p[1]-a[1]) < tol && p[0] >= Math.min(a[0],b[0])-tol && p[0] <= Math.max(a[0],b[0])+tol;
return false; };
let del = 0;
for (const w of await eda.sch_PrimitiveWire.getAll()) {
const p = w.getState_Line(); let all = p.length >= 4;
for (let i = 0; i + 3 < p.length; i += 4) {
const a = [p[i], p[i+1]], b = [p[i+2], p[i+3]];
if (!OLD.some(o => on(a, [o[0],o[1]], [o[2],o[3]]) && on(b, [o[0],o[1]], [o[2],o[3]]))) { all = false; break; }
}
if (all) { await eda.sch_PrimitiveWire.delete(w.getState_PrimitiveId()); del++; }
}
for (const c of await eda.sch_PrimitiveComponent.getAll()) {
const t = c.getState_ComponentType();
// ⚠️ 只能删**我自己画的那两个地旗**:第一版写成「y==250 的旗全删」,
// 把页面上原有的 `+3V3_HUB`(1130,250)(RESET_N 上拉 R716 的电源端)一起删了,
// 导入变更时才以 `R716:2 +3V3_HUB -> $16N210` 暴露出来。
if (t === 'netflag' && c.getState_Net() === 'GND' && Math.round(c.getState_Y()) === %d
&& MYFLAG.includes(Math.round(c.getState_X()))) { await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId()); del++; continue; }
if (t === 'part' && %s.includes(c.getState_Designator())) { await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId()); del++; }
}
for (const t of await eda.sch_PrimitiveText.getAll()) await eda.sch_PrimitiveText.delete(t.getState_PrimitiveId());
return del;""" % (json.dumps(dead), BUS, json.dumps(DROP)))
print(u'已删旧线/旗/元件 %d 项,并清空全部文字' % r)
# 2) 补齐还缺的电阻(R900~R904 上一版已经放过,这里只补缺)
have = call("""
const out = [];
for (const c of await eda.sch_PrimitiveComponent.getAll())
if (c.getState_ComponentType() === 'part') out.push(c.getState_Designator());
return out;""")
todo = [[d, R100K, x, y, r] for d, x, y, r in PL if d not in have]
if todo:
call("""
for (const [d,uuid,x,y,rot] of %s){
await eda.sch_PrimitiveComponent.create({libraryUuid:'%s', uuid}, x, y, undefined, rot, false, true, true);
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()!=='part') continue;
if (Math.round(c.getState_X())!==x || Math.round(c.getState_Y())!==y) continue;
await c.toAsync().setState_Designator(d).done();
}
}
return 1;""" % (json.dumps(todo), LIB))
print(u'补放 %d 颗(其余 %d 颗上一版已在)' % (len(todo), len(PL) - len(todo)))
got = call("""
const out={};
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()!=='part') continue;
const d=c.getState_Designator();
if (!/^R9[0-9][0-9]$/.test(d)) continue;
out[d]=(await c.getAllPins()).map(p=>[Math.round(p.getState_X()),Math.round(p.getState_Y())]).sort();
}
return out;""")
if sorted(got) != sorted(d for d, _, _, _ in PL):
raise SystemExit(u'板上 R9xx 应为 %s,实测 %s' % (sorted(d for d, _, _, _ in PL), sorted(got)))
bad = [u'%s 引脚 %s' % (d, got.get(d)) for d, x, y, r in PL
if sorted([[x, RTOP], [x, RBOT]]) != got.get(d)]
if bad:
raise SystemExit(u'引脚坐标对不上:\n ' + u'\n '.join(bad))
print(u'五颗电阻引脚坐标逐个核对通过')
def batch(items, size, js):
for i in range(0, len(items), size):
call(js % json.dumps(items[i:i + size], ensure_ascii=False))
batch([[a[0], a[1], b[0], b[1]] for a, b, _ in W], 40,
"for (const s of %s) await eda.sch_PrimitiveWire.create(s); return 1;")
batch([list(f) for f in F], 20,
"for (const f of %s) await eda.sch_PrimitiveComponent.createNetFlag(f[0],f[1],f[2],f[3],f[4],false); return 1;")
batch([list(t) for t in TX], 10,
"for (const t of %s) await eda.sch_PrimitiveText.create(t[1],t[2],t[0],0,null,null,t[3],false,false,false,0); return 1;")
call("return await eda.sch_Document.save();")
print(u'推送完成并存盘')
main()
+129
查看文件
@@ -0,0 +1,129 @@
# -*- coding: utf-8 -*-
u"""C2-HUB(R1 载板):补 USB2517 晶振的 **1 MΩ 跨接电阻**(XTAL1–XTAL2)。
/c/Python314/python .claude/c2_xtal1m.py # 读活页 + 碰撞检查(干跑)
/c/Python314/python .claude/c2_xtal1m.py --push # 放件 + 连线 + 端口 + 存盘
## 依据
USB2517 Hardware Design Checklist(DS00004211)p9 原文:「A 1 MΩ resistor connected across XTAL1 and XTAL2
is **required**. Failure to place this resistor will result in unstable crystal operation.」
数据手册 DS00001598C p52 Figure 9-1 典型晶振电路也画着 1Meg。
2026-09-10 核实:XTAL1 / XTAL2 上只有 U32 / Y1 / C740 / C741 —— **R1 起就漏了**(R2 底板照搬,同样漏)。
用户 2026-09-10 定:底板(`r2/a4_hub.py` 的 R723)和 R1 载板**都补**。
## ⚠ 用前
- 要先在客户端里**打开 R1 工程**(五路手机直供电源板):本脚本只 `openDocument` 这一页、不切工程,
页名不是 `C2-HUB` 就停手(`c2_cfgsel.open_page()` 的断言)。切工程前先把 R2 那边存盘。
- 只动原理图。载板 PCB(PCB2)上的摆位 / 布线另做 —— Y1 在 (95.8, 58.8)、C740 (92.8, 59.65)、
C741 (96.9, 55.7)(`pcb2_place.hub_layout()`),导入变更之后要给这颗 0402 找位置并补两段短线。
- 做完跑 `verify_sch.py --nets`(先打开这一页)+ `port_audit.py`,再让用户看截图。
## 画法(同底板 A4-HUB 的 R723)
Y1 正上方 y=800 那一行空着:电阻横放 rot 0(1 脚 x−20、2 脚 x+20,同页 R708 实测),
两端各一段短线接 `XTAL1` / `XTAL2` 同名端口 —— 本页本来就是「一脚一段短线 + 同名端口」的画法。
页面说明最上一行在 y=780(11 号字,盒子到 y≈789),端口标签在 y 795~805,不压字;右端标签到 x≈1115 < 边框 1145。
"""
import json
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from c2_cfgsel import call, open_page, dump, _on, FRAME # noqa: E402 (c2_cfgsel 的 main 在 __main__ 保护下)
DES = 'R723'
LIB = '0819f05c4eef4c71ace90d822a990e87'
R1M = '512988296f6244ad86a0777e419ee0f1' # C26083 0402WGF1004TCE 1MΩ(`lib_Device.get` 核过)
RC = (1000, 800)
PINS = sorted([[RC[0] - 20, RC[1]], [RC[0] + 20, RC[1]]])
W = [((950, 800), (980, 800), 'XTAL1'), ((1020, 800), (1050, 800), 'XTAL2')]
PT = [['BI', 'XTAL1', 950, 800, 180], # BI + rot180 ⇒ 符号在左,占 885~950
['BI', 'XTAL2', 1050, 800, 0]] # BI + rot0 ⇒ 符号在右,占 1050~1115
BOX = (880, 785, 1120, 815) # 新块(件 + 线 + 端口标签)要占的矩形
def check(geo):
errs = []
if any(p[0] == DES for p in geo['parts']):
errs.append(u'页上已经有 %s(跑过了?)—— 不重复放' % DES)
inb = lambda x, y: BOX[0] <= x <= BOX[2] and BOX[1] <= y <= BOX[3] # noqa: E731
for des, _x, _y, _r, pins in geo['parts']:
for nm, px, py in pins:
if inb(px, py):
errs.append(u'引脚 %s.%s@(%d,%d) 落在新块里' % (des, nm, px, py))
for net, x, y, _r in geo['flags']:
if BOX[0] - 20 <= x <= BOX[2] + 20 and BOX[1] - 25 <= y <= BOX[3] + 10:
errs.append(u'旗 %s@(%d,%d) 挨着新块' % (net, x, y))
for net, x, y, _r, _nm in geo['ports']:
if BOX[0] - 60 <= x <= BOX[2] + 20 and BOX[1] - 10 <= y <= BOX[3] + 10:
errs.append(u'端口 %s@(%d,%d) 挨着新块' % (net, x, y))
for w in geo['wires']:
for i in range(0, len(w) - 3, 4):
a, b = (w[i], w[i + 1]), (w[i + 2], w[i + 3])
if inb(*a) or inb(*b):
errs.append(u'已有导线 %s-%s 的端点在新块里' % (a, b))
elif a[0] == b[0] and BOX[0] <= a[0] <= BOX[2] and min(a[1], b[1]) < BOX[3] and max(a[1], b[1]) > BOX[1]:
errs.append(u'已有竖线 x=%d 穿过新块' % a[0])
elif a[1] == b[1] and BOX[1] <= a[1] <= BOX[3] and min(a[0], b[0]) < BOX[2] and max(a[0], b[0]) > BOX[0]:
errs.append(u'已有横线 y=%d 穿过新块' % a[1])
for (a, b, net) in W:
assert (a[0] == b[0]) != (a[1] == b[1]) and all(v % 5 == 0 for v in a + b), net
for it in PT:
assert it[2] % 5 == 0 and it[3] % 5 == 0
if BOX[2] > FRAME[2] or BOX[3] > FRAME[3]:
errs.append(u'新块越框 %s' % (BOX,))
# XTAL1 / XTAL2 这两个网在页上必须已经存在(同名端口才连得上)
have = set(p[0] for p in geo['ports'])
for net in ('XTAL1', 'XTAL2'):
if net not in have:
errs.append(u'页上没有 %s 端口 —— 同名端口连不上' % net)
return errs
def main():
push = '--push' in sys.argv
geo = dump()
print(u'当前页:元件 %d / 旗 %d / 端口 %d / 导线图元 %d'
% (len(geo['parts']), len(geo['flags']), len(geo['ports']), len(geo['wires'])))
errs = check(geo)
if errs:
print(u'检查 %d 条:' % len(errs))
for e in errs:
print(u' ' + e)
raise SystemExit(u'未通过,不下发')
print(u'碰撞检查通过:%s 放在 %s,XTAL1/XTAL2 两个端口' % (DES, RC))
if not push:
print(u'加 --push 执行')
return
open_page()
call("""
await eda.sch_PrimitiveComponent.create({libraryUuid:'%s', uuid:'%s'}, %d, %d, undefined, 0, false, true, true);
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()!=='part') continue;
if (Math.round(c.getState_X())!==%d || Math.round(c.getState_Y())!==%d) continue;
await c.toAsync().setState_Designator('%s').done();
}
return 1;""" % (LIB, R1M, RC[0], RC[1], RC[0], RC[1], DES))
got = call("""
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()!=='part' || c.getState_Designator()!=='%s') continue;
return (await c.getAllPins()).map(p=>[Math.round(p.getState_X()),Math.round(p.getState_Y())]).sort();
}
return null;""" % DES)
if sorted(got or []) != PINS:
raise SystemExit(u'%s 引脚 %s,应为 %s —— 不连线,先查' % (DES, got, PINS))
print(u'%s 引脚坐标核对通过 %s' % (DES, got))
call("for (const s of %s) await eda.sch_PrimitiveWire.create(s); return 1;"
% json.dumps([[a[0], a[1], b[0], b[1]] for a, b, _n in W]))
call("for (const p of %s) await eda.sch_PrimitiveComponent.createNetPort(p[0],p[1],p[2],p[3],p[4],false); return 1;"
% json.dumps(PT))
call("return await eda.sch_Document.save();")
print(u'推送完成并存盘 —— 接着打开这一页跑 verify_sch.py --nets / port_audit.py,再截图给用户看')
if __name__ == '__main__':
main()
+12
查看文件
@@ -0,0 +1,12 @@
{
"U21": [
"4"
],
"U22": [
"4",
"15"
],
"U33": [
"9"
]
}
+242
查看文件
@@ -0,0 +1,242 @@
# -*- coding: utf-8 -*-
u"""载板 C6-KEYS:三片 74HC595(U21 / U22 / U33,24 位链)—— 15 路侧键 + 5 路 EDL_EN + HUB_RST。
2026-09-06 从下板 P3B-EXPAND / P6-FAN-EDL 整窝搬过来(设计文档 §26.23)。
位号原样保留(U21 / U22 / U33 / C604 / C605 / C739 / R609),BOM 好对账。
输出位分配沿用 §26.18 那张表(固件 `sr595_key_bit()` / `sr595_edl_bit()` 不用改):
影子位 QA(15) QB(1) QC(2) QD(3) QE(4) QF(5) QG(6) QH(7)
U21 EDL_EN4 K1_PWR K1_VUP K1_VDN 空 EDL_EN5 EDL_EN3 EDL_EN2
U22 空 K4_PWR K4_VUP K4_VDN 空 K5_VDN K5_VUP K5_PWR
U33 EDL_EN1 K2_VUP K2_VDN K2_PWR K3_VDN K3_VUP K3_PWR HUB_RST
供电是载板的 **+3V3_HUB**(U31 AMS1117),不再是下板的 +3V3;
四根控制线 KEY_SER / KEY_SRCLK / KEY_RCLK / KEY_OE# 从排母 J32 北排 3~6 行进来(C1-CONN)。
用法: /c/Python314/python .claude/c6_keys.py [--push]
"""
import json
import os
import sys
import time
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from eda import run # noqa: E402
SCH = '302e115180aaa8fc' # phonerail-carrier
LIB = '0819f05c4eef4c71ace90d822a990e87'
PNAME = 'C6-KEYS'
P = {
'HC595': '94fc47f3127c49c1b8e18e741938eebc', # C5947 74HC595D,118
'C100N': '87bb635d0b2f489a9f60e7cd225beb3c', # C1525 100nF 0402
'R100K': 'acc294b6661948399f609b41c77ed19f', # C25741 100k 0402
}
# 74HC595 符号:左列 x=cx-40:1=QB(cy+35) 2=QC 3=QD 4=QE 5=QF 6=QG 7=QH 8=GND(cy-35)
# 右列 x=cx+40:9=QH'(cy-35) 10=SRCLR# 11=SRCLK 12=RCLK 13=OE# 14=SER 15=QA 16=VCC(cy+35)
CX = 250
# (位号, cy, 去耦位号, [QB..QH 七个网络], QA 网络, SER 网络, QH' 网络)
CHIPS = [
('U21', 660, 'C604', ['K1_PWR', 'K1_VUP', 'K1_VDN', None, 'EDL_EN5', 'EDL_EN3', 'EDL_EN2'],
'EDL_EN4', 'KEY_SER', 'SR_CAS'),
('U22', 490, 'C605', ['K4_PWR', 'K4_VUP', 'K4_VDN', None, 'K5_VDN', 'K5_VUP', 'K5_PWR'],
None, 'SR_CAS', 'SR_CAS2'),
('U33', 320, 'C739', ['K2_VUP', 'K2_VDN', 'K2_PWR', 'K3_VDN', 'K3_VUP', 'K3_PWR', 'HUB_RST'],
'EDL_EN1', 'SR_CAS2', None),
]
CAP_X = 500
R609 = (600, 500) # KEY_OE# 上拉 100k(竖放)
PWR = '+3V3_HUB'
NC = {'U21': ['4'], 'U22': ['4', '15'], 'U33': ['9']} # 空输出 + 链尾 QH'
def call(js, timeout=180):
r = run(js, timeout=timeout)
if not r.get('success'):
raise RuntimeError(json.dumps(r, ensure_ascii=False)[:800])
return r['result']
def placement():
out = []
for d, cy, cap, *_ in CHIPS:
out.append([d, P['HC595'], CX, cy, 0])
out.append([cap, P['C100N'], CAP_X, cy + 20, 270])
out.append(['R609', P['R100K'], R609[0], R609[1], 270])
return out
def wiring(pins):
W, F, PT, TX = [], [], [], []
def w(*p):
for i in range(0, len(p) - 2, 2):
W.append([p[i], p[i + 1], p[i + 2], p[i + 3]])
for d, cy, cap, qs, qa, ser, q7s in CHIPS:
pm = pins[d]
L, R = CX - 40, CX + 40
for i, net in enumerate(qs): # QB..QH 左列,标签朝左
y = cy + 35 - i * 10
assert pm[str(i + 1)] == (L, y), (d, i + 1, pm[str(i + 1)])
if net is None:
continue
w(L, y, L - 15, y)
PT.append(['BI', net, L - 15, y, 180])
assert pm['8'] == (L, cy - 35) and pm['16'] == (R, cy + 35)
w(L, cy - 35, L - 35, cy - 35, L - 35, cy - 60) # 8 GND
F.append(['Ground', 'GND', L - 35, cy - 60, 0])
w(R, cy + 35, R + 35, cy + 35, R + 35, cy + 65) # 16 VCC
F.append(['Power', PWR, R + 35, cy + 65, 0])
if qa: # 15 QA
w(R, cy + 25, R + 50, cy + 25)
PT.append(['BI', qa, R + 50, cy + 25, 0])
w(R, cy + 15, R + 50, cy + 15) # 14 SER
PT.append(['BI', ser, R + 50, cy + 15, 0])
w(R, cy + 5, R + 50, cy + 5) # 13 OE#
PT.append(['BI', 'KEY_OE#', R + 50, cy + 5, 0])
w(R, cy - 5, R + 50, cy - 5) # 12 RCLK
PT.append(['BI', 'KEY_RCLK', R + 50, cy - 5, 0])
w(R, cy - 15, R + 50, cy - 15) # 11 SRCLK
PT.append(['BI', 'KEY_SRCLK', R + 50, cy - 15, 0])
w(R, cy - 25, R + 150, cy - 25, R + 150, cy - 45) # 10 SRCLR# 拉高
F.append(['Power', PWR, R + 150, cy - 45, 180])
if q7s: # 9 QH' 级联
w(R, cy - 35, R + 50, cy - 35)
PT.append(['BI', q7s, R + 50, cy - 35, 0])
# 去耦:上脚 -> 电源旗,下脚 -> 地旗(按坐标认上下,不认引脚号)
cp = pins[cap]
top = max(cp.values(), key=lambda v: v[1])
bot = min(cp.values(), key=lambda v: v[1])
assert top[0] == bot[0] == CAP_X, (cap, cp)
w(top[0], top[1], top[0], top[1] + 25)
F.append(['Power', PWR, top[0], top[1] + 25, 0])
w(bot[0], bot[1], bot[0], bot[1] - 30)
F.append(['Ground', 'GND', bot[0], bot[1] - 30, 0])
# KEY_OE# 上拉 100k:ESP32 复位期间 / 排针断开时 24 路输出全部高阻
rp = pins['R609']
top = max(rp.values(), key=lambda v: v[1])
bot = min(rp.values(), key=lambda v: v[1])
w(top[0], top[1], top[0], top[1] + 30)
F.append(['Power', PWR, top[0], top[1] + 30, 0])
w(bot[0], bot[1], bot[0], bot[1] - 25)
PT.append(['BI', 'KEY_OE#', bot[0], bot[1] - 25, 0])
TX += [
(45, 806, u'【C6-KEYS】三片 74HC595 —— 15 路侧键 + 5 路 EDL_EN + HUB_RST(2026-09-06 从下板搬来,§26.23)', 13),
(45, 790, u'链序 U21 → U22 → U33,整条 24 位;SRCLK / RCLK / OE# 三片共用,四根控制线从 J32 北排 3~6 行进来(C1-CONN)。', 10),
(45, 776, u'先移入的字节落在 U33;固件发送顺序 U33 → U22 → U21,每字节 QH 先发。输出位表见设计文档 §17.2(固件 sr595_key_bit / sr595_edl_bit)。', 10),
(45, 762, u'供电 +3V3_HUB(U31)。OE# 上拉 100k(R609):ESP32 复位期间 / 排针没插时 24 路输出全高阻,', 10),
(45, 748, u'配合每个 MOS 栅极 / EDL_EN 的 100k 下拉(C4-SITEn),15 个按键不会误按、五台手机不会误进 9008。', 10),
(720, 640, u'HUB_RST 是低有效(USB2517I RESET_N,R716 上拉):', 10),
(720, 624, u'影子位 = 1 才是「Hub 正常跑」,上电安全影子是 1<<23 不是 0。', 10),
(720, 600, u'K*_PWR / K*_VUP / K*_VDN 去 C4-SITE1~5 的按键 MOS 栅极;', 10),
(720, 584, u'EDL_EN1~5 去 C4-SITE1~5 的 TS5A3157。全是载板内部网络,不再过排针。', 10),
(720, 560, u'空脚:U21.QE、U22.QA、U22.QE;U33.QH\' 是链尾。', 10),
]
for a, b, c, e in W:
assert (a == c) != (b == e), u'有一段导线不是横平竖直或零长度: %s' % ((a, b, c, e),)
for v in (a, b, c, e):
assert v % 5 == 0, u'导线坐标 %d 不是 5 的倍数: %s' % (v, (a, b, c, e))
for kind, lst in (('flag', F), ('port', PT)):
for it in lst:
assert it[2] % 5 == 0 and it[3] % 5 == 0, u'%s %s 坐标不是 5 的倍数' % (kind, it[1])
return W, F, PT, TX
def main():
push = '--push' in sys.argv
place = placement()
if not push:
print(u'元件 %d 个(未推送,加 --push)' % len(place))
return
page = call("""
const info = await eda.dmt_Schematic.getSchematicInfo('%s');
for (const p of (info.page||[])) if (p.name==='%s') return p.uuid;
const u = await eda.dmt_Schematic.createSchematicPage('%s');
await eda.dmt_Schematic.modifySchematicPageName(u,'%s');
return u;
""" % (SCH, PNAME.lower(), SCH, PNAME))
print(u'页面 %s' % page)
call("""
await eda.dmt_EditorControl.openDocument('%s'); await new Promise(r=>setTimeout(r,900));
const n=(await eda.dmt_Schematic.getCurrentSchematicPageInfo()).name;
if (n!=='%s') throw new Error('page='+n);
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()==='sheet') continue;
await eda.sch_PrimitiveComponent.delete(c.getState_PrimitiveId());
}
for (const w of await eda.sch_PrimitiveWire.getAll()) await eda.sch_PrimitiveWire.delete(w.getState_PrimitiveId());
for (const t of await eda.sch_PrimitiveText.getAll()) await eda.sch_PrimitiveText.delete(t.getState_PrimitiveId());
return 1;
""" % (page, PNAME))
call("""
globalThis.__pl = {done: 0, err: null, n: %d};
(async () => {
for (const [d, uuid, x, y, rot] of %s) {
try { await eda.sch_PrimitiveComponent.create({libraryUuid: '%s', uuid}, x, y, undefined, rot, false, true, true); }
catch (e) { globalThis.__pl.err = d + ': ' + String(e).slice(0, 150); }
globalThis.__pl.done++;
}
})();
return 'fired';
""" % (len(place), json.dumps(place), LIB))
for _ in range(90):
st = call("return globalThis.__pl;")
if st['err']:
raise SystemExit(u'放置失败: %s' % st['err'])
if st['done'] >= st['n']:
break
time.sleep(2)
else:
raise SystemExit(u'放置超时 %d/%d' % (st['done'], st['n']))
named = call("""
const P = %s; let k = 0;
const cs = (await eda.sch_PrimitiveComponent.getAll()).filter(c => c.getState_ComponentType() === 'part');
for (const [d, uuid, x, y] of P) for (const c of cs) {
if (Math.round(c.getState_X()) !== x || Math.round(c.getState_Y()) !== y) continue;
await c.toAsync().setState_Designator(d).done(); k++; break;
}
return k;
""" % json.dumps([[d, u, x, y] for d, u, x, y, r in place]))
if named != len(place):
raise SystemExit(u'只认领到 %d/%d 个位号' % (named, len(place)))
raw = call("""
const out={};
for (const c of await eda.sch_PrimitiveComponent.getAll()){
if (c.getState_ComponentType()!=='part') continue;
out[c.getState_Designator()] = (await c.getAllPins()).map(
p=>[p.getState_PinNumber(), Math.round(p.getState_X()), Math.round(p.getState_Y())]);
}
return out;
""")
pins = {k: {p: (x, y) for p, x, y in v} for k, v in raw.items()}
W, F, PT, TX = wiring(pins)
def batch(items, size, js):
for i in range(0, len(items), size):
call(js % json.dumps(items[i:i + size], ensure_ascii=False))
batch(W, 40, "for (const s of %s) await eda.sch_PrimitiveWire.create(s); return 1;")
batch(PT, 25, "for (const p of %s) await eda.sch_PrimitiveComponent.createNetPort(p[0],p[1],p[2],p[3],p[4],false); return 1;")
batch(F, 25, "for (const f of %s) await eda.sch_PrimitiveComponent.createNetFlag(f[0],f[1],f[2],f[3],f[4],false); return 1;")
batch([list(t) for t in TX], 15,
"for (const t of %s) await eda.sch_PrimitiveText.create(t[0],t[1],t[2],0,null,null,t[3],false,false,false,0); return 1;")
call("await eda.sch_Document.save(); return 1;")
json.dump(NC, open(os.path.join(HERE, 'c6-nets-nc.json'), 'w', encoding='utf-8'),
ensure_ascii=False, indent=1)
print(u'%s: 元件 %d 导线 %d 旗 %d 端口 %d 文字 %d (%s)'
% (PNAME, len(place), len(W), len(F), len(PT), len(TX), page))
if __name__ == '__main__':
main()
+13 -3
查看文件
@@ -49,6 +49,8 @@ if '--blade' in sys.argv or '--base' in sys.argv:
_u = _j.load(_io.open(_os.path.join(_os.path.dirname(_os.path.abspath(__file__)),
'r2', 'r2-uuids.json'), encoding='utf-8'))
PCB = _u['boards']['BASE' if '--base' in sys.argv else 'BLADE']['pcb']['uuid']
if '--pcb' in sys.argv: # 2026-09-14:直接给 uuid(BLADE-PCB_1 = c575a2e854057614 不在 r2-uuids 里)
PCB = sys.argv[sys.argv.index('--pcb') + 1]
else:
PCB = '942ed1560d81c1e7' if '--pcb2' in sys.argv else '7e9415a16a909c51'
@@ -98,7 +100,8 @@ for (const el of document.querySelectorAll('div,table,tbody')) {
const x = el.innerText || '';
// ⚠️ 光判「含错误对象」会选中表头那个小格子(innerText 就四个字)。
// 必须同时要求里面真的有一条明细行,行首长这样:`1间距错误…` / `3物理错误…`
if (/错误对象/.test(x) && /[0-9](间距|物理|制造|连接性)错误/.test(x)
// ⚠️ 行首类别还有「差分对错误」「同封装内间距错误」—— 只认四种的话这两类只剩标题(2026-09-10 底板 18 条被吞)
if (/错误对象/.test(x) && /[0-9](间距|物理|制造|连接性|差分对|同封装内间距)错误/.test(x)
&& (!best || x.length < best.length)) best = x;
}
return {detail: best || ''};
@@ -141,6 +144,13 @@ def main():
tail = phys[1].split(u'连接性错误', 1)[0].split(u'间距错误', 1)[0]
cats += [(u'物理错误·' + n.strip(), c)
for n, c in re.findall(r'([^()\d][^()]*?) \((\d+)\)', tail)]
# `--conn`:连接性错误那一支也逐条列出来(2026-09-11:刀片 90×68 要确认 39 条里有没有被走线围住、
# 铺铜够不着的 GND 焊盘 —— board_check 读不了铺铜,只有 DRC 这一支看得到)
if '--conn' in sys.argv:
conn = tree.split(u'连接性错误', 1)
if len(conn) > 1:
cats += [(u'连接性错误·' + n.strip(), c)
for n, c in re.findall(r'([^()\d][^()]*?) \((\d+)\)', conn[1])]
if not cats:
print(u'')
print(u'✅ 没有间距错误。')
@@ -160,8 +170,8 @@ def main():
txt = d['detail'].split(u'input::-webkit')[0] # 尾巴粘着分页组件的 CSS
# ⚠️ 行首的类别名不止「间距错误」—— 还有「物理错误」「制造错误」等。
# 只匹配间距错误会让另外那些类别只剩一个标题、一条明细都看不到。
rows = re.findall(r'(\d+)(间距错误|物理错误|制造错误|连接性错误)(.+?)'
r'(?=\d+(?:间距错误|物理错误|制造错误|连接性错误)|$)', txt)
kinds = u'间距错误|物理错误|制造错误|连接性错误|差分对错误|同封装内间距错误'
rows = re.findall(r'(\d+)(%s)(.+?)(?=\d+(?:%s)|$)' % (kinds, kinds), txt)
for idx, kind, body in rows:
print(u' %s. [%s] %s' % (idx, kind, body.strip()[:190]))
if not rows and txt.strip():
+71 -1
查看文件
@@ -74,6 +74,13 @@
"fp": "R0402",
"role": "R 100k 0402 — Buck RT(→480kHz) / EFUSE_EN 下拉 / 反相器上拉 / 按键栅极下拉"
},
"C26083": {
"name": "0402WGF1004TCE",
"uuid": "512988296f6244ad86a0777e419ee0f1",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "R0402",
"role": "R 1M 0402 — USB2517 晶振 XTAL1–XTAL2 跨接(检查清单 p9 required;R2 底板 R723)"
},
"C25744": {
"name": "0402WGF1002TCE",
"uuid": "c3b9baa5ef2e4070a4c0f9e9cd04fe6e",
@@ -254,7 +261,7 @@
"uuid": "ebc5227ec05f4bcbbb5581e49a5f7cc6",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "WIRELM-SMD_ESP32-S3-WROOM-1",
"role": "U20 ESP32-S3-WROOM-1"
"role": "U20 ESP32-S3-WROOM-1 —— ⚠ 2026-09-13 起作废,改用 C2913202(N16R8)"
},
"C29402": {
"name": "0402WGF3012TCE",
@@ -682,6 +689,69 @@
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "1206",
"role": "刀片 B1-POWER 的 F1:**2A 慢断**贴片保险丝(AEM,SB = Slow Blow),1206 / 63V / 分断 50A / 熔断 I²t = 0.63 A²s。2026-09-08 结掉 T7,取代同封装的 10A 占位件 C310989(F1206HC10A0TM)。⚠ **封装 uuid 与占位件不同**(bceff889… vs 66116fae…,10A/150A 分断那颗焊盘更大),刀片 PCB 还没布(M4),所以无影响;原理图侧的导线是按读回引脚坐标算的,自动跟随。⚠ 刀片满载约 1.45 A(16 W 手机 ÷ 92% ÷ 12 V)= 额定的 73%,正压在保险丝「连续 ≤75%」的降额线上,机箱内 40~50 ℃ 还要再降 ——要更大裕量就换 F1206SB2500V032TM(C310999,2.5A/32V/I²t 0.9)。⚠ 别和底板那两颗混:底板 F1 是 C310990 F1206HC12A0TM(12A,整机 9.99 A)。"
},
"C42459160": {
"name": "CH224A",
"uuid": "5dc78bb926494e428829ff56caa7e80c",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "ESSOP-10_L4.9-W3.9-P1.0-LS6.0-TL-EP",
"role": "R2 底板 U36(D16,A1B-PD)USB-C PD 取电芯片 CH224A。单电阻 CFG1=120k ⇒ 20V;CFG2/CFG3 = I²C 0x22/0x23(内置 10k 上拉)。rot0 引脚:左 1VHV(-60,15) 2SCL(-60,5) 3SDA(-60,-5) 4DP(-60,-15) 5DM(-60,-25);右 6CC2(60,-25) 7CC1(60,-15) 8VBUS(60,-5) 9CFG1(60,5) 10PG(60,15);11GND(10,35)"
},
"C3188410": {
"name": "LM61495QRPHRQ1",
"uuid": "6decf77d68044058a0459100093f7c4d",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "VQFN-16_L4.5-W3.5-P0.50-TL_TI_RPH",
"role": "R2 底板 U37(D16)20V→12V 10A 降压,可调 VFB=1.0V,VIN 3~36V。rot0 引脚:左 3RBOOT(-65,65) 10RESET#(-65,55) 9RT(-65,45) 11SPSP(-65,15) 16SW(-65,5) 12SYNC(-65,-5) 5BIAS(-65,-35) 4CBOOT(-65,-45) 13EN(-65,-55) 7FB(-65,-65);右 1PGND2(65,-65) 15PGND1(65,-55) 8AGND(65,-45) 2VIN2(65,25) 14VIN1(65,35) 6VCC(65,65)。脚位兼容 LM61480RPHR(C3198089,8A)"
},
"C780205": {
"name": "SRP1265A-4R7M",
"uuid": "e7654e742e404207b9ac28f93c340777",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "IND-SMD_L12.6-W12.5-SRP1265A-220M",
"role": "R2 底板 L4(D16)4.7µH / Isat 28A / Irms 13.5A / 8.4mΩ,12.6×12.5。rot0 横放 ±20"
},
"C151920": {
"name": "SMBJ22A",
"uuid": "dfc1d66dcd0045e58f8d92cbba05375c",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "SMB_L4.6-W3.6-LS5.3-RD",
"role": "R2 底板 D3(D16)20V 母线 TVS,VRWM 22V / VBR 24.4V。rot0:1K(-20,0) 2A(20,0)"
},
"C28323": {
"name": "CL21B105KBFNNNE",
"uuid": "89c7d63b9d074e6dae4b7baf00fed93b",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "C0805",
"role": "MLCC 1µF/50V 0805 —— R2 底板 C12(CH224A 的 VHV)。rot0 横放 ±15"
},
"C307331": {
"name": "CL05B104KB54PNC",
"uuid": "33dbcd8e8b3241828899bb3c808db9eb",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "C0402",
"role": "MLCC 100nF/50V X7R 0402 —— R2 底板 C19/C20(LM61495 两对 VIN/PGND 的高频旁路,20V 母线上不能用 16V 的 C1525)"
},
"C25745": {
"name": "0402WGF1103TCE",
"uuid": "e96454f8538644d196025c43c4d56290",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "R0402",
"role": "R 110k 0402 —— R2 底板 R10(LM61495 FB 上臂,配 10k ⇒ 12.0V)"
},
"C25750": {
"name": "0402WGF1203TCE",
"uuid": "eb58863ce37241feb2f2def9c725cac0",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "R0402",
"role": "R 120k 0402 —— R2 底板 R7(CH224A 单电阻配置 ⇒ 请求 20V)"
},
"C2913202": {
"name": "ESP32-S3-WROOM-1-N16R8",
"uuid": "701a1177d7184d1bbf7f86d69d9385c2",
"lib": "0819f05c4eef4c71ace90d822a990e87",
"fp": "WIRELM-SMD_ESP32-S3-WROOM-1",
"role": "U20 ESP32-S3-WROOM-1-N16R8(2026-09-13 定版)。16MB [email protected] + 8MB 八线 PSRAM:IO35/36/37 被占用不可接;IO45 必须悬空/下拉(VDD_SPI=3.3V)。U20 实例是改属性换的料,符号仍是旧器件的符号(脚名脚号一致)"
}
},
"schematic_boards": {
+129
查看文件
@@ -0,0 +1,129 @@
# -*- coding: utf-8 -*-
u"""板边可达性检查:每个接插件离**真板框**有多远?
/c/Python314/python .claude/edge_access.py # 下板 PCB1
/c/Python314/python .claude/edge_access.py --board2 # 载板 PCB2
## 为什么需要这条判据
摆位脚本自带的六项检查(净距 / 重叠 / 越框 / 定位孔 / 高度 / 锚点 / 去耦贴身)
**全是「元件之间」和「元件对板框」的检查,没有一条问「插头插得进去吗」。**
2026-09-08 实测后果:下板的板框常量从 160×125 改成真值 220×135 / 左下角 (−30,−5) 之后,
四个需要板边通道的接插件**全部悬在板子内部 30 mm**,而上方 13 mm 处压着载板:
| 位号 | 用途 | 离旧假框 | 离真板边 |
|---|---|---:|---:|
| `J1` | XT30 12V 进线,90° 板装 | 0.5 | **30.5** ⛔ |
| `J22` | 调试 USB-C | 0.4 | **30.4** ⛔ |
| `J26`/`J27` | 风扇 4P 直针座 | −29.0 | **1.2 / 9.0** ⛔ |
**六项检查全过、DRC 也全过 —— 因为它们确实没越框、也没压着谁。**
这类错误只有「离真板边多远」这一条判据抓得到。
⇒ 判据:凡是**需要从板外插入或引出线缆**的器件(连接器、USB、电源座、风扇座、
测试口),其本体包围盒到最近板框边的距离必须 ≤ `NEED_EDGE_MAX`。
板对板排针(与另一块板垂直对插)不在此列 —— 用 `VERTICAL_MATE` 排除。
⚠️ 顺带一条容易搞混的:**直针座(垂直插拔)也需要板边**。本项目的 4P 风扇座是直针,
插拔方向是 +Z,但两板间隙只有 13 mm 而座壳就 11.5 mm,插上线之后**线缆只能贴着板面
横向爬出去** —— 所以板边的意义是「线缆走得掉」,不是「插得进」。
"""
import io
import json
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
NEED_EDGE_MAX = 3.0 # 需要板边通道的器件,本体离板框最多这么远(mm)
#: **免检名单**:不是“从板外插线”的接插件。分两类:
#: ① 与另一块 PCB **垂直对插**(板对板排针 / 排母)
#: ② 与**放在载板上面的手机**对接(侧键中框式焊盘、尾插座、电池座)
#: 这两类都是 +Z 方向对接,板边对它们没有意义。
#: —— 第一版只写了①,载板上直接误报 30 条(J41~J65 / J81~J85 全是手机侧接口)。
VERTICAL_MATE = (
{'J24', 'J25', 'J31', 'J32'} # 两板之间的排针/排母
| {'J7%d' % n for n in range(1, 6)} # BM24 板对板
| {'J%d' % n for n in range(41, 66)} # 侧键焊盘 J41~J60 + 尾插 J61~J65
| {'J8%d' % n for n in range(1, 6)} # 手机位相关
)
def load(board2):
u"""从摆位脚本里取 POS / abs_box / 板框。两块板的摆位脚本结构一样。"""
fn = 'pcb2_place.py' if board2 else 'pcb1_place.py'
p = os.path.join(HERE, fn)
src = io.open(p, encoding='utf-8').read().replace('\nmain()\n', '\n')
g = {'__name__': 'm', '__file__': p}
exec(compile(src, fn, 'exec'), g)
if board2:
bx0, by0, bx1, by1 = 0.0, 0.0, g['BW'], g['BH']
else:
bx0, by0, bx1, by1 = g['BX0'], g['BY0'], g['BX1'], g['BY1']
return g, (bx0, by0, bx1, by1)
def _pcb2_adapter(g):
u"""载板 `pcb2_place.py` 的数据结构和下板不一样:摆位表由 `plan()` 现算、
包围盒是 `box(d, rot, bb, layer)`(相对元件原点)而不是 `abs_box(d)`。
这里把它包装成和下板一致的 `(POS, abs_box, fp)` 三件套。"""
pos = g['plan']()
bb = g['load_bb']() # {位号: 相对元件原点的焊盘包围盒}
def abs_box(d):
x, y, r, lay = pos[d]
b = g['box'](d, r, bb, lay)
return (x + b[0], y + b[1], x + b[2], y + b[3])
import json as _json, os as _os
_fp = {}
_f = _os.path.join(HERE, 'pcb2-parts.json')
if _os.path.exists(_f):
for c in _json.load(io.open(_f, encoding='utf-8')):
_fp[c['d']] = c.get('fp', '')
def fp(d):
return _fp.get(d, '')
return {k: v for k, v in pos.items()}, abs_box, fp
def main():
board2 = '--board2' in sys.argv
g, (BX0, BY0, BX1, BY1) = load(board2)
if board2:
POS, abs_box, fp = _pcb2_adapter(g)
else:
POS, abs_box, fp = g['POS'], g['abs_box'], g['fp']
print(u'%s 板框 x %.1f~%.1f y %.1f~%.1f' % (u'载板' if board2 else u'下板', BX0, BX1, BY0, BY1))
rows, bad = [], []
for d in sorted(POS):
f = (fp(d) or '')
if not (d[0] == 'J' or 'CONN' in f.upper() or 'USB' in f.upper() or 'HDR' in f.upper()):
continue
b = abs_box(d)
dist = min(b[0] - BX0, BX1 - b[2], b[1] - BY0, BY1 - b[3])
rows.append((dist, d, f, b))
if dist > NEED_EDGE_MAX and d not in VERTICAL_MATE:
bad.append((dist, d, f, b))
rows.sort()
print(u'\n%-7s %-36s %9s %s' % (u'位号', u'封装', u'离板边', u'本体包围盒'))
for dist, d, f, b in rows:
mark = u''
if d in VERTICAL_MATE:
mark = u' (垂直对插,免检)'
elif dist > NEED_EDGE_MAX:
mark = u' ⛔ 插头/线缆够不着'
print(u'%-7s %-36s %9.1f x %7.1f~%-7.1f y %7.1f~%-7.1f%s'
% (d, f[:36], dist, b[0], b[2], b[1], b[3], mark))
print()
if bad:
print(u'⛔ %d 个接插件离真板边超过 %.1f mm:%s'
% (len(bad), NEED_EDGE_MAX, u', '.join(x[1] for x in bad)))
sys.exit(1)
print(u'✅ 所有需要板边通道的接插件都在板边 %.1f mm 以内' % NEED_EDGE_MAX)
main()

某些文件未显示,因为此 diff 中更改的文件太多 显示更多