Simulink模型如何實現批量埠左置

最近一段時間一直在對建模工具進行梳理以及代碼的優化。有不少朋友對於工具中的埠左置的功能表示不解。不清楚這個功能的朋友,先來看一下效果圖,這幅圖上半部分是通常情況下的模型,而下半部分是埠左置之後的模型。

關於埠左置這個問題,其實更大程度上是基於個人的建模習慣。

先來講一下建模規範,對於汽車行業而言,目前公開的Simulink建模規範有MAAB建模規範。有興趣的朋友可以在網上搜索「MAAB建模協議」,某文庫中有該規範的相關文檔,這裡就不再重複展開了。當然不僅僅只是汽車行業,在其他行業的Simulink建模過程中,這個規範也是很有借鑒意義的。

而埠左置這個習慣,並不是源於該建模規範。早些年曾經與一位工作10年的前輩共事,而這個習慣也是從這個前輩那學習來的。對於大型項目的軟體模型而言,一個模塊幾十個埠是件稀疏平常的事。無論是在建模、調試或者是軟體架構優化,在操作性上而言,比起在眾多埠中去尋找目標埠,埠左置的模型往往會省力不少。

那麼,今天就來聊一聊如何開發埠左置功能。

最開始在開發這個功能的時候,當時考慮的策略比較簡單,在使用範圍上比較局限,效果不是很好。在這裡通過幾個簡單的動圖來講解下最初的策略。

1. Inport

從動圖裡可以看出,對於Inport的操作策略是:

  1. 刪除Inport與對象的連線
  2. 增加一個相應的Goto
  3. 連接Inport與Goto
  4. 增加一個相應的From
  5. 連接From於對象
  6. 對Inport與Goto置位

2. Outport

Outport的操作邏輯與Inport的完全一致:

  1. 刪除Outport與對象的連線
  2. 增加一個對應的From
  3. 連接From與Outport
  4. 增加一個對應的Goto
  5. 連接對象與Goto
  6. 對From與Outport置位

這個操作邏輯是很好理解的,但是在使用過程中存在一個很嚴重的問題,這個策略只適用於單一連線的,對於多線連接的埠,效果很差,接下來通過一個動圖來看一下,這種策略為什麼效果不好。

在這個動圖中,Inport埠信號分別與兩個模塊連接,出現動圖中的結果的原因在於,只刪除了其中一條線,在置位時,另一條線仍然與Inport相連。

當時在開發完這個功能之後,對模型進行操作時,往往需要對模型進行一個預處理,使得所有的輸入輸出埠均為單線連接形式。

這樣的處理方式,一點也不酷炫。於是,我在先前的操作策略上著手開始優化功能。

1. 最初我打算刪除所有與Inport相連的線,然後建立From之後,在重新連線。不過如果對於連線複雜的模型,布線會是一個很頭疼的事情,比如

這麼暴力連線,能忍?

2. 然後我打算,直接刪掉Inport,然後建立From並連線完畢之後,再建立一個完全相同的Inport。

結果Subsystem外的連線就斷了。或許有朋友會說,只要選取Subsystem用方向鍵微調一下就能完成連線。可是大兄弟,這樣最多只是半自動化。我們的目標是大批量一鍵式操作。

3. 後來我就思考,有沒有一種模塊先暫且替代一下Inport,我希望這個模塊跟Inport有相同的地位,但又不完全等同於Inport。

直到有一天,我的一個實習生離職的時候,留下了一大片覆蓋Inportshadow的模型。那陣子正在為刪Inportshadow頭疼不已,突然想到,Inportshadow不就能解決這個問題么。

這個方面比起布線的解決方法要簡單許多,也是當前我能力範圍內最有效的解決方式了。

那麼來看一下,這個新策略是如何解決之前的難題的

對於輸出埠的處理,原理上也是跟輸入埠類似,不過沒有所謂的shadow的概念。整體處理的效果動圖如下

到這裡,整個埠左置功能的操作邏輯已經講完了。

最後回到建模工具這件事上來。我很感謝公眾號的幾個朋友,無論是私信的形式還是發郵件的形式對建模工具表示支持,在這裡,我尤其感謝一位叫Liu Hao的工程師。

最後,抽個獎,送點實用的。公眾號留言點贊數最高的那位朋友,贈送任意三個功能的永久使用權。至於其中都有哪些功能,見下方表格。當然,對這個工具有興趣的朋友,可以通過郵件的形式得到這個工具

以上

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


推薦閱讀:

那些在職場上先你一步的人,靠的是什麼?
lesson73|excel中遇見不規範數據,該如何整?
熬夜完成任務是因為不會安排時間還是任務過於繁重?
寫給懶人的時間管理指南
怎樣在壓力下開始工作?

TAG:MATLAB | 高效工作 | simulink |