我目前正在尝试为一个更大的项目学习一些基础,这个项目将大量使用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,但我不知道它是如何工作的。
答案 0 :(得分:1)
在模型初始化期间调用您的函数(t = 0),并且将根据t = 0时out
和cmd
值的值计算in
的值。
因此,您需要确保cmd
和in
已正确初始化,您不应为out
明确设置值。
如果你真的需要(你赢了),那么最简单的事情就是在这个块之后使用Initial Condition
块。
请注意,上述内容仅适用于没有状态的块,如您的示例所示。对于较大的项目,您可能具有状态的自定义写入块,在这种情况下,根据您使用MATLAB Function
块还是S-Function
来设置状态的初始条件的方法会有所不同。 / p>
最后,请注意,如果您想要抛出错误,则以通常的MATLAB方式抛出error
。正如您所做的那样使用disp
并不会停止模拟,但您还没有设置out
的值,这是错误的编码。
答案 1 :(得分:0)
嗯,我认为我已经解决了这个问题。我把它放在这里,我可以帮助其他人
if
语句初始化if time <=0 out = ...
但是,它需要添加额外的输入,这不是很方便。也许有人可以告诉我如何解决这个问题。if
并按else out = in;
我相信这是主要的问题。我还将我的matlab功能块放在一个带有掩码的子系统中,该掩码初始化in
和cmd
。
再次感谢您的帮助,它帮助了很多。
但是,我的问题仍然没有解决,因为if t<0
语句由于某种原因不起作用。