0

这可能是一个非常简单的问题,但我想在模拟运行时使用模拟时间来执行一个函数。例如,当仿真时间大于 14 秒(or >=14 & <20 s)时,则更改参数值。请帮帮我,下面的代码没有做任何事情。谢谢。

a=0;
set_param('model','SimulationCommand','Start');
b=0;

for i=1:1:500000 % 1ms sampling rate
    timer(:,1)=get_param('model','SimulationTime');
    if timer>=14
        a=1;    
        b=1;
    end
end
4

2 回答 2

0

我不使用 matlab,但我注意到的一件事是脚本执行循环并且从不产生。对我来说,这表明脚本将一次性运行,而不是在每一帧重复调用。假设此脚本执行一次,我假设您将注册一个回调以在每个时间步执行,请参阅TimerFcn。在此回调中,您检查计时器并采取相应措施。还有Timer Callback Functions,但我不知道它是否相关,因为那里的代码与你所拥有的完全不同。

于 2014-03-17T20:09:13.287 回答
0

屈服你可以用 pause() 命令解决。

我看到了将时钟块导出到 Matlab 变量的唯一方法。然后使用您的变量进行检查。

无论如何,您的方法似乎是可行的:

>> load_system('MySystem.mdl');
>> get_param('MySystem','SimulationTime')
ans =
     1
>> set_param('ItFixBody', 'SimulationCommand', 'Start');
>> get_param('ItFixBody','SimulationTime')
ans =
    2.4800
>> get_param('ItFixBody','SimulationTime')
ans =
    3.0500
>> get_param('ItFixBody','SimulationTime')
ans =
    3.5800
>> get_param('ItFixBody','SimulationTime')
ans =
    3.9800
于 2017-01-22T11:46:30.457 回答