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.xdnf.cn/news/1541803.html

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

相关文章

Qwen大型语言模型系列的最新成果 ----Qwen2.5

通义千问2.5-7B-Instruct-GGUF 模型库 (modelscope.cn) apt install git-lfsgit lfs installgit clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct-GGUF.git

(done) 声音信号处理基础知识(3) (一个TODO: modulation 和 timbre 的关联)(强度、响度、音色)

来源:https://www.youtube.com/watch?vJkoysm1fHUw sound power 通常可以被认为是能量传输的速率 声源往所有方向传输的每时间单位能量 用 瓦特(W) 作为单位测量 Sound intensity 声音强度,每单位面积的 sound power W/m^2 人类实际上能听到非常小强…

Mybatis+Druid+MybatisPlus多数据源配置

MybatisDruidMybatisPlus多数据源配置 平常我们使用的是 properties 或者 yaml 来配置数据库的地址、用户名、密码等 但是这样只能配置一个数据源 现在我们想在一个项目里面配置多个数据源,那么我们就需要配置自己的配置类 配置类和配置文件 Mybatismysqldruid配置…

此框架你到底了解多少???

1.简述对Spring中IOC/DI的理解 IOC:控制反转,将创建和管理的对象的任务交给外部的Spring容器 DI:依赖注入,对象之间存在依赖关系,创建对象时,对其依赖的对应直接进行赋值 2.有哪些依赖注入的方式 基于注…

在线教程丨1 步生成 SOTA 级别图像,Hyper-SD 一键启动教程上线!

近年来,扩散模型在文生图任务中得到了广泛的应用,但其在实现高质量图像生成的过程中,通常需要多步推理进行去噪,这显然大大增加了计算资源成本。 针对于此,研究人员引入蒸馏算法,推出了扩撒感知蒸馏算法来…

超实用的 Typora 插件

🌼📚Typora 是一款高效、易用且跨平台的 Markdown 编辑器和阅读器,其具有小巧、快速、实时预览等特点,非常受大家的欢迎。今天给大家推荐一款如虎添翼的 Typora 插件(Typora Plugin),它可以通过插件增强 Typora 的功能…

什么是调制?FM 和 AM 有什么区别?

来源:https://www.bilibili.com/video/BV1pp411d7Zg/?spm_id_fromautoNext&vd_source7a1a0bc74158c6993c7355c5490fc600 一张图说明一切 原因:低频信号传输距离很近,高频信号传输距离较远。 为了把低频信号传出去,需要把低…

【数据结构C语言】【入门】【首次万字详细解析】入门阶段数据结构可能用到的C语言知识,一章让你看懂数据结构!!!!!!!

前言:欢迎各位光临本博客,这里小编带你直接手撕入门阶段的数据结构的C语言知识,让你不再看见数据结构就走不动道。文章并不复杂,愿诸君耐其心性,忘却杂尘,道有所长!!!&am…

图片马赛克处理(Java)

1.需求 给图片的指定区域打码给整张图片打码马赛克方格取色支持中心点取色和随机取色马赛克支持灰度处理 2.源码 package com.visy.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOE…

我们如何通过两个关键测试原则,进行自动化 Kubernetes 配置和Secret测试

现如今,一个上规模的应用程序几乎都会使用 Kubernetes 作为管理环境实现自动扩展、负载平衡(auto scaling, load balancing )等机制。与之相应的,我们通常会使用一个 repository 专门管理一个组织内部各项不同应用程序在各个环境的…

领夹麦克风怎么样,无线领夹麦克风哪个牌子好,家用麦克风推荐

​作为消费类电子产品,麦克风随着市场需求和技术进步,每年都有新产品系列涌现,特别是领夹麦克风,近年来经历了显著的市场变革和技术突破。从早期的新闻采访、节目录制和影视后期录音中常用的无线小蜜蜂话筒,到如今在网…

如何选择公司

前言: 了不起学弟:学长啊,我这手上有几个offer,有几家不同种类的公司,我这该怎么选啊。。。 了不起:这确实是在正在找工作的同学一定会遇到的问题,如何选择公司。那我就给你讲一讲吧。 正文&…

6张图掌握提示词工程师工作范围与工作技巧(提示词原理篇)

在人工智能的疆域中,提示词工程师扮演着至关重要的角色。他们精心设计的话语,是引导AI模型理解人类需求、激发创造力的关键。如同指挥官的号令,提示词工程师的每一个提问,都让AI的潜力得到释放,让技术与智慧的对话更加…

u-code-input结合u-keyboard实现支付密码+数字键盘

u-code-input结合u-keyboard实现支付密码数字键盘 一、需求描述、框架(一)技术框架(二)需求 二、效果图三、代码实现(一)u-code-input组件小改造(二)功能实现 一、需求描述、框架 &…

java 异常-Exception

异常的概念 Java 语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件可分为两大类 (1)Error(错误):Java 虚…

[Python]案例驱动最佳入门:股票分析 Python数据分析与可视化实战

在股票市场中,价格波动和投资决策紧密相连。通过数据分析,投资者可以识别市场趋势、价格波动背后的规律,并做出明智的投资决策。Python凭借其强大的数据处理和可视化功能,在金融市场分析中被广泛应用。本文将通过一个假设的股票市…

MySQL基础基础篇 - SQL

01 SQL通用语法 02 SQL分类 03 DDL语句 04 DML语句 05 DQL语句(单表查询) 05_01 学习总览 05_02 基本查询 05_03 条件查询 【应用实例】: 05_04 聚合函数 05_05 分组查询 05_06 排序查询 05_07 分页查询 【boss题目】: 05_08 执行顺序 06 DCL语句 【概…

如何设计出一个比较全面的测试用例

目录 1. 测试用例的基本要素(不需要执行结果) 2. 测试用例的给我们带来的好处 3. 用例编写步骤 4. 设计测试用例的方法 4.1 基于需求进行测试用例的设计 4.2 具体的设计方法 1.等价类 2.边界值 3.判定表(因果图) 4.正交表法 5.场景设计法 6.错误猜测…

JavaSE——String类

一、字符串构造 注意:String是引用类型,内部并不存储字符串本身。 有三种方式: public class Test1 {public static void main(String[] args) {// 使用常量串构造String s1 "hello java";System.out.println(s1);// 直接newSt…

20240921全国计算机二级Python考试(大头博士计算二级)

一、背景需求: 20240921我在上海应用技术大学44号楼考场参加2024年9月的全国计算机二级(Python语言程序设计)考试。 时隔多年,再次来到大学校园,恍若隔世 扫码找考场在哪里 考场须知 1、进考场,先刷身份证…