Matlab simulink建模与仿真 第十九章(生成C代码)

news2024/11/16 12:29:59

一、Configuration Parameters模型参数配置

1、仿真时间

(1)在Solver选项卡中可以设置仿真的起始时间和结束时间,一般起始时间设为0,而结束时间按需设置。

(2)如果希望仿真不会自动暂停(也就是没有人为干预的情况下仿真持续进行),可以将仿真结束时间设为“inf”。

2、仿真步长

(1)Simulink仿真本身是一个数值求解的过程,在做软件开发时,基本都需要将Simulink模型转换为嵌入式软件,那么求解器选项的Solver选项卡需要按照下图所示配置,固定步长值取决于任务调度周期。

(2)Type有固定步长Fixed-step和可变步长Variable-step两个选项,相比于固定步长,可变步长可以根据系统每时每刻的情况自动得出当下的最佳步长,既不会使仿真的速度太慢,也不会丢失太多结果的精度。

3、数据输入/输出

(1)在Data Import/Export选项卡中可以配置数据的输入和输出,这里的输入和输出是针对Simulink视角的数据传输而言的。

(2)Load from workspace栏下可配置从工作区中载入Simulink的变量,这个配置了解即可,因为在工作区中定义的变量默认可以直接被Simulink中的模块使用,不需要做其它冗余的操作(这个在前面章节的一些举例中有体现)。

(3)Save to workspace or file栏下可配置Simulink保存到工作区或者文件中的变量,这个配置也不进行过多介绍,前面的章节中有介绍将数据输出到工作区或文件的模块。

4、诊断

        在仿真的过程中难免会遇到报错,在参数配置中可对各种非预期情况的处理进行设置,可以选择报错并中断仿真(error),或者仅给出警告(warning),亦或是不作任何提醒和处理(none)。

5、使用脚本对参数进行配置

(1)可以用set_param命令来配置模型参数,该命令至少有三个参数(均为字符串类型,要用单引号包含),第一个参数是模型文件名(无后缀),第二个参数是命令中的参数名,第三个参数是需要配置的参数值(针对勾选与否的配置,其参数值为“on”/“off”),后两个参数是成对的,可以不止一对,其意义是为某个参数配置相应的值。

(2)命令使用参数名的查看方法如下图所示,右键对话框中的参数名,点击“What’s This”,即可看到该参数在命令中使用的参数名(command-line)。

(3)可以将若干条参数配置命令写进M文件中,这样,在启动MATLAB时直接运行该M文件,就可以一键自动配置参数。(下例中模型文件名为“untitled”)

set_param('untitled','StartTime','0.0'); %仿真开始时间
set_param('untitled','StopTime','10.0'); %仿真结束时间
set_param('untitled','SolverType','Fixed-step'); %仿真步长是否可变
set_param('untitled','FixedStep','0.01'); %设置仿真步长
%set_param无法直接设置求解器Solver

二、四个测试简介

1、MIL测试

(1)‌MIL测试是模型在环测试(Model in the Loop),通过纯软件仿真的形式,主要验证模型功能的正确性,是否满足设计的功能需求,旨在尽早发现问题。‌

(2)MIL测试通过指定输入和期望结果,将仿真结果与期望结果进行比对,根据判定标准验证模型是否正确。此外,还需要进行模型覆盖率度量,确保满足一定的覆盖率标准,如语句覆盖、分支覆盖等。这种测试方法在嵌入式系统开发的初期阶段及建模阶段中进行,是一种设计验证方法,不同于硬件在环测试(HIL),后者主要用于代码验证。

(3)MIL测试的目的是在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足了设计的功能需求。由于MIL测试是基于模型驱动的,因此它允许在非常早期的设计阶段识别和纠正错误和漏洞,这对于提高软件质量至关重要‌。

(4)MIL测试的实施通常涉及自动化测试工具,这些工具支持多种语言编写测试用例,即使是不了解编程语言的用户也可以基于表格或图形创建和设置测试程序和测试用例。此外,这些工具还支持测试序列的灵活参数化,使得测试项目维护简单,修改参数即可实现多车型复用,提高了测试效率和灵活性‌。

2、SIL测试

(1)Simulink自动生成C代码的过程可能会出错,为了检查生成的C代码是否有误,可以进行SIL测试。

(2)‌SIL测试是软件在环测试(Software in the Loop),它‌是一种在软件环境中验证控制系统有效性的测试方法。它通过运行系统环境中的车辆模型和虚拟ECU(电子控制单元)中的I/O模型来模拟控制器所需的各种传感器信号,并能接收台架传感器的信号和虚拟ECU发出的控制信号,这种测试方法通过将虚拟ECU的代码信息(包括基础软件和硬件参数等)与系统环境模型相连接,最终实现闭环仿真对控制系统进行测试验证。

(3)SIL测试使用与MIL相同的测试用例,查看对于相同的测试用例,其输出是否与MIL阶段一致。

3、PIL测试

(1)PIL测试是处理器在环测试(Processor-in-the-Loop testing),用于对处理器上的嵌入式软件进行测试和验证,这些软件之后将被用于ECU。

(2)PIL测试的控制算法通常在一个叫评估板的物件上执行,有时也会在真正的ECU上执行,这两种变体都使用控制器中的真实处理器,而不是像在软件在环测试中使用PC。

(3)PIL测试提供了一个可在专用微控制器上验证实际控制算法的框架,通过软件在环仿真进行了验证,保证了PIL测试平台的准确性和保真度。利用了嵌入式代码生成功能,通过对生成的代码进行最少的修改就可以进行控制器设计和测试,并且在开发过程中无需使用真正的硬件,从而避免了安全隐患和损坏昂贵硬件的任何风险。

4、HIL测试

(1)‌HIL测试是硬件在环测试(Hardware-in-the-Loop Testing),它是一种嵌入式软件测试技术,通过使用软件模型来模拟真实的测试系统,并连接来自控制器的真实信号,使控制器误以为自己安装在了组装好的产品中,从而进行测试和设计迭代。

(2)HIL测试通过接入真实的控制器,采用或部分采用实时仿真模型来模拟被控对象和系统运行环境,实现整个系统的仿真测试。实时仿真硬件(也称HIL测试机柜)用于尽可能逼真地模拟真实被控对象,以有效地“欺骗”控制器,使其以为它正在控制一个真实的被控对象。

三、Simulink模型生成C代码

1、模型参数设置

(1)求解器选项卡中需要将Type设置为固定步长,Solver设置为离散求解器,并根据任务调度周期设置固定步长的具体值。

(2)在代码生成选项卡中需要将系统目标文件更改为ert.tlc,具体方法见下图(必须是嵌入式代码生成器Embedded Coder)

(3)可以选择在生成代码的同时生成一份报告,并自动打开。

2、模型编译操作

(1)这里以下图所示的模型文件为例进行编译。

(2)按下Ctrl+B,或者点击下图红箭头指示的按钮,即可开始编译,如果编译成功,将会生成一份报告。

(3)C文件代码的可读性不强,一般终点关注与C文件同名的H文件,其中往往提供了非常多的接口给其它文件调用。

3、数据管理

(1)数据字典的创建步骤:

①右键模型编辑区空白处,选择“Model Properties”。

②原本模型文件中的变量默认可以来自工作区,这里需要改为数据字典。

(2)信号对象的添加与使用:

①数据字典创建完成后,打开模型浏览器,可以在字典中添加信号对象(信号线上的量,名称要与信号线上的标注相同,这样才能一一对应),相应地,然后要左击信号线,选择“Properties”,在弹出的对话框中勾选“Signal name must resolve to Simulink signal object”,这样,信号名就解析为模拟链接信号对象。

②在嵌入式软件中,针对每一个信号对象,都需要为它们定义明确的数据类型(值得一提的是,由于浮点数占用的空间较大,且可能没有浮针对点数较高效的处理器,所以基本不使用浮点类型),并将存储类设置为ExportedGlobal,这样,它就成了一个可供外部使用的全局变量。

③以上步骤完成后,对模型文件进行编译(信号对象不可关联多个信号,所以例子中Y信号线只能有一个信号,故需要对模型进行修改),代码文件会发生一些变化。

(3)参数对象的添加与使用:

①在上面模型的基础上进行修改,在输入U后面新增一个增益模块,增益系数(增益模块的Gain参数)命名为K,此时K是个未定义的变量。

②打开模型浏览器,可以在字典中添加参数对象(模块中的参数量,名称要一一对应)。

②在嵌入式软件中,针对每一个参数对象,都需要为它们定义明确的数据类型(基本不使用浮点类型),并将存储类设置为ExportedGlobal,除此之外还需要设置初始值,这样,它就成了一个可供外部使用的全局变量。

③以上步骤完成后,对模型文件进行编译,代码文件会发生一些变化。

(4)表格对象的添加与使用:

①在上面模型的基础上进行修改,在正弦波发生器后面新增一个一维查表模块。

②打开模型浏览器,可以在字典中添加表格对象。

③和之前介绍查表模块一样,对表格对象可以配置其维度、表格内容、各维度的数据类型等,本例中以一维表为例。

④双击查表模块,将Data specification更改为“Lookup table object”,并将其后的Name属性配置为之前建立的表格对象的名称,这样,查表模块就可以直接和表格对象绑定。

⑤点击下图红箭头指示的三个点,打开表格对象的专属对话框,为结构类型名称命名(总之不要为空,命名规范与变量名相同),否则无法通过编译甚至仿真。

(5)前面举例都是将对象的将存储类设置为ExportedGlobal,这是为了其它文件可以访问到本文件中对应的变量,如果设置为ImportedExtern,那么对应的变量则应在其它文件中已有定义,本文件可以对其进行访问。这项设置是为了方便若干个模型文件生成的代码文件可以链接在一起。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制

代码地址 如果对你有帮助请给个start,本项目会持续更新,目标是做一个可用的快速微服务开发平台,成为接私活,毕设的开发神器, 欢迎大神们多提意见和建议 使用的都是spring官方最新的版本,版本如下&#xff1…

通过UV快速计算品牌独立站网络流量

背景: 品牌独立站项目交付过程中,我们需要为客户提供“云资源” 成本报价,其中“计算资源” 及CPU、内存、存储 参数相对固定,而互联网网络成本需要进行评估报价,以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…

专业的屏幕录像和视频编辑的软件Camtasia 2024安装激活图文教程

‌Camtasia 2024是一款专业的屏幕录像和视频编辑的软件套装。它由TechSmith公司开发‌,提供了强大的屏幕录像、视频剪辑和编辑、视频菜单制作、视频剧场、视频播放等功能。 Camtasia Studio 2024是该软件套装的核心部分,支持在PC和Mac平台上运行&#xf…

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中,黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后,黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

构建高可用和高防御力的云服务架构:从DDoS高防到PolarDB

引言 随着互联网技术的飞速发展,网络环境已经成为我们日常生活和商业活动中不可或缺的一部分。然而,这种依赖也带来了新的挑战,尤其是在网络安全领域。其中,分布式拒绝服务(DDoS)攻击因其破坏性强、难以防…

OpenStack Yoga版安装笔记(十三)neutron安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括: 环境安装 (已完成)OpenStack…

VS2022中的调试

目录 前言: 使用: 调试: 前言: 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。…

【Linux学习】基本指令其一

命令行界面 命令行终端是一个用户界面,允许用户通过输入文本命令与计算机系统进行交互。 比如Windows下, 键入winR,然后输入cmd,就可以输入文本指令与操作系统交互了。 Windows有另一个命令行界面Powershell,它的功能比cmd更强大…

关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例

关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例 有源蜂鸣器与无源蜂鸣器区别有源蜂鸣器无源蜂鸣器模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明 有源、无源蜂鸣器代码驱动总结 有源蜂鸣器与无源蜂鸣器区别 有源蜂鸣器与无源蜂鸣器区别在于是否有振荡源。 有源蜂鸣器即…

Redis——redispluspls库通用命令以及String类型相关接口使用

文章目录 通用命令get,setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get,set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

Hadoop的安装

文章目录 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。二. 环境变量三. 配置 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。 随后点击下载即可 由于Hadoop不直接支持Windows系统,因此,需要修改一些配置才能运行 二. 环境变量 三. 配置 进…

《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)

目录 一、最终实现后,效果如下。 (1)简单介绍本游戏项目(待完善) (2)运行效果图(具体大家自己可以试) 初始运行情况。 手动更换背景图。 通过子弹攻击敌机,累…

如何在Mac上查看剪贴板历史记录

重点摘要 macOS 内建的剪贴簿查看器可以透过 Finder 存取,但只能显示最近一次复制的内容,而且重新开机后就会清除。若要更进阶的剪贴簿管理,第三方 app 像是 CleanClip 提供了强大的功能和更好的组织方式。CleanClip 提供了全方位的剪贴簿历史管理解决方案,支援各种内容类型和…

HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看(持续更新......) HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门…

线性表一(vector)

#include<bits/stdc.h> using namespace std; vector<int> a(5,2);//定义一个初始长度为5&#xff0c;每个元素值为2的可变数组 vector<char> b(3);//定义一个初始长度为3&#xff0c;每个元素为默认值的可变数组 vector<int> v;//定义一个长度为0的可…

mxnet系统架构

mxnet系统架构 MXNet 是一个高性能、灵活的深度学习框架&#xff0c;最早由李沐&#xff08;Mu Li&#xff09;等人开发&#xff0c;并且得到了 Amazon 的支持。它支持多种语言&#xff08;包括 Python、Scala、C、R、Julia、Perl 等&#xff09;&#xff0c;并以其灵活的编程…

【保奖思路】2024年华为杯研赛B题完整代码建模过程(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/XzdIsvbiM0https://qm.qq.com/q/XzdIsvbiM0请根据附件WLAN网络实测训练集中所提供…

python多继承 - 子类指定父类

菜鸟教程-面向对象 https://www.runoob.com/python3/python3-class.html 子类内指定父类 父类名称.__init__(self,参数1&#xff0c;参数2&#xff0c;...) 子类对象指定父类 class Parent1:def my_method(self):print("Parent1s my_method")class Parent2:def my_…

基于uni-app的计算机类面试宝设计与实现(毕业论文)

目 录 1 前言 1 1.1 研究目的与意义 1 1.2 研究现状 1 1.3 论文结构 2 2 可行性分析 3 2.1 经济可行性 3 2.2 法律可行性 3 2.3 技术可行性 4 2.4 市场可行性 4 2.5 可行性分析结论 4 3 系统需求分析 4 3.1 用户需求分析 4 3.2 系统功能分析 5 3.3 系统性能需求分析 6 4 概要设…