我使用命令 set_param 和 get_param 来控制一个非常简单的 simulink 模型,该模型仅由一个时钟块和一个范围组成。我想要的是让simulink模型运行,从Simulink获得时钟模块的实时输出到Matlab,并在时钟值大于5时停止仿真。以下是我的Matlab脚本:
Simulink_Model='co_simulation_sl';
load_system(Simulink_Model);
open(Simulink_Model);
time=0;
while time<5
if strcmp (get_param(Simulink_Model,'SimulationStatus'), 'stopped')
set_param(Simulink_Model,'SimulationCommand','start')
elseif strcmp (get_param(Simulink_Model,'SimulationStatus'), 'paused')
set_param(Simulink_Model,'SimulationCommand','continue')
end
set_param(Simulink_Model,'SimulationCommand','pause')
block = 'co_simulation_sl/Clock';
rto = get_param(block, 'RuntimeObject');
time = rto.OutputPort(1).Data;
end
set_param(Simulink_Model,'SimulationCommand','stop')
但是 while 循环无法正确运行。我只能在手动暂停和继续Simulink模型时观察变量“时间”的变化。我使用的是 0.1 秒的固定模拟时间步长。
我已经查了很多,但还是找不到任何原因。你可以帮帮我吗?预先感谢您。
我想在指定时间设置一个参数,所以我用 Asert 块暂停它,然后用 set_param 命令更改参数。 我能够通过在代码中结合pause(0.1)和Asert来实现这一点。 多谢! https://jp.mathworks.com/help/simulink/ug/controlling-execution-of-a-simulation.html
Simulink_Model='co_simulation_sl';
load_system(Simulink_Model);
open(Simulink_Model);
time=0;
while time<5
if strcmp (get_param(Simulink_Model,'SimulationStatus'), 'stopped')
set_param(Simulink_Model,'SimulationCommand','start')
elseif strcmp (get_param(Simulink_Model,'SimulationStatus'), 'paused')
set_param(Simulink_Model,'PauseTime','Value','XX');Here is add code
set_param(Simulink_Model,'SimulationCommand','continue')
end
%set_param(Simulink_Model,'SimulationCommand','pause')
pause(0.1);Here is add code
block = 'co_simulation_sl/Clock';
rto = get_param(block, 'RuntimeObject');
time = rto.OutputPort(1).Data;
end
set_param(Simulink_Model,'SimulationCommand','stop')