基於模型開發(MBD)的童鞋們,應該都知道有個simulink模塊叫signal builder,即用來給模型模擬提供輸入的信號源。

最開始學習simulink的時候,我是這樣做得(估計很多人有類似經歷):都會拿一個Constant模塊做輸入,通過調整Constant模塊的Value去觀測Scope中的波形。對於信號稍微複雜一點,可能會拿幾個step 模塊(或者pulse generator)做複雜的加減運算,以得到期待的輸入信號。記得那時,一邊從scope端查看輸入運算的反饋,一邊調整step的設置,到最後,會為自己基於這種機智拼湊所得到的期待輸入興奮不已,覺得只要給自己一個step模塊,多麼複雜的應用場景都可以搞定(有時候井底之蛙也有自己的開心)。

Fig 1 Add Step

可是,伴隨著短暫的興奮,是耗費大量體力腦力的重複改動,而這種改動似乎從前到後都沒有留下什麼痕跡。基於這種失落感,可以理解第一次見到signal builder的激動了。

Fig 2 Signal Builder

與前面提到的粗鄙的實現方式相比,signal builder的高明在於,它可以記錄你的輸入給定,方便後期頻繁的回歸測試。但後來的後來發現,自己似乎高興的太早了,signal builder的界面,操作起來好像和預期的不太一樣:為什麼在一條線上增加一個點需要摁住shift 鍵+滑鼠左鍵,而且此時這條線不能被選中,如果被選中,你是加不上點的;為什麼我想把點加到整零整點處這麼麻煩,需要先加點,再去調整點的坐標,就不能搞一個滑鼠的特殊點識別嗎;為什麼當我想改變某條線段的坐標時,我需要使用滑鼠左鍵點擊一次該線段,再用左鍵點擊一次該線段(雙擊兩次是選不上的),然後才能輸入線段的坐標值呢;為什麼我想同步放大信號都實現不了呢(如一開始我的時間軸是0-10s,我在4s從0變到1,在6s從1變到0,當我把時間軸改為0-20s時,為什麼4s還是4s,就不能額外提供一個同步放大功能讓他變成8嗎?)。

Fig 3 不能同步放大

我相信很多MBD的用戶不願意手動在signal builder中添加測試輸入,上面可能是一部分原因。現在大家都傾向於先在Excel中設計測試輸入,然後再導入到signal builder或者直接繞過signal builder 將Excel中測試向量導入到test manager中。不錯,這幾年,MathWorks在大力推simulink test,不斷更新相關的工具,如test manager, test harness,test sequence,甚至新增了signal editor模塊,可是,與此對比,我發現signal builder似乎還是沒有得到什麼更新,唉,一聲嘆息送給signal builder,你似乎要被simulink拋棄了。

signal builder也有自己的可取之處:這個模塊有對應的API函數,可以儘可能的支持自動化測試的相關工作,如你可以利用它的API將Excel中的testcase自動導入到signal builder中,而且signal builder中可以建立與測試輸入對應的需求信息,如果你懶得手動一條條去建立,你也可以將這些需求和testcase 在excel中綁定,然後一併導入到signal builder中來,這一點要強於test manager哦,目前test manager 的requirement這一項還不能支持自動化set呢(我目前使用版本是2018a)

一年前為了利用signal builder做模型測試 並且不願意被它蠢哭,自己做了個signal builder 輔助小工具,以GUI界面的方式,用來提高對signal buildr 的操作效率。

Fig 4 Signal Builder Assistant

該工具解決了前文提到l的部分問題。如signal builder 只能通過copy 的形式增加group

Fig 5 AddGroup

如signal builder 不能實現同步放大功能。

Fig 6 TimeFactor

該工具還包括一些增加點操作,group的批量操作,快速選擇所需顯示信號以及不同testcase所對應的模擬輸出對比等。

該工具的實用性確實有限,因此只有我自己偶爾用用。其實我自己也知道這些操作都是隔靴搔癢,所以曾經想定製signal builder這個工具,後來發現signal builder是不開源的,只提供部分API供用戶使用。做為本科畢業設計畫了三張A0圖的機械學科選手,內心還是十分懷念AutoCAD的靈巧操作,這種感覺近來愈加強烈,索性自己嘗試著實現。對標AutoCAD和Signal Builder,做出來一個簡陋的初版,以拋磚引玉。

先來一張效果圖:

Fig 7 testcase_plot

如上面動圖所示,滑鼠會識別網格交點。如果所找的網格不在圖中,可以滑動滑鼠滾輪對作圖區域進行放大和縮小(在界面點擊滑鼠右鍵可以切換X方向和Y方向的放大和縮小),見下圖:

Fig 8 zoom

通過上述動圖顯示,手繪testcase(基本不需要鍵盤的參與)比在signal builder中加點然後拖拉線段要方便一些。當然,其實斜線段也支持的,就不放圖了。

可以使用滑鼠移動上述所繪製線段。首先使用滑鼠左鍵選中線段,鬆開後移動滑鼠即可使線段移動。線段會選擇最近的網格線或者網格線之間的中點作為最後的位置。當然如果圖中未顯示所需的網格時,可以滑動滑鼠滾輪尋找。

Fig 9 testcase_moveline

該工具主要利用了滑鼠事件進行實現。看了下,代碼太醜,就先不放了。

這個工具尚需要不斷優化,爭取可以應用在以後的工作中,如果工具不幸半路夭折,也無遺憾,誰讓自己當初抵擋不住內心的衝動呢?

後面的想法是,根據test harness中的signal builder自動生成testcase畫板,見下圖,然後手繪testcase,完成後再利用腳本寫入signal builder中。當然,必須要考慮group的批量操作。

Fig 10 create unit test plot panel

疏漏之處,還請指出。

推薦閱讀:

相關文章