【问题标题】:How to evaluate MATLAB command inside SIMULINK如何在 SIMULINK 中评估 MATLAB 命令
【发布时间】:2016-03-10 02:08:07
【问题描述】:

假设我有变量 ii 从工作区进入 SIMULINK 模拟,我想在满足某些条件后为其分配一个新值并将该值保存到工作区中。变量的值可以在数组中定义,但是,数组长度不是预定义的。我看到“MATLAB 函数”块可能很有用,但它是只评估一个简单的命令(如 ii=ii+1)的正确方法吗?

在下面以ii=0 开头的图片上,我预计ii 的值会增加一,直到tout>2 并相应地保存它的值。但我只有两个值 ii1 直到 2 秒的时间和 0 从时间 > 2 秒开始。

simulink_scheme

【问题讨论】:

    标签: matlab command simulink


    【解决方案1】:

    通常您可以使用简单的操作避免使用MATLAB Function Block。在您的情况下,有不同的解决方案。例如这种方式:

    我从工作区加载ii 变量,检查Switch 块中的条件,并将具有相同名称的新变量ii 返回到工作区。

    但是!这里的重要时刻是:使用From Workspace 模块将数据加载到 Simulink 中,加载的数据必须采用特殊格式:时间序列、矩阵或结构。所以你不能只加载ii=1。与To Workspace 块相同 - 它以时间序列、数组或结构将数据返回到工作区。这意味着您在模拟的每个时间步中都采用 ii 的值。

    您可以使用To Workspace 块中的Decimation 参数解决此问题,然后您只能获得ii 的最后一个值。要在没有时间列的情况下仅获取 ii 的值,请在 To Workspace 块选项中使用 Save format: Array。这使您可以根据需要仅获得 1 个值。但是,现在您只能模拟您的程序 1 次:您加载带有时间列的 ii(这是 From Workspace 块所必需的)并只保存一个值。 Simulink 现在无法加载 ii 因为现在它没有时间列!

    所以解决方案取决于你想要什么。

    附:再给你一个建议:不要只使用i 变量! MATLAB 有预定义变量i = 0.0000 + 1.0000i - 虚数单位。


    我解决了这个问题并得到了这个例子:

    subsystem 在哪里:

    注意:工作区块将结果保存为Array(避免时间列)。工作原理:在工作区创建ii=0。开始模拟。启用子系统 (t<=2) 后,它将以这种方式修改 ii 值:在每个时间步将 ii 增加 1。我的意思是:

    t = 0, ii = 1
    t = 1, ii = 2
    t = 2, ii = 3
    t = 3, ii = 3 ...
    

    在下一次模拟中,我们加载 ii 数组的最后一个值 - ii(end) 并以相同的方式继续模拟。

    【讨论】:

    • 我已经尝试过使用类似你发布的东西,但是当我想根据switch块中的某些条件将变量ii加一时,系统总是以旧计数(不是增加)ii 的值,即使我将其保存为 To Workspace 块。
    • 假设我想使用ii=ii+1 而不是Constant 块,其值为2。我该怎么做?
    • 我在答案中添加了新示例。希望对您有所帮助!
    • 但为什么它不适用于Constant 块(值为1)而不是Ramp 块?实际上,我只是想在满足某些条件时将ii 增加1,而不是根据Ramp 斜率。使用以ii=0 开头的Constant 值1 块,对于保存在工作区中的所有时间值,我得到i=1
    • 答案又是关于时间序列的。仔细查看返回到工作区的ii - 它是一个数组,但它包含每个时间步的值。我的意思是ii(1) 适合t=0 ii(2) -> t=1 等等。那么它是如何工作的呢? Simulink 接受ii(end) 检查条件并将1 添加到其中。好的,我们在当前时间得到ii 的新值并保存它。将时间加 1 并重复:加载 ii(end) 检查条件并加 1。这意味着我们将对数组 ii 的所有值加 1!我们如何避免它?使用Ramp 块 - 根据当前时间我们将123 等添加到ii 的当前值!
    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 2015-12-12
    • 2013-05-21
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多