从M文件控制simulink

时间:2013-03-05 16:41:11

标签: simulink matlab

我正在尝试从M文件控制simulink。 我想在M文件中做的是为simulink模型提供一些输入,运行simulink模型,在0.6秒内更改一个输入值,继续使用新输入运行simulink模型。

我已经知道通过使用set_param,我可以启动,暂停和继续simulink,但问题是我不知道如何在某个时间(0.6s)暂停simulink模型,是否有可能得到来自simulink模型的当前时间并在M文件中读取它?

我已经知道的另一种方法是使用sim从0到0.6s运行simulink模型,并使用SimState以0.6s保存信息,然后加载这些信息以恢复模拟。我试图在模拟恢复之前更改输入,但似乎模型将从它保存的信息中加载输入值,它不会采用新的输入值。

我坚持这个问题很长一段时间,有人可以帮我这个吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

目前无法从M文件中进行此操作。如果要在外部给定时间动态更改输入,则需要S-Function。即使这个解决方案也很难实现,因为Mathworks不希望支持这个功能,因为它会破坏他们销售的另一个工具箱的功能之一。随着时间的推移,我相信他们会授予这种权利,但它今天不存在。另外,为什么不使用动态输入块来改变输入值,如地图,信号构建器等?

答案 1 :(得分:1)

您可以使用以下命令获取正在运行的模拟的当前时间:

get_param('simulink_model_name', 'SimulationTime');

例如,通过使用

在模拟期间从M文件中检查此值
timer(...)

您可以检测到模拟时间为0.6秒。

答案 2 :(得分:0)

我使用了simulink和m-script的组合来实现类似的目标。

在您的模型中,添加一个“断言”块。双击它,取消选中“断言失败时停止模拟”。在“断言失败时的模拟回调”字段中,添加三个命令:

  1. set_param(bdroot, 'SimulationCommand', '暂停');
  2. 运行( 'myscript.m'); %插入脚本名称
  3. set_param(bdroot, 'SimulationCommand', '继续');
  4. 现在将此块的inport连接到“不等于”关系运算符。将关系运算符的第一个输入连接到时钟(请设置模拟时钟的抽取或数字时钟的采样时间[通常为-1表示继承])。 第二个输入端连接到常量块,值为0.6

    在模拟模型时,模拟将暂停0.6秒,执行m文件以更改输入参数(考虑到它是可调的),然后继续模拟。

    当输入信号变为0时,将调用断言块。在0.6秒时,关系运算符的输出将为0.

    让我知道它是否有效。