MotorCAD脚本自动化仿真参考资料.md 23 KB

Motor-CAD 脚本自动化仿真参考资料汇总

用途:作为仿真系统编程设计的参考资料 整理日期:2026-08-27 说明:Motor-CAD 的自动化接口在 2022 年后已从旧的 ActiveX(COM)体系迁移到 PyMotorCAD(基于 JSON-RPC 的 Python 接口,属 PyAnsys 生态),因此本资料以 PyMotorCAD 为主、ActiveX 为辅。文中所有链接均来自官方(Ansys / PyAnsys)或公开的社区与组织分享,并标注了来源性质。


一、官方核心资料(优先阅读)

1.1 PyMotorCAD 官方文档站(最重要,一站式入口)

  • PyMotorCAD 官方文档(含版本切换) https://motorcad.docs.pyansys.com/

    • 稳定版(stable)与开发版(dev)及历史版本可在页面右上角切换。
    • 内容结构:Getting Started / User Guide / API Reference(Methods)/ Examples / Contributing。
    • 官方支持邮箱:pyansys.core@ansys.com;Bug 与功能请求走 GitHub Issues;问答走 Ansys Developer 论坛 Discuss 区。
  • PyMotorCAD Cheat Sheet(一页速查表 PDF) https://cheatsheets.docs.pyansys.com/pymotorcad_cheat_sheet.pdf

    • 一页涵盖:启动/退出实例、几何与绕组参数设置、材料赋值、MotorLAB 模型构建、E-Magnetic 性能曲线提取、MATLAB 中调用 PyMotorCAD、ActiveX 旧脚本迁移写法。
  • API 参考(MotorCAD 对象全部方法) https://motorcad.docs.pyansys.com/version/stable/methods/index.html

    • 包括:MotorCAD 主对象、MotorCADCompatibility(兼容旧 ActiveX 脚本)、几何对象与函数(geometry / geometry_tree / geometry_shapes / geometry_drawing / geometry_fitting)、工具函数、以及 MotorCADError 错误/异常类型(错误处理入口,见第三节)。

1.2 官方 GitHub 仓库:ansys/pymotorcad

  python -m pip install -U pip
  python -m pip install ansys-motorcad-core

1.3 User Guide 关键章节(操作说明)

章节 链接 内容要点
User Guide 总览 https://motorcad.docs.pyansys.com/version/stable/user_guide/index.html 内部脚本、外部脚本、MATLAB、自适应模板、旧脚本兼容的整体框架
内部 Scripting 选项卡 https://motorcad.docs.pyansys.com/version/stable/user_guide/internal_scripting.html Motor-CAD 内置 Python 解释器 + Scripting 选项卡;main()thermal_steady 等类的 initial/main/final 钩子结构;MessageDisplayState 弹窗控制
外部脚本 / 加入自己的 Python https://motorcad.docs.pyansys.com/version/stable/user_guide/external_scripting.html 安装模式(user / developer)、tox 测试、开发者贡献流程
MATLAB 脚本 https://motorcad.docs.pyansys.com/version/stable/user_guide/matlab_scripting.html 通过 py.importlib.import_module('ansys.motorcad.core') 在 MATLAB 里直接用 PyMotorCAD 做完整 E-Magnetic 自动化(含图形数据逐点读取的 try/break 技巧)
自适应模板脚本(Adaptive Templates) https://motorcad.docs.pyansys.com/version/stable/user_guide/adaptive_templates.html 自定义几何:Region/Line/Arc 对象、自适应参数、reset_adaptive_geometry()、外部 IDE 调试、draw_objects() 几何绘图调试、DXF 导入、圆角/槽口修改最佳实践
旧脚本向后兼容 https://motorcad.docs.pyansys.com/version/stable/user_guide/backwards_compatibility.html ActiveX → PyMotorCAD 的迁移规则:函数名改 snake_case;旧 success 返回值被异常机制取代(失败即抛 MotorCADError,必须 try/except);MotorCADCompatibility 对象可最小改动运行旧脚本

1.4 官方 Examples(可直接运行的自动化脚本样例)

1.5 随软件安装的官方教程(本地,不要忽略)

Motor-CAD 安装目录下的 Tutorials 文件夹自带自动化教程 PDF 与示例(CADFEM 技术日上 Ansys 官方推荐的入口):

  • C:\ANSYS_Motor-CAD\<版本>\Tutorials\ActiveX_Scripting.pdf —— 通用脚本教程(含 Automation 教程的 section 2.iii,Scripting 选项卡官方文档也指向它)
  • C:\ANSYS_Motor-CAD\<版本>\Tutorials\FEA_Geometry_Scripting —— FEA 几何脚本
  • C:\ANSYS_Motor-CAD\<版本>\Tutorials\Ansys_Optislang\Advance IPM —— optiSLang 联合优化
  • C:\ANSYS_Motor-CAD\<版本>\Tutorials\Scripting_Control_In_Duty_Cycle —— 占空比中的脚本控制
  • TwinBuilder_ECE_Tutorial —— Twin Builder ECE 模型导出

出处(CADFEM 2021 技术日官方合作演讲):https://www.cadfem.net/fileadmin/user_upload/05-cadfem-informs/resource-library/2021_siehr_CADFEM_Techday2_scripting_and_parallelization_for_motorcad.pdf 该 PDF 同时给出 ActiveX 三命令核心模式(SetVariable / DoXxxAnalysis / GetVariable)与 MATLAB、VBS 的最小示例,以及用 Blackbox Solver 做参数研究/优化并行化的思路。

1.6 Ansys 官方培训课程(Innovation Space)


二、自动化仿真的关键操作模式(编程设计要点)

以下内容提炼自官方文档,是设计仿真系统时的"骨架代码"模式。

2.1 连接方式与生命周期

import ansys.motorcad.core as pymotorcad

# 外部脚本:启动新实例(脚本结束后自动关闭)
mc = pymotorcad.MotorCAD()

# 外部脚本:启动新实例并保持打开(调试时有用)
mc = pymotorcad.MotorCAD(keep_instance_open=True)

# 连接已运行的实例 / 内部脚本环境
mc = pymotorcad.MotorCAD(open_new_instance=False)

# 官方示例推荐的"内外兼容"写法(Adaptive Templates 脚本通用):
if pymotorcad.is_running_in_internal_scripting():
    mc = pymotorcad.MotorCAD(open_new_instance=False)
else:
    mc = pymotorcad.MotorCAD(keep_instance_open=True)
  • 通信机制:Motor-CAD 启动 RPC 服务器,PyMotorCAD 通过 http://localhost:<端口>/jsonrpc 与之通信,也支持跨机 HTTP 远程连接。
  • 无头运行:外部脚本支持 BlackBox 模式(不显示 GUI),适合服务器批量仿真。
  • 多实例并行:一个外部脚本可同时驱动多个 Motor-CAD 实例(配合 Ansys optiSLang 做优化)。

2.2 自动化三件套(所有工作流的最小闭环)

mc.set_variable("Tooth_Width", 6)          # 1. 设参数
mc.do_magnetic_calculation()                # 2. 跑计算(do_steady_state_analysis / do_transient_analysis / do_magnetic_calculation ...)
torque = mc.get_variable("ShaftTorque")     # 3. 取结果

配套常用方法:load_template("e8") / load_from_file() / save_to_file() / save_results() / export_results("EMagnetic", path) / get_magnetic_graph() / get_fea_graph() / quit()

2.3 弹窗与消息控制(批处理必备)

mc.set_variable("MessageDisplayState", 2)   # 消息进独立窗口,禁用弹窗
# ...批量计算...
mc.set_variable("MessageDisplayState", 0)   # 结束后恢复

官方警告:该设置会禁用关键弹窗(含保存提示、覆盖确认),脚本结束前务必恢复;且它不能替代异常处理。

2.4 内部脚本钩子结构(Scripting 选项卡 / Run During Analysis)

Motor-CAD 在计算前、每个迭代步、计算后分别调用用户类的 initial() / main() / final()。按求解类型定义类:thermal_steadythermal_transientemagneticmechanical_stressmechanical_forces。典型用途:计算中动态修改边界条件(如热瞬态中按时间关断冷却流量)、计算前参数合法性检查与自动修正、计算后自动保存并退出(save_and_close() 模式,见 GitHub issue #741 的官方示例代码:https://github.com/ansys/pymotorcad/issues/741)。

2.5 MATLAB 集成

  • 旧方式:mcad = actxserver('MotorCAD.AppAutomation')(ActiveX/COM)。
  • 新方式(官方推荐):MATLAB 内直接加载 Python 包 pymotorcad = py.importlib.import_module('ansys.motorcad.core'),之后调用与 Python 完全一致;读 FEA 图数据时用 try/catch + break 的循环探测结束点(官方示例见 1.3 MATLAB 章节)。

2.6 几何自定义(Adaptive Templates)

  • 版本要求:Motor-CAD ≥ 2024 R1 Update(v2024.1.2)且 PyMotorCAD ≥ 0.4.1;Motor-CAD 内置 PyMotorCAD 可通过 Scripting → Settings → PyMotorCAD updates 升级。
  • 关键约束:Region 的实体(Line/Arc)必须逆时针顺序且闭合,否则几何/FEA 计算会失败(先用 Region.is_closed() 检查);修改几何前先 mc.reset_adaptive_geometry()
  • 调试工具:geometry_drawing.draw_objects() 可在脚本里画出区域用于可视化调试;建议在外部 IDE(PyCharm/VSCode)+ 断点中开发,而不是 Motor-CAD 内置编辑器。

三、故障处理与常见问题汇总(错误处理机制 + 真实故障案例)

3.1 官方错误处理机制(编程设计时必须实现)

  1. MotorCADError 异常类型:PyMotorCAD 与旧 ActiveX 的本质区别——API 调用失败时直接抛异常,不再有静默失败的 success 返回值。设计仿真系统时应对所有 Motor-CAD 调用做 try/except:
   import ansys.motorcad.core as pymotorcad
   from ansys.motorcad.core import MotorCADError

   try:
       mc.do_magnetic_calculation()
   except pymotorcad.MotorCADError as e:
       print("Calculation failed: " + str(e))

   # 结果导出同样要捕获
   try:
       mc.export_results("EMagnetic", "Export_EMag_Results.csv")
   except pymotorcad.MotorCADError as e:
       print("Results failed to export due to Motor-CAD Error: " + str(e))

出处:官方 E-Magnetic 基础示例 https://motorcad.docs.pyansys.com/version/stable/examples/basics/emag_basics.html 与向后兼容章节 https://motorcad.docs.pyansys.com/version/stable/user_guide/backwards_compatibility.html

  1. 读图数据的"越界即结束"惯用法:读取 graph 点到末尾会抛 MotorCADError,官方用 while + try/except 循环作为序列结束判断(MotorCAD API 只暴露最近显示的曲线;曲线名称和数据类型在 Motor-CAD 界面 Help → Graph Viewer 里查)。

  2. MotorCADCompatibility 对象:旧 ActiveX 脚本可几乎不改地运行,方便过渡期对照排查问题。

3.2 真实故障案例库(论坛 + GitHub Issues,含现象/原因/对策)

# 故障现象 环境 原因与处理 来源
1 Failed to connect to Motor-CAD instance: port=58016, Url=http://localhost:58016/jsonrpc,旧版本脚本突然全部失效 同机安装 Motor-CAD 2024.1.3 后又装 2024.2.3.1 多版本共存导致自动化注册/端口冲突。检查 Defaults → Automation 里注册的版本;重装/修复安装使注册版本与实际调用版本一致;换到未混装的机器正常即印证是安装态问题 Ansys 社区 https://discuss.ansys.com/discussion/4499/python-failed-to-connect-to-motor-cad-instance
2 pymotorcad.MotorCAD() 无法启动新实例 Windows,Motor-CAD 设置里勾选了 "Hide command Window" activex.batC:\Ansys_Motor-CAD\Shared Files\)内容格式变化导致 _find_motor_cad_exe() 找不到 exe。属已记录的已知 bug,升级 PyMotorCAD 或避免该选项 GitHub Issue #140 https://github.com/ansys/pymotorcad/issues/140
3 MATLAB actxserver('motorcad.AppAutomation') 报 "Server Creation Failed" MATLAB + Motor-CAD(曾经可用,后失效) ActiveX/COM 注册问题,多与安装/重装相关。对策:重新注册(Motor-CAD 首次安装后需重启电脑完成 ActiveX 注册)、检查注册表 ProgID、DCOM 配置与权限;Ansys 员工建议参考 MathWorks 对同类 COM 错误的 8 种修复方案;更根本的办法是迁移到 PyMotorCAD Ansys 论坛 https://innovationspace.ansys.com/forum/forums/topic/problems-with-motorcad-automation/ ;GitHub Issue #495 https://github.com/ansys/pymotorcad/issues/495
4 Python win32com.client.Dispatch("MotorCAD.AppAutomation")pywintypes.com_error: (-2146959355, '服务器运行失败') 中文用户,集成到自研软件时失败(单独运行正常) DCOM 配置/权限/防火墙问题。对策:dcomcnfg 中配置 Motor-CAD Application Automation 的安全权限、以管理员运行、检查防火墙、确认 ProgID 拼写与安装路径 阿里云开发者社区 https://developer.aliyun.com/ask/551036
5 Motor-CAD 报 "Unable to run FE module" 模型本身无问题(官方复现可算) 环境/权限问题。对策三步:跑默认模板模型排除模型问题 → 以管理员身份运行 Motor-CAD(本案例即此解决)→ 确认装在默认目录 C:\ANSYS_Motor-CAD,否则重装到默认路径 Ansys 论坛 https://innovationspace.ansys.com/forum/forums/topic/ansys-motor-cad-unable-to-run-fe-module/
6 自适应模板旋转转子极区域后 FEA 求解器识别不了绕组区域 Motor-CAD 2025 R1 + PyMotorCAD 0.7 旋转后绕组区域被移到 template-other 节点下,区域树关系丢失。属 adaptive geometry 已知问题,跟踪 Issue GitHub Issue #473 https://github.com/ansys/pymotorcad/issues/473
7 模型求解报几何错误,曾正常 重复的转子几何区域(自定义几何/FEA Editor 脚本编辑产生)。删除重复区域即恢复。启示:脚本改几何后要做区域树校验 Ansys 论坛 https://innovationspace.ansys.com/forum/forums/topic/ansys-motorcad-2/
8 启动时"无法获取许可证" 检查许可证服务器网络连通性(ping)、许可证文件路径与有效期、Ansys License Manager 服务重启、防火墙放行 Ansys 许可端口、许可数量是否占满 CSDN 文库 https://wenku.csdn.net/answer/7d9nmw0zdbw5
9 旧 ActiveX 示例中 MagWindingType 等参数名失效 PyMotorCAD 示例与版本演进 参数名随版本改名(如 MagWindingTypeMagneticWindingType)。设计系统时参数名应做成可配置映射表,勿硬编码 GitHub Issue #319 https://github.com/ansys/pymotorcad/issues/319

3.3 从案例中提炼的排障清单(建议写入仿真系统的自检模块)

  1. 连接层pymotorcad.MotorCAD() 失败 → 检查是否同机混装多版本、Automation 注册版本(Defaults → Automation)、端口被占用/防火墙拦截 localhost、是否勾选了 "Hide command Window"。
  2. 权限层:COM/FE 模块类错误 → 管理员身份运行、默认路径 C:\ANSYS_Motor-CAD 安装、首次安装后重启完成 ActiveX 注册。
  3. 许可层:拿不到 license → License Manager 服务、端口、文件有效期、并发数。
  4. 模型层:几何类失败 → 区域闭合性与逆时针顺序(is_closed())、重复区域、Adaptive 脚本先 reset_adaptive_geometry()
  5. 脚本层:所有 API 调用包 try/except MotorCADError;参数名做版本适配;批处理前关弹窗(MessageDisplayState=2)并在 finally 中恢复;结果导出校验文件实际生成。
  6. 日志层:内部脚本用 mc.show_message() 写入 Motor-CAD 消息窗口(带时间戳,天然形成运行日志);外部脚本自行记录每次 set/calc/get 的参数与返回,便于复现。

四、GitHub 上的 Motor-CAD 自动化项目/工具盘点

结论先说:GitHub 上真正可用、持续维护的 Motor-CAD 自动化项目基本只有 Ansys 官方的 ansys/pymotorcad;没有形成规模的第三方"Motor-CAD 自动化 Skill/框架"。检索 motor-cadpymotorcad 两个 topic 均显示"尚无公开仓库使用",第三方内容以零散示例为主,且搜索中出现的"破解版/激活版"仓库(如 Alez1704/ansys-motorcad-15-2-2-unlocked-edition为盗版资源,务必避开,不要引入任何工程环境

项目 地址 性质 说明
ansys/pymotorcad https://github.com/ansys/pymotorcad 官方、MIT、持续维护(~30 star,2026 年仍在活跃发版) 核心库 + examples/ 完整样例(基础、内部脚本、自适应模板库、Twin Builder/Motion 耦合、参数扫描)。做仿真系统的首选参考实现:源码里 rpc_client_core.py 展示了实例发现、连接、错误封装;issues/PR 是最好的故障案例库
DeepWiki 对 ansys/pymotorcad 的结构化解读 https://deepwiki.com/ansys/pymotorcad/5.1-adaptive-templates 第三方(AI 生成的代码库导读) 适合快速理解代码架构:几何对象体系、自适应参数、内外脚本执行上下文(is_running_in_internal_scripting() 分支)
Motor-CAD 热模型导入 Simulink/Simscape 示例 GitHub 搜索 "motorcad" 可见(mathworks 相关仓库) 组织分享 Motor-CAD Thermal → Simulink/Simscape 的模型导入示例,做系统级联合仿真可参考
零散的 "motorCAD automation" 个人仓库 GitHub 搜索可得(个位数 star) 个人分享 质量参差,仅作灵感参考
Ansys Innovation Space 并行计算课程配套脚本 https://innovationspace.ansys.com/certifications/courses/running-parallel-ansys-motor-cad-calculations-through-scripting/ 官方 Python multiprocessing 并行驱动多 Motor-CAD 实例的完整示例(任务调度、排队、结果归集)

如果你的目标是"给仿真系统找一个现成的自动化框架级 Skill"——目前公开生态里没有,可行路线是:ansys/pymotorcad 为底座,自行封装一层任务队列 + 异常重试 + 日志的调度层(并行模式直接参考官方并行课程与 optiSLang 集成方案)。


五、社区与第三方分享(组织/个人)


六、给仿真系统编程设计的建议(基于以上资料)

  1. 接口选型:新系统一律基于 PyMotorCAD(JSON-RPC),不要再写 ActiveX;需要兼容存量脚本时用 MotorCADCompatibility
  2. 架构参考ansys/pymotorcad 源码本身是最好的"仿真软件自动化封装"参考——单类 API、异常即错误的语义、内外脚本双上下文判断(is_running_in_internal_scripting())、实例生命周期参数(open_new_instance / keep_instance_open)。
  3. 健壮性设计:全链路 try/except MotorCADError + 重试;弹窗状态用 try/finally 恢复;参数名做版本映射表;每个任务落盘运行日志(时间戳 + 输入参数 + 结果/异常)。
  4. 并行与调度:参考官方并行课程用 Python multiprocessing 驱动多实例;批量任务前确保许可数量(每实例占用 license)并规划 BlackBox 无头模式。
  5. 自检模块:按 3.3 的五层清单(连接/权限/许可/模型/脚本)做启动自检,可显著降低现场排障成本。
  6. 合规提醒:PyMotorCAD 是 MIT 开源,但驱动 Motor-CAD 必须有合法授权;GitHub 上的"激活版/破解版"仓库一律不要碰。