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

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语言加锁来避免,即两个模型不直接使用对方的接口。

相关文章:

  • AI智能分析网关V4助力工厂/工地/车间/能源矿山场景玩手机行为精准检测与安全生产智能化监管
  • Python(1) 做一个随机数的游戏
  • LeetCode 648 单词替换题解
  • 第九届御网杯网络安全大赛初赛WP
  • [Java][Leetcode middle] 45. 跳跃游戏 II
  • 开发与AI融合的Windsurf编辑器
  • Linux学习心得问题整理(一)
  • MySQL——数据类型表的约束
  • 设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
  • Kafka Go客户端--Sarama
  • OpenCV进阶操作:风格迁移以及DNN模块解析
  • 基于STM32、HAL库的TDA7719TR音频接口芯片驱动程序设计
  • 基于Win在VSCode部署运行OpenVINO模型
  • MySQL 8.0 OCP 1Z0-908 题目解析(2)
  • 基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计
  • Windows部署LatentSync唇形同步(字节跳动北京交通大学联合开源)
  • 仓颉Magic亮相GOSIM AI Paris 2025:掀起开源AI框架新热潮
  • 初始“协议”
  • golang 定时器
  • 软件测试——面试八股文(入门篇)
  • 中央结算公司:减免境外央行类机构账户开户费用
  • 睡觉总做梦是睡眠质量差?梦到这些事,才要小心
  • 迪奥部分客户数据遭泄露,公司称正持续展开调查
  • 马上评丨75万采购300元设备,仅仅终止采购还不够
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • 西藏日喀则市拉孜县发生5.5级地震,震源深度10千米