Simulin万博1manbetxk上的Guy

万博1manbetxSimulink &基于模型的设计

可视化定点代数环

几天前,我不得不调试一个非常大的模型,产生了类似以下的错误:

代数循环误差

在我的例子中,这个循环涉及到100多个块和信号,它们分布在模型的各个地方,并在总线中组合,这使得分析变得复杂。

(以及为什么你不再需要它了!)

多年来,我一直在使用的演出函数突出显示代数循环。下面是一个简单模型的例子:

代数循环突出显示

然而,除了一些可用性的挑战,一个主要的困难的演出它只能突出显示代数循环的一个子集——当然,它不能突出显示我需要解决的那个。

影响我的限制是代数环是由定点信号组成的。这就导致了鸡生蛋还是蛋生鸡的问题。为的演出为了工作,它需要编译模型。但是由于循环是由定点信号组成的,Simulink引擎知道它无法解决循环,并且在模型编译过程中会出现错误,使其无万博1manbetx法使用的演出

就在这时,我想起了一个我容易忘记的相对较新的函数:万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops

万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops

如果你读了代数循环的文档页仔细观察,您可能已经注意到Simulink现在提供了该功能万博1manbetx万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops,这是一种更现代、更强大的突出代数循环的方法。

对于上面的同一个例子,它是这样的:

使用Simulink.BlockDiagram万博1manbetx.getAlgebraicLoops突出显示循环

该函数在R2015a中引入,在R2017b中进行了增强,以便能够发现和突出显示更多类型的代数循环。在我的例子中,它允许我突出显示由定点信号组成的循环。看到循环让我找到了引入延迟和打破循环的最佳位置。

有几件事需要注意:

  • 用红色标出的块就是我们所说的代数变量。在此块的输出处引入延迟可能是尝试删除代数循环的第一件好事(除非循环是连续的,如本文所述).
  • 如果我们检测到循环是人工,它将用虚线突出显示,这意味着您应该使用的最小化代数循环功能修复它原子子系统模型参考
  • 万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops还返回一个输出对象,其中包含模型中循环的属性,包括所涉及的块的句柄,您可以在方便时使用。

下面是一个定点模型的例子,突出显示了一个代数循环:

使用Simulink.BlockDiagram万博1manbetx.getAlgebraicLoops突出显示循环

现在轮到你了

你在为代数循环而挣扎吗?是否使用万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops帮助你更好地理解他们?请在下面的评论中告诉我们。

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。