KNOWLEDGE_BASE.md 9.6 KB

知识库 — Motor-CAD 轴向磁通电机轴向磁拉力仿真

本文件是项目的核心知识沉淀,供人和任何 AI 工具阅读使用。 全部结论均经实测验证 (2026-08-25, Motor-CAD 2026R1);每条坑都真实踩过。 入口文件: 仓库根 AGENTS.md (AI) / README.md (人)。

1. 环境事实 (本机实测)

Motor-CAD 2026R1 (v261); 原机: E:\Program Files\ANSYS Inc\v261\motorcad\MotorCAD.exe; 复现机(2026-08-26): D:\Program Files\ANSYS Inc\v261\motorcad\MotorCAD.exe
定位方式 环境变量 MOTORCAD_ACTIVEX → activex.bat → exe 路径 (PyMotorCAD 自动发现); activex.bat 在 GUI 内 Defaults→Automation→Update to Current Version 后生成于 %APPDATA%\Ansys\v261\motorcad\activex.bat; 未注册时脚本内用 set_motorcad_exe() 回退 (axial_force_final.py 已内置, MOTORCAD_EXE 可覆盖)
Python 3.12 (系统), pip install ansys-motorcad-core; 或直接用 Motor-CAD 自带 Python (含 pymotorcad 0.8.4, 免安装): <安装根>\v261\motorcad\Python\Python\python.exe
许可证 FlexNet: ANSYSLMD_LICENSE_FILE=1055@localhost (机器级环境变量), lmgrd + ansyslmd vendor daemon 都必须在跑; 无许可时 Motor-CAD 启动后 ~30s 静默退出, pymotorcad 报 psutil.NoSuchProcess —— 见此报错先查 ANSYS License Management Center (http://localhost:1084)
非登录 shell 陷阱 Kimi/Cursor 等 AI 工具的 shell 可能不继承机器级环境变量 (MOTORCAD_ACTIVEX / ANSYSLMD_LICENSE_FILE 为空); 运行前 export MOTORCAD_ACTIVEX="%APPDATA%\Ansys\v261\motorcad\activex.bat"export ANSYSLMD_LICENSE_FILE=1055@localhost
单次电磁求解耗时 88~112 s (原机) / 151 s (2026-08-26 复现机)
PDF 排版 Edge 无头: msedge.exe --headless=new --print-to-pdf=... (中文文件名会失败, 用 ASCII 名; 用 cmd /c 包住避免 PS 5.1 stderr 包装)
PDF 目检 pip install pypdfium2 pillow, 渲染 PNG 后人工/AI 看图
注意 python 脚本退出后 Motor-CAD 进程可能随之退出, 属正常
窗口不可见陷阱 pymotorcad 用 MotorCAD.exe /PORT=n /SCRIPTING 启动, 该模式默认主窗口隐藏 (2026-08-26 双机 Win32 API 实测: 主窗口 IsWindowVisible=False, 任务栏图标是坐标 −32000 的代理窗口, 故"有图标但点不开")。脚本已在启动后调 mc.set_visible(True) 强制可见 (实测有效: 调后主窗口可见且在屏内); 对已在运行的隐形实例跑 python show_motorcad.py 召回 (attach 不新开实例、不打断求解)。若可见后仍找不到 = 真·挪到屏幕外: 点任务栏图标 → Win+↑ 最大化拉回

2. 核心方法: AFM 轴向力的唯一数据口

Motor-CAD 2026R1 对轴向磁通电机 (AFM) 的轴向力没有输出变量、没有 2D 结果图、chm 帮助全文无 "Axial Force" (110MB chm 反编译验证过)。唯一入口:

mc.get_magnetic_3d_graph_point(graph_name, section, node, timestep)
# graph_name ∈ {Fr|Ft}_{Rotor|Stator}_{OL|OC}_Lumped
  • Fr (法向力) 就是轴向力: AFM 的 2.5D 多切片模型把电机展开成直线电机, 沿用径向机命名。Ft 是切向力 (可由 Σ(Ft×r) 交叉核对转矩)。
  • OL=负载, OC=空载开路 —— 一次求解两者全出, 无需改电流跑两遍。
  • 单位: N/节点/切片。节点数 = 转子极数 / 定子槽数 (本模型 10/12), x 为圆周角, 0° 与 360° 是同一节点, 求和须去重 (判据: x[-1]-x[0]==360 则丢末点)。
  • 净轴向力 = 对全部去重节点求和, 再对全部径向切片求和。 切片中心半径在 .mot 的 AFM_SectionCentreRadius_Array[i]
  • 求解前必须打开开关 (默认关, 关了没有任何力结果): ElectromagneticForcesCalc_Load=True, ElectromagneticForcesCalc_OC=True
  • 求解: mc.do_magnetic_calculation()

3. .mot 参数语义 (AFM 模板, 易错!)

参数 语义 本模型值
Magnet_Length 磁钢轴向厚度 3 mm
Magnet_Thickness 磁钢环径向深度 (=(D_out−D_in)/2), 不是厚度! 13 mm
Magnet_Arc_[ED] 极弧 (电角度) 121° (=24.2°mech, 67.2% 覆盖)
Pole_Arc 其它转子类型参数, 本模型不生效 150 (勿误读)
CurrentDefinition 1=RMS 口径 → 改电流设 RMSCurrent, 改 PeakCurrent 无效且不报错 1
Magnet_Temperature 磁钢温度, 模型默认 100°C (热态) 100
Magnet_Br_at_20 / Magnet_TBr_Coeff Br 及温度系数 1.31 T / −0.12 %/K
AFM_SectionCentreRadius_Array 径向切片中心半径 28.25 / 34.75 mm

温度定律 F∝Br² 经实测精确成立 (100°C 实测 343N ↔ 由 20°C 折算 340N, <1%)。

4. 图名/变量名探测技术 (通用, 遇到未知输出时用)

  1. 报错文案筛查 (无需求解, 秒级): get_magnetic_graph_point(名, 0) — "Graph name does not exist" = 图不存在; "No points exist" = 存在但未求解。 注意: 某些图 (力图) 需先打开对应计算开关才注册。
  2. 图 ID 枚举: graph 参数可传 int; 求解后逐 ID 读波形按量级辨认 (本模型 id17=总转矩, id16=RMS 电流常量, id0-2=相电流)。
  3. 权威清单: GUI 内 Help → Graph Viewer (全部图名); Help → Automation Parameter Names / F2 (全部变量名)。
  4. exe 字符串挖掘: MotorCAD.exe 的 UTF-16 字符串含图名后缀 (如 _Axial_Force_Rotor)、GUI 文案, PowerShell 正则可提取。
  5. Motor-CAD 消息日志 (<模型名>\MessageLogs\*.txt) 记录每次 pymotorcad 调用, 但重复错误行会被抑制, 缺行不代表没调用。
  6. pymotorcad 的 get_magnetic_graph(整线 API) 在 v261 上不可靠, get_magnetic_graph_point 逐点读

5. 新模型仿真工作流 (SOP)

  1. 新模型 .mot 放仓库根, git add + 运行前先 commit
  2. 复制/修改 axial_force_final.py: 改 MOT_SRC; 从新 .mot 里 grep AFM_SectionCentreRadius_Array 更新 SEC_RADII_MM; 节点数自动探测无需改。
  3. 确认工况: 磁钢温度 (热态 100°C / 冷态 20°C, 按报告口径选)、RMS 电流、气隙。
  4. 运行: python -X utf8 axial_force_final.py (Motor-CAD 前台弹出, ~2 分钟; --quit 自动关闭)。
  5. 三判据全过才采信 (脚本自动输出到 results JSON):
    • 作用-反作用: 定/转子合力反号, 偏差 <5%
    • 转矩交叉: Σ(Ft×r) vs 转矩图, 偏差 <10%
    • 解析量级: B²A/2μ0 与 FEA 同量级 (解析偏高 ~1.15~1.2× 属正常)
  6. 结果记录纪律 (见 §7): 时间戳 + 简要说明 + git 提交。
  7. 需要气隙敏感性/磁负刚度: 参照 axial_compare.py (扫气隙+有限差分)。
  8. 报告: 参照 docs/report_axialforce_V2.html 改数据数组 → Edge 无头出 PDF → 文件名带新版本号, 旧版保留。

6. 已有成果与对照 (2026-08-25 定版)

模型 MARS-12S10P_SSSR_D76-C150_V5.0-0819.mot (12槽10极 SSSR, 气隙1mm, 磁钢 3mm/67.2%, 5000rpm, 21A RMS):

工况 转子净轴向力 (指向定子) 数据文件
100°C, 1.0mm, 空载 342.9 N (纹波峰峰 3.5N) axialforce_final_0825_212518.json
100°C, 1.0mm, 负载 21A 343.2 N (+0.1%) 同上
20°C, 0.6/1.0/1.5mm 空载 513.1 / 416.5 / 326.7 N compare_results_0825_215456.json
磁负刚度 @1mm, 20°C ~207 N/mm (中心差分) 同上

对照《轴向磁拉力计算与轴承选型校核报告 V3.0-20260826》(解析法, 仓库根): 同温度基准下 FEA/解析 = 0.85~0.86 (三气隙稳定) —— 磁路法系统性偏高 ~16% (不计齿槽/边缘/侧漏), 结论"对得上"; 轴承结论链 (708AC 疲劳寿命不足 → 推荐 7004AC) 双方互证。唯一修正建议: 600N 设计载荷依据应为 "低温+气隙公差包络 (最恶劣 −20°C+0.6mm ≈563N)", 而非"电枢反应+20%" (FEA 实测仅 +0.07%)。详见 docs/COMPARISON_V3.md。

复现验证 (2026-08-26, 第二台机器)

另一台机器 (Motor-CAD 装于 D: 盘, 无 MOTORCAD_ACTIVEX 初始注册, 需先修许可) 按 SOP 原样重跑 axial_force_final.py, 求解 150.9 s:

工况 转子净轴向力 与 08-25 定版比对
100°C, 1.0mm, 空载 342.9 N (纹波峰峰 3.53 N) 完全一致
100°C, 1.0mm, 负载 21A 343.2 N (纹波峰峰 3.87 N) 完全一致

三判据全过: 作用-反作用偏差 1.70%/1.69% (<5%), 转矩交叉 0.505 vs 0.522 Nm (3.2%, <10%), 解析 485 N ≈ 1.41× FEA (同量级)。 数据: axialforce_final_0826_130316.json。结论: 方法与结果跨机可复现。

7. 项目纪律 (硬性)

  1. 每次运行仿真前 git commit (脚本改动先入库再跑)。
  2. 结果与报告必须带时间戳 + 简要说明, 并 git 提交: 结果 JSON/CSV 文件 名含时间戳 (脚本自动); 提交信息写清"什么工况、什么结果、为什么跑"; 报告文件名带版本号 (V1/V2...), 出新版保留旧版不覆盖
  3. Motor-CAD 前台运行, 跑完保持打开供人工检查 (--quit 显式关闭)。
  4. 生成物 (output_motorcad/, *.log) 不入库; 结果 JSON 的关键数值要转录进 RESULTS.md / 报告 (入库的文档) 里。
  5. 对话与决策带时间戳记入 docs/CONVERSATION_LOG.md。
  6. 原始 .mot 只读; 一切修改在另存的时间戳副本上进行。

8. 探索过程档案 (为什么是这个方法)

5 轮探测的完整过程见 git 历史 (dc5604622658e4) 与 docs/CONVERSATION_LOG.md。速览: 猜变量名(败) → 报错文案筛查法(建立) → 114 图名全不存在 → 图 ID 枚举锁定 51 条波形无一像力 → 开力开关后按径向机 命名惯例猜 3D 图 → Fr_Rotor_OL_Lumped 命中。教训: 未知输出先建立 "存在性探测"手段, 再穷举; 对照组 (已知图) 必不可少。