MathWorks應用工程師,博客介紹關于 Simulink 以及其它 MathWorks 的基于模型的設計工具。
幾天前,我需要調試一個較大的模型,出現了下面這個錯誤:
在我這個模型里,這個代數環涉及到一百多個模塊,信號遍布整個模型,還有總線結構,把問題變得很復雜,難以分析。
ashow(為什么不再需要它了!)
多年來,我一直使用ashow函數高亮顯示代數環。以下是一個簡單模型的示例:
然而,它不太好用,而且它只能高亮顯示代數環的一部分。顯然,它也無法高亮顯示我現在需要解決的這個代數環。
這是因為,這里的代數環是定點信號,這就導致了類似“先有蛋還是先有雞”的問題。。為了讓 ashow 運行,它需要模型能編譯。然而,該環是定點信號,Simulink 引擎知道它自己無法求解,于是在模型編譯過程中報錯,導致無法使用 ashow。
就在那時,我想起了一個相對較新,但經常忘記的函數:
Simulink.BlockDiagram.getAlgebraicLoops
如果你仔細閱讀過代數環的相關文檔頁面,可能已經知道到,Simulink 提供了Simulink.BlockDiagram.getAlgebraicLoops 函數,它是一種新的,且更有效的代數環高亮顯示方法。
用上述同一示例,結果如下:
這個函數在 R2015a 中引入,并在 R2017b 中做了改進,能找到并高亮顯示更多類型的代數環。在我的案例中,它已經能高亮顯示涉及到定點信號的代數環。根據該環高亮提示,就可找出引入延遲模塊并打斷該環的最佳位置。
請注意以下幾點:
以紅色高亮顯示的模塊是我們稱之為代數變量的模塊。可以先嘗試在這類模塊的輸出端添加一個入延遲模塊(除非是連續信號,參見下列相關閱讀)。
如果檢測到該環是人為代數環,它將以虛線高亮顯示,這表示應使用原子子系統或模型引用的 Minimize Algebraic Loop feature 勾選項來解決這個問題。
Simulink.BlockDiagram.getAlgebraicLoops 還會返回一個對象類型的返回值給出模型代數環的各種屬性,其中包括所涉及模塊的句柄,您可以酌情使用。
以下是高亮顯示的代數環的定點模型示例:
-
信號
+關注
關注
11文章
2789瀏覽量
76730 -
函數
+關注
關注
3文章
4327瀏覽量
62573 -
可視化
+關注
關注
1文章
1194瀏覽量
20934
發布評論請先 登錄
相關推薦
評論