当前位置: 首页 > ds >正文

MATLAB Simulink在Autosar和非Autosar工程下的开发流程

        软件开发有两种方法:自上而下和自下而上。自上而下就是从整体出发去设计各个模块和模块间的接口,要求架构设计人员对产品功能非常清楚;自下而上就是从一个一个模块出发去设计,进而组成一个整体。自下而上可能会带来冗余代码过多和模块间接口乃至整体架构变动较多的情况,但当一个产品处于摸索阶段时,一般只能采用这种方法。

对于Autosar下的Simulink开发而言,自上而下就是设计好arxml然后导入Simulink,自下而上就是将Simulink生成的arxml导入Autosar开发工具,进而与其他SWC的接口进行连接。

1 arxml导入Simulink

1.1 arxml.importer

        将模块的arxml、接口和数据类型定义的arxml拷贝到matlab当前工作区或者其所在文件设为matlab的工作路径,然后调用命令arxml.importer导入arxml文件生成对象。

        如在ASW.arxml定义了模块信息,在SRInterface.arxml定义了SWC的接口信息,而接口引用的数据类型定义在Platform_Types.arxml和PlatformBase_Types.arxml,则命令为:

ar=arxml.importer({'ASW.arxml','SRInterface.arxml','Platform_Types.arxml','PlatformBase_Types.arxml'})

        导入模型接口和数据类型的arxml。

1.2 createComponentAsModel

        调用createComponentAsModel根据导入的arxml对象生成Simulink模型。如在ASW中定义了一个周期性的runnable,则命令为

createComponentAsModel(ar,'/ASW/MBD_SWC','ModelPeriodicRunnablesAs','AtomicSubsystem')

        最终生成的Simulink模型为

图片

        当然我们还可以使用诸如updateModel 、updateAUTOSARProperties(用autosar中的属性来更新模型信息)等命令来根据arxml对模型进行更新修改等。

2 Simulink生成arxml导入Autosar工具

2.1在Mode Settings的Code Generation中的Code Generation选择autosar.tlc。

图片

2.2在AUTOSAR Code Generation选择适合自己的AUTOSAR版本。

图片

2.3在Code Interface选择AUTOSAR Dictionary来建立Interface和Port。

图片

图片

图片

2.4选择Individual Element Code Mappings将输入输出与建立的AUTOSAR ports进行映射。

图片

2.5生成代码时也会生成arxml文件,将arxml文件拷贝到AUTOSAR工作目录下即可出现interface/port/swc。

3 Simulink在非Autosar下开发

3.1 调用底层C语言编写的驱动

        Simulink在非AUTOSAR模式下开发时,可以选用c caller来与底层驱动进行交互(老版的可以通过Legacy Code Tool)。本文选用c caller来进行说明。

        在Mode Settings中的Siumlation Target的Header file包含要使用的函数所在的头文件,同时由于我们只是使用接口来生成代码,因此Undefined function handling选择Use Interface Only。

图片

图片

        最后生成的代码如下。

图片

3.2 数据一致性的问题

        假如两个Simulink模型的输入输出有连接,且数据类型为非原子,那么需要注意了,假如这两个模型是在两个任务中,那么极有可能出现数据一致性的问题。这个问题的解决要不就是在设计阶段进行规避,如这种情况下两个模型放在一个任务中(顺序执行),要不就是通过C语言加锁来避免,即两个模型不直接使用对方的接口。

http://www.xdnf.cn/news/5914.html

相关文章:

  • JVM之虚拟机运行
  • Nacos源码—9.Nacos升级gRPC分析八
  • 微信小程序学习之底部导航栏
  • 初识Linux
  • spark sql基本操作
  • C++STL——map和set的使用
  • Azure 应用的托管身份与服务主体
  • 在scala中使用sparkSQL连接MySQL并添加新数据
  • uniapp-商城-56-后台 新增商品(弹窗属性继续分析)
  • 解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证
  • Node.js 中的 URL 模块
  • sql 备份表a数据到表b
  • 论文精读:YOLO-UniOW: Efficient Universal Open-World Object Detection
  • 【Pandas】pandas DataFrame cumprod
  • 一文理清人工智能,机器学习,深度学习的概念
  • TCP协议十大核心特性深度解析:构建可靠传输的基石
  • 标贝科技:大模型领域数据标注的重要性与标注类型分享
  • Python格式化字符串学习笔记
  • 如何使用远程桌面控制电脑
  • 网页禁止粘贴的解决方法(以学习通网页为例)
  • puppy系统详解
  • 中国古代史4
  • Android中ConstraintLayout约束布局使用详解
  • 虚拟主机与独立服务器:哪个更好?
  • MFCC特征提取及Griffin-Lim算法(librosa实现)
  • 使用 AddressSanitizer 检测栈内存越界错误
  • 如何配置本机host文件
  • Power BI 实操案例,将度量值转化为切片器(动态切换分析指标)
  • 在Text-to-SQL任务中应用过程奖励模型
  • 【Python】Python常用数据类型详解