【问题标题】:Block a matlab script while Simulink runs在 Simulink 运行时阻止 matlab 脚本
【发布时间】:2014-07-18 01:40:26
【问题描述】:

我正在使用 Simulink 从跌落测试中实时收集数据。 Simulink 工作得很好,但我的愿景是让一个 Matlab (v.7.10) 脚本运行模拟进行多次试验,而我不必在两次下降之间跑到计算机上。这也允许我在保存数据之前对其进行预处理。两个程序单独运行都很好,但我无法让 Simulink 在脚本中正常运行。使用sim() 返回错误信息:

    Cannot perform command line simulation of 'acc_DAC' in external mode.

使用set_param(sys, 'SimulationCommand', 'start') 启动模拟,但不会阻止脚本。脚本继续并返回错误,因为它应该具有的输出还不存在。值得注意的是,我在其他地方读到暂停 Matlab 也会暂停任何模拟,尽管我自己做不到。

Simulink 一直运行直到测量到冲击,然后停止并将加速度计数据输出到工作区。我要问的是:

A) 有没有办法让sim() 运行外部实时模拟?

B) 有没有一种好方法可以让 Matlab 等待 Simulink 完成或变量存在而不暂停 Simulink?

【问题讨论】:

  • 我在this tutorial 拍了一张照片。我得到了init_simstart 的工作,模拟将完成并卸载,但脚本不会继续进行。我的猜测是我卡在 Simulink 末尾的 evalin 命令无法正常工作,但不知道该去哪里。

标签: matlab simulink


【解决方案1】:

您可以尝试检查正在运行的模型的SimulationStatus,然后循环直到显示stopped,但您需要小心一点,因为有可能进入无限循环。

类似

set_param(sys,'SimulationCommand','start');
while ~strcmp(get_param(sys,'SimulationStatus'),'stopped')
    drawnow
end

以上在任何模拟模式下都不起作用,但可以在外部模式下工作。

【讨论】:

  • 它确实阻止了脚本,但它卡在了循环中。我使用 2 秒后退出的虚拟 Simulink 对其进行了测试。程序循环直到我 ctrl-c,然后通知我模拟完成。
【解决方案2】:

在摆弄定时器和事件回调一周后,我发现如果这是可能的,那么做起来非常困难。最终我创建了两个函数,一个启动模拟,一个处理第一个输出的数据。我必须手动运行它们,但这对我来说没什么大不了的。希望这会对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2015-03-18
    • 2014-06-04
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多