# 复现指南 — MARS SSSR 轴向磁拉力仿真

交给同事跑之前请通读一遍；整个流程一条命令，约 2 分钟，原始 .mot 不会被修改。

## 1. 环境要求

| 项 | 要求 | 验证方法 |
|---|---|---|
| 系统 | Windows | — |
| Motor-CAD | 2026R1 (v261)，安装器会设 `MOTORCAD_ACTIVEX` 环境变量 | `echo %MOTORCAD_ACTIVEX%` 应指向 activex.bat |
| Python | ≥ 3.10 | `python --version` |
| PyMotorCAD | `pip install ansys-motorcad-core` | `python -c "import ansys.motorcad.core"` |

## 2. 获取项目

复制整个 `motionpushpull` 目录（含 `.git`，git 历史里有全部踩坑记录）。
关键文件：

- `MARS-12S10P_SSSR_D76-C150_V5.0-0819.mot` — 原始模型（只读使用）
- `axial_force_final.py` — **唯一需要运行的脚本**
- `axial_probe*.py` / `axial_force_run.py` — 探测数据口的历史过程，无需运行
- `RESULTS.md` — 上次运行的结果与方法要点
- `docs/CONVERSATION_LOG.md` — 完整过程记录

## 3. 运行

```bash
python -X utf8 axial_force_final.py
```

- Motor-CAD 会**前台弹出**（保持前台是本项目约定），求解约 88 s；
- 结束后 Motor-CAD 保持打开供人工检查；要自动关闭加 `--quit`；
- 按项目纪律：改动脚本后、运行前先 `git commit`。

## 4. 读结果

控制台末尾两行 `[结论]`，例如：

```text
[结论] 负载(RMS 21A) 转子净轴向力: 均值 343.2 N, 纹波峰峰 3.87 N
[结论] 空载 转子净轴向力: 均值 342.9 N, 纹波峰峰 3.53 N
```

文件输出（`output_motorcad/`，git 不入库）：

- `axialforce_final_<时间戳>.json` — 全部波形 + 校核数据
- `axial_force_<时间戳>.csv` — 净轴向力时间序列（31 步/电周期）
- `MARS_SSSR_axialF_<时间戳>.mot` — 求解工作副本

## 5. 结果判定（三项都过才采信）

1. **作用–反作用**：`checks.action_reaction_*` 中 `imbalance_pct` < 5%；
2. **转矩交叉**：`sum_Ft_x_r_Nm_t0` 与 `torque_graph_mean_Nm` 偏差 < 10%；
3. **解析量级**：`analytic.F_est_N` 与 FEA 值同量级（解析式系统性偏大约 1.4×属正常）。

## 6. 已知坑（都踩过，勿重复）

- **电流是 RMS 口径**（`CurrentDefinition=1`）：改电流设 `RMSCurrent`，
  改 `PeakCurrent` 无效且不报错。
- 轴向力**没有输出变量/2D 图/文档**，唯一入口是 3D 集中节点力图
  `Fr_{Rotor|Stator}_{OL|OC}_Lumped`（AFM 2.5D 展开模型中 Fr=轴向力）；
  脚本已封装，无需手动处理。
- 求解前必须打开 `ElectromagneticForcesCalc_Load/OC`（脚本已做）。
- 节点首尾（0°/360°）重复，求和须去重（脚本已做）。
- ~~Motor-CAD 残留锁文件问题~~：Motor-CAD 无此问题（那是 AEDT 的坑）；
  python 退出后 Motor-CAD 进程可能随之退出，属正常。

## 7. 换其它模型

- 改脚本顶部 `MOT_SRC` 指向新 .mot；
- 若径向切片数量/半径不同：在 .mot 里搜 `AFM_SectionCentreRadius_Array`，
  更新脚本的 `SEC_RADII_MM`（转矩交叉校核用）；
- 节点数会自动探测（转子=极数、定子=槽数），无需改；
- 首次跑新模型建议核对：转子/定子合力是否反号、转矩交叉是否对得上。
