在matlab功能块中设置初始条件(simulink)

时间:2016-10-27 10:26:32

标签: matlab function simulink s-function

我目前正在尝试为一个更大的项目学习一些基础,这个项目将大量使用simulink。 现在,我想用反馈编写我自己的simulink块。这意味着其中一个输入也是输出(它们之间有一个“内存”块,以确保一切正常!)。

我的代码看起来像

function out = func(cmd,in)

if in == 0 && cmd == 1
    out = 1;
elseif in == 1 && cmd == 0
    out = 0;
else
    disp('error')
end

正如我所说,'in'与'out'有关。不幸的是,需要设置一个初始值,否则我会得到一些错误。当然我不能在代码中这样做:

out = 0;

在这种情况下,每个时间步的值'out'都设置为0。

你有什么建议吗?我已经读过可以使用S-functions和flag,但我不知道它是如何工作的。

2 个答案:

答案 0 :(得分:1)

在模型初始化期间调用您的函数(t = 0),并且将根据t = 0时outcmd值的值计算in的值。

因此,您需要确保cmdin已正确初始化,您不应为out明确设置值。

如果你真的需要(你赢了),那么最简单的事情就是在这个块之后使用Initial Condition块。

请注意,上述内容仅适用于没有状态的块,如您的示例所示。对于较大的项目,您可能具有状态的自定义写入块,在这种情况下,根据您使用MATLAB Function块还是S-Function来设置状态的初始条件的方法会有所不同。 / p>

最后,请注意,如果您想要抛出错误,则以通常的MATLAB方式抛出error。正如您所做的那样使用disp并不会停止模拟,但您还没有设置out的值,这是错误的编码。

答案 1 :(得分:0)

嗯,我认为我已经解决了这个问题。我把它放在这里,我可以帮助其他人

  • 添加时钟并使用if语句初始化if time <=0 out = ... 但是,它需要添加额外的输入,这不是很方便。也许有人可以告诉我如何解决这个问题。
  • 正确执行if并按else out = in;
  • 结束

我相信这是主要的问题。我还将我的matlab功能块放在一个带有掩码的子系统中,该掩码初始化incmd

再次感谢您的帮助,它帮助了很多。 但是,我的问题仍然没有解决,因为if t<0语句由于某种原因不起作用。