汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

1 数据对象的创建

Ctrl+H打开Model Explorer,在Base workspace中点击工具栏add,出现如下界面,

        可以看到Simulink提供了多种数据类型

  1. Matlab Variable:
  2. Simulink.Parameter:使用该数据对象表示工程应用中的标定量
  3. Simulink.Signal:用于生成观测量
  4. Simulink.NumericType:指定浮点数、整数,通常用于数据定点化处理
  5. Simulink.AliasType:为数据类型创建别名

        常用的也就是这些,具体还有其他的可以参考help。

        添加两个parameter,如下图所示:

   将参数的名字改为标定量的名字,如下图(通常标定量命名规则按三段来分block_function_uint_C)

        然后就是根据需求对数据类型的处理,在右边可以进行选择,如下图

(试想,如果全用这种方式来进行数据的管理有多累,可以采用excel的方式;他们用python可以实现当然可否用matlab来读取excel写相应脚本?)已完成matlab来处理

        然后建立相应的观测量,如下图:

        使用constant和out建立如下模型,将constant参数名改为标定量的名称,

       右键输出信号的信号线,选择properties,命名为观测量(按照依相的方式,也将观测量做出一个类似于constant的模块,需要好好研究一下)

        PS:需要注意是,两个标定量均为uint8类型而观测量为uint16这样simulink会出现编译错误,因此可以在加法模块上选择output data type为下图所示,这样就强制与后面的类型匹配。

        因此,要想做出自己的模型开发要做出标定量模块封装、常用算数符号封装后面数据类型匹配观测量封装,(后续继续添加

2 Code的配置

        至此便完成了一个简单的模型,ctrl+E打开configuration parameter,

solve界面下选择定点步长,因为是在单片机上运行。

选择optimization>Signals and Parameters,选取Inline Parameter(为什么

选择Code Generation,选择ert.tlc,打钩generate code only

Report>Create code generation report

Interface>data exchange,选择asap2生成相应a2l(不包含头部分)

最后进行编译(ctrl+B),完毕后生成相应的报告

       在与基础软件集成时,要将Model files和Utility files的文件全部放到基础软件中。(还可以优化数据类型的定义)

3 自动在生成的代码中添加#pragma语句

3.1 为什么添加#pragma语句

       通常情况下,编译器会给变量自动分配内存地址,但是标定来说,标定量和观测量必须放到指定位置才能实现标定和观测的功能, #pragma语句就可以实现上述功能。

       不同编译器对于地址的分配的语句不同,例如hightec,从该工程的ld文件中可以看到区域名。

        那么在拿到应用层代码之后首先就是要对变量进行地址分配,编译完成后。

       但是实际上在工程应用中,标定量的定义常用到ConstVolatile、观测量常用到Volatile

3.2 const, volatile释义

        const含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。

        volatile的含义是“请不要做自以为是的优化,这个值可能变掉的”,而并非“你可以修改这个值”。

1)const, volatile的作用以及起作用的阶段

const只在编译期有用

        在运行期无用。const在编译期保证在C的“源代码”里面,没有对其修饰的变量进行修改的地方(如有则报错,编译不通过),而运行期该变量的值是否被改变则不受const的限制。

volatile在编译期和运行期都有用

          在编译期告诉编译器:请不要做自以为是的优化,这个变量的值可能会变掉;

          在运行期:每次用到该变量的值,都从内存中取该变量的值。

2)const, volatile同时修饰一个变量

合法性  “volatile”的含义并非是“non-const”,volatile 和 const 不构成反义词,所以可以放一起修饰一个变量。

       同时修饰一个变量的含义

       表示一个变量在程序编译期不能被修改且不能被优化;在程序运行期,变量值可修改,但每次用到该变量的值都要从内存中读取,以防止意外错误。

3.3 模型生成代码自动添加#pragma语句

       如果数据很少的、或者应用层软件标定量和观测量全部集成在一个头文件和c文件中,使用手动的方式进行添加也可以,但是一旦数据量剧增或者变量在不同文件下,这样在做处理时就会比较麻烦,因此考虑在代码生成时将变量集中到一个.h .c文件,并且自动添加相应的#pragma语句。

Simulink数据类型里提供了这样一种方式,

        首先创建一个数据类型,例如 Demo_Mea_mp = Simulink.Signal,

      在Storage class下选择Volatile类型。会弹出Custom attribute对话框,输入想生成的文件名.h和.c。生成的代码如下:

       可以看到能够将变量统一放到同一文件,但是还是需要手动添加#pragma语句。

       如何自动添加该语句呢?我们可以来分析一下Simulin.Parameter这个数据类型的特点。

       使用cscdesigner打开自定义类编辑器

在memory section中可以看到

        在这里添加#pragma语句即可,但是simulink自带的类又全是只读的,所以需要自己建立一个类(参考matlab官网help:Define Data Classes)。

        首先找到路径%matlabpath%\toolbox\simulink\simulink\dataclasses

        在此目录下建立一个文件夹(以+UserName命名)

        在+App中添加@Parameter和@Signal两个文件夹,可以将mpt中的parameter.m、signal.m复制过来进行修改。

        需要修改的几个地方

将custom和global注释,不然会报错(why)

输入指令cscdesigner(‘App’)

      然后选择编辑数据类型的特性,每一项都需要。这里我们把ConstVolatile进行处理,在Memory section中输入相应的#pragma语句即可。

       最后编译生成的文件有

       代码如下:

4. 自定义生成完整A2L文件

        to be continue...


汽车标定合集:

汽车标定技术(一):XCP概述-CSDN博客

汽车标定技术(二)--基于XCP的标定测量实战-CSDN博客

汽车标定技术(三)--XCP协议如何支持测量功能-CSDN博客

汽车标定技术(四)--问题分析:多周期测量时上位机显示异常-CSDN博客

汽车标定的ASAM MCD-1 POD-CSDN博客

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

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

相关文章

js:React中使用classnames实现按照条件将类名连接起来

参考文档 https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames 安装 npm install classnames示例 import classNames from "classnames";// 字符串合并 console.log(classNames("foo", "bar")); // foo bar//…

高性能网络编程 - The C10M problem

文章目录 Pre概述回顾C10K实现C10M的挑战思路总结 Pre 高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路 概述 在接下来的10年里,因为IPv6协议下每个服务器的潜在连接数都是数以百万级的,单机服务器处理数百万的并发连接&#xff0…

基于单片机智能加湿器控制系统仿真设计

**单片机设计介绍, 698【毕业课设】基于单片机智能加湿器控制系统仿真设计 文章目录 一 概要系统组成总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机智能加湿器控制系统仿真设计介绍 单片机智能加湿器控制系统是一种利用微…

Jakarta-JVM篇

文章目录 一.前言1. 1 JVM-堆常用调参1.2 JVM-方法区常用参数1.3 JVM-codeCache 二.JVM内存结构三. 对象创建四. JVM垃圾回收算法4.1 可达性分析算法4.1.1 对象引用4.1.2 回收方法区. 4.2 分代回收4.3 标记清除4.4 标记复制4.5 标记整理 五.垃圾回收器5.1 根节点枚举5.2 安全点…

umi4 React项目使用icon集合

umi项目中使用icon集合。 icon集合:https://icones.js.org/ 测试使用这个ion .umirc.ts文件 icons:{autoInstall:{iconify-json/ion: true,//自动安装iconify-json/ion},include: [ion:social-windows-outline],//要使用的必须把icon类名加到include中…

AndroidStudio 运行报错:Invalid keystore format

AndroidStudio 运行报错:Invalid keystore format 把这玩意儿删了重新打开Android Studio运行一下就好了!!!

esxi 6.7下安装黑裙

esxi上创建一个黑裙系统的虚拟机,用来存资料 一、工具 硬件: 工控机:装有esxi6.7系统(192.168.100.2),配置:3865U,16G内存,120Gmsata120sata硬盘,6个网口 主…

利用Ansible实现批量Linux服务器安全配置

1.摘要 在上一篇<<初步利用Ansible实现批量服务器自动化管理>>文章中, 我初步实现了通过编写清单和剧本来实现多台服务器的自动化管理,在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只…

杂货铺 | citespace的使用

安装教程 【CiteSpace保姆级教程1】文献综述怎么写&#xff1f; &#x1f4da;数据下载 1. 新建文件夹 2. 数据下载 知网高级检索 数据选中导出 &#xff1a;一次500 导出后重命名为download_xxx.txt&#xff0c;放到input文件里 3. 数据转换 把output里的数据复制到data里…

Qt实现自定义多选下拉列表

目录 前言1、 功能描述2、代码实现总结 前言 本文记录了一种通过继承 QComboBox 实现下拉列表多选功能的方法。效果如下图所示&#xff1a; 1、 功能描述 普通的下拉列表只支持选择一个选项&#xff0c;在软件开发过程中&#xff0c;经常会遇到下拉列表支持选择多个选项的需…

Mybatis-Plus同时使用逻辑删除和唯一索引的问题及解决办法

1 问题背景 在开发中&#xff0c;我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时&#xff0c;如果同时使用逻辑删除和唯一索引&#xff0c;会报数据重复Duplicate entry的问题。 举例来说&#xff0c;有表user&#xff0c;建立唯一索引&#xff08;u…

centos 7部署Mysql8.0主从

Mysql官网中关于部署主从的网址 环境准备&#xff1a; 搭建虚拟机和安装Mysql之前的文章中已经涉及&#xff0c;在此不再赘述。 主从IPMysql账号密码主192.168.213.4root/Root1234!从192.168.213.5root/Root1234! 1、主数据库设置 配置my.cnf 一般存放于/etc/。 主从配…

idea使用git删除本地提交(未推送)

1、找到reset head 2、打开弹窗&#xff0c;在HEAD后面输入^ 结果为HEAD^ 注释&#xff1a; Reset Type 有三种&#xff1a; Mixed&#xff08;默认方式&#xff09;&#xff0c;保留本地源码&#xff0c;回退 commit 和 index 信息&#xff0c;最常用的方式Soft 回退到某个版本…

用于图像处理的高斯滤波器 (LoG) 拉普拉斯

一、说明 欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理&#xff0c;继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能&#xff0c;实现边缘岭脊提取。 二、LoG算法简述 在这篇博客中&#xff0c;让我们看看拉普拉斯滤波器和高斯滤波器的拉普…

STM32_project:led_beep

代码&#xff1a; 主要部分&#xff1a; #include "stm32f10x.h" // Device header #include "delay.h"// 给蜂鸣器IO口输出低电平&#xff0c;响&#xff0c;高&#xff0c;不向。 //int main (void) //{ // // 开启时钟 // RC…

Git 行结束符:LF will be replaced by CRLF the next time Git touches it问题解决指南

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

怎么学编程效率高,编程练习网站编程软件下载,中文编程开发语言工具下载

怎么学编程效率高&#xff0c;编程练习网站编程软件下载&#xff0c;中文编程开发语言工具下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎&#xff0c;那为什么选InnoDB作为默认引擎呢&#xff1f; 主要原因有几点&#xff1a; 事务 事务主要用于保持数据一致性&#xff0c;是一组操作的集合&#xff0c;要么全部成功&#xff0c;要么全部失败。InnoDB引擎提供…

Pytorch 里面torch.no_grad 和model.eval(), model.train() 的作用

torch.no_grad: 影响模型的自微分器&#xff0c;使得其停止工作&#xff1b;这样的话&#xff0c;数据计算的数据就会变快&#xff0c;内存占用也会变小&#xff0c;因为没有了反向梯度计算&#xff0c;当然&#xff0c;我哦们也无法做反向传播。 model.eval() 和model.train()…

【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

05 线性代数 1. 基础知识补充 向量相关 矩阵相关 简单来说&#xff0c;范数是用来衡量矩阵&#xff08;张量&#xff09;大小的值&#xff0c;范数的值有不同的规定。 2. 代码实现 仅记录一些我比较陌生的知识。 张量的克隆 A torch.arange(20, dtypetorch.float32).resh…