假设我有变量ii
从工作空间进入SIMULINK模拟,我想在满足某些条件后为其分配一个新值并将值保存到工作空间中。变量的值可以在数组中定义,但是,数组长度不是预定义的。我看到块" MATLAB函数"可能有用,但它是评估像ii=ii+1
这样的简单命令的正确方法吗?
在下面以ii=0
开头的图片中,我预计ii
的值会增加1,直到tout>2
,并且相应地保存其值。但是我只有ii
:1
的两个值,直到2秒的时间和0
的时间> 2秒钟。
答案 0 :(得分:1)
通常您可以使用简单的操作来避免使用MATLAB Function Block
。在您的情况下,有不同的解决方案。例如这样:
我从工作区加载ii
变量,检查Switch
块中的条件,并将具有相同名称ii
的新变量返回到工作区。
但是!这里的重要时刻是:将数据加载到Simulink中,From Workspace
块加载的数据必须采用特殊格式:时间序列,矩阵或结构。因此,您无法仅加载ii=1
。关于To Workspace
块的相同事情 - 它以时间序列,数组或结构将数据返回到工作空间。这意味着您在模拟的每个时间步都取值ii
。
您可以使用Decimation
块中的To Workspace
参数解决此问题,然后您只能获得ii
的最后一个值。在ii
块选项中仅使用时间列Save format: Array
时,仅获取To Workspace
的值。这样您就可以根据需要获得1个值。但是,现在您只能模拟您的程序一次:您使用时间列加载ii
(因为From Workspace
阻止所需)并保存一个值。 Simulink现在无法加载ii
,因为现在它没有时间列!
所以解决方案取决于你想要的东西。
P.S。还有一个建议:不要只使用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)
并以相同的方式继续模拟。