Simulink Test Sequence场景测试和代码生成步骤

电子说

1.2w人已加入

描述

simulink仿真

Simulink是基于时间序列的仿真系统,因此在我们进行单元测试的时候,往往会输入一组时间相关的数据,通过Signal Builder、Signal Editor我们可以做到快速地创建一组时间序列数据。但是有的时候,我们更加关注软件某些时刻的行为,且测试的触发取决于一定的先决条件。这个时候,我们就需要基于场景的测试了。在Simulink中,Test Sequence/Test Assessment就很好地满足了这一需求。我们今天主要聚焦于使用Test Sequence完成场景测试的编辑,以及对Test Sequence进行代码生成。

使用Test Sequence

首先创建一个简单的模型,实现一个简单的功能:把输入乘以2之后再输出。这里我们可以选择通过创建Harness来测试,在创建时勾选使用Test Sequence来驱动。

simulink仿真

simulink仿真

但是我们这里不选择自动创建,而是手动创建Test Sequence,这样我们能够更好地体会它的功能。

新建一个测试专用的模型,并把待测试的目标模型引用进来,再创建一个空白的Test Sequence模块。可以从引用模型的接口看到,该模型需要一个函数调用和一个输入数据进行驱动。我们在Test Sequence模块中完成这一工作。

simulink仿真

打开Test Sequence模块,可以看到左侧栏是一些标识符的定义,右侧就是场景编辑界面。每一条测试都是由步骤名、步骤动作、转移条件、下一步骤组成,操作起来很像状态机,语句也都是MATLAB语言,非常自然。

simulink仿真

下面尝试编辑一个场景:初始时(t=0),输入赋值为0;t = 1时刻,输入赋值为1,同时调用一次Step函数;t = 5时刻,输入赋值为2,同时调用一次Step函数。我们第一次写出来的Test Sequence如下所示。

simulink仿真

连接好测试模型,设置为离散求解器,步长为0.2,仿真时间为10s,记录输出值以及事件。

simulink仿真

运行仿真,查看Sequence Viewer如下。遗憾地发现,Step函数并没有像我们预期的那样,在1s和5s时刻运行一遍。这是因为Simulink还是基于时间序列的仿真,并不能真的只在1s和5s各自运行一次。Test Sequence只是提供了一些方便的场景编辑功能,在上面那种写法中,Simulink维持了Step在每个时刻进行调用的设置。对于数据也是同样的道理,虽然用户只设置了一次,但是往后的仿真时间步会延续该次设置值,并持续产生数据。

simulink仿真

因此,正确的写法应该是如下所示。这样能够保证,Step函数真的只在期望的时刻发生调用了。

simulink仿真

simulink仿真

对Test Sequence生成代码

Test Sequence模块无疑是非常好用的工具,那么是否可以应用到SIL的测试场景中呢?答案是可以的。Test Sequence模块可以生成代码,这样我们就可以得到一个C代码的测试驱动程序。我们把上述Test Sequence模块拷贝到一个新的Simulink模型中,并进行如下的配置,就可以生成我们想要的驱动代码形式了。

simulink仿真

这里注意以下几点:

  1. Test Sequence模块既输出了信号,也输出了函数调用,如果希望能够在代码中看到函数调用,就必须构造一个Function Call Subsystem和Function Caller来承接这个函数调用,如下所示。

simulink仿真

  1. 对于输出的信号如果有特殊的接口形式要求(比如某个全局变量,或者接口函数),那么可以通过Simulink自定义存储类来实现,绑定此信号线和一个Simulink.Signal对象。像下面这样,可以让输出为一个全局变量x;也可以是一个标准的RTE接口。

simulink仿真

simulink仿真

  1. 要注意驱动模型的仿真步长一定要和被测对象进行匹配。因为本Test Sequence模块是放在一个定速率模型中,其运行节奏是由步长决定的,代码生成中也可以看到,Test Sequence中所谓t == 1 ,after( 1 , sec)也都会转换到相应的步长上。因此如果步长配置错误会导致测试驱动的节奏错误。(额外提一点,包含Test Sequence的模型配置成导出函数模型或AUTOSAR模型的话,在生成代码上有困难。)

simulink仿真

simulink仿真

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分