如何快速深刻地理解Simulink模型
印象中,在寫2017年總結帖的時候,有位公眾號的老朋友給我留言說,公眾號的內容比較分散,不能形成一個體系。
事實上,這個建議確實是比較中肯,我也一直為此反思。
於是在上個禮拜,我為公眾號中的帖子進行了一個簡單的分類,分別包括「學習方法」,「GUI」,「爬蟲」以及「小技巧」四個欄目。有興趣的朋友,可以在公眾號的「帖子」按鈕下進行查看。

其中,在「學習方法」這一欄中,我添加的幾篇文章,包括:
- 如何自學MATLAB
- 如何製作GUI
- 如何爬蟲
- 如何編程
- 以及MATLAB論壇中常見的帖子
不過,似乎還缺一篇文章,就是關於Simulink建模的帖子。
對於Simulink建模,我覺得,這件事有點像編程,像寫作,像雕塑一件藝術品,像表達自己的想法。
然而,任何的創作,都需要素材的積累。我不確定這個觀點是否正確,不過在我的認知範圍內,的確如此。
這就意味著,在開始動手搭建自己所需的模型之前,需要學習幾個已知的模型。所以,今天我想分享一下,平時我是如何讀模型,以此來加深自己對這個模型的理解。
先來看一下,我在拿到一個模型之後,在閱讀、做筆記以及修改前後的模型對比圖。

事實上,這幅圖中的修改前的模型還並不是十分糟糕,布線也不算是複雜。我曾經拿到過一個項目的祖傳模型,功能雖然沒問題,但是模型的可讀性實在是不敢恭維,以至於在做整車調試的過程中,要花大量的時間重新去看這個模型。
也就是在那個階段,我逐漸養成了一個習慣,就像上面這幅圖中修改後的模型所顯示的,會把一個模型,按照其中的功能畫Area進行分區塊,在每個Area中寫注釋,方便下次再看這個模型的時候快速理解。同時會把輸入和輸出型號都放置在左側,這樣也便於快速查找輸入輸出信號。
我覺得,一個可讀性較好的模型,他應該就像一首詩,無論什麼時候再去讀他的時候,都不應該覺得費勁。
不過這樣的處理方式,仁者見仁智者見智,並不是所有人都認可我這種處理方式。最簡單的一個例子就是,這種處理方式在Goto和From上就與MAAB的規範相違背。不過因為我現在已經不是軟體開發人員,純粹只是模型閱讀者,所以,對於模型可讀性的修改,可以按照個人習慣。
如果對MAAB建模規範感興趣的朋友,可以在公眾號後台回復「建模規範」獲取相關文檔。
為了優化Simulink模型的可讀性,除了通過Area劃分功能區間之外,最容易聯想到的,應該就是寫注釋了。
以電池單元的SOC計算為例,可以在模型中備註SOC的計算公式,這樣就不用每次看不懂這層計算邏輯而又費心思去推導一遍了。

除了文字形式的注釋之外,還能加入圖片。比如手寫的筆記,就可以做成一個圖片添加到相關的模型中去。

添加圖片這個功能還有一個更加有意義的用途是,當你對這個模型了解程度比較深入的時候,對於應用層的軟體架構應該有了一個比較深刻的輪廓。
那麼,這個時候,我會建議你嘗試自己去畫一個軟體架構出來,無論是用visio還是其他工具。在畫完軟體架構之後,可以把這幅圖插入到模型中去,並將軟體中各個相應的Subsystem按照軟體架構中的位置進行擺放。這個無論是對於當前自己對軟體的理解還是未來無論次要重新回看軟體的時候,都是一個非常有意義的事。

上述都是模型可讀性上嘗試,除此以外,就是具體的邏輯演算法的理解。在這裡就沒辦法給出特別的建議了,唯一想告訴大家的是,有不理解的地方,多分析多思考多討論,同時可以嘗試賦值去看輸出結果,去理解為什麼結果曲線會是這樣。
以上就是我對於Simulink自學的個人建議,同時也歡迎大家在評論區各抒己見,分享你們在平時學習工作過程中的小技巧。
最後祝大家節日快樂!
如果你有興趣,歡迎關注我的微信公眾號「打浦橋程序員」,謝謝
推薦閱讀:
※關於Model Based Design的二三
※怎樣實現不同控制演算法的切換?
※simulink coder和matlab coder有什麼區別?
※Simulink模型如何實現批量埠左置
※細節和效率,哪個更重要?
