关于可视化定点代数环的研究分析

描述

MathWorks应用工程师,博客介绍关于 Simulink 以及其它 MathWorks 的基于模型的设计工具。

几天前,我需要调试一个较大的模型,出现了下面这个错误:

信号

在我这个模型里,这个代数环涉及到一百多个模块,信号遍布整个模型,还有总线结构,把问题变得很复杂,难以分析。

ashow(为什么不再需要它了!)

多年来,我一直使用 ashow 函数高亮显示代数环。以下是一个简单模型的示例:

信号

然而,它不太好用,而且它只能高亮显示代数环的一部分。显然,它也无法高亮显示我现在需要解决的这个代数环。

这是因为,这里的代数环是定点信号,这就导致了类似“先有蛋还是先有鸡”的问题。。为了让 ashow 运行,它需要模型能编译。然而,该环是定点信号,Simulink 引擎知道它自己无法求解,于是在模型编译过程中报错,导致无法使用 ashow。

就在那时,我想起了一个相对较新,但经常忘记的函数:

Simulink.BlockDiagram.getAlgebraicLoops

如果你仔细阅读过代数环的相关文档页面,可能已经知道到,Simulink 提供了 Simulink.BlockDiagram.getAlgebraicLoops 函数,它是一种新的,且更有效的代数环高亮显示方法。

用上述同一示例,结果如下:

信号

这个函数在 R2015a 中引入,并在 R2017b 中做了改进,能找到并高亮显示更多类型的代数环。在我的案例中,它已经能高亮显示涉及到定点信号的代数环。根据该环高亮提示,就可找出引入延迟模块并打断该环的最佳位置。

请注意以下几点:

以红色高亮显示的模块是我们称之为代数变量的模块。可以先尝试在这类模块的输出端添加一个入延迟模块(除非是连续信号,参见下列相关阅读)。 

如果检测到该环是人为代数环,它将以虚线高亮显示,这表示应使用原子子系统或模型引用的 Minimize Algebraic Loop feature 勾选项来解决这个问题。

Simulink.BlockDiagram.getAlgebraicLoops 还会返回一个对象类型的返回值给出模型代数环的各种属性,其中包括所涉及模块的句柄,您可以酌情使用。

以下是高亮显示的代数环的定点模型示例:

信号

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分