0

我目前正在尝试为一个更大的项目学习一些基础,该项目将大量使用 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 设置一个初始值,否则我会得到一些错误。当然我不能在这样的代码中做到这一点:

out = 0;

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

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

4

2 回答 2

1

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

因此,您需要确保cmdin正确初始化您不应该为out.

如果你真的需要(你不会),那么最简单的方法就是Initial Condition在这个块之后使用一个块。

请注意,上述内容仅适用于没有状态的块,如您的示例。对于您更大的项目,您可能有自定义编写的带有状态的块,在这种情况下,为状态设置初始条件的方法会有所不同,具体取决于您使用的是MATLAB Function块还是S-Function.

最后,请注意,如果您想抛出错误,请以error通常的 MATLAB 方式抛出错误。照常使用disp不会停止模拟,但您没有为 设置值out,这是错误的编码。

于 2016-10-27T20:43:07.103 回答
0

嗯,我想我已经解决了这个问题。我把它放在这里,我可以帮助别人

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

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

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

于 2016-10-28T08:34:16.380 回答