0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多层数据管理方案解决AUTOSAR CP Composition级别共享代码生成问题

MATLAB 来源:MATLAB 2023-05-11 09:47 次阅读

重要的事情放到前头说,本文提出的方法可解决:

AUTOSAR Composition 级别的代码生成问题

多模型代码生成共享代码问题

单元模型单独生成代码时和共享数据的耦合问题

在实际的项目中,我们经常会遇到大规模模型代码生成的共享代码问题,而且常常还会涉及到自定制存储类,AUTOSAR Composition,多层数据管理方案等内容。该问题是一类经典问题,基本上每个月都会有不同的用户以各种不同的场景和方式前来询问解决方案或建议,为了帮助大家更好的处理此类问题,本文提供了一种以多层数据管理方案为核心的解耦方式,类似的场景大家也可以尝试借用此方法。

本文基于 MATLAB R2022b 版本,用到的模型和代码链接可以在文末点击“阅读原文”获取。

以下是详细介绍。

第一步

构建用例场景

我们首先快速构建一个典型场景,新建了一个数据包 mySDCPackage:

6eca4a24-ef56-11ed-90ce-dac502259ad0.png

并使用 CSCDesigner 创建了如下所示的 Memory Section - MathWorks_CalPrm:

6edd1e56-ef56-11ed-90ce-dac502259ad0.png

以及 Storage Class - MathWorks_CalPrm_SC,该存储类使用上述创建的 Memory Section - MathWorks_CalPrm。通过该存储类约束的 Simulink Parameter 会生成到指定的 HCU_Prm.h 和指定名称的 .c 文件中(注意:Definition file 选 Instance Specific 以便后续可以单独配置 Parameter 要生成到哪个头文件):

6f0c9adc-ef56-11ed-90ce-dac502259ad0.png

接着我们将名为ThrottlePositionControlComposition.arxml 的 AUTOSAR CP Composition arxml 导入到System Composer,重现架构,如下图所示:

6f592136-ef56-11ed-90ce-dac502259ad0.png

第二步

适用多层数据管理方案

这里为了方便解释,我们只选 Monitor(模型全名实为 ThrottlePositionMonitor),Controller 两个子模型为例,其中 Monitor 模型的数据存放在 Monitor_Unique.sldd 和 Monitor_Shared.sldd 中,Monitor_Unique.sldd 直接关联 Monitor 模型,Monitor_Shared.sldd 不直接关联模型而是被 Monitor_Unique.sldd 通过数据字典引用的方式进行引用。

Monitor_Unique.sldd 中存放的是 Monitor 模型所独有的数据,Monitor_Shared.sldd 中存放的是 Monitor 模型会用到,同时也会被其他模型所使用的共享数据,可认为是单元级别共享数据。SharedDD.sldd 中存放的则是共享程度更高的共享数据,可认为是系统级别共享数据。Controller 模型同理,不做赘述。

这样每个单元模型就形成了三层数据字典引用:Monitor.slx->Monitor_Unique.sldd->Monitor_Shared.sldd->SharedDD.sldd,后面我们会看到多一层“间接”就能起到解耦的作用,“间接”是软件工程中非常强大的解耦和抽象方式。上述描述有点拗口,大家可搭配下图帮助理解:

6f6be866-ef56-11ed-90ce-dac502259ad0.png

接着,我们在 Monitor_Shared.sldd 中添加Monitor_Shared 参数定义,使用我们刚刚定义的数据包,接着设置存储类为MathWorks_CalPrm_SC,DefinitionFile 设置为 HCU_Prm_Monitor.c,Owner 设置为ThrottlePositionMonitor(模型名):

6f8efe32-ef56-11ed-90ce-dac502259ad0.png

各参数的设置如下:

在 Monitor_Unique.sldd 中添加名为Monitor_Unique 参数定义,存储类选MathWorks_CalPrm_SC,DefinitionFile设置为 HCU_Prm_Monitor.c,Owner 留空

在 Monitor_Shared.sldd 中添加名为Monitor_Shared 参数定义,存储类选MathWorks_CalPrm_SC,DefinitionFile设置为 HCU_Prm_Monitor.c,Owner 设置为 ThrottlePositionMonitor (即 Monitor 的模型名)

在 Controller_Unique.sldd 中添加名为Controller_Unique 参数定义,存储类选MathWorks_CalPrm_SC,DefinitionFile设置为 HCU_Prm_Controller.c,Owner 留空

在 Controller_Shared.sldd 中添加名为Controller_Shared 参数定义,存储类选MathWorks_CalPrm_SC,DefinitionFile设置为 HCU_Prm_Controller.c,Owner 设置为 Controller (即 Controller 的模型名)

在 SharedDD.sldd 中添加名为 GlobalSharedP 参数定义,存储类选 MathWorks_CalPrm_SC,DefinitionFile设置为 HCU_Prm_GlobalShared.c,Owner 的选择要特别注意:当前的 MATLAB R2022b 版本不支持 Owner 选为System Composer 的模型名,如果我们直接留空,那么每个用到 GlobalSharedP 参数的子模型都会生成一份 HCU_Prm_GlobalShared.c,显然也不合适,因此我们可以指定 Owner 为某个子模型,这样就可以临时绕过此限制,只生成一份 HCU_Prm_GlobalShared.c,这里我们选择Owner 为 Controller 模型

这里稍微解释下 Owner 的作用:此处指定的 Owner 后续会配合选项 “Use owner from data object for data definition placement”,在代码生成时,只有 Owner 模型生成代码时,此数据才会在代码里生成定义,其他模型即使用到此数据也不会生成此数据的定义。

6fa82ed4-ef56-11ed-90ce-dac502259ad0.png

最后,让 Controller_Unique.sldd 引用Monitor_Shared.sldd,让 Monitor_Unique.sldd引用 Controller_Shared.sldd,形成如前图所示数据字典交叉引用。

最终,Controller_Unique.sldd 中的数据如下图所示:

6fcb13c2-ef56-11ed-90ce-dac502259ad0.png

Monitor_Unique.sldd 中的数据如下图所示:

6fdff990-ef56-11ed-90ce-dac502259ad0.png

第三步

为数据对象明确 Owner

仅仅做到这一步的话,当我们对 Monitor 或者 Controller 单元模型单独生成代码时,这种交叉引用可能会导致 Monitor_Shared 和Controller_Shared 参数重复被生成,或者换句话说即参数的 “Owner” 是不确定的。

我们期望的是:当对 Controller 模型生成代码时,Controller_Shared 参数定义要生成到HCU_Prm_Controller.c 中,即其在代码中被当成 Exported,而 Monitor_Shared 参数即使在 Controller 模型中被使用,其在代码中却不生成定义,即其在代码中被当成 Imported。

要实现这一点,需要为 Monitor_Shared 和 Controller_Shared 参数设置 Owner(其所归属的模型名):

7001ee2e-ef56-11ed-90ce-dac502259ad0.png

7021a070-ef56-11ed-90ce-dac502259ad0.png

同时对 Monitor/Controller 模型生成代码的时候,记得勾选 Use owner from data object for data definition placement,这样Monitor_Shared 对象仅在 Monitor 模型生成代码的时候生成定义。

7045806c-ef56-11ed-90ce-dac502259ad0.png

两个模型的 Shared code placement 都设置为 Shared Location:

7055eac4-ef56-11ed-90ce-dac502259ad0.png

第四步

在模型中交叉使用数据对象

如图所示,在 Monitor 模型中使用定义的参数,包括 Monitor_Unique, Monitor_Shared以及 GlobalSharedP:

706a04b4-ef56-11ed-90ce-dac502259ad0.png

在 Controller 模型中使用定义的参数,包括 Controller_Unique, Monitor_Shared 以及 GlobalSharedP:

70869f84-ef56-11ed-90ce-dac502259ad0.png

第五步

代码生成

对 Controller 模型生成代码,虽然 Controller 模型中使用到了 Monitor_Shared 参数,但是该模型因为不是参数的 Owner,不会生成 Monitor_Shared 的定义,仅仅是引用:

70a141cc-ef56-11ed-90ce-dac502259ad0.png

70b77f0a-ef56-11ed-90ce-dac502259ad0.png

最后借助 System Composer 提供的 AUTOSAR Composition 级别的代码生成功能:

70e6e5e2-ef56-11ed-90ce-dac502259ad0.png

我们直接看生成的 zip 压缩包:

7104ca76-ef56-11ed-90ce-dac502259ad0.png

其中 HCU_Prm.h:

7134421a-ef56-11ed-90ce-dac502259ad0.png

HCU_Prm_Controller.c:

714d3eb4-ef56-11ed-90ce-dac502259ad0.png

HCU_Prm_GlobalShared.c:

7193b790-ef56-11ed-90ce-dac502259ad0.png

HCU_Prm_Monitor.c:

71d4915c-ef56-11ed-90ce-dac502259ad0.png

第六步

总结

至此,我们就实现了 Controller 模型和 Monitor 模型的数据解耦,且数据的定义各自生成到各自的子目录中,此方式的另一个好处就是无论Monitor_Shared.sldd 中的数据如何变化,无需再对Controller 模型生成代码,仅需要对 Monitor 模型重新生成代码,即可更新所需的定义文件(.c)和slprj/autosar/_sharedutils 中的声明文件(.h),大大节省了重复生成代码的时间。

当然,如果大家希望上述所有的参数定义都放到名为HCU_Prm.c(即与声明文件 HCU_Prm.h 同名)的文件中,则需要写个后处理脚本对代码进行综合处理。

最后, 欢迎大家在借助本文方法解决问题后在下面留言反馈,如果有更多实际项目中的困扰,也欢迎留言,我们会酌情推出更多类似的技术文章,与大家一起共同进步。

本文基于 MATLAB R2022b 版本,用到的模型和代码链接可以在文末点击“阅读原文”获取。

原审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    181

    文章

    2960

    浏览量

    229983
  • 数据管理
    +关注

    关注

    1

    文章

    284

    浏览量

    19592
  • AUTOSAR
    +关注

    关注

    10

    文章

    345

    浏览量

    21438
  • 模型
    +关注

    关注

    1

    文章

    3098

    浏览量

    48639
  • 代码
    +关注

    关注

    30

    文章

    4714

    浏览量

    68196

原文标题:多层数据管理方案解决 AUTOSAR CP Composition 级别共享代码生成问题

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一张图解读阿里云数据管理DMS企业版

    摘要: 阿里云数据管理DMS企业版,作为数据管理产品大家族里的新成员,于2017年11月开启公测,今年1月底正式发布商业化版本。 作为业界领先的面向企业的数据库DevOps解决方案,D
    发表于 01-30 09:35

    提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化

    摘要: 阿里云数据管理DMS企业版,作为数据管理产品大家族里的新成员,于2017年11月开启公测,今年1月底正式发布商业化版本。 作为业界领先的面向企业的数据库DevOps解决方案,D
    发表于 01-30 14:07

    数据管理功能详解

    访问控制管理。通过这一工具,单个用户可以在本地工作站上管理多个文件,或多名用户可以在共享区域来管理多个文件。下面小编就给大家介绍一下,如何快速使用浩辰3D软件的
    发表于 11-03 15:32

    CP AUTOSAR EcuM的相关资料下载

    前言本系列请点击:《搞一下CP AUTOSAR入门》所有系列请点击:《汽车电子系列分享》在CP AUTOSAR架构中定义了许多和模式管理相关
    发表于 02-11 07:05

    【学习打卡】OpenHarmony的分布式数据管理介绍

    分布式数据管理,英文缩写是DDM,是对一个系统中创建和收集的数据的提取、存储、组织和维护的过程进行的有效控制和管理。有效的数据管理对于运行应用程序,以及提供分析信息来帮助整个系统进行规
    发表于 07-15 15:49

    Bootloader 系统使用新应用代码和/或数据管理组件闪存的更新流程

    Bootloader 系统使用新应用代码和/或数据管理组件闪存的更新流程
    发表于 10-09 16:17 4次下载
    Bootloader 系统使用新应用<b class='flag-5'>代码</b>和/或<b class='flag-5'>数据管理</b>组件闪存的更新流程

    Bootloader系统使用新应用代码和/或数据管理组件闪存的更新流程

    Bootloader系统使用新应用代码和/或数据管理组件闪存的更新流程
    发表于 10-10 08:24 12次下载
    Bootloader系统使用新应用<b class='flag-5'>代码</b>和/或<b class='flag-5'>数据管理</b>组件闪存的更新流程

    关于云时代下的数据管理难题的分析和解决

    再者就是数据类型正变得丰富多样,数据管理场景也从原先的单纯的存储,增加了灾备、归档、迁移、检索、共享等众多场景,不管是数据监管还是业务要求,都对数据
    的头像 发表于 10-28 08:57 2071次阅读

    搞一下CP AUTOSAR 入门 | 04 CP AUTOSAR EcuM 详解

    前言本系列请点击:《搞一下CP AUTOSAR入门》所有系列请点击:《汽车电子系列分享》在CP AUTOSAR架构中定义了许多和模式管理相关
    发表于 12-07 18:21 30次下载
    搞一下<b class='flag-5'>CP</b> <b class='flag-5'>AUTOSAR</b> 入门 | 04 <b class='flag-5'>CP</b> <b class='flag-5'>AUTOSAR</b> EcuM 详解

    CAN网络管理规范 AUTOSAR CP中文版

    CAN网络管理规范 AUTOSAR CP中文版免费下载。
    发表于 04-06 16:21 0次下载

    AUTOSAR 解决方案 — INTEWORK-EAS-CP

    服务和培训等各个方面的内容,旨在为国内及国际的OEM和供应商提供稳定可靠、便捷易用的AUTOSAR平台。EAS共分为CP和AP两个平台。方案特点基于AUTOSAR标准
    的头像 发表于 05-21 09:26 1201次阅读
    <b class='flag-5'>AUTOSAR</b> 解决<b class='flag-5'>方案</b> — INTEWORK-EAS-<b class='flag-5'>CP</b>

    解读AUTOSAR模式管理BswM配置

    模式管理AUTOSAR中的一个难点,也可以说是最庞杂的一块。因为模式管理贯穿整个CP Autosar流程,几乎所有模块都跟BSWM发生着联
    的头像 发表于 10-26 16:55 2144次阅读
    解读<b class='flag-5'>AUTOSAR</b>模式<b class='flag-5'>管理</b>BswM配置

    AUTOSAR CP的复杂驱动是什么

    复杂驱动(CDD) AUTOSAR CP的复杂驱动(CDD)是为了实现复杂的传感器评估和执行器控制而设计的。它通过直接访问微控制器来实现,使用特定的中断和/或复杂的微控制器外设、外部设备通信收发器
    的头像 发表于 10-27 15:39 2032次阅读
    <b class='flag-5'>AUTOSAR</b> <b class='flag-5'>CP</b>的复杂驱动是什么

    AUTOSAR CP运行时环境与应用软件

    )的服务。RTE的功能和意义如下: 通信基础设施:RTE负责管理应用软件组件之间的通信。它提供了消息传递机制和事件触发机制,使得应用软件组件可以相互发送和接收消息,实现数据的交换和共享。 访问基础软件组件:RTE提供了访问基础软
    的头像 发表于 10-27 15:44 1257次阅读
    <b class='flag-5'>AUTOSAR</b> <b class='flag-5'>CP</b>运行时环境与应用软件

    食品检测LIMS如何实现数据管理

    LIMS系统通过数据采集、处理与分析、存储与管理、安全与保密、共享与协作、质量控制以及报告生成等多个方面的功能实现数据管理,为食品检测实验室
    的头像 发表于 05-29 13:47 497次阅读