Simulink是美國Mathworks公司推出的一種強大的可視化仿真工具,現已應用到包括汽車、航空、工業自動化等領域。Simulink不僅提供了多種特定功能的模塊,還提供Simulink Function,Function Caller等模塊,便于用戶在開發過程中,定制化一些常用函數,擺脫了Simulink中固有Block的功能限制,有效的提升了開發效率。
這個功能無疑十分強大,但這卻給測試工作提出了很大的挑戰:受軟件開發架構限制,Function的定義可能放置在軟件底層,以便于上層軟件進行多次調用。但當用戶對上層軟件的單元層級進行測試時,往往面臨著無法調用底層定義的Function的窘態(有槍無彈)。此外,當客戶在測試底層單元模塊時,由于Function只有定義沒有被調用,往往無法對Function的內部邏輯進行測試(有彈無槍)。
針對這兩種測試場景,自動化的軟件動態測試工具——TPT提供了便捷的解決方案。
![poYBAGLrWJmAP1ukAABNdGfGtl4332.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWJmAP1ukAABNdGfGtl4332.png)
圖1模型
有槍無彈:
顧名思義,空有Function Caller而沒有Function。如圖1所示,如果要測試Calculate這個單元,這個單元調用了Function,而Function卻定義在更底層,針對這種情況,TPT支持函數的插樁,提供Function Caller的接口,模擬函數的返回值。
TPT支持函數的插樁,在對這種只有Caller沒有Function的層級(如圖2)進行測試時,非常高效。在TPT的Platform Configuration中提供了這樣的選項:Simulink Functions,如圖3:
![pYYBAGLrWLyAAfNHAABH-KQYTVE401.png](https://file.elecfans.com/web2/M00/5A/ED/pYYBAGLrWLyAAfNHAABH-KQYTVE401.png)
圖2單元模塊內部結構
![pYYBAGLrWNCAIK0QAAE43T8UauE659.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWNCAIK0QAAE43T8UauE659.png)
圖 3 Simulink Functions
回到圖4平臺配置窗口,加載好模型后 Import模型接口, TPT將以 server形式識別 callFunc函數,如圖5。
![poYBAGLrWNyAdaDLAAEsUPUT16o404.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWNyAdaDLAAEsUPUT16o404.png)
圖 4 Import模型接口、參數
![pYYBAGLrWOWABevvAADtSP7OhMs583.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWOWABevvAADtSP7OhMs583.png)
圖 5識別callFunc函數
該函數會被直接加載到 Functions中, 以便于在編寫測試用例時調用。
![pYYBAGLrWPaAZDENAACVshqy1X8003.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWPaAZDENAACVshqy1X8003.png)
圖 6 callFunc被加載到Functions中
可以在 Declaration Editor中添加一個 channel形式的本地變量return_Func模擬函數的返回值,然后編寫圖 8所示用例來驗證:
![pYYBAGLrWQKACHVAAACrvmX6XxQ134.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWQKACHVAAACrvmX6XxQ134.png)
圖 7添加channel本地變量
![poYBAGLrWQqASnQ9AADhoN1Ldjk726.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWQqASnQ9AADhoN1Ldjk726.png)
圖 8測試用例
運行結果和信號曲線如下圖所示,compare是簡單的評估,結果可見模型的輸出符合期望,由信號曲線可以觀察到local量的值即函數的輸出值。
![poYBAGLrWRWAFleUAACxagqfYlA845.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWRWAFleUAACxagqfYlA845.png)
圖 9測試結果
![pYYBAGLrWR2AN0MLAAEbW0wcis0819.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWR2AN0MLAAEbW0wcis0819.png)
圖 10 Signal Viewer觀測結果
有彈無槍:
上述方法并不能測到函數內部的邏輯,而實際上函數可以定義在模型的底層,如圖1所示的模型wind_drag,Function定義在底層,沒有對應的Function Caller,這就是有“彈”而無“槍”了。在單元測試階段想要測試該函數的邏輯,因其沒有相關的接口信息,測試工作無疑非常困難。
![poYBAGLrWSuAIwWiAABQk6Eh0CY957.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWSuAIwWiAABQk6Eh0CY957.png)
圖 11被測函數邏輯
自動化測試工具TPT提供了m文件的接口,可以在配置測試環境或者測試執行過程中進行一些預處理,這就為測試該函數邏輯提供了絕佳的途徑。
![pYYBAGLrWTWAW_9nAAEm3ynXg-Q034.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWTWAW_9nAAEm3ynXg-Q034.png)
圖 12 TPT提供的m文件接口
此處用m腳本編寫一個函數,可以在TPT中實現對Function的調用。該函數主要有兩個參數:
參數1:測試層級,可直接用TPT環境變量’${tpt.matlab.block.name}’
參數2:被調函數,例如:' F = wind_drag(Density,Speed) '
可以在 TPT\Platform Configuration\Original Model中可以編寫相應的代碼來加載m文件,并使用simulink_function_caller函數對模型中的SimulinkFunction進行調用,這無疑大大提升了測試的效率。
![pYYBAGLrWa6AGw8iAAB6kUc1hdI655.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWa6AGw8iAAB6kUc1hdI655.png)
圖 13 m文件加載及函數調用
![pYYBAGLrWbmARhZ8AABHR8vcXAI545.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWbmARhZ8AABHR8vcXAI545.png)
圖 14模型中自動配置FunctionCaller
依次在TPT中配置測試環境,導入接口時即可發現模型中出現了Simulink Function調用的相關接口信息。上一步中加載的m文件,實現了自動創建所測Function對應接口信息,以及Function Caller模塊的功能,這些新建的模塊和Function在同一層級,這樣就能夠對Simulink Function邏輯進行測試。
![poYBAGLrWcKAcHQBAADEYiZv43o099.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWcKAcHQBAADEYiZv43o099.png)
圖 15導入接口信息
編寫測試用例來測試該函數:
![pYYBAGLrWdCAFDyGAADCKZG9TW4717.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWdCAFDyGAADCKZG9TW4717.png)
圖 16測試用例
該函數是簡單的計算風阻的函數,,其中C取0.3,S取2.05,編寫評估驗證該用例:
![poYBAGLrWeOAO_81AACUfm2SMf0956.png](https://file.elecfans.com/web2/M00/5A/51/poYBAGLrWeOAO_81AACUfm2SMf0956.png)
圖 17測試評估
測試結果顯示模型輸出與函數運算結果一致:
![pYYBAGLrWfmABNAWAAC4z1MuiCM317.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWfmABNAWAAC4z1MuiCM317.png)
圖 18測試結果
兩者的信號曲線也是完全重合:
![pYYBAGLrWgOAXeLBAAFCUCWlQ_k692.png](https://file.elecfans.com/web2/M00/5A/EE/pYYBAGLrWgOAXeLBAAFCUCWlQ_k692.png)
圖 19信號曲線
總結
本文介紹了使用TPT測試Simulink Function模塊的兩種方案,TPT還支持MATLAB Function的測試。
PikeTec公司是全球知名的基于模型的嵌入式系統測試工具TPT的軟件供應商,總部位于德國柏林。北匯信息作為PikeTec在中國的獨家合作伙伴,致力于幫助中國客戶提升嵌入式控制系統的開發效率。目前,TPT已被眾多國內知名主機廠和零部件企業認可,在新能源(VCU/BMS/MCU)以及ADAS等領域中被廣泛應用。
-
TPT
+關注
關注
0文章
23瀏覽量
7010
發布評論請先 登錄
相關推薦
Simulink與 Simscape的結合使用
Simulink與 MATLAB 的結合使用 Simulink中的信號處理方法
Simulink模型仿真與分析技巧
Simulink自定義模塊開發教程 Simulink 在控制系統中的應用
Matlab R2016b創建STM32H743ZIT6控制工程當從Simulink庫中拖入TIMx模塊出現報錯的原因?
Vivado 使用Simulink設計FIR濾波器
路燈竟然還可以這樣玩-智慧路燈
電路仿真軟件simulink的工作原理
![](https://file1.elecfans.com/web2/M00/C3/B8/wKgaomXn4K-AWczbAALbOB5f1pE041.png)
評論