calibration的“前世今生”——从simulink开发到CANape的XCP标定

整体思路

在这里插入图片描述
上图为部分具体开发流程,基本上为:先根据需求定义架构和接口,给到应用层和底层做同步开发,测试完成后进行集成并编译链接烧录,最后进行系统测试。详细可参考V模型和ASPICE流程标准。

其中,标定量的设置贯穿在很多过程域中,具体为:应用层开发(标定量存储类型的设置),底层开发(支持XCP/CCP通信协议),和系统标定(CANape)。下面挨个解释。

0. simulink添加标定量

先概述一下:进行simulink开发应用层时,模型一般包含3个部分:model、data和configset。model代表算法,data一般为观测量、标定量和常量的设置等,configset则是硬件配置和一些生成代码高级定制。具体详见simulink自动代码生成专栏

simulink添加标定量和进行代码生成的核心就是data中数据字典的管理。(这里也要说明一点我个人体会:simulink生成代码虽然降低了软件开发的门槛,但如果想要用好这个工具还是要先去了解一些c、计算机组成原理和操作系统的知识。)

假设现在我们有如下model: OutB=(InA+1)*2
在这里插入图片描述
生成代码后如下,其中的红圈Constant_1和红圈Gain_1为float类型的定值:1.0F和2.0F。
在这里插入图片描述

现在想把这两个地方设置为可标定量。需要两步:1)给可标定量起个变量名,2)设置该变量的存储类型。首先第一步起名字为calib_1和calib_2:
在这里插入图片描述
然后设置calib_1和calib_2的存储类型,这里需要用到数据字典data dictionary。数据字典是matlab推崇的用于统一管理模型变量(如标定量)的工具,可较细致的控制变量的定义、声明、数据类型和存储类型等。方法如下:
右键模型选中model properties
在这里插入图片描述
选择data选项卡,新建或浏览现有数据字典(这里使用新建):
在这里插入图片描述
打开后可看到下图中:1是base workspace,2是数据字典,3是模型。1和2都可以设置变量,如果重复定义则局部优先。(比如优先级递减:mask子系统,数据字典,base workspace)
在这里插入图片描述
可以在数据字典中添加很多种变量,一般来讲分为:signal和parameter。signal是信号,一般用于信号线变量观测。parameter是参数,可用于标定、常量、结构体等。我们在数据字典里添加2个parameter,并设置相关属性,如下:

在这里插入图片描述
在这里插入图片描述

上图最重要的属性就是变量名、value、data type和storage class。

  • 变量名一定要和模型里一致:数据字典和模型匹配就是通过名字匹配的。
  • data type要设置正确。
  • storage class是存储类型,这是重中之重,具体会在《simulink自动代码生成》里详细讲一下,这里如果像设置标定量应当选择为”volatile“。生成代码后如下:
    在这里插入图片描述
    在这里插入图片描述
    这里解释下为何选择volatile:
    计算机存储结构
    在这里插入图片描述

便于理解的讲,计算机存储结构可分为3级:cache、RAM和Flash。

  • cache是cpu内部高速缓存,容量小但速度快,下电后数据清空
  • RAM是内存,容量稍大但速度稍慢,下电后数据清空
  • Flash是外存,容量最大但速度最慢,下电后数据不清空

程序和数据烧录在Flash中,这样下电后程序仍存在。但运行时,程序会放到RAM中,其中频繁访问的程序和数据会放到cache中(有专门的调度算法进行分配)。而CANape和因卡等标定工具在标定过程中是改变RAM里的变量,标定结束后在上位机生成hex,烧录到控制器的Flash中。这就存在了一个问题:如果想要标定的数据被CPU频繁访问,那么很有可能被存放到cache中,这时CPU只访问cache中的该变量,但CANape/INCA只能修改RAM里的该变量
此时就可以通过关键字volatile解决该问题,volatile的意思是:告诉CPU,该变量会被外部线程或程序改变,不要为了访问速度做优化(放到cache里),老老实实从RAM里访问数据。
备注:volatile不是变量的意思,它可以和const联合使用,如

const volatile int i = 10 ;

上面这行代码的意思是:每次从RAM里访问,且本程序不能改变该值。

回到simulink,这样设置生成代码后可以和底层代码一起编译链接和烧录。编译链接过程中会生成elf文件,该文件可简单的看作为hex和map的集合,其中包括可执行的程序、变量及其对应的地址。可使用elf生成CANape可读的标定数据库A2L文件。(simulink生成代码是也可以勾选生成ASAP2的a2l文件,有变量但变量对应的地址为空,只有编译后才分配地址)

1. 前期准备A2L的制作

安装完成CanApe软件 , 插上CanApe硬件( 如:vector 1640A)。打开A2L编辑软件 ASAP2 Editor(注意不是ASAP2 Viewer),新建工程如下:
在这里插入图片描述
在这里插入图片描述选择下图map files处导入编译器生成的elf或者hex文件
在这里插入图片描述并选择正确的map文件格式
在这里插入图片描述

map文件加载后,会出现软件开发过程中设置的的可标定量,具体见下图左侧栏
在这里插入图片描述
选择你需要的标定量,属性为 w /r 的变量。 可以选择为 calibration parameter,属性为 only read的变量,只可以选择为measure parameter 。
在这里插入图片描述导出并保持 xxxx. A2L 文件(可看作为针对CAN工具使用的map文件,里面放的也是变量和地址)

2. 配置CanApe的XCP标定工程

打开canape软件,并新建工程:

在这里插入图片描述将新建的工程保存在一个文件夹内:
在这里插入图片描述选择是否创建该工程在桌面上的快捷方式:
在这里插入图片描述配置device:

在这里插入图片描述然后:
在这里插入图片描述导入A2L文件:
在这里插入图片描述

配置CAN的通讯参数:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述因为该工程是根据A2L生成的,所以下图这里就不用重复添加map文件了。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在下图中设置XCP通讯的ID,一般有底层开发人员提供。
在这里插入图片描述然后点击TEST Connection,测试是否可连接成功
在这里插入图片描述在这里插入图片描述

3. CANape标定

开始在新建的CANape标定工程内,进行标定
在这里插入图片描述选择想要观测或者标定的变量:

在这里插入图片描述在这里插入图片描述可在graphic中观测
在这里插入图片描述点击运行后可在此处进行标定
在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值