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

一、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.rhkb.cn/news/432316.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第55天 | 寻找存在的路径

寻找存在的路径 题目描述 给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。 你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。 输入描述 第一行包含两个正整数 N 和 M,N 代表节点…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像,针对苹果 M 芯片 Mac 用户(ARM 架构)提供良好支持。Tiny11 内置了众多优化特性,如更小的安装体积和更快的启动速度,特别适合有特殊需求或老机型的用户。用户可…

打卡软件——人脸识别综合实现Pro

目录 概要 代码说明 1. 导入库 2. 加载预训练的车辆检测模型 3. 读取视频 4. 初始化变量 5. 逐帧处理视频 6. 处理帧 7. 处理检测结果 8. 计算框的坐标 9. 检查车辆中心是否已计数 10. 绘制检测框 11. 显示车流量 12. 退出条件 13. 释放资源 整体代码 效果展示…

过敏星人能否好好呼吸?约克VRF中央空调从呼吸开始全方位守护

对于包括向先生在内的过敏人群来说,秋天可能是比春天更难熬的坎儿,防不胜防的过敏原,例如空气中飘散的花粉、螨虫、霉菌、宠物毛发和皮屑、屋尘等,因为空气质量问题频频引发的过敏症状,令他们苦不堪言,止不住地打喷嚏、眼睛越揉越痒、起床后就开始擦鼻涕…… 如何才能远离这些…

免费的高质量、美观的甘特图模板

呈现您的项目规划新高度,精选几款高品质、视觉出众的甘特图模板。 甘特图Excel模板-Ganttable系统风格甘特图Excel模板-专业甘特图Excel模板-浅蓝色甘特图Excel模板-深灰色 这些 Excel 甘特图模板均源自 Ganttable 甘特图AI工具的智能生成与导出。利用 Ganttable&a…

Win32动态库介绍及全局函数导出

Windows操作系统中,库分为动态链接库(dll)和静态链接库(lib) 动态库是Windows中实现代码共享的一种方式。它是一个二进制式文件,不可单独运行,需要调用方调用才能运行。在Windows中,动态库可以被多种编程语言所支持。 静态链接库不…

线下线上陪玩系统要多少钱?该怎么搭建?

关于线下线上陪玩系统的价格,由于开发成本、功能复杂度、系统规模以及定制需求等因素的不同,价格差异较大,一般在几千元至几万元不等。具体价格需要根据实际需求和预算进行商议和定制。 搭建线下线上陪玩系统大致可以分为以下几个步骤&#…

论文阅读- On the Feasibility of Fully AI-automated Vishing Attacks

https://arxiv.org/pdf/2409.13793 目录 摘要 INTRODUCTION II. GOALS AND THREAT MODEL III. VIKING A. Architecture B. Interaction with the LLM C. Audio processing D. Call processing E. Implementation IV. EVALUATION METHODOLOGY A. Experiment design …

外卖霸王餐在对接api过程中需要注意哪些方面的问题?

在对接外卖霸王餐 API 过程中,需要注意以下几个方面: 一、合法性与合规性 1.遵守法律法规: 确保你的业务和对 API 的使用符合当地的法律法规,包括消费者权益保护法、电子商务法等。了解并遵守与食品相关的法律法规,…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0926)

十四、文章分类添加编辑 [element-plus 弹层] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 点击显示弹层 准备弹层 const dialogVisible ref(false)<el-dialog v-model"dialogVisible" title"添加弹层" width"30%">…

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…

从零开学C++:二叉搜索树

引言&#xff1a;在本篇博客当中&#xff0c;我们会将关于二叉树的进阶结构——二叉搜索树&#xff0c;强大的搜索效率让它在数据结构当中变得十分重要&#xff0c;让我们一起来进行学习吧&#xff01; 更多有关C的知识详解可前往个人主页&#xff1a;计信猫 一&#xff0c;二叉…

无人机避障——4D 毫米波雷达 SLAM篇(一)

做无人机避障相关工作&#xff0c;3D毫米波避障测试顺利后&#xff0c;开始做4D毫米波雷达无人机避障遇到4D雷达点云需要进行处理的问题&#xff0c;查阅文献&#xff0c;发现以下这篇文章中的建图方法应该为后续思考的方向&#xff0c;特此将这个开源项目进行复现和学习&#…

《论分布式存储系统架构设计》写作框架,软考高级系统架构设计师

论文真题 分布式存储系统&#xff08;Distributed Storage System&#xff09;通常将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据&#xff0c;存储服务器成为系统性能的瓶颈&#xff0c;也是可靠性和安全性的焦点&#xff0c;不能满…

vue3.0 + element plus 全局自定义指令:select滚动分页

需求&#xff1a;项目里面下拉框数据较多 &#xff0c;一次性请求数据&#xff0c;体验差&#xff0c;效果就是滚动进行分页。 看到这个需求的时候&#xff0c;我第一反应就是封装成自定义指令&#xff0c;这样回头用的时候&#xff0c;直接调用就可以了。 第一步 第二步&…

双十一好物清单分享?五款超值的数码好物分享!

双十一马上就来啦&#xff0c;大家是不是都等着在这个时候买点好东西呀&#xff1f;数码产品可是咱们生活里少不了的&#xff0c;能让咱们的生活更方便、更有意思。我这儿给大家挑了五款特别值的数码好东西&#xff0c;准备来跟大家分享分享&#xff01;快来看看有没有你中意的…

【JAVA基础】JAVA类的拷贝使用示例

文章目录 一、框架介绍二、性能对比三、易用性对比四、使用示例&#xff08;一&#xff09;Apache Commons BeanUtils 使用例子1、第一个例子&#xff1a;两个对象属性个数和名称一样&#xff0c;复制过程2、第二个例子&#xff1a;属性个数和名称不一样&#xff0c;复制过程 &…

UnityHub下载任意版本的Unity包

1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可

Mora:多智能体框架实现通用视频生成

人工智能咨询培训老师叶梓 转载标明出处 尽管已有一些模型能够生成视频&#xff0c;但大多数模型在生成超过10秒的长视频方面存在局限。Sora模型的出现标志着视频生成能力的一个新时代&#xff0c;它不仅能够根据文本提示生成长达一分钟的详细视频&#xff0c;而且在编辑、连接…