如何评估SIMULINK中的MATLAB命令

时间:2016-03-10 02:08:07

标签: matlab command simulink

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

在下面以ii=0开头的图片中,我预计ii的值会增加1,直到tout>2,并且相应地保存其值。但是我只有ii1的两个值,直到2秒的时间和0的时间> 2秒钟。

simulink_scheme

1 个答案:

答案 0 :(得分:1)

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

我从工作区加载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 - 虚构单位。

我解决了这个问题并得到了这个例子: enter image description here

subsystem的位置:

enter image description here

注意:要将工作区阻止保存结果为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)并以相同的方式继续模拟。