0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:鸣鸣锣的小屋 作者:Maxwell Luo 2023-07-22 10:02 次阅读

图片

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模型中,并进行如下的配置,就可以生成我们想要的驱动代码形式了。

图片

这里注意以下几点:

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

图片

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

图片

图片

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

图片

图片

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

    关注

    14

    文章

    1007

    浏览量

    83435
  • MATLAB语言
    +关注

    关注

    0

    文章

    12

    浏览量

    8677
  • simulink仿真
    +关注

    关注

    0

    文章

    75

    浏览量

    8526
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    2820
  • 求解器
    +关注

    关注

    0

    文章

    77

    浏览量

    4472
收藏 人收藏

    评论

    相关推荐

    基于base test如何来构造测试用例

    在设计仿真用例时,有限制条件的激励相比漫无目的的仿真更加有效的找出RTL的bug。因此,同一份测试方案,不同的sequence往往代表着不同的test_case。真正的测试用例都是基于
    的头像 发表于 09-19 09:16 2175次阅读

    CCS打开simulink生成的dsp代码

    simulink生成DSP代码,并成功下载到板子上后,用CCS选中生成代码文件确却不能打开,这是为什么?
    发表于 10-29 18:33

    Simulink模型生成代码

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件。最后将软件下载到STM32F407中,通过串口输出
    发表于 08-11 07:56

    通过一个简单的Simulink模型生成代码

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个Arduino路径中去编译软件。最后将软件下载到Arduino Uno中,通过串口输出
    发表于 08-18 06:22

    手把手教你SIMULINK代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.comFrancisZhao:手把手教你代码生成(下):SIMULINK代码
    发表于 08-18 06:03

    请问simulink代码如何生成2020a?

    请问simulink代码如何生成2020a?
    发表于 11-22 06:38

    MATLAB/SIMULINK生成嵌入式代码有哪些步骤

    昨天参加了Mathworks公司在东南大学举办的关于MATLAB的培训,内容是关于MATLAB/SIMULINK的嵌入式代码生成以及物理建模,在这里把代码
    发表于 12-16 07:16

    基于Simulink代码生成过程是怎样的?

    基于Simulink代码生成过程是怎样的?
    发表于 02-18 07:46

    Simulink 自动代码生成原理分享

    多出来一些目标系统可以选择。自定义目标系统是为了让Simulink生成代码能根据用户的需要,与底层驱动做集成。我们首先需要了解Simulink目标编译的流程,如下图,
    发表于 05-31 11:19

    MathWorks推出新款代码生成工具Simulink

      MathWorks 今日宣布 Simulink 代码生成工具箱已通过 Embedded Coder 嵌入到 Freescale 的新款 Motor Control Development Toolbox 中。该工具箱包括
    发表于 04-26 08:39 1247次阅读

    MBD的Simulink使用技巧:Simulink代码生成的基本概念(1)

    MATLAB/Simulink中一共提供三个代码生成的工具
    的头像 发表于 07-13 15:11 2291次阅读
    MBD的<b class='flag-5'>Simulink</b>使用技巧:<b class='flag-5'>Simulink</b><b class='flag-5'>代码</b><b class='flag-5'>生成</b>的基本概念(1)

    MBD的Simulink使用技巧:详解代码生成中的模型与代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续模型,往往需要通过最
    的头像 发表于 07-13 15:13 4569次阅读
    MBD的<b class='flag-5'>Simulink</b>使用技巧:详解<b class='flag-5'>代码</b><b class='flag-5'>生成</b>中的模型与<b class='flag-5'>代码</b>(2)

    利用Simulink自动生成STM32串口代码

    功能:利用Simulink自动生成STM32串口代码,在Keil中编译后直接下载到主芯片,实现串口通讯的功能。
    的头像 发表于 10-25 17:04 1527次阅读
    利用<b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b>STM32串口<b class='flag-5'>代码</b>

    simulink自动生成ROS代码

    当我们用simulink完成控制程序的搭建后,我们期望下一次可以直接对ROS进行控制,而不是每次都需要启动matlab和simulink,因此我们可以使用simulink代码
    的头像 发表于 11-15 17:53 647次阅读
    <b class='flag-5'>simulink</b>自动<b class='flag-5'>生成</b>ROS<b class='flag-5'>代码</b>

    Simulink自动生成代码现阶段的学习笔记

    在车载控制器的软件开发中,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。 下面记录了一下
    的头像 发表于 04-17 10:56 2539次阅读
    <b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b><b class='flag-5'>代码</b>现阶段的学习笔记