Simulink壁咚(一)——What and How

目录

一、前言

二、Simulink 知多少

三、滤波算法

四、Model Verification

五、Model Coverage

六、Simulink测试实例

七、Simulink Test

八、Test Manager

九、Test Harness 

 十、 学习


一、前言

Simulink从2017b以后更加工程化和实用化,基于MBD的功能日趋完善,从需求定义、模型链接,测试用例,模型测试,代码生成等等,那对于初识它的朋友可能需要先了解一些前期知识,然后在项目和工程中实战积攒经验,变成一个老手。

二、Simulink 知多少

派生对象包括Simulink Signal ,Simulink Parameter, Simulink Bus, Simulink Alias, Simulink Variant, 创建方式包括在脚本以构造函数的方法创建,在模型浏览器创建。

Simulink Parameter是Simulink 参数对象 , 在工程中常以配置参数的方式设置; Simulink Lookup Table是与lookup table模块相对应的数据类型,插值点和插值点对应数据的集合。Breakpoint是插值点的集合。Simulink Signal是信号,与信号线相关联。Numeric/Alias Type是其他数据类型的别名。Bus是总线,类似于结构体。Simulink.Variant有两种状态满足条件激活,未激活是0激活是1。

 如何对Bus中的各元素进行初始化,使用Bus Assignment 。

如何保存工作空间数据?点击数据工作空间,然后Ctrl+S即可。可以保存.mat或者m文件。

数据字典即数据源,模型运行时不需要重新加载。使模型和数据字典关联,模型运行时自动从数据字典里搜索数据。数据字典,可回溯,因为数据字典不仅记录数据,还记录对数据的修改行为和版本。如何创建数据字典?

 手动创建数据字典?


Simulink.data.dictionary.create('DataDictionary\dic2.sldd');

obj=Simulink.data.dictionary.open('DataDictionary\dic2.sldd');

importFromBaseWorkspace(obj,'varList',{'Sig','Var'});

listEntry(obj)

saveChanges(obj)

close(obj)

 Bus针对结构体,Mux可以合成向量,Mux要求多个元素具有相同的数据类型。

Selector是Signal Routine里面的模块,主要用于提取向量或者元素。

Weighted Sample Time Math与采样时间相关的模块

Goto模块用于连接两个断开连线的端口,Goto设置为Global表示全局可见(其他子系统都可见),设置为Scoped表示定义范围内可见,此时要结合Goto Tag Visibility模块一起使用,表示该层级及该层级以下的子系统均可以识别。

Multiport Switch 可以实现switch case功能。

Signal Specification 模块是虚拟模块,允许您指定连接到其输入和输出端口上的信号的属性,如果指定的属性与其端口上连接的模块所指定的属性冲突,Simulink® 软件将在编译模型时显示错误消息,在模型的仿真中不起任何作用。

零阶保持器(ZOH,Zero-Order Hold)是将输入信号每过一个采样时间更新一次,并保持到下一次采样,多用于将连续信号离散化。

Signal Builder可以生成各式各样的信号,也可以从workspace和外部导入。

1.创建excel文件

 2.导入到SB中:打开设置,选择File下Import from File

 如何查看模型模块的执行顺序?

 如何设置多速率模型?打开Block parameter参数,设置为原子,然后设置采样时间[0.2,0.1]表示偏置为0.1后开始,速率为0.2。

三、滤波算法

3.1 均值滤波

均值滤波是典型的线性滤波算法,是指用当前像素点周围nxn个像素值的均值来代替当前像素值。

当前是指设置一个缓冲区Buf,存储上N个时刻的值,然后取平均值作为当前值。

3.2 中值滤波

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值滤波的方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列,选取中间的数值。

3.3 低通滤波

一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。滤波系数越小,滤波结果越平稳,灵敏度越低;滤波系数越大,灵敏度越高,滤波结果越不稳定。

四、Model Verification

模型检查模块主要分为基本用途,防止报错,底层实现,结果观测,梯度检测提示

Check Discrete Gradient 模块用于检查本时刻和上一时刻差值。

 Assertion模块对是否为零进行验证,为零报错。

Check  Static Range 检查输入信号的最大最小值,超出范围报错。

五、Model Coverage

执行覆盖度Execution Coverage,EC是最基本的覆盖形式。对于每个项目,执行覆盖度确定项目是否在仿真期间执行

决策覆盖度Decision Coverage,DC:分析表示模型中决策点的元素,例如 Switch 模块或 Stateflow 状态。对于每个项目,决策覆盖度确定通过仿真所遍历的项目的仿真路径总数的百分比

条件覆盖度Condition Coverage,CC:分析输出其输入(例如,逻辑运算符模块)和Stateflow转移的逻辑组合的模块。当测试用例导致模型中逻辑模块的每个实例的每个输入以及转移的每个条件在仿真期间至少为真一次,在仿真期间至少为假一次时,测试用例可实现完全覆盖。条件覆盖度分析报告测试用例是否完全覆盖了模型中每个模块。

收集模型的覆盖度时,可能无法实现 100% 的条件覆盖度。例如,如果指定短路逻辑模块,通过在配置参数的覆盖度窗格中选择将 Simulink 逻辑模块视为短路,您可能无法实现该模块的 100% 条件覆盖度。

修正条件决策覆盖度MCDC:Simulink Coverage 软件修正的条件/决策覆盖度分析扩展了决策和条件覆盖度功能。它分析输出其输入和 Stateflow 转移的逻辑组合的模块,以确定测试用例测试逻辑模块输入和转移条件的独立性的程度。

  • 当一个输入的变化(独立于任何其他输入)导致模块输出发生变化时,测试用例可实现模块的完全覆盖。
  • 当至少一次条件的更改触发每个条件的转移时,测试用例可实现 Stateflow 转移的完全覆盖。

在模型配置中点击Coverage,勾选Enable coverage analysis,在Coverage metrics中选择具体的覆盖度类型,运行模型后会自动弹出覆盖度窗口。

 

 

 六、Simulink测试实例

具备成为VIP的条件1&&2&&(3||4);1年龄满18岁,2至少充过100元,3游戏年龄至少1年,4被举报次数少于3次

使用Signal Builder作为测试输入,设置输入及输出VIP

 简单的模型设置为:

 子系统为:

 测试输出结果:

 打开Simulink Data Inspector

 七、Simulink Test

Test Sequence && Test Assessment

使用Test Sequence 模块可以指定测试步骤,行为,转移。当输入时间序列步骤时,应当提供时间定义的测试向量。一个test sequence 可以包含测试步骤,且测试步骤是富有层级的,根据Tag进行跳转。编写示例:

 Test Assessment与Test Sequence非常类似,但是作为评估仿真测试场景,步骤来使用,关键词是Verify

示例1:

模型如下:

 设置TestSequence

 设置Test Assessment:

 示例2:

1.打开sltestTestSequenceExample

2.右击shift_controller建立Test Harness,Sources  and Sink 选择Test Sequence

  3.添加常量Limit设置为2,并编写序列步骤

 4.将仿真时间设置为15s,然后运行test harness

 Simulation Inspector

 示例3:

八、Test Manager

TestManager的组件包含下面的关系:Test File >Test Suite > Test Case > Simulation = Baseline,

Test File对应模型文件,Test Suite 对应子系统,Test Case 对应子功能。

simulation test 不依赖于其他的文件,只要TestHarness可以执行通过,那么simulation test也可以通过。Baseline test依赖外部文件,比如期望输入和输出。

模型:

simulation test

 然后对每一个子系统建立一个test harness,建立4个harness, constant 作为输入。

九、Test Harness 

Baseline test 测试模型如下:

 该子系统的功能是对值进行有效性验证:

 对该子系统创建Test Harness:

 创建Signal Builder信号Group1和Group2:

Test File:一个Test File对应一个模型文件

Test Suite:每一个测试文件中,都可以定义若干个Test Suite,可以把同一类型或同一功能的测试用例放到一个Test Suite中
Test Case:每一个Test Suite中,可以定义若干个Test Case,Test Case中规定了测试详细的执行信息。实际测试执行的时候也针对每一个Test Case进行测试的
Create Test Case from External File:测试用例的具体信息从excel模板中提取,这篇文章重点介绍以这种形式来创建测试用例

 在Harness中打开Test Manager, 创建TestFile并对Test Suit和Test case命名,在case中“System Under Test”选择模型及harness 文件名,Baseline Criteria中加载期望输出,(如果不会,可以点击Capture给你创建一个示例),如果有多个输出,要对列的名字加以命名。

 在“Iterations”栏中点击“Auto Generate”,并在右上角+号栏选择Baseline,选择相应的文件

 点击运行即可生成测试结果,也可以导出测试报告Report。

 TestCase 设置项描述:

TAGS:可以给一个标签名,比如按照功能,测试类型等,方便以后批量查找测试用例
DESCRIPTION:可以给描述测试用例的测试步骤,方法等,方便理解
REQUIREMENTS:可以和需求关联。Matlab现在有“Simulink Requirements”这个Toolbox,可以在里面写需求文档,将需求和模型,以及对应的测试用例关联起来,以满足A-ASPICE或者ISO26262所规定的软件开发流程中的可追溯性的要求。
SYSTEM UNDER TEST:里面设置了要被测试的模型,或者针对模型中所创建的某一个Test Harness模型进行测试

PARAMETER OVERRIDES:这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的,里面列出了某个测试用例中,需要改变的参数

CALLBACKS:里面分为3个不同时刻的,运行我们想要的脚本

INPUTS:定义测试的输入信号,这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。另外这边有两个选项可以勾选,如果勾选“Include input data in test result”的话,在最后的结果中,也会显示输入信号。如果勾选“Stop simulation at last time point”的话,仿真测试到最后一个输入点的时候就会停止。

SIMULATION OUTPUTS:可以在里面再选取模型中logged的信号作为观测量
CONFIGURATION SETTINGS OVERRIDES:可以在仿真测试的时候对原模型的设置进行覆盖
BASELINE CRITERIA:里面设置了期望值,以及比较仿真测试结果和期望值的一些参数。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。但可以点击Edit在excel文件中修改。对比数据时,可以设置绝对误差,相对误差,时序领先误差和时序滞后误差。

ITERATIONS:迭代测试。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。会根据测试用例数自动生成,表示这个测试会根据不同的配置重复进行

COVERAGE SETTINGS:统计覆盖度的设置。如果需要统计模型的覆盖度的话,就勾选“Record coverage for referenced models”和“Record coverage for system under test”

test Sequence基本知识:

ramp(et)根据测试步执行的时间返回值,也就是测试步执行时间,可以用这个函数来线性变化输出,et表示的是当前测试步执行的时间

Heaviside(x):创建一个阶跃信号,x<0时输出0,x>0时输出1

swatooth(x)创建一个锯齿波,要指定测试步骤内的锯齿波周期数,请将此运算符与经过时间(et)运算符一起使用;sawtooth(et/10) 10s一个周期的锯齿波

square(x)创建周期为1且范围为-1到1的方波。在区间0<=x<1中,square(x)返回1表示0<=x<0.5,返回-1表示0.5<=x<1。square(et/10) 10s一个周期的方波

triangle(x)创建周期为1且范围为-1到1的三角形波。在区间0<=x<0.5时,三角形(x)增加。三角波和锯齿波的区别在于三角波的上升和下降时间相等;triangle(et/10)10s一个周期的三角波

verify(expression,errorMessage)为失败的verify语句返回指定的错误消息。如果在Test manager中运行测试,错误消息将显示在仿真日志中。如果在Test manager之外运行测试,则诊断查看器中将显示该消息

在实时环境中,验证语句失败不会产生警告。但是,如果在Test manager中运行实时测试用例,则失败将显示在测试用例结果的验证语句部分。还可以使用getVerifyRuns访问有关验证运行的信息

verify(expression,identifier,errorMessage) 比上面一个多了标识,

verify(x > y && z > 10,'TestReq1:bothGreater','x, y, and z are %d,%d,%d',x,y,z)该验证语句的结果以标签TestReq1:bothCreate开头,如果测试失败,则以errorMessage开头

assert(expression)对逻辑表达式求值。如果assert语句的计算结果为false,仿真将停止并返回错误。assert(expression,errmsg)为失败的assert语句返回指定的错误消息字符串(errmsg)

test Harness总结:

1.如果验证的模型比较简单,直接上输入:Signal Builder仿真,输出 baseline excel

2.模型比较复杂也可以用上述方法,Signal Builder使用外部excel作为输入,建立多个group,然后使用迭代的方法进行测试,输出 baseline excel

3.建立testharness使用test sequence 作为输入,拷贝之前建立的测试用例excel,每一个case对应一个testHarness。

4.使用import和output,这样的话建立testFile使用模板来建立比较快速

5.使用Constant 作为输入,使用Model Verification来对比;直接在Constant中建立测试用例即可,每一个case对应一个testHarness

 十、 学习

命令窗口demo,doc,help xx。

Video Portal Main Page - MATLAB & Simulink (mathworks.cn)

首页 - MATLAB中文论坛 (ilovematlab.cn)

参考:

MATLAB Simulink的各种模型覆盖度 - 知乎 (zhihu.com)

使用Simulink Test进行单元测试 - 知乎 (zhihu.com)Test Sequence与Test Manager联合测试Simulink模型_赞哥哥s的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/138.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB绘制ROC曲线

ROC曲线(Receiver Operating Characteristic Curve) 1 简介 ROC曲线是用于评估二元分类模型&#xff08;如Logistic回归&#xff09;表现优劣的一种工具&#xff0c;其横轴表示假阳性率&#xff08;false positive rate&#xff0c;FPR&#xff09;&#xff0c;即实际为负例但…

MySQL事务详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;Spring事务和MySQL事务详解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: …

vue3 构建属于自己的组件库dxui

文章目录前言第一步&#xff0c;通过vue-cli搭建vue3框架第二步&#xff0c;构建一个入口&#xff0c;将所有的组件统一管理第三步 修改package.json &#xff0c;对组件进行单独打包第四步输入命令行开始打包第五步&#xff0c;修改package.json文件&#xff0c;为npm 发布做准…

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-1 通关详解 (附靶机搭建教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Python 基础教程【1】:Python介绍、变量和数据类型、输入输出、运算符

本文已收录于专栏&#x1f33b;《Python 基础》文章目录1、Python 介绍2、变量和数据类型2.1 注释的使用2.2 变量以及数据类型2.2.1 什么是变量&#xff1f;2.2.2 怎么给变量起名&#xff1f;2.2.3 变量的类型&#x1f3a8; 整数 int&#x1f3a8; 浮点数&#xff08;小数&…

教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数

如何成为一个集雷切&#xff0c;写轮眼侦查和拷贝与一身的卡卡西&#xff0c;下面教你&#xff01; 目录 第一式——雷切&#xff01; strtok 第二式——写轮眼侦查&#xff01; strerror函数 第三式——写轮眼拷贝&#xff01; memcpy 模拟实现memcpy函数 &#x1f60e;…

Hadoop集群搭建

文章目录一、运行环境配置(所有节点)1、基础配置2、配置Host二、依赖软件安装(101节点)1、安装JDK2、安装Hadoop(root)3、Hadoop目录结构三、本地运行模式&#xff08;官方WordCount&#xff09;1、简介2、本地运行模式&#xff08;官方WordCount&#xff09;四、完全分布式运行…

多线程的风险 --- 线程安全

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;低头赶路&#xff0c;敬事如仪&#xff1b;自知自心&#xff0c;其路则明。 目 录&#x1f378;一. 线程不安全&#x1f379;二. 线程不安全的原因&#x1f…

看完书上的栈不过瘾,为什么不动手试试呢?

一.栈的基本概念1.栈的定义栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。其中注意几点&#xff1a;栈顶&#xff08;Top&#xff09;&#xff1a;线性表…

【C语言蓝桥杯每日一题】—— 单词分析

【C语言蓝桥杯每日一题】—— 单词分析&#x1f60e;前言&#x1f64c;单词分析&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &#x1f60a;作者…

三天吃透MySQL面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

C 语言编程 — 线程池设计与实现

目录 文章目录目录线程池&#xff08;Thread Pool&#xff09;tiny-threadpool数据结构设计Task / JobTask / Job QueueWorker / ThreadThread Pool ManagerPublic APIsPrivate Functions运行示例线程池&#xff08;Thread Pool&#xff09; 线程池&#xff08;Thread Pool&am…

Spring Cloud学习笔记【初识微服务基础框架搭建】

文章目录微服务架构介绍架构图核心组件Spring Cloud版本对应基础框架搭建1.建造父工程2.建造子工程user工程建造auth工程建造RestTemplate 实现微服务远程调用RestTemplate 介绍配置RestTemplate测试远程访问总结微服务架构 介绍 微服务架构是一种将应用程序拆分成小型、自治…

设计模式之工厂模式

工厂模式是设计模式中的经典模式&#xff0c;工厂模式又可分为以下三种类型&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 这三种模式可以理解为同一种编程思想的三个版本&#xff0c;从简单到高级不断升级。本文将着重介绍简单工厂模式。 简单工厂模式 简单工厂模式&…

哈佛与冯诺依曼结构

1. 下图是典型的冯诺依曼结构 2. CPU分为三部分&#xff1a;ALU运算单元&#xff0c;CU控制单元&#xff0c;寄存器组。 3. 分析51单片机为何能使用汇编进行编程 51指令集&#xff08;Instruction Set&#xff09;是单片机CPU能够执行的所有指令的集合。在编写51单片机程序时&a…

Python打包成exe,文件太大问题解决办法(比保姆级还保姆级)

首先我要说一下&#xff0c;如果你不在乎大小&#xff0c;此篇直接别看了&#xff0c;因为我写过直接打包的&#xff0c;就多20M而已&#xff0c;这篇就别看了&#xff0c;点击查看不在乎大小直接打包这篇我觉得简单的令人发指 不废话&#xff0c;照葫芦画瓢就好 第1步&#…

Linux- 系统随你玩之--网络上的黑客帝国

文章目录1、前言2、TCPDump介绍2.1、问题来了&#xff1a; 所有用户都可以采用该命令吗&#xff1f;2.2、抓包原理2.3、特点2.3.1、参数化支持2.2.2、 TCP功能3、 服务器安装Tcpdump3.1、安装3.2、检查安装是否正常。4、tcpdump 命令4.1、常用功能选项4.2、输出内容5、实操5.1、…

初识C++需要了解的一些东西(2)

&#x1f601;关注博主&#xff1a;翻斗花园第一代码手牛爷爷 &#x1f603;Gitee仓库&#xff1a;牛爷爷爱写代码 目录&#x1f30d;内联函数&#x1f315;内联函数概念&#x1f316;内联函数特性&#x1f313;auto关键字(C11)&#x1f31e;类型别名⭐️auto简介☀️auto的使…

【数据库】数据库查询(进阶命令详解)

目录 1.聚合查询 1.1聚合函数 COUNT函数 SUM函数 AVG函数 MAX函数 MIN函数 1.2GROUP BY子句 1.3HAVING 2.联合查询 2.1内连接 2.2外连接 2.3自连接 2.4子查询 3.合并查询 写在前面&#xff1a; 文章截图均是每个代码显示的图。数据库对代码大小写不敏感&am…

java ArrayList源码分析(深度讲解)

ArrayList类的底层实现ArrayList类的断点调试空参构造的分步骤演示&#xff08;重要&#xff09;带参构造的分步骤演示一、前言大家好&#xff0c;本篇博文是对单列集合List的实现类ArrayList的内容补充。之前在List集合的万字详解篇&#xff0c;我们只是拿ArrayList演示了List…
最新文章