首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从M文件控制simulink

从M文件控制simulink
EN

Stack Overflow用户
提问于 2013-03-06 00:41:11
回答 3查看 4.3K关注 0票数 3

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

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

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

我被这个问题困扰了很长一段时间,有人能帮我解决这个问题吗?

非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2013-03-23 18:42:40

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

代码语言:javascript
复制
get_param('simulink_model_name', 'SimulationTime');

例如,在模拟过程中,通过使用以下命令从M文件中检查此值

代码语言:javascript
复制
timer(...)

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

票数 2
EN

Stack Overflow用户

发布于 2016-07-13 17:54:48

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

在你的模型中,添加一个'assert‘块。双击它,并取消选中“断言失败时停止模拟”。在'Simulation Callback when assertion fails‘字段中,添加三个命令:

  1. set_param(bdroot,‘模拟命令’,'pause');
  2. run('myscript.m');%插入脚本名称
  3. set_param(bdroot,‘模拟命令’,‘继续’);

现在将这个块的inport连接到一个“不等于”关系运算符。将关系运算符的第一个输入端口连接到时钟(请设置模拟时钟的抽取值或数字时钟的采样时间,通常为-1 \f25-1\f6继承时间)。第二个输入端口连接到常量块,值为0.6

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

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

如果起作用了,请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2013-03-07 03:43:37

在M文件中,这目前是不可能的。如果您希望在给定时间动态更改外部输入,则需要使用S-Function。即使是这种解决方案也是困难的,因为Mathworks不想支持这种功能,因为它破坏了他们销售的另一个工具箱的一个功能。假以时日,我相信他们会授予这项特权,但它今天并不存在。另外,为什么不使用动态输入块来更改输入值,如map、信号构建器等?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15229349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档