【问题标题】:Execute a function using simulation time使用仿真时间执行功能
【发布时间】:2014-03-13 19:58:29
【问题描述】:

这可能是一个非常简单的问题,但我想在模拟运行时使用模拟时间来执行一个函数。例如,当模拟时间大于 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

【问题讨论】:

  • 这是什么语言?
  • 这是 Matlab 语言。
  • 你试过打印计时器吗?
  • 是的,计时器返回 0。我的 for 循环结构有问题。当我增加范围时,模拟开始之前的延迟会增加,所以 for 循环在模拟期间甚至都没有激活并在它之前结束。如何在 for 循环中定义我的计时器,以便每个周期更新计时器值?

标签: function simulation getparameter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    让你可以用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多