如何让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
相关产品推荐
相关产品推荐

