在Simulink模型做Test Squence测试时,工程师有时候希望测试用例能按照自己期望的条件来停止或暂停仿真,这个期望的特定条件,可以是时间达到,也可以是任何能达到的特定状态。
具体实现方法如下:
当模块的输入信号为零时,您可以使用 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"模块的输入端。
当输入为非零值时,Stop Simulation 模块将使仿真停止。
例子2:当仿真时间到5s时,停止仿真。本例只是以时间达到为条件,这个条件也可以是从 Test Sequence 块生成非零输出(true),并将其馈送到" Stop Simulation"模块的输入端。
在您希望暂停仿真那一行,插入如下代码,就能达到目的。如果想停止仿真,将pause改为stop就行。
例子3:
此处注意:由于bdroot是char数组,而Simulink Test仅支持数字或逻辑类型,所以必须先用coder.extrinsic将set_param声明为外部函数才行。
coder.extrinsic说明(来自matlab help):
coder.extrinsic(function) 将 function 声明为外部函数。代码生成器不为外部函数体生成代码,而是使用 MATLAB® 引擎来执行调用。在执行期间,仅当 MATLAB 引擎可用时,此功能才可用。
您可以在所需的步骤中使用错误函数。 这将停止模拟并输出自定义错误消息。
例子4:
在simulink的Diagnostic Viewer中显示如下:
第4种不推荐使用。
5、开发"暂停"或"停止"状态功能
我现在用的matlab版本是2020b,寄希望于mathworks公司早日在Test Squence中实现"暂停"或"停止"状态功能。让我们一起期待!!!
下面这份资源,对于想学习【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望也能帮助到你!