IsolarAB导出arxml到Matlab/Simulink生成模型并配置内存分区

本文以一个简单的示例说明如何通过Isolar设计的SWC arxml导入到simulink中生成模型,并指定simulink生成的代码带内存分区信息。本文创建的SWC叫做ECAS_Sensor_SWC, 主要作用是对传感器信号进行处理和传递给后级SWC使用。

1. solarAB修改PlatformBase_Types.arxml文件

对IsolarAB AUTOSAR_Platform/BaseTypes(定义位于PlatformBase_Types.arxml)下面的基础数据类型添加如图所示NativeDeclaration属性。

在这里插入图片描述
添加完成后浏览Isolar工程下的PlatformBase_Types.arxml文件可以看到数据类型定义下多出了NativeDeclaration属性, 该属性为导入Simulink必要属性。
在这里插入图片描述

2. 创建必要的ImplementationDataTypes

创建ImplementationDataTypes请使用前缀IDT_, 同时新建一个DataTypes.arxml, 之后将所有DataTypes, ComputeMethods都放入该文件。
在这里插入图片描述
在这里插入图片描述
将ImplementationDataTypes类型设置为VALUE, 并选择对应的BaseType(这里有3个,需确定选择的定义位于Platform_BaseType.arxml)。

3.创建必要的Interfaces

创建Interface请使用前缀SRI/CSI, 同时新建一个Intefaces.arxml, 之后将所有Interface都放入该文件(至少是ASW所需的)。
在这里插入图片描述

4.为SR Interfaces添加必要的数据元素

在这里插入图片描述

5.对Component进行建模

这里以ECAS_Sensor_SWC为例, 每个SWC的描述文件(arxml)保持独立,名字保持默认。
在这里插入图片描述
创建Port, 其中RequestPort加前缀RP_,ProviderPort加前缀PP_。
在这里插入图片描述
创建如图所示的两个Runable。
在这里插入图片描述
创建对应Runable的Event。
在这里插入图片描述
指定Runable的DataAcess。
在这里插入图片描述

6.将Arxml导入Matlab并自动创建Simulink模型

首先新建一个工作文件夹, 并将工作区设置为该文件夹。
在这里插入图片描述
在该文件夹下新建一个子文件夹Arxml。
在这里插入图片描述
将Isolar工程下的PlatformBase_Types.arxml, Platform_Types.arxml, DataType
s.arxml, Intefaces.arxml, 以及XX_SWC.arxml放入该文件夹。
其中XX_SWC.arxml描述了SWC的名字, Port, Runable, Runable触发事件, Port引用的Inteface, 以及读写的DataElement等信息。
而Intefaces.arxml则是对Intefaces即其数据元素的具体描述, 同时数据元素的变量类型描述位于PlatformBase_Types.arxml文件, 这里的Platform_Types.arxml暂时没用到。
在这里插入图片描述
在工程根文件夹下创建一个.m函数, 方便自动生成模型,里面添加代码:

function CreateModefromArxml(modeName)
arxmlDir = './Arxml/';
platformTypeArxmlPath = strcat(arxmlDir,'Platform_Types.arxml');
platformBaseTypeArxmlPath = strcat(arxmlDir,'PlatformBase_Types.arxml');
interfaceArxmlPath = strcat(arxmlDir,'Interfaces.arxml');
dataTypeArxmlPath = strcat(arxmlDir,'DataTypes.arxml');
modeArxmlPath = strcat(arxmlDir,'SwComponentTypes_',modeName,'.arxml');
ar = arxml.importer({platformTypeArxmlPath,platformBaseTypeArxmlPath,interfaceArxmlPath,dataTypeArxmlPath,modeArxmlPath});
names=getComponentNames(ar);
createComponentAsModel(ar,names{1,1},'ModelPeriodicRunnablesAs','FunctionCallSubsystem');
end

将各个arxml中头部的AUTOSAR_00047改为AUTOSAR_00042, 因为2019b最高识别的AUTOSAR版本为4.2。
在这里插入图片描述
使用时直接在对话框输入CreateModefromArxml(‘ECAS_Sensor_SWC’);
在这里插入图片描述
生成的模型.slx如图所示。其中各种Autosar定义和Mapping都已经自动生成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果有接口修改, Compnent重定义, 数据类型重定义等只需通过替换对应的arxml文件, 并通过自定义的Function UpdateAutosarMode更新模型即可, 其.m代码如下:

function UpdateAutosarMode(modeName)
arxmlDir = './Arxml/';
platformTypeArxmlPath = strcat(arxmlDir,'Platform_Types.arxml');
platformBaseTypeArxmlPath = strcat(arxmlDir,'PlatformBase_Types.arxml');
interfaceArxmlPath = strcat(arxmlDir,'Interfaces.arxml');
dataTypeArxmlPath = strcat(arxmlDir,'DataTypes.arxml');
modeArxmlPath = strcat(arxmlDir,'SwComponentTypes_',modeName,'.arxml');
ar = arxml.importer({platformTypeArxmlPath,platformBaseTypeArxmlPath,interfaceArxmlPath,dataTypeArxmlPath,modeArxmlPath});
open_system(modeName);
updateModel(ar,modeName);
end

将工作区生成的DataTypes保存到DataTypes.mat, 这样重新开启Matlab只用点击这个文件就会自动加载数据类型定义(通过arxml生成), 否则下次重新打开Matlab会丢失如IDT_Temperature的定义, 只能通过重新使用CreateModefromArxml生成。
在这里插入图片描述

7. 为Simulink模型创建自定义Storage class

命令行输入:
demoPath = ‘\toolbox\simulink\simdemos\dataclasses’;
cd([matlabroot,demoPath]);
在这里插入图片描述
将该文件夹整体复制到自己的工程目录。将工程目录下该文件夹改名。
在这里插入图片描述
修改Signal.m和Parameter.m中的如下段:
在这里插入图片描述
在这里插入图片描述
替换成MyAutosarPackage
命令行输入:
cscdesigner(‘MyAutosarPackage’);打开如下界面。
在这里插入图片描述
删除掉默认的Custom Storage Class和Memory Section。添加如图所示几个Memory Section。
在这里插入图片描述
其中CONST_UNSPECIFIED来存放所有未通过SwAddrMethod指定的rodata段, CODE用来存放所有未通过SwAddrMethod指定的code段, VAR_CLEARED_UNSPECIFIED用来存放所有未通过SwAddrMethod指定的bss段, VAR_INIT_UNSPECIFIED用来存放所有未通过SwAddrMethod指定的data段。
这里的未通过SwAddrMethod指定的段是指生成代码时无法通过SwAddrMethod分配的段, 比如Chart的内部状态记录/延迟相关变量, 不包括在Runbable里的SWC内部函数等。
为了举例我们在模型中新建一个Memory模块。
在这里插入图片描述
该模块关联的变量生成在default storage,无法做Memmap。
在这里插入图片描述
展开Code Generation, 点击Package右边的Refresh package list选项。
在这里插入图片描述
选择我们创建的MyAutosarPackage。
在这里插入图片描述
进行如设置,再次生成代码。
在这里插入图片描述
该变量已经分配好了内存分区, 可以通过ECAS_Sensor_SWC_MemMap.h进行实际编译时的段地址指定。
在这里插入图片描述
同样封装一个SWC内部使用的函数。
在这里插入图片描述
在未做上述设置前, 生成的CODE并未指定内存分区。
在这里插入图片描述
配置后再次生成该函数已经分配在了对应的CODE区, 可以通过ECAS_Sensor_SWC_MemMap.h进行实际编译时的段地址指定。
在这里插入图片描述
下面是其他一些对模型的设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
未做说明的设置可按照生成模型时的默认配置。

8.为Simulink模型指定SwAddrMethod

Runable Body等如果不指定SwAddrMethod,并不会生成在通过Code Generation->Memory Section指定的Default内存段。
在这里插入图片描述
打开AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods->CODE。
在这里插入图片描述
在底部Code Mapping处选中一个Runable, 并在右侧Property Inspector中的SwAddrMethod选项修改为CODE, 同理其他Runable都修改。
在这里插入图片描述
可以看到新生成的Runable已经分配到了对应的CODE段。
在这里插入图片描述
在AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods-> CALIB_UNSPECIFIED, 用来指定标定变量。
在这里插入图片描述
在Mode Workspace中新建一个Simulink.Parameter, Param_0,并在模型中使用它。
在这里插入图片描述
在底部Code Mapping处选中该Param, 修改为ConstantMemory,并在右侧Property
Inspector中的SwAddrMethod选项修改为CALIB_UNSPECIFIED, 勾选Const == TRUE, Volatile == TRUE, 同理其他标定变量都同样修改。生成的代码如下图所示。
在这里插入图片描述
在这里插入图片描述
在AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods-> MEASURABLE_CLEARED_UNSPECIFIED, 用来指定测量变量。
在这里插入图片描述
在Mode Workspace中新建一个Simulink.Signal, Moni_0,并在模型中使用它。
在这里插入图片描述
在这里插入图片描述
在底部Code Mapping处选中该Signals, 修改为StaticMemory,并在右侧Property Inspector中的SwAddrMethod选项修改为MEASURABLE_CLEARED_UNSPECIFIED, Volatile == TRUE, 其他测量变量都同样修改。生成的代码如下图所示。
在这里插入图片描述
在这里插入图片描述

9. 总结

导入arxml生成Simulink模型时需要导入必要的DataType,Interface, SWC信息。
对生成代码指定内存分区主要分为两类, 一类是需要通过SwAddrMethod指定的(Runable, 标定测量变量), 另一类保持默认的Default设置, 但是需要设计
MemoryPackage(Storage class)以更改default storage位置,最终要求生成的代码中所有变量, 代码都包含在宏:

#define %<AUTOSAR_COMPONENT>_START_SEC_%<MemorySectionName>
#include "%<AUTOSAR_COMPONENT>_MemMap.h"

#define %<AUTOSAR_COMPONENT>_STOP_SEC_%<MemorySectionName>
#include "%<AUTOSAR_COMPONENT>_MemMap.h"

中间。
这样可以通过Cobara脚本生成的%<AUTOSAR_COMPONENT>_MemMap.h实现编译链接时对具体内存段在hex文件中和下载时地址的指定, 这样做的好处是便于进行分段更新(Bootloader)以及配置OS级别的内存保护。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 1/4被动悬架是一种常用于汽车悬架系统的设计模型,在MATLAB/Simulink中可以进行仿真和分析。 该模型是基于车辆动力学和力学原理建立的,用于研究和评估车辆悬架系统的性能和响应。它主要包含四个关键组件:弹簧、阻尼器、质量集中块和路面输入。 弹簧是模型中的主要参数之一,用于模拟车辆悬架系统的弹性特性。它的刚度决定了悬架系统对输入力的响应速度和能量吸收能力。 阻尼器用于模拟悬架系统的阻尼特性,它可以消耗弹簧系统中的能量并减小振动幅度。阻尼器的阻尼系数决定了悬架系统对输入力的阻尼程度。 质量集中块用于模拟车辆的质量特性,其中包括车身质量和旋转惯量。这些参数决定了车辆对悬架系统的响应和运动性能。 路面输入是模型中的外部输入信号,用于模拟车辆在不同路况下受到的力和振动。这个信号可以是周期性的、突变的或任意的,可以根据实际道路条件进行设置。 通过调整和优化这些参数,可以改善车辆的悬架系统性能,例如提高行驶平稳性、减少振动和提高舒适性。 在MATLAB/Simulink中建立1/4被动悬架模型后,可以进行多种仿真实验和分析,例如对不同路面输入下的车辆响应进行研究,通过多种参数变化来评估和比较不同悬架系统设计的效果。 总之,1/4被动悬架MATLAB/Simulink仿真模型是一个用于研究和优化车辆悬架系统性能的有力工具,可以帮助汽车工程师设计和改进车辆的悬架系统。 ### 回答2: 1/4被动悬架是一种用来减振车辆行驶时的振动的悬架系统。它是通过减少车辆底盘与车轮之间的冲击和震动来提高车辆的乘坐舒适度和稳定性。 Matlab/Simulink是一种常用的工程仿真软件,可以用于建立和模拟各种物理系统的数学模型。 在1/4被动悬架的Matlab/Simulink仿真模型中,我们可以通过建立悬架系统的数学方程和状态空间模型来模拟车辆在不同路况下的振动和动力学特性。 首先,我们需要根据悬架系统的几何参数和弹簧、减振器等元件的特性建立数学方程。然后,利用Matlab中的Simulink模块进行悬架系统的建模和仿真。可以使用Simulink中的各种元件来表示弹簧、减振器、质量等悬架系统的组成部分,并通过连接这些元件来构建一个完整的悬架系统模型。 在仿真模型中,我们可以设置不同的路况和车辆行驶条件来模拟车辆在各种情况下的振动响应。通过对模型的仿真结果进行分析,我们可以评估悬架系统的性能和优化方案,并进一步改进设计。 总之,1/4被动悬架的Matlab/Simulink仿真模型可以帮助工程师更好地理解和改进悬架系统,在车辆设计和调试过程中发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值