在Simulink模型做Test Squence測試時,工程師有時候希望測試用例能按照自己期望的條件來停止或暫停仿真,這個期望的特定條件,可以是時間達到,也可以是任何能達到的特定狀態。
具體實現方法如下:
1、在Test Harness測試用例中使用 Assertion 模塊暫停或者停止仿真
當模塊的輸入信號為零時,您可以使用 Assertion 模塊暫停仿真。在Assertion 模塊中使用 set_param
命令暫停仿真。
設置如下:
1、在您的模型中添加一個 Assertion 模塊。
2、將 Assertion 模塊連接到在所需的暫停時間變成零值的信號。
3、在 Assertion 模塊對話框中,清除 Stop simulation when assertion fails 復選框。輸入以下兩行命令作為 Simulation callback when assertion fails 的值:
set_param(bdroot,'SimulationCommand','pause'),
disp(sprintf('\nSimulation paused.'))
例子1:當仿真時間到5s時,暫停仿真。本例只是以時間達到為條件,這個條件也可以是從 Test Sequence 塊生成零(false)輸出,並將其饋送到"Asserion"模塊的輸入端。
如果想停止仿真,將pause改為stop就行。
2、在Test Harness測試用例中使用 Stop Simulation模塊停止仿真
當輸入為非零值時,Stop Simulation 模塊將使仿真停止。
例子2:當仿真時間到5s時,停止仿真。本例只是以時間達到為條件,這個條件也可以是從 Test Sequence 塊生成非零輸出(true),並將其饋送到" Stop Simulation"模塊的輸入端。
3、在Test Squence中使用coder.extrinsic 結合set_param暫停或停止仿真
在您希望暫停仿真那一行,插入如下代碼,就能達到目的。如果想停止仿真,將pause改為stop就行。
例子3:
此處注意:由於bdroot是char數組,而Simulink Test僅支持數字或邏輯類型,所以必須先用coder.extrinsic將set_param聲明為外部函數才行。
coder.extrinsic說明(來自matlab help):
coder.extrinsic(function)
將 function
聲明為外部函數。代碼生成器不為外部函數體生成代碼,而是使用 MATLAB® 引擎來執行調用。在執行期間,僅當 MATLAB 引擎可用時,此功能才可用。
4、在Test Squence中使用error停止仿真
您可以在所需的步驟中使用錯誤函數。 這將停止模擬並輸出自定義錯誤消息。
例子4:
在simulink的Diagnostic Viewer中顯示如下:
第4種不推薦使用。
5、開發"暫停"或"停止"狀態功能
我現在用的matlab版本是2020b,寄希望於mathworks公司早日在Test Squence中實現"暫停"或"停止"狀態功能。讓我們一起期待!!!