在Matlab 2022a之后引入了Service Interface的建模元素,這讓Simulink模型擁有了向外部其他模型提供函數的能力,也為服務接口建模語義打下基礎。
“模型可以對外提供函數功能”
新的建模元素帶來一個問題:如何對服務接口進行測試呢?經過嘗試(在2022b環境下),如果對包含服務接口的模型直接創建test harness會造成Maltab的崩潰。原因是Simulink Test工具箱還未支持Service Inteface接口的測試模型自動生成,且沒有做好異常檢測,從而導致軟件崩潰。那么,我們如何對這類模型進行測試呢?
測試是可以進行的,只不過是思路要從直接測試新接口,轉變為通過包裝“樁模型”來間接測試。這算是針對Matlab當前特性的一種變通。
我們通過一個簡單的例子來了解這種方法。下面是目標被測模型的功能:實現一個特殊加法函數,該加法函數接受兩個被加數,返回被加數1、被加數2、固定偏置的和;該模型不直接求加數,而是借助外部的基礎加法函數。
“一個簡單的示例”
由于用到了Service Interface,使用System Composer來生成是最方便的事情。因此我們創建如下System Composer模型,配置好接口定義,并生成行為模型。
“借助System Composer模型快速生成目標模型”
“自動生成的行為模型,需要一點改造”
“按照功能需求完成改造”
下面就到了比較關鍵的一步,即:創建一個新的測試用的System Composer模型,并補充上游調用模型和下游響應模型。
我們初步創建如下模型,然后逐步完善它。
首先是完成服務接口的連接,然后生成對應行為模型。
對于Source模型,我們需要補充其功能,即實現一個簡單的加法。
對于Trigger模型,我們需要對外暴露函數參數的輸入接口。對于這個函數來說,需要u1和u2兩個參數。同時,我們也需要對外暴露函數的返回值,因此新建輸出接口y。同時不要忘記把子模型的接口連接到外部System Composer模型的根部,因為我們還是在借助System Composer來進行測試,如果不和System Composer模型建立聯系,那么測試數據是無法傳入的。
我們對此測試專用的System Composer模型創建test harness。
根據我個人的喜好,選擇test sequence來創建測試用例,可以很方便地創建函數調用,且基于場景測試。
于是我們就得到了一個測試對象。
點擊test sequence來編輯測試用例。這里需要對測試用例做如下說明:函數調用的方法是發出一個函數觸發信號,同時與之配套的函數參數也要及時賦值;采用 if t == xx ... end的語句來觸發函數調用,這是因為test sequence本質上是一個信號發生器,如果不限定時刻,test sequence會按照默認的時間節奏(如默認0.2s周期)反復產生信號,這對我們測試函數調度是不利的。
完成測試用例的編寫之后,我們還需要設置觀測。在我們關注的輸出信號線上打上log標簽,在模型層面全局打開log event選項來記錄函數調度情況。
運行仿真,可以看到這兩個圖標都提示有結果輸出。
我們打開Data Inspector,觀察輸出y值的情況。可以看到仿真符合我們的預期。
我們打開Sequence Viewer觀測函數調用情況,也符合我們的預期。
除此之外,根據實踐,如果System Composer的輸入輸出接口是Bus類型的話,需要使用Bus Element In和Bus Element Out(且設置為non-virtual)才能夠通過仿真;如果使用Inport和Outport(設置數據類型為Bus),仿真將會報錯。
以上就是測試帶服務接口的Simulink模型的方法。相比普通的Simulink模型測試方法,帶服務接口的模型測試更加繁瑣和復雜,希望在未來高版本的Matlab會有更加用戶友好的方式解決此問題。
-
比較器
+關注
關注
14文章
1651瀏覽量
107230 -
仿真器
+關注
關注
14文章
1018瀏覽量
83764 -
觸發器
+關注
關注
14文章
2000瀏覽量
61165 -
信號發生器
+關注
關注
28文章
1475瀏覽量
108773 -
MATLAB仿真
+關注
關注
4文章
176瀏覽量
19931
發布評論請先 登錄
相關推薦
評論