Matlab如何大規模修改Simulink模型

(知乎的朋友,知乎放不了動圖,閱讀效果不佳,原文鏈接在這 Matlab如何大規模修改Simulink模型)

去年有兩個月,每天下班回家之後,我就坐在電腦前碼代碼,一碼就是到凌晨,周末也是如此。當時給自己開發了一個工具,算不上工作任務,也算不上業餘的愛好,僅僅只是工作上碰到了一個很繁瑣的任務,暢想著能通過代碼實現,好讓一個重複性任務變得更有吸引力。

整個工具成型之後,也慢慢會碰到其他訴求,業餘時間我也逐一為此開發功能,逐一加入到了這個工具之中。直至如今,這個工具雖然算不上完美,但好歹讓我想對模型大刀闊斧的改造時絲毫沒有些許畏懼。

今天我來分享一下這個工具的幾點功能,這將會是一個很冗長的工具說明書,大家看看動圖就好。

  • 載入模型

  • 搜索模塊

  • 批量定義顏色與大小

  • 埠對齊

  • 批量顯示或取消名字

  • 批量設置Test Point

  • 輸入輸出埠統一左置

  • 埠號按字母順序排列

  • 快速建立Bus系統

  • 批量將Memory替換為Unit Delay

  • 快速定義Subsystem輸入輸出信號名

  • 一鍵替換參數名

1. 載入模型

一如既往,這個功能中使用的是選取文件並載入的函數,點擊名為「select Model」的按鈕,在載入完之後,工具中的模塊類型以及模塊路徑的表格欄中就會出現相應的信息

2. 搜索模塊

如果想找某一模塊,又不想逐一每層去查看,可以在搜索欄輸入這個模塊名字的部分信息,不需要全名,模塊類型以及模塊路徑就會顯示與你所提供的信息想匹配的模塊。不過,這個功能在Simulink本身就能實現,不過我還是更願意使用自己寫的工具。

3. 批量定義顏色與大小

點擊名為「all Color」的按鈕之後,整個模型中,所有的Inport, Outport, Goto, From的顏色多會改變為所設定的顏色,其中顏色的信息已經相應的模塊類型直接寫入到工具中的代碼,以後會考慮將這些設置的埠開放出來,能夠按模塊類別進行顏色自定義

名為「all Size」的按鈕能夠統一類似Goto、From、Constant這些模塊的大小,與顏色的設定相同,具體大小的設定信息已經寫入到工具代碼中。

不過,我還是開放了單獨模塊大小的設定,以SubSystem為例。選取SubSystem對象路徑之後,設置該模塊的長與寬,點擊名為「Size」的按鈕,就能實現對模塊大小的設定

4. 埠對齊

如之前的動圖所見,SubSystem埠的連線還是比較混亂的,不過可以選取這個對象之後點擊名為「Aligen」的按鈕,能夠實現埠模塊的對其

現在的Matlab已經有對其的功能了,不過似乎還是只能局限在單個模塊,如果想實現批量對其的話,不防考慮下自己碼個腳本去操作

5. 批量顯示或取消名字

出於模型美觀的考慮,有時候想隱藏某一類型模塊的名字,以From為例,為了避免逐個模塊右鍵去隱藏名字,可以選取模塊類型之後點擊名為「Show Name」的按鈕。如果想恢復這個模塊類型的名字可見,同樣只需要選取該模塊類型點擊「Show Name」,如下動圖所示

6. 批量設置Test Point

在做測試階段,會涉及到Test Point設置的問題。如果某一個層出現邏輯問題想詳細調試的話,那麼需要設置的Test Point數量就會比較多。針對這個問題,可以選取所在層為對象,點擊名為「Set Testpoint」的按鈕,這一層所有模塊輸出都會被設置為Test Point。同樣再點擊一次這個按鈕,就會取消該設置。

7. 輸入輸出埠統一左置

這個功能的開發純粹屬於我個人的習慣,我在搭建模型時,比較傾向於將輸出輸出埠做在左側,邏輯運算做在右側

8. 埠號按字母順序排列

這個功能就是將埠序號按照信號字母順序與數字來排列,便於在軟體開發或者調試階段找信號的時候不至於大海撈針,開發這個功能也是為了今後更好的二次開發。

9. 快速建立Bus系統

這個功能的實現邏輯,我已經在先前的帖子中講解過,如果希望快速在軟體中實現Bus系統的搭建,行之有效的途徑還是需要自己寫腳本

10. 批量將Memory替換為Unit Delay

開發這個功能,是在做軟體開發的初期並不注重建模規範的結果,等到知道這個噩耗之後,為時已晚,有數不清的Memory需要替換,所以就寫了這個腳本加入到工具中

11. 快速定義Subsystem輸入輸出信號名

這個功能的開發純屬於自己建模過程中的偷懶,不想一個一個copy埠名字,於是就把模塊都連線好,然後一鍵更新名字,這樣操作起來就快多了,同時還能避免不必要的失誤

12. 一鍵替換參數名

這個功能在我之前的帖子中已經涉及到了,如果模塊中大規模使用這個信號時,一旦出現需要對這個信號名進行更改時,手動去做並不是最好的辦法。於是我就開發了這個功能,能夠批量的替代信號名。

不過這個功能是針對Simulink模塊替換名字的,遇到StateFlow的話,就需要使用另外的方法,如下面的動圖所示

使用過StateFlow的朋友應該清楚,在修改其中參數的過程中,並不是單單改個名字就完結了,還需要在Model Explorer進行相應的更改,相信這個一鍵修改的功能還是不錯的。

除此以外就是一些動圖不容易展示的功能了,比如資料庫管理,模擬,數據分析

今天的分享就到這,希望我的工具能給你日常工作中些許靈感

以上

如果有興趣,可以關注我的微信公眾號「打浦橋程序員」,謝謝

推薦閱讀:

不要到Game Over的時候,才發現自己在做「無腦工作」
lesson73|excel中遇見不規範數據,該如何整?
你們常用的工作方法和思考方式是什麼?
定有那麼一天,你的精彩不再只來自愛情了
國慶歸來低效又頹廢…如何應對假日綜合征?

TAG:MATLAB | 高效工作 |