# 知识库 — PCB轴向磁通电机自动化仿真系统 > 本文件是项目的核心知识沉淀,供人和任何 AI 工具阅读使用。 > 全部结论基于参考案例 axial_mag_pull 和 torqrippswap 的实测验证。 > 入口文件:仓库根 AGENTS.md(AI)/ README.md(人)。 ## 1. 环境事实 | 项 | 值 | |---|---| | Motor-CAD | 2026R1 (v261) | | 定位方式 | 环境变量 `MOTORCAD_ACTIVEX` → activex.bat → exe 路径;未注册时脚本内用 `set_motorcad_exe()` 回退 | | Python | ≥ 3.10,`pip install ansys-motorcad-core pyside6 pandas` | | 许可证 | FlexNet: `ANSYSLMD_LICENSE_FILE=1055@localhost`,lmgrd + ansyslmd 都必须在跑 | | 非登录 shell 陷阱 | AI 工具的 shell 可能不继承机器级环境变量,需 inline 设置或脚本内回退 | | 单次电磁求解耗时 | 约 90~150 秒(视机器性能和网格设置) | | 窗口不可见陷阱 | pymotorcad 用 `/SCRIPTING` 模式启动,默认主窗口隐藏,必须 `set_visible(True)` | ### 1.1 环境验证命令 ```powershell # 验证 Motor-CAD 自动化注册 echo $env:MOTORCAD_ACTIVEX # 验证许可证 echo $env:ANSYSLMD_LICENSE_FILE # 验证 Python 包 python -c "import ansys.motorcad.core; print('pymotorcad OK')" ``` ### 1.2 常见环境问题 | 现象 | 原因 | 解决 | |---|---|---| | Motor-CAD 启动后 30s 退出 | 许可证 ansyslmd 未运行 | 检查 ANSYS License Management Center (http://localhost:1084) | | pymotorcad 报 NoSuchProcess | 同上,或环境变量未继承 | inline export 两个环境变量 | | Motor-CAD 窗口看不见 | /SCRIPTING 模式默认隐藏 | `mc.set_visible(True)`;若仍找不到,点任务栏图标 → Win+↑ 最大化 | | 改电流无效 | CurrentDefinition=1 时改了 PeakCurrent | 改 `RMSCurrent` | --- ## 2. Motor-CAD 自动化核心方法 ### 2.1 连接与实例管理 ```python import ansys.motorcad.core as pymotorcad # 创建独立实例(不要连接已有实例,可能控制错误窗口) mc = pymotorcad.MotorCAD(open_new_instance=True, keep_instance_open=False) mc.set_visible(True) # 必须,否则窗口隐藏 mc.set_variable("MessageDisplayState", 2) mc.display_screen("Scripting") ``` ### 2.2 模型加载与保存 ```python # 加载基线模型 mc.load_from_file(r"models\MARS-12S10P_SSSR_D76-C150_V5.0-0819.mot") # 另存工作副本(不污染原模型) mc.save_to_file(r"output\working_.mot") ``` ### 2.3 参数写入与回读校验 ```python import math def write_and_verify(mc, variable, value): mc.set_variable(variable, value) applied = float(mc.get_variable(variable)) if not math.isclose(applied, value, rel_tol=1e-8, abs_tol=1e-7): raise RuntimeError( f"Write verification failed for {variable}: " f"wrote {value}, read {applied}" ) ``` **为什么必须回读**:Motor-CAD 对不适用的参数有时会静默接受,不回读就不知道参数是否真的生效了。 ### 2.4 求解 ```python mc.do_magnetic_calculation() # 电磁求解,约 90-150 秒 ``` ### 2.5 结果导出 ```python # 导出电磁结果(分号分隔的 CSV,不是普通逗号 CSV) mc.export_results("EMagnetic", r"output\raw\result_.csv") ``` --- ## 3. .mot 参数语义(AFM 模板,易错!) | 参数 | 正确语义 | 常见误读 | MARS模型值 | |---|---|---|---| | `Magnet_Length` | 磁钢**轴向厚度** | 以为是长度 | 3 mm | | `Magnet_Thickness` | 磁钢环**径向深度** = (D_out−D_in)/2 | 以为是厚度 | 13 mm | | `Magnet_Arc_[ED]` | 极弧(电角度) | — | 121° | | `Pole_Arc` | 某些转子类型不生效 | 以为是极弧 | 勿用 | | `CurrentDefinition` | 1=RMS口径 → 改电流设 `RMSCurrent` | 改 PeakCurrent 无效且不报错 | 1 | | `RMSCurrent` | RMS相电流(CurrentDefinition=1时的电流入口) | — | 21 A | | `Magnet_Temperature` | 磁钢温度,**默认100°C热态** | 以为是常温20°C | 100 | | `Airgap` | 气隙长度 | — | 1 mm | | `Shaft_Speed` | 轴转速 | — | 5000 rpm | | `TorquePointsPerCycle` | 每电周期转矩采样点数 | — | 30(模型默认) | | `AirgapMeshPoints_mesh` | 气隙内部网格点 | 与 layers 成对设置 | 840 | | `AirgapMeshPoints_layers` | 气隙表面网格点 | 与 mesh 成对设置 | 840 | ### 3.1 温度定律 F ∝ Br²,磁钢剩磁 Br 随温度变化。实测 100°C vs 20°C 的轴向力比值与 Br² 比值一致(<1% 偏差)。 ### 3.2 电流口径 `CurrentDefinition=1` 表示 RMS 口径。此时: - 改 `RMSCurrent` 生效 - 改 `PeakCurrent` **无效且不报错**(首跑踩坑) --- ## 4. 结果指标提取 ### 4.1 核心指标(Phase 1 必选) | 指标 key | 显示名称 | Motor-CAD 导出字段名 | 单位 | |---|---|---|---| | `tavg_nm` | 平均转矩 | `Average torque (virtual work)` | Nm | | `ripple_pct` | 转矩脉动 | `Torque Ripple (VW) [%]` | % | | `ripple_nm` | 转矩脉动绝对值 | `Torque Ripple (VW)` | Nm | | `efficiency_pct` | 系统效率 | `System Efficiency` | % | | `total_losses_w` | 总损耗 | `Total Losses (on load)` | W | | `copper_loss_w` | 铜耗 | `Armature DC Copper Loss (on load)` | W | | `iron_loss_w` | 定子铁耗 | `Stator iron Loss [total] (on load)` | W | | `magnet_loss_w` | 磁钢损耗 | `Magnet Loss (on load)` | W | | `back_emf_v` | 反电动势 | `Back EMF Line-Line Voltage (rms)` | V | | `input_power_w` | 输入功率 | `Input Power` | W | | `output_power_w` | 输出功率 | `Output Power` | W | | `shaft_speed_rpm` | 轴转速 | `Shaft Speed` | rpm | ### 4.2 导出文件格式 Motor-CAD 的 `export_results` 输出是**分号分隔**的文本文件,不是普通逗号 CSV: - 第一列是字段名,第二列是数值 - 按 section 分段(E-Magnetics、Drive、Losses、Materials、Miscellaneous) - 同一指标可能在多个 section 重复,优先取 E-Magnetics - 编码可能是 UTF-8、cp1252、gbk 或 latin-1,需逐个尝试 ### 4.3 字段名匹配策略 1. 先精确匹配(按 section 优先级:E-Magnetics → Drive → Losses → Materials → Miscellaneous) 2. 再全 section 精确匹配 3. 最后前缀模糊匹配(避免短字段误匹配,长度 > 3 才匹配) --- ## 5. AFM 轴向力数据口(Phase 1 暂不使用,保留参考) Motor-CAD 对 AFM 的轴向力**没有输出变量、没有 2D 结果图、帮助文档无记录**。唯一入口是 3D lumped 力图: ```python 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=空载 — 一次求解两者全出 - 求解前必须开开关:`ElectromagneticForcesCalc_Load=True`, `ElectromagneticForcesCalc_OC=True` - 节点首尾 0°/360° 重复,求和须去重 - 净力 = 对全部去重节点求和 + 对全部径向切片求和 > Phase 1 不提取轴向力,后续需要时参考 `axial_mag_pull-master/axial_mag_pull/axial_force_final.py`。 --- ## 6. 采样点与气隙网格(转矩脉动评估关键) | 设置 | 用途 | 风险 | |---|---|---| | 30 点 / 840 网格 | 快速趋势筛选 | 9槽8极模型主要齿槽成分是18次电频谐波,30点低于可靠分辨要求,可能混叠 | | 120 点 / 960 网格 | 中等可信度 | 120点搭配840网格会弹出不对齐警告,需用960 | | 180 点 / 1680 网格 | 最终候选复算 | 速度慢但精度高 | **原则**: 1. 不要随意组合采样点数和网格点数 2. 先做单点验证,确认无交互弹窗 3. 所有结果必须记录实际的 Torque points 和 airgap mesh 4. 快速扫描的最佳点必须用高精度设置复算 5. 快速扫描结果只用于趋势判断,不直接当作最终脉动真值 --- ## 7. 新模型仿真工作流(SOP) 1. 新模型 `.mot` 放 `models/` 目录,`git add` + 运行前先 commit 2. 确认模型基本信息:拓扑、槽极数、气隙、磁钢厚度、电流口径 3. 确认工况:磁钢温度(热态100°C / 冷态20°C)、RMS电流、转速 4. 用 `scripts/run_single.py` 跑一次空载+负载,验证能提取到全部核心指标 5. 验证通过后,用 `scripts/run_scan.py` 做参数扫描 6. 结果记录:时间戳 + 简要说明 + git 提交 7. 关键数值转录进入库文档 --- ## 8. 图名/变量名探测技术(遇到未知输出时用) 1. **报错文案筛查**(无需求解,秒级):`get_magnetic_graph_point(名, 0)` — "Graph name does not exist" = 不存在;"No points exist" = 存在但未求解 2. **图 ID 枚举**:graph 参数可传 int,求解后逐 ID 读波形按量级辨认 3. **权威清单**:GUI 内 Help → Graph Viewer(全部图名);Help → Automation Parameter Names / F2(全部变量名) 4. **exe 字符串挖掘**:MotorCAD.exe 的 UTF-16 字符串含图名后缀、GUI 文案 5. Motor-CAD 消息日志(`<模型名>\MessageLogs\*.txt`)记录每次 pymotorcad 调用,但重复错误行会被抑制 --- ## 9. 理论参考资料 当方案生成、参数初值估算、物理约束规则等需要理论支撑时,查阅以下资料: | 资料 | 路径 | 适用场景 | |---|---|---| | 《轴向磁通永磁无刷电机(原书第2版)》Jacek F. Gieras | `书籍与论文/轴向磁通永磁无刷电机(原书第2版), Jacek F. Gieras.pdf.pdf` | 拓扑分类、电磁设计基础、热设计、机械设计 — **主要参考** | | 《轴向磁场无刷同步电机理论与设计》邓秋玲 | `书籍与论文/轴向磁场无刷同步电机理论与设计-邓秋玲.pdf` | 国内工程实践、公式推导 — **补充参考** | | axial_mag_pull 解析报告 | `axial_mag_pull-master/axial_mag_pull/轴向磁通电机轴向磁拉力计算与轴承选型校核报告V3.0-20260826.pdf` | 轴向磁拉力解析计算方法、轴承选型 | **理论知识缺乏时的处理原则**: - 优先在上述书籍中查找对应章节 - 找不到时,在 `docs/CONVERSATION_LOG.md` 中记录"理论待补充"标记 - 不基于猜测制定物理约束或参数初值 --- ## 10. 项目纪律(硬性) 1. 每次运行仿真前 git commit 2. 结果与报告带时间戳+简要说明并 git 提交;报告版本化不覆盖 3. Motor-CAD 前台运行,跑完保持打开供人工检查 4. 生成物(output/、*.log、build/、dist/)不入库 5. 原始 .mot 只读,一切修改在时间戳副本上进行 6. 参数写入后必须回读校验,不一致标记 FAILED 7. 每个扫描点重新加载基线模型,防止参数污染 8. 对话与决策带时间戳记入 `docs/CONVERSATION_LOG.md` 9. 所有 .py / .ps1 源码纯 ASCII,中文用 Unicode 转义或放 Markdown 10. 仿真在子线程运行,不阻塞 GUI 主线程