可视化定点代数循环
几天前,我不得不调试一个非常大的模型,产生了类似以下错误:
在我的例子中,这个回路包含了100多个模块和信号,它们在模型中到处传播,并在公共汽车中组合,这使得分析变得复杂。
(为什么你不再需要它了!)
多年来,我一直在使用的演出函数来突出显示代数循环。下面是一个简单模型的例子:
然而,除了一些可用性挑战之外,还有一个主要的困难的演出它只能突出代数循环的一个子集——当然,它不能突出我需要解决的那个。
影响我的限制是,代数回路是由定点信号构成的。这就导致了一种先有鸡还是先有蛋的问题。为的演出为了工作,它需要对模型进行编译。但是由于这个循环是由定点信号组成的,所以Simulink引擎知道它无法解决这个循环,并且在模型编译期间出错,这万博1manbetx使得它无法使用的演出.
这时,我想起了一个相对较新的函数,但我往往会忘记:万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops
万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops
如果你读了关于代数循环的文档页您可能已经注意到Simulink现在提供了这个功能万博1manbetx万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops,一种更现代、更强大的方法来突出代数循环。
对于上面的同一个例子,它看起来是这样的:
该函数在R2015a中引入,在R2017b中得到了增强,能够找到和突出更多类型的代数循环。在我的例子中,它允许我突出一个由定点信号组成的循环。看到这个循环,让我找到了引入延迟和打破循环的最佳地点。
有几点需要注意:
- 红色突出显示的部分是我们所说的代数变量。在这个块的输出处引入一个延迟可能是尝试消除代数循环的一个好方法(除非循环是连续的,就像这篇文章中解释的那样).
- 如果我们检测到循环是人工,它将用虚线突出显示,这意味着您应该使用最小化代数循环特性来修复它原子子系统或模型参考.
- 万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops还返回一个带有模型中循环属性的输出对象,包括所涉及的块的句柄,您可以方便地使用它。
下面是一个带有代数循环的定点模型示例:
现在轮到你了
你在纠结于代数循环吗?是否使用万博1manbetxSimulink.BlockDiagram.getAlgebraicLoops帮助你更好地理解他们?请在下面的评论中告诉我们。
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。