AVL Cruise与Simulink联合仿真(通过MATLAB DLL方式)

  最近毕业设计需要用到AVL Cruise与Simulink进行联合仿真,分析汽车模型的经济性。下面介绍一下我所知的AVL Cruise与Simulink联合仿真的几种方式,它们各自的优缺点,以及DLL方式联合仿真的具体配置过程。我这里用的MATLAB软件版本是2021a,Cruise软件版本是2019.2,电脑操作系统是Windows11。

这是一个目录0.0

  • 1.AVL Cruise与Simulink联合仿真的不同方式及各自优缺点
    • 1.1MATLAB DLL方式
    • 1.2MATLAB API方式
  • 2.DLL联合仿真MATLAB配置过程
    • 2.1在MATLAB里安装编译器
    • 2.2在MATLAB中安装DLL的必要文件并设置编译器
  • 3 AVL Cruise和MATLAB DLL联合仿真时快速生成Simulink模型的方法
  • 4.Simulink编译DLL文件
  • 5.联合仿真

1.AVL Cruise与Simulink联合仿真的不同方式及各自优缺点

1.1MATLAB DLL方式

该方式是先把SImulink中建立的模型编译成一个DLL文件,之后把这个文件内嵌到Cruise软件中作为一个模块,并进行仿真的方法。
优点:因为是内嵌到Cruise软件中了,因此运行时不需要调用Simulink,运行速度非常快,且是由Simulink模型编译生成的dll文件,在Cruise软件里看不到具体的模型是如何搭建的,比较保密,不会泄露控制模型信息。
缺点:同样是因为内嵌到Cruise软件中了,因此运行时无法实时查看模型内部的参数,不适用于调试Simulink控制模型,因为改一点模型就需要编译一次dll文件,且无法有效的定位模型中出错的地方。

1.2MATLAB API方式

该方式是Cruise在前台,处于主要地位,联合仿真时打开对应的Simulink模型,由Cruise向Simulink发送必要的参数以及指令,在Simulink中完成计算后把结果返回到Cruise中,继续进行下一步。该方法和DLL方法的优缺点正好反过来了。
优点:可以实时查看Simulink模型中的参数变化,便于调试,更改模型后不需要重新编译dll文件就能进行联合仿真。
缺点:没有内嵌到Cruise模型中,运行时需要实时调用Simulink,因此运行速度极慢无比,且必须要拿到Simulink控制模型源文件才能进行联合仿真,容易泄露信息。

2.DLL联合仿真MATLAB配置过程

2.1在MATLAB里安装编译器

  1. 编译dll文件是需要编译器的,我的MATLAB版本没有自带编译器,因此需要外部安装一个,这里我选择了TDM-GCC-64编译器,该安装包我已经上传到了CSDN资源库,可以从这里下载。下载完成后进行安装,这里因为我的电脑操作系统就是64位的,因此安装的版本选择了64位的:
    在这里插入图片描述
    期间安装程序会自动去网上下载必要的安装文件,因为可能是外网,因此下载速度会很慢,如果安装失败,建议换个网络后重新安装。
  2. 在计算机处右键单击,选择属性按钮:
    在这里插入图片描述
  3. 点击高级系统设置:
    在这里插入图片描述
  4. 在弹出的窗口中选择环境变量:
    在这里插入图片描述
  5. 点击系统变量下的新建按钮:
    在这里插入图片描述
  6. 在弹出框中,变量名处输入MW_MINGW64_LOC,变量值处输入刚刚TDM-GCC-64的安装路径C:\TDM-GCC-64,之后点击确定:
    在这里插入图片描述
    可以看到系统变量里已经有了刚刚加入的环境变量,注意查看此处显示的环境变量名和值是否为MW_MINGW64_LOC和安装目录。

2.2在MATLAB中安装DLL的必要文件并设置编译器

  1. 先把MATLAB软件的当前目录展开至Cruise软件安装目录下的AVL\R2019.2\CRUISE\matlab\Install_DLL文件夹,并双击打开Install.m文件,如下图所示:
    在这里插入图片描述
  2. 打开后点击运行按钮,结果如下图所示:
    在这里插入图片描述
  3. 在下方的输入框中输入mex -setup后按回车:
  4. 提示如下图所示,代表已经成功的为C语言编译选择了编译器:
    在这里插入图片描述

3 AVL Cruise和MATLAB DLL联合仿真时快速生成Simulink模型的方法

  1. 在Cruise软件里拖入MATLAB DLL模型后,进行数据总线连接,这里输入信号连接了Cockpit里的Velocity信号,输出信号连接了Engine里的Desired Torque信号,如下图所示:
    在这里插入图片描述
    在这里插入图片描述

  2. 双击MATLAB DLL模块,打开设置菜单,切换到Description of Data Bus选项卡,并点击下方的update按钮:
    在这里插入图片描述

  3. 可以看到这里更新了连接到MATLAB DLL模块的信号,双击每个信号中Unit的空白处,对该信号进行必要的设置,比如设置单位等:
    在这里插入图片描述

  4. 点击下拉框,可以选择对应的项目和单位,比如这里选择Velocity,km/h,并点击OK完成设置:
    在这里插入图片描述

  5. 依次设置完每个信号的单位,点击最下方的Create mdl-File,即可创建含有对应输入输出信号的Simulink模型:
    在这里插入图片描述
    在这里插入图片描述

  6. 该模型保存在Cruise模型根目录下的userdata文件夹中,其中这个后缀为.mdl的文件就是刚刚生成的Simulink模型文件:
    在这里插入图片描述

4.Simulink编译DLL文件

对生成的SImulink文件进行必要的建模之后,就开始进行编译DLL文件的准备工作,具体如下所示:

  1. 点击SImulink模型中最上面的APPS,再点击SImulink Coder打开编译器,如果红色框处没有SImulink Coder,那么就点击右侧的下拉框,在里面寻找SImulink Coder并点击打开:
    在这里插入图片描述
  2. 点击Settings:
    在这里插入图片描述
  3. 在Slover选项卡中按标红所示的参数进行设置:
    在这里插入图片描述
  4. 在Data Import/Export选项卡中,设置Format为Array:
    在这里插入图片描述
  5. Code Generation选项卡中按如下图所示进行配置:在这里插入图片描述
  6. 完成上述设置后,点击Build按钮进行编译DLL文件:
    在这里插入图片描述
  7. 左下角显示Ready并且没有报错后即完成了DLL文件的编译:
    在这里插入图片描述

5.联合仿真

  1. 在Cruise软件中打开DLL模块,点击图中所画的按钮,选择之前上一步编译Simulink文件得到的后缀名为.dll的文件,点击OK并确定,即完成了DLL模块的配置。
  2. 保持页面在Sub-System 001页面的情况下,点击上方的options并选择Layout,设置编译平台为Win64,并点击OK确定。
    在这里插入图片描述
  3. 切换到计算中心,点击开始计算按钮,即可开始运行设定好的仿真任务,实现联合仿真。

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

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

相关文章

运行Spring Boot项目失败?显示java: 无法访问org.springframework.boot.SpringApplication,让我来看看~

idea项目运行报错截图: (1)查看错误提示“类文件具有错误的版本 61.0, 应为 52.0”,61.0对应的是jdk17,52.0对应1.8。 通过这个网址可以查询版本: https://stackoverflow.com/questions/9170832/list-of-ja…

Linux文本三剑客

文章目录 一、文本搜索工具--grep1、简介2、工作原理3、语法格式4、选项介绍5、实例测试5.1、-i选项5.2、-v选项5.3、-n选项5.4、-c选项5.5、-o选项5.6、-B选项5.7、-A选项5.8、-C选项5.9、-w选项5.10、-E选项5.11、-e选项 二、流编辑器--sed1、简介2、工作原理3、语法格式4、选…

AI换脸原理(6)——人脸分割介绍

一、介绍 人脸分割是计算机视觉和图像处理领域的一项重要任务,它主要涉及到将图像中的人脸区域从背景或其他非人脸区域中分离出来。这一技术具有广泛的应用场景,如人脸识别、图像编辑、虚拟背景替换等。 在计算机视觉(CV)领域,经典的分割技术可以主要划分为三类:语义分…

程序员侠李飞

李飞,这位程序员侠,肩负着消灭黑暗势力的使命。他的代码如同一把利剑,切割着虚拟世界中的恶意程序,保护着数字领域的和平。他的键盘敲击声如同战鼓的轰鸣,警示着那些企图侵入系统的黑客。在代码的世界里,他…

【离散数学】集合上二元关系性质判定的实现(c语言实现)

实验要求 关系矩阵的初始化和打印 我们将关系矩阵存入一个二维数组中,因为集合元素个数不会超过5个所以就用一个5行5列二维数组来表示。 在我们得到了集合元素个数之后我们就可以对数组进行0,1随机赋值 //初始关系矩阵 void init_matrix(int array[][5], int n) {…

后端开发面经系列 -- 地平线C++一面

地平线C一面 公众号:阿Q技术站 来源:https://www.nowcoder.com/discuss/608452700895711232 1、分布式事务是否了解? 分布式事务是指涉及多个数据库或应用之间的事务操作,需要确保这些操作要么全部成功,要么全部失败…

Dynamic Extraction of Subdialogues for Dialogue Emotion Recognition

对话情感识别的子对话动态提取 摘要1. 介绍2 相关工作2.1 对话上下文建模2.2 常识知识 3 方法3.1 问题定义3.2 模型概述3.3 特征提取模块3.4 依赖性建模3.5 交互式子对话提取模块3.6 重要性增强的多头自注意力模块3.7 子对话框主题提取模块3.8. 分类模块 四、实验4.1 数据集4.1…

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择: Open in Terminal 在生成的控制台输入: mvn idea:module 回车便自动生成iml文件啦! 双击下主目录就可以看见啦

javax.net.ssl.SSLException: Received fatal alert: protocol_version已经解决

起因: 在帮别人讲解项目时,将项目的tomcat配置完,点击运行后,报错,信息如标题。 解决办法: 在csdn百度问题,得到的方法主要有几个: 1.jdk要配置在1.8以上; 2.数据库地…

【MySQL】ON WHERE 和 ON AND 的区别

1. 查询语句语法规则 “[ ]” 包含的内容可以省略; “{ }” 包含的内容必须存在; DISTINCT: 设定 **distinct** 可以去掉重复记录; AS: 表明或字段名过长时,可以用 **AS** 关键字起别名,也可…

06.配置邮件报警

配置邮件报警 我的授权码:HCHNVOAENURLOACG 1.定义发件人 密码是163邮箱的授权码 2.配置收件人 我就配置收件人是qq邮箱了 3.启动动作 验证邮件发送成功

Redis如何避免数据丢失?——AOF

目录 AOF日志 1. 持久化——命令写入到AOF文件 写到用户缓冲区 AOF的触发入口函数——propagate 具体的实现逻辑——feedAppendOnlyFile 从用户缓冲区写入到AOF文件(磁盘) 函数write、fsync、fdatasync Redis的线程池 AOF文件的同步策略 触发的入口函数——…

特斯拉擎天柱机器人:工厂自动化的未来

随着技术的进步,工业自动化已经逐步进入了一个新的纪元。特斯拉最近公布的擎天柱机器人Optimus的演示,不仅仅展示了一个高科技机器人的能力,更是向我们揭示了未来工厂的可能性。 特斯拉擎天柱机器人的功能展示 马斯克在最新的演示中向我们展…

使用Nuxt.js实现服务端渲染(SSR)

Nuxt.js 是一个基于 Vue.js 的框架,它提供了服务器端渲染(SSR)和静态站点生成(SSG)的能力,使开发者能够轻松地构建高效、优雅的前端应用。Nuxt.js 集成了许多开箱即用的功能和工具,帮助开发者快…

C语言—深入理解指针(2)

1.数组名的理解 不难发现,数组名就是数组首元素的地址。 但是有两个例外: 1.sizeof(数组名) 这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。 2.&数组名 这里的数组名也表示整个数…

MacOS miniconda安装方法

打开macos “终端” 应用 执行命令 mkdir -p ~/miniconda3curl https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.shbash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3rm -rf ~/miniconda3/mini…

CPU基本知识点

目录 1.概念 2.分类 3.运作原理 4.指令系统 1.概念 CPU:英文Central Processing Unit,即中央处理器。 解释和执行指令的功能单元,它是计算机的中枢神经系统(即核心)。 是计算机最核心的部件,主要是运算…

嵌入式数据库SQLite 3配置使用详细笔记教程

0、惨痛教训 随着管理开发的项目体积越来越庞大,产品系统涉及的数据量也越来越多,并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理,后期设备的运行状态、操作状况等数据流信息不能被溯源,当出现了一些特殊…

【35分钟掌握金融风控策略16】贷前风控策略详解-1

目录 贷前风控策略详解 贷前风控目标 精准审核申请贷款客户资质 对申请贷款客户进行合理定额 对申请贷款客户进行合理定价 推动实现利润最大化 贷前风控数据源 客户贷款时提供的数据 贷前风控策略详解 俗话说,良好的开端是成功的一半,而贷前是风…

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字(C98) 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…