simulink是基于时间序列的仿真系统,因此在我们进行单元测试的时候,往往会输入一组时间相关的数据,通过signal builder、signal editor我们可以做到快速地创建一组时间序列数据。但是有的时候,我们更加关注软件某些时刻的行为,且测试的触发取决于一定的先决条件。这个时候,我们就需要基于场景的测试了。在simulink中,test sequence/test assessment就很好地满足了这一需求。我们今天主要聚焦于使用test sequence完成场景测试的编辑,以及对test sequence进行代码生成。
使用test sequence
首先创建一个简单的模型,实现一个简单的功能:把输入乘以2之后再输出。这里我们可以选择通过创建harness来测试,在创建时勾选使用test sequence来驱动。
但是我们这里不选择自动创建,而是手动创建test sequence,这样我们能够更好地体会它的功能。
新建一个测试专用的模型,并把待测试的目标模型引用进来,再创建一个空白的test sequence模块。可以从引用模型的接口看到,该模型需要一个函数调用和一个输入数据进行驱动。我们在test sequence模块中完成这一工作。
打开test sequence模块,可以看到左侧栏是一些标识符的定义,右侧就是场景编辑界面。每一条测试都是由步骤名、步骤动作、转移条件、下一步骤组成,操作起来很像状态机,语句也都是matlab语言,非常自然。
下面尝试编辑一个场景:初始时(t=0),输入赋值为0;t = 1时刻,输入赋值为1,同时调用一次step函数;t = 5时刻,输入赋值为2,同时调用一次step函数。我们第一次写出来的test sequence如下所示。
连接好测试模型,设置为离散求解器,步长为0.2,仿真时间为10s,记录输出值以及事件。
运行仿真,查看sequence viewer如下。遗憾地发现,step函数并没有像我们预期的那样,在1s和5s时刻运行一遍。这是因为simulink还是基于时间序列的仿真,并不能真的只在1s和5s各自运行一次。test sequence只是提供了一些方便的场景编辑功能,在上面那种写法中,simulink维持了step在每个时刻进行调用的设置。对于数据也是同样的道理,虽然用户只设置了一次,但是往后的仿真时间步会延续该次设置值,并持续产生数据。
因此,正确的写法应该是如下所示。这样能够保证,step函数真的只在期望的时刻发生调用了。
对test sequence生成代码
test sequence模块无疑是非常好用的工具,那么是否可以应用到sil的测试场景中呢?答案是可以的。test sequence模块可以生成代码,这样我们就可以得到一个c代码的测试驱动程序。我们把上述test sequence模块拷贝到一个新的simulink模型中,并进行如下的配置,就可以生成我们想要的驱动代码形式了。
这里注意以下几点:
test sequence模块既输出了信号,也输出了函数调用,如果希望能够在代码中看到函数调用,就必须构造一个function call subsystem和function caller来承接这个函数调用,如下所示。
对于输出的信号如果有特殊的接口形式要求(比如某个全局变量,或者接口函数),那么可以通过simulink自定义存储类来实现,绑定此信号线和一个simulink.signal对象。像下面这样,可以让输出为一个全局变量x;也可以是一个标准的rte接口。
要注意驱动模型的仿真步长一定要和被测对象进行匹配。因为本test sequence模块是放在一个定速率模型中,其运行节奏是由步长决定的,代码生成中也可以看到,test sequence中所谓t == 1 ,after( 1 , sec)也都会转换到相应的步长上。因此如果步长配置错误会导致测试驱动的节奏错误。(额外提一点,包含test sequence的模型配置成导出函数模型或autosar模型的话,在生成代码上有困难。)
大数据时代如何使用数据分析来找女朋友?
苹果App Store现支持家庭共享订阅
连接器中的射频测试指的是什么
sip广播音频模块介绍
cv5200远距离WiFi模块应用:无线音视频实时传输
Simulink Test Sequence场景测试和代码生成步骤
SDRAM 的相关操作详细时序解析
什么是ADC ADC的主要技术参数及分类
江苏卫视《最强大脑》第四季或上演“人机大战”:百度大脑PK最强大脑
双输出DC/DC转换器实现更高电压输出
IT巨头抢车厂生意?不,他们靠云
华为搜索即将在国内亮相,搜索内容主要来自第三方合作伙伴
只用三极管跟阻容,大家怎么设计按键电平保持电路?
5G卫星物联网数据连接成功,将推动5G标准体系的完善
监听音箱_JBL监听音箱
5G融合发展按下快进键
致敬青年——开源的生力军
老牌电池企业进入“小”市场 小动力电池行业发展趋势明显
WTV380语音芯片在儿童电动牙刷应用,可降低企业30% BOM成本!
三基色LED驱动原理及IC线路设计