# NXAI 经验总结与交接（截至 2026-10-20 10:00）

> 本文件是"给下一个 agent / 我自己明天"看的记忆体。
> 凡本文件记录在案的事实，不要再猜、不要重做。

## 一、项目定位（已定型，不要再改方向）
- 独立外挂软件，**不是 NX 插件**（用户明确要求）。NX 内不放业务逻辑。
- 两个 exe 分工：`NXAI.exe`（安装/升级/授权，保持小而稳）+ `NXAI工作台.exe`（日常 GUI）。
- 沿用 NX 的刀具库与后处理；不替换 NX。
- 已放弃：机床仿真（无许可）、NX 内部菜单插件（方向不符）。

## 二、本机环境（权威事实，禁止猜）
- NX 两套：`E:\Program Files\Siemens\NX2212`（Python 3.10.6）、`NX2412`（Python 3.11.9）。
- 注册表键名带空格：`HKLM\SOFTWARE\Siemens\NX 2212` / `NX 2412`，值 `UGII_BASE_DIR`。
  （写成 `NX2412` 无空格会找不到——踩过）
- NX 的 Python 以 DLL 内嵌：`NXBIN\python310.dll` / `python311.dll` / `nxpythonldr.dll`，
  不需要独立 python.exe。批处理优先用 Python journal。
- 编译只用 `C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe`（无 VS、无 SDK）。
- 桌面侧 Python：`C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python.exe`。

## 三、NX Open 跨版本铁律（实测得出，违反必错）
1. 判断几何只能用几何量：`body.GetFaces()`、`face.GetEdges()`、`edge.GetLength()`。
2. 禁止用对象个数做业务判断：同一零件 `part.Bodies` 在 2212=92、2412=2，特征数都是 2。
3. 下列 API 本机不存在，别再试：`face.Radius` / `edge.Radius` / `edge.GetCurveData()` /
   `part.Faces` / `ufs.Modl.AskFaceData` / `body.GetBoundingBox()`。
   圆柱直径 = 圆边 `edge.GetLength() / π`（实测 34.5575/π = 11.0000 → φ11）。
4. NX Open 集合不支持 len()/ToArray()，只能迭代。
5. `face.SolidFaceType` 的 str() 是数字 id；不确定就 `dir(obj)` 反射，别猜名字。
6. 导入几何（Brep）没有参数化孔特征，孔径只能几何反算。

## 四、后处理（重大突破，2026-10-20）
厂家三套法那科双转台后处理已归档：
`D:\NX_AI\nx_post_lib\fanuc_dual_table\{Fanuc_general_3A,4A,5A}\`（各含 .cdl/.def/.pui/.tcl + MANIFEST.json）

**四轴 A 轴的正确设置（来自可用的 4A 样本）**：
```
mom_kin_4th_axis_leader  "A"
mom_kin_4th_axis_vector  1, 0, 0
mom_kin_4th_axis_plane   "YZ"     ← 关键！绕 X 的 A 轴必须 YZ，不是 ZX
mom_kin_4th_axis_type    "Table"
min/max limit            -360 / 360
mom_kin_machine_type     "5_axis_dual_table"
```
我们此前手改 `4Zdbzq` 把 plane 写成 `ZX`、limit 0/360、machine_type 4_axis_table，
**结果 NX 始终不出 A 轴**。教训：四/五轴一律以厂家样本为基线，不要文本臆改。

已知失败路径（勿重走）：
- Post Builder 2012 生成的 def/tcl 在 NX2412 上可能打不开（"MOM 不能打开模板文件"）。
- 启动器注入 `UGII_CAM_POST_DIR` 会让 NX 读我们那份坏表、后处理对话框直接弹错 → 已移除注入。
- 后处理注册走 `tools\install_post.bat`（管理员），写 NX 自己的 template_post.dat，先备份。

## 五、已踩过的坑（按代价排序）
1. **facts 过期**：出工序单固定读 `状态\_demo_facts.json`，换零件不重探 → 单子是旧零件的。
   已修：P10-01 加"重新探测"+过期检测（弹框比对零件名）。
2. **点了没反应**：零件路径写错（`7-17-7-17.prt` vs 真实 `7-17.prt`），代码在 File.Exists 静默退出。
   已修：日志区红字说明。
3. **刀具/程序组建了不保存**：`cam_build_local.py` 默认不保存，工作台没传 `--save-as` → 全丢。
   已由 P10-03 修（另存副本到桌面 `NXAI产物`）。
4. **刀号 T0**：NC 里 `T0=D8 H00`，上机会报警/撞刀。P10-07 要求 T1–T20 强制分配。
5. **整实体选几何导致刀路空**：`Append([body])` 是错的；应按区域选面
   （平面=1 面；腔体=内壁+底面整体；台阶=同高度合并）。
6. **聚焦投喂**：Trae 前台抢不到时投喂器会中止（安全设计）。解决办法：
   `AttachThreadInput` + `BringWindowToTop` + `SetForegroundWindow`，已脚本化（`tools\_relay3.ps1`）。
7. PowerShell here-string 内嵌 `@'` 会提前终止外层；中文写在 `.py` 里若存成 GBK 会 SyntaxError。
8. 杀进程用 `CommandLine -like '*trae_feeder*'` 会自杀（匹配到自己的命令行）——必须排除 `$PID`。

## 六、卡片进度（P10 系列）
| 卡 | 内容 | 状态 |
|---|---|---|
| P10-01 | 工作台：重新探测 + 过期检测 + T0 预警 | ✅ done |
| P10-02 | 9 种工序 | ✅ done_with_honest_failures（只 zlevel/surface 出刀路） |
| P10-03 | 一键准备 | ✅ done_pending_gui（12 行只成 2 行） |
| P10-04 | 工序单编辑器（全选/临时永久优化/原因） | ✅ done_pending_gui |
| P10-05 | 三阶段拆程序 + M01 + 半精测尺寸 | ✅ done（3 个 NC 已验证） |
| P10-06 | 材料分族 7 类 | ⏳ 排队 |
| P10-07 | 【合并】区域识别→选面→真刀路→刀具阶梯 T1-T20→60分钟分段 | ⏳ 排队 |
| P10-08 | 刀路自检 + 850 行程 + 预览 PNG | ⏳ 排队 |
| P10-10 | 后处理三套接入 + 云端归档 + QQ机器人文件接口 | ⏳ 排队 |

自动化：`tools\_relay3.ps1` 循环自动切前台并逐张投喂，最多 12 轮。

## 七、P10-05 实测数据（2026-10-20 09:38）
```
A01_粗_7-17.nc    74096B   2673 行   D12  PartStock 0.2 / Floor 0.2
A02_半精_7-17.nc 423833B   4176 行   D8   PartStock 0.05 / Floor 0.0（未保留，如实记录）
A03_精_7-17.nc   406591B   4170 行   D8   PartStock 0.0 / Floor 0.0
```
问题：半精与精刀路几乎同尺寸，**精加工缺"更小步距+更高转速"的差异化**，待 P10-07 修。
另：三个文件仍是 T0/H00，**不可上机**。

## 八、材料分族（P10-06 已定，参考区间）
AL 铝 200-500 / ST 碳钢软态 100-180 / STH 预硬钢 70-120 / SS 不锈钢 40-120 /
HRC 淬硬 30-80 / CI 铸铁 100-200 / TI 钛 30-60  （单位 Vc m/min；fz、ap、ae 见卡片）
用户车间值优先：攻牙 N 组 vc = 12.5 m/min（M8 → 约 497 转 / F 621.7）。

## 九、云服务器
- 本机服务 `127.0.0.1:8790`（当前未运行）；公网 `https://ldeh.asia/nxai/`。
- SSH `43.167.209.150` user `Administrator`，口令 DPAPI 存
  `C:\Users\Administrator\.nxai\cloud_pwd.dpapi`，调用走
  `scripts\with_cloud_pwd.ps1`。SFTP 根：`/C:/nxai-cloud/`（updates/ 已验证）。
- 现有可用：`GET /v1/update/latest` ✅；`/v1/agent/*`、`/v1/files/*` **404（未实现）**。
- 计划（P10-10）：加 `/v1/files/{put,list,get,index,brief}` + `cloud_archive.py`，
  让 QQ 机器人可取文件；`/v1/agent/capabilities` 如实返回"只能排队不能执行"。

## 十、下一步优先级（按用户价值）
1. **P10-07**（区域识别+真刀路+阶梯+分段）——当前唯一硬瓶颈：ok 2/12。
2. **P10-08**（自检+预览）——用户上机前唯一的验证手段（无机床仿真）。
3. **P10-06**（材料分族）——影响所有 S/F/ap/ae。
4. **P10-10**（云端归档 + QQ 接口）——为"脱离本地 harness"铺路。
5. T0 刀号、精加工差异化，必须随 P10-07 一起交付。

## 十一、用户偏好（重要）
- 中文、简洁、要实测证据；**宁可报失败也不许编**。
- 关心：外观光洁度、防撞、单段≤1小时（换刀/查磨损/下班）、刀具按尺寸阶梯下降。
- 已明确：四轴零件要用四轴后处理；行程按 850 型（X800/Y500/Z500）；刀号 T1–T20。