如何通过Python控制Simulink仿真并打开运行已有模型?
Python通过MATLAB Engine控制Simulink仿真解决方案
正确调用逻辑
你提供的代码直接调用eng.sim()未生效,通常是因为没有提前加载模型、也没有将模型路径加入MATLAB的搜索路径导致的,完整的调用流程如下:
- 启动MATLAB引擎
- 将模型所在文件夹加入MATLAB搜索路径
- 加载(打开)Simulink模型
- 运行仿真
完整示例代码:
import matlab.engine # 启动MATLAB引擎 eng = matlab.engine.start_matlab() # 若模型不在Python脚本同目录,需要添加模型所在文件夹到MATLAB搜索路径 # Windows路径示例:eng.addpath(r"C:\Users\你的用户名\Documents\simulink_project") # macOS/Linux路径示例:eng.addpath(r"/home/你的用户名/simulink_project") eng.addpath(r"替换为你的模型文件夹绝对路径", nargout=0) model_name = "mysimulinkmodelname" # 打开Simulink模型,nargout=0表示该函数无返回值,必须加否则会报错 eng.open_system(model_name, nargout=0) # 运行仿真,可获取仿真结果对象 sim_result = eng.sim(model_name) # 仿真结束后可按需关闭模型,第二个参数0表示不保存修改 # eng.close_system(model_name, 0, nargout=0)
模型文件路径要求
- 优先将
.slx格式的Simulink模型文件和当前运行的Python脚本放在同一文件夹下,此时可以省略eng.addpath()步骤,MATLAB引擎默认会将Python脚本的运行目录加入搜索路径。 - 如果模型存放在其他目录,必须通过
eng.addpath()传入模型所在文件夹的绝对路径,避免相对路径引发的找不到文件问题。 - 模型文件名禁止包含中文、空格、特殊字符,避免MATLAB识别异常。
常见注意事项
- 所有没有返回值的MATLAB函数,在Python中调用时都需要加
nargout=0参数,否则会抛出返回值数量不匹配的错误。 - 若调用
sim时模型未提前通过open_system加载,部分复杂模型会因为依赖未加载报错,建议统一先调用open_system再运行仿真。
内容的提问来源于stack exchange,提问作者Indhu
相关产品推荐
相关产品推荐

