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,那么对应的变量则应在其它文件中已有定义,本文件可以对其进行访问。这项设置是为了方便若干个模型文件生成的代码文件可以链接在一起。
相关文章:

Matlab simulink建模与仿真 第十九章(生成C代码)
一、Configuration Parameters模型参数配置 1、仿真时间 (1)在Solver选项卡中可以设置仿真的起始时间和结束时间,一般起始时间设为0,而结束时间按需设置。 (2)如果希望仿真不会自动暂停(也就…...

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决
遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分:windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…...

Python中的文件编码:揭开字符世界的神秘面纱
引言 在计算机系统中,数据是以二进制形式存储的。而我们日常见到的文字、符号等信息,则需要通过特定的方式转化为二进制数据,这就是编码的过程。不同的编码方式决定了如何将字符映射成字节序列。选择合适的编码方案不仅能够保证信息传输的准…...

Vue3使用hiprint——批次打印条码
例图:打印编号 一、安装Vue-Plugin-HiPrint 要开始使用 Vue-Plugin-HiPrint,首先需要安装它。可以使用 npm npm install vue-plugin-hiprint --save 二、在main.js中引入 Vue-Plugin-HiPrint 在您的 main.js 或任何其他入口文件中,您可以按…...

智慧城市主要运营模式分析
(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…...

典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
先看代码与实现: 文件结构 triangle_area4.jsp <% page contentType"text/html;charsetUTF-8" pageEncoding"UTF-8" %> <html> <body> <%--<jsp:useBean>:用于在JSP中实例化JavaBean。在这里,…...

Vue引入js脚本问题记录(附解决办法)
目录 一、需求 二、import引入问题记录 三、解决方式 一、需求 我想在我的Vue项目中引入jquery.js和bootstrap.js这种脚本文件,但发现不能单纯的import引入,问题如下。 二、import引入问题记录 我直接这么引入,发现控制台报错TypeError: …...

数据清洗与数据治理的关系
数据清洗与数据治理是数据处理过程中的两个重要步骤,它们共同确保数据的质量和可靠性,以便于数据分析和决策支持。 数据清洗 数据清洗(Data Cleaning)是指识别并纠正或删除数据集中的不准确、不完整、重复或错误的记录的过程。数…...

树莓派pico上手
0 介绍 不同于作为单板计算机的树莓派5,树莓派 pico 是一款低成本、高性能的微控制器板,具有灵活的数字接口。主要功能包括: 英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器,弹性的时钟频率高达 133 MHz26…...

TypeError: load() missing 1 required positional argument: ‘Loader‘
标题TypeError: load() missing 1 required positional argument: ‘Loader’ 源码: 处理后: 顺利通过,由于yaml版本导致的问题...
根据软件架构设计与评估的叙述开发一套机器学习应用开发平台
案例 阅读以下关于软件架构设计与评估的叙述,回答问题 1和问题 2。 【说明】 某公司拟开发一套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&…...

【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理
1. 背景介绍 本文主要介绍一种利用多方安全计算MPC技术,实现VGG16的人脸识别模型,侧重于模型推理阶段,目前已经公开专利,因此以下内容的分享都是基于公开材料。该分享涉及到最小化多方安全计算(MPC)以及明密文混合计算的思想&…...

Python 入门教程(3)基础知识 | 3.7、pass 关键字
文章目录 一、pass 关键字1、定义与用法2、pass 关键字的用法2.1、函数定义中的占位符2.2、 类定义中的占位符2.3、条件语句中的占位符2.4、循环中的占位符 3、注意事项 一、pass 关键字 1、定义与用法 pass语句用作将来代码的占位符。当执行pass语句时,不会有任何…...

nodejs基于vue+express度假村旅游管理系统设计与实现7t82p
目录 功能介绍数据库设计具体实现截图技术栈技术论证解决的思路论文目录核心代码风格详细视频演示源码获取 功能介绍 实现了一个完整的农家乐系统,其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区…...

【裸机装机系列】16.kali(ubuntu)-安装linux和win双系统-重装win11步骤
推荐阅读: 1.kali(ubuntu)-为什么弃用ubuntu,而选择基于debian的kali操作系统 注意: 要先装windows,再装linux,不然linux的启动分区会被覆盖掉。为什么双系统要先装windows呢? 在一个新硬盘上࿰…...

基于TypeScript+React+AntDesign 的车辆车型管理页面
项目目录结构: my-app/├── node_modules/├── public/├── src/│ ├── App.js│ ├── VehicleForm.js│ └── index.js├── package.json└── README.md目录 1.创建项目 2.列表页面VehicleForm.js,预留接口使用axios 1.创建项目 npx crea…...

sentinel-dashboard数据 redis 持久化
概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来…...

【C++】——vector深度剖析模拟实现
低头赶路,敬事如仪 目录 1、模拟vector 1.1底层结构 1.2构造析构 1.3尾插扩容 1.4迭代器 1.5增删查改 1.6模拟中的注意事项 2、vector模拟补充 2.1迭代器区间构造问题 2.2memcpy深浅拷贝问题 2.3动态二维数组的模拟及遍历 1、模拟vector 想要模拟实现自…...

OpenCV特征检测(11)从一组点中检测直线的函数
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在一组点中使用标准霍夫变换查找直线。 该函数使用霍夫变换的一种改进方法在一组点中查找直线。 HoughLinesPointSet 是 OpenCV 中的一个函数&a…...

C++_24_适配器
A 函数对象 概念: 重载函数调用运算符的类实例化的对象,就叫函数对象.又名仿函数,函数对象和()触发重载函数调用运算符的执行。 作用: 为算法提供策略 示例: #include <iostream> using namespace s…...

算法.图论-并查集
文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板4. 并查集习题4.1 情侣牵手4.2 相似字符串组 1. 并查集介绍 定义: 并查集是一种树型的数据结构,用于处理一些不…...

elasticSearch常见命令及历史数据迁移
es这种非关系型数据库,感觉可视化效果不是很好,个人在操作中,习惯性通过简单的方式去访问。也是接触不久。只能出一些基操。共同学习记录,大家有好的操作也可留言备注。 1,常见命令 1)查询有哪些index&…...

WebLogic 漏洞复现
1、后台弱⼝令GetShell 默认账号密码:weblogic/Oracle123 weblogic常⽤弱⼝令:https://cirt.net/passwords?criteriaweblogic 这⾥注意, 单个账号错误密码5次之后就会⾃动锁定。 http://47.121.212.195:7001/console 2、登录后台后&#…...

web基础:域名、网页、HTML、web版本
文章目录 引言域名网站访问方式域名结构域名解析DNS解析过程 网页网页文件类型静态网页与动态网页常用动态网页编程语言 HTMLHTML 语法规则HTML 文件结构HTML 文件基本结构示例:常用 HTML 标签HTML文件基本结构 WEB版本 引言 web(World Wide Web&#x…...

【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频
练手项目推荐 1 智能小车 项目功能介绍: 本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。 1. 应用端,采用微信小程序作为应用端控制界面。在开…...

AWS注册时常见错误处理
引言 创建AWS账号是使用AWS云服务的第一步,但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题,包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …...

Spark-RDD持久化
一、Spark的三种持久化机制 1、cache 它是persist的一种简化方式,作用是将RDD缓存到内存中,以便后续快速访问,提高计算效率。cache操作是懒执行的,即执行action算子时才会触发。 2、persist 它提供了不同的存储级别࿰…...

vue2中使用tailwindCss 详细教程
1、先看官方文档:https://www.tailwindcss.cn/ 2、先安装:npm install -D tailwindcss ---------------通过 npm 安装 tailwindcss,然后创建你自己的 create your tailwind.config.js 配置文件。 npm install -D tailwindcss 3、初始化文件—npx tailwindcss init npx ta…...

机器视觉工程师一直做调试,维护岗位,想转岗软件方面C#从零开始,快则三年不到,慢则一辈子不会
其实不是每一家做视觉检测,或者是做设备必须要机器视觉工程师开发,其实公司对标准软件更感兴趣,主要非常高的性价比,省时省钱省人。所以这里有个问题,就是公司平台的重要性,首先他对开发是刚需,…...

【初阶数据结构】详解二叉树 - 树和二叉树(三)(递归的魅力时刻)
文章目录 前言1. 二叉树链式结构的意义2. 手搓一棵二叉树3. 二叉树的遍历(重要)3.1 遍历的规则3.2 先序遍历3.3 中序遍历3.4 后序遍历3.5 遍历的代码实现3.5.1 先序遍历代码实现3.5.2 中序遍历代码实现3.5.3 后序遍历代码实现 4. 统计二叉树结点的个数5.…...