使用 set_param 和 get_param 进行 Matlab 和 Simulink 仿真

问题描述 投票:0回答:1

我使用命令 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')

输入图片描述为here

但是 while 循环无法正确运行。我只能在手动暂停和继续Simulink模型时观察变量“时间”的变化。我使用的是 0.1 秒的固定模拟时间步长。

我已经查了很多,但还是找不到任何原因。你可以帮帮我吗?预先感谢您。

matlab simulation simulink
1个回答
0
投票

我想在指定时间设置一个参数,所以我用 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')
© www.soinside.com 2019 - 2024. All rights reserved.