You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让MATLAB脚本在Simulink模型执行完成后再执行指定函数?

实现Simulink仿真完成后再执行后续MATLAB代码

根据你的需求,核心是确保Simulink仿真完全结束后才触发fcn2(),具体实现取决于fcn1()启动Simulink模型的方式:

情况1:fcn1用sim()启动仿真

如果fcn1()内部是通过sim()函数启动仿真(例如sim('MySimulinkModel')),那你根本不需要修改现有代码——sim()是阻塞式函数,它会一直等到仿真彻底完成才会把控制权交还给MATLAB主线程,fcn2()自然会在仿真结束后执行。

情况2:fcn1用异步方式启动仿真

如果fcn1()是用异步命令启动仿真(比如set_param('MySimulinkModel','StartSimulation')),这时仿真会在后台运行,MATLAB会继续往下执行代码,就需要手动添加等待逻辑,有两种可靠方式:

方式1:用wait命令等待仿真终止

在fcn1()和fcn2()之间插入以下代码:

% 替换成你的Simulink模型名称
model_name = 'MySimulinkModel';
% 阻塞直到仿真状态变为停止
wait(get_param(model_name,'SimulationStatus'),'stopped');

get_param(model_name,'SimulationStatus')会返回当前仿真的状态(running/stopped/error等),wait会一直等到状态变为stopped才继续执行。

方式2:循环轮询仿真状态

如果你的MATLAB版本不支持上述wait用法(较旧版本),可以用循环检查状态:

model_name = 'MySimulinkModel';
% 持续检查直到仿真停止
while strcmp(get_param(model_name,'SimulationStatus'),'running')
    % 每次检查间隔0.1秒,避免过度占用CPU
    pause(0.1);
end

额外提示

  • 确保模型已提前加载到MATLAB工作区,可在代码开头用load_system(model_name)预加载模型。
  • 若需要处理仿真报错的情况,可以在等待结束后检查状态是否为error,添加对应的错误处理逻辑。

内容的提问来源于stack exchange,提问作者Idin Esmkhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:41:05