MOTORCAD_SCAN_KNOWLEDGE_BASE.md 11 KB

Motor-CAD 参数扫描与寻优知识库

版本:2026-08-26
适用目录:E:\aitestlocal\codex\tr
参考项目:E:\aitestlocal\claude\motorcadopt

1. 目标与适用范围

本知识库用于指导 Motor-CAD 模型的自动参数扫描、结果采集、GUI 工具维护和后续寻优。 当前主要模型为:

MARS-9S8P_SSSR_Halbach_PCB-V1.0.mot

已经实现或验证的扫描类型包括:

  1. Halbach 中央磁块弧角单参数扫描;
  2. 整体磁铁极弧单参数扫描;
  3. 中央磁块弧角与槽口宽度的二维组合扫描;
  4. 槽口变化时 PCB 铜线宽度的公式联动。

2. 已确认的 Motor-CAD 参数映射

GUI 名称 Motor-CAD 自动化变量 单位 基线值 说明
Central Mag Arc [ED] MagnetCentralArc_HalbachRing EDeg 120 Halbach 中央磁块弧角,不等于整体极弧
Magnet Arc [ED] Magnet_Arc_[ED] EDeg 180 整体磁铁极弧
Slot Opening Slot_Opening mm 8 基线等于槽宽,属于完全开口槽
Slot Width Slot_Width mm 8 Parallel Slot 模型的槽宽
PCB 铜线宽 Copper_Width mm 3.39 已与槽口联动公式核对
每电周期转矩点数 TorquePointsPerCycle points/cycle 30 原模型值,速度快但存在混叠风险
气隙内部网格点 AirgapMeshPoints_mesh points 840 与 surface 参数通常成对设置
气隙表面网格点 AirgapMeshPoints_layers points 840 与 mesh 参数通常成对设置

关键区分:

  • 扫描 Central Mag Arc [ED] 时必须写 MagnetCentralArc_HalbachRing
  • 扫描 Magnet Arc [ED] 时必须写 Magnet_Arc_[ED]
  • 两者代表不同的几何含义,不能混用。

3. 自动化连接与运行约束

3.1 Windows 原生环境

Motor-CAD 通过 Windows RPC/COM 风格接口驱动,必须使用 Windows 原生 Python。 WSL 或 Linux 环境不能连接本机 Motor-CAD 实例。

主要依赖:

ansys-motorcad-core
tkinter
PyInstaller

3.2 前台可见

自动求解使用独立 Motor-CAD 实例,并调用:

mc = pymotorcad.MotorCAD(open_new_instance=True, keep_instance_open=False)
mc.set_visible(True)

这样可以避免连接到正在被其它程序控制的 Motor-CAD 实例,同时保证用户能看到新实例。

3.3 多实例风险

open_new_instance=False 会尝试连接现有实例。机器上同时存在多个 Motor-CAD 时,可能连接到错误模型。 除非已通过进程和 RPC 端口明确识别目标实例,否则不要使用自动连接现有实例的方式运行批处理。

3.4 每点重新加载基线

每个扫描组合开始前必须执行:

mc.load_from_file(model_path)

然后再写本点参数。这样可以避免上一点参数、求解开关或派生状态污染下一点。

扫描结束时也应重新加载基线模型,使 Motor-CAD 不停留在最后一个扫描值。

4. 参数写入规则

4.1 只修改明确授权的设计变量

单参数扫描只写该参数;求解采样点和网格属于数值设置,不是设计变量,应在结果清单中明确记录。

4.2 写入后必须回读

Motor-CAD 对不适用的参数有时会静默接受,因此每次写入都必须用 get_variable 回读并比较:

mc.set_variable(variable, value)
applied = float(mc.get_variable(variable))

若不一致,当前点应标为 FAILED,不能继续把结果当作有效数据。

4.3 槽口与 PCB 铜线宽联动

槽口改变时,铜线宽按以下公式计算:

Copper_Width = (Slot_Opening - clearance) / 2 / conductor_count

当前默认:

  • clearance = 0.2 mm
  • conductor_count = 1
  • /2 表示槽两侧分配

默认槽口扫描 5.4–7.4 mm、步长 0.2 mm 时:

Slot Opening (mm) Copper Width (mm)
5.4 2.6
5.6 2.7
5.8 2.8
6.0 2.9
6.2 3.0
6.4 3.1
6.6 3.2
6.8 3.3
7.0 3.4
7.2 3.5
7.4 3.6

二维扫描中推荐写入顺序:

  1. Slot_Opening
  2. Copper_Width
  3. 磁铁弧角参数
  4. 逐项回读验证
  5. 执行磁场计算

5. 扫描矩阵

5.1 单参数扫描

端点均包含在扫描序列中。如果终点无法由整数个步长严格到达,程序会额外加入终点。

5.2 二参数扫描

总仿真数为两个参数水平数的乘积:

N_total = N_parameter_1 x N_parameter_2

示例:

  • Central Mag Arc:90–110 EDeg,步长 1,共 21 个水平;
  • Slot Opening:5.4–7.4 mm,步长 0.2,共 11 个水平;
  • 总仿真数:21 x 11 = 231

按 30 点/840 网格的实际速度约 2.5–4.2 分钟/点估算,231 点可能需要约 10–16 小时。 GUI 必须在启动前显示组合总数和粗略时长,并要求再次确认。

6. 采样点与气隙网格

6.1 原模型快速设置

TorquePointsPerCycle = 30
Airgap mesh/layers = 840

优点:速度快,适合初筛。
风险:本机 9 槽 8 极模型的主要齿槽成分是 18 次电频谐波,30 点/电周期低于可靠分辨要求, 可能发生混叠,因此不能把 30 点扫描的绝对脉动值直接当作最终结论。

6.2 推荐设置

  • 快速趋势扫描:30 点/840 网格;
  • 中等可信度扫描:120 点,并采用与时间步对齐的气隙网格;
  • 最终候选复算:180 点和更细、已验证收敛的网格。

已知坑:120 点搭配原始 840 网格时,Motor-CAD 会弹出网格与时间步不对齐警告,导致无人值守 RPC 批处理失败。Motor-CAD 曾建议改为 960;参考项目的高精度研究还使用过 1680。

原则:

  1. 不要随意组合采样点数和网格点数;
  2. 先做单点验证,确认无交互弹窗;
  3. 所有结果必须记录实际的 Torque points 和 airgap mesh;
  4. 快速扫描的最佳点必须用高精度设置复算。

7. 结果指标

GUI 与 CSV 应尽可能采集以下常用指标:

类别 Motor-CAD 结果名称
转矩脉动 Torque Ripple (VW) [%]Torque Ripple (VW)
平均转矩 Average torque (virtual work)
系统效率 System Efficiency
反电动势 Back EMF Line-Line Voltage (rms)
反电动势失真 Harmonic Distortion Back EMF Line-Line Voltage
总损耗 Total Losses (on load)
铜耗 Armature DC Copper Loss (on load)
磁钢损耗 Magnet Loss (on load)
定子铁耗 Stator iron Loss [total] (on load)
输入功率 Input Power
输出功率 Output Power,导出名称可能带状态后缀
电磁功率 Electromagnetic Power,导出名称可能带状态后缀
轴转速 Shaft Speed
空载转速 No load speed

结果导出文件使用分号分隔,不是普通逗号 CSV。相同指标可能在多个段落重复,优先取 E-Magnetics,再按 DriveLossesMaterialsMiscellaneous 搜索。

8. 时间戳与可恢复性

每次 GUI 运行应创建独立目录:

runs/YYYYMMDD_HHMMSS_mmm_<scan_name>/

目录内至少包含:

  • run_manifest_<timestamp>.json:模型、参数范围、完整组合、数值设置和 Git 提交;
  • scan_results_<timestamp>.csv:逐点汇总结果;
  • program_log_<timestamp>.log:毫秒级时间戳日志;
  • raw/result_<index>_<values>_<timestamp>.csv:每点 Motor-CAD 原始导出。

每个点完成后立即写 CSV 并刷新文件,不能等整批完成后一次性保存。失败点记录错误并继续下一点。

9. GUI 与 EXE 版本

版本/程序 功能
MotorCADParameterScanV2 单参数扫描,稳定的三行设置布局
MotorCADParameterScanV3 Central Mag Arc × Slot Opening 二维扫描,带 Copper Width 联动
MotorCADMagnetArcScan V2 单参数布局,扫描整体 Magnet_Arc_[ED]

单参数 V2 布局要求:

  1. 第一行:模型路径;
  2. 第二行:参数、Start、Stop、Step;
  3. 第三行:Torque points、Airgap mesh;
  4. 每项必须拥有独立的标签和输入框,不得复用同一 Grid 列导致控件覆盖。

10. Git 与源码规则

10.1 源码字符集

所有 .py.ps1 脚本必须只包含 ASCII 字符。中文说明放在 Markdown 文档中,不能写进脚本注释、 窗口标题、帮助文本或日志模板。

建议检查:

rg -n "[^\x00-\x7F]" --glob '*.py' --glob '*.ps1' .

10.2 运行前必须提交

每次实际启动 Motor-CAD 求解前:

  1. 必须存在 Git 提交;
  2. 所有已跟踪文件必须无未提交修改;
  3. 运行清单必须记录当前短提交号;
  4. 未跟踪的模型结果目录不应自动加入提交或删除。

GUI 的 Git preflight 若失败,必须拒绝启动求解。

11. 常见故障与处理

现象 原因 处理
连接成功但控制了错误窗口 同时运行多个 Motor-CAD,自动连接命中错误实例 新建独立实例并设为可见
RPC 在计算开始时报 Warning/Error Motor-CAD 弹出交互警告 先做单点验证;修正网格/时间步组合
参数写成功但几何不变 参数不适用于当前机型,Motor-CAD 静默接受 回读只是最低要求;存疑参数还要截图或结果对照验证
扫描点之间结果异常累积 未重新加载基线 每点先 load_from_file
GUI 看不到 Step 输入框 Grid 列发生标签与输入框覆盖 使用 V2 三行布局,每组控件放独立 Frame
长时间任务中途丢失全部结果 批次结束才保存 每点立即追加 CSV、写日志并 flush
30 点结果看似更优 18 次谐波混叠 只用于趋势筛选,高精度复算确认
Git 报 dubious ownership 仓库所有者与运行账户不同 每条命令使用 git -c safe.directory=E:/aitestlocal/codex/tr ...

12. 推荐寻优流程

  1. 确认模型、设计变量和真实自动化变量名;
  2. 检查所有脚本为纯 ASCII;
  3. 提交 Git,并确认已跟踪工作区干净;
  4. 用 1–2 个点验证前台实例、参数回读、结果字段和无弹窗运行;
  5. 使用 30 点/840 网格做粗筛;
  6. 根据趋势缩小参数区间,而不是盲目扩大二维全网格;
  7. 在候选区域用更小步长加密;
  8. 用 180 点和收敛网格复算最佳候选;
  9. 同时检查 Torque Ripple、Tavg、效率、损耗、反电动势和转速,不只看单一目标;
  10. 保存参数、原始结果、汇总表、日志、Git 提交和简单分析。

13. 当前工程结论

  • Central Mag Arc [ED]Magnet Arc [ED] 是两个不同参数,工具和结果命名必须明确区分。
  • 9 槽 8 极模型的脉动评估对采样点数和气隙网格非常敏感。
  • 原模型 30 点设置适合快速筛选,不适合直接宣称最终脉动真值。
  • 槽口从完全开口状态收窄是重要设计方向,但改变槽口时必须同步处理 PCB 铜线宽几何。
  • 二维全网格很容易达到数百次仿真;应优先粗筛、缩小区域、再加密和高精度复算。
  • 可靠的自动化不仅要“能跑”,还必须具备前台可见、参数回读、逐点落盘、时间戳、失败续跑和 Git 可追溯性。