基于ARXML开发CP SWC的实践
最新更新时间:2024-10-28
阅读数:
作者
|
不可说
出品
|
汽车电子与软件
#01
前 言
现在汽车电子领域,基于AUTOSAR(AUTomotive Open System ARchitecture)CP(Classic Platform)架构平台开发汽车电子软件已成为行业内的标准做法与主流趋势。这一趋势的兴起,主要归因于AUTOSAR CP架构能够提供高度模块化、标准化的软件设计框架。
在软件开发流程的初期阶段,软件架构师基于AUTOSAR CP架构的规范与指导原则,结合项目具体需求,设计软件的整体架构及系统模型。这一过程不仅包括对软件功能模块的划分、接口定义,还涉及到通信机制的选择,确保系统的可靠性、可扩展性和可维护性。
完成软件架构及模型设计后,这些成果将被移交给软件开发工程师进行下一阶段的实施。软件开发工程师利用AUTOSAR提供的开发工具(如MATLAB、Davinci Developer等)进行软件模型的详细构建。这一过程包括将抽象的架构模型转化为具体的软件代码,实现各个功能模块的具体逻辑。
本文将带入软件开发工程师的角色,接收一份软件架构ARXML文件,对其进行进一步的开发。
#02
工具准备
本文将使用MATLAB完成符合AUTOSAR CP规范的ARXML文件开发;
建模时,对MATLAB版本和工具包有一定的要求。较新的MATLAB版本(如MATLAB 2020及以后版本)通常能够提供更好的支持和更多的功能。建议使用MATLAB的最新版本或至少是一个相对较新的稳定版本。
除此之外,还需要特定的工具箱和插件。AUTOSAR Blockset:如果老一点版本的MATLAB标准安装中可能不包含专门的AUTOSAR Blockset,但可以通过MATLAB的附加功能管理器或MATLAB Central File Exchange下载并安装相关的AUTOSAR支持工具包。这些工具包通常提供了特定的AUTOSAR相关块和配置选项,以支持AUTOSAR SWC的建模和代码生成。Embedded Coder用于将Simulink模型和MATLAB函数自动转换为优化的C和C++代码。在AUTOSAR SWC建模中,Embedded Coder能够将模型转换为符合AUTOSAR标准的代码。
#03
Composition模型导入
将AUTOSAR软件Composition的ARXML描述导入架构模型。
创建AUTOSAR架构模型(需要System Composer)后,开发AUTOSAR软件top设计。
导入在架构模型的顶层Composition的Simulink表示。Composition导入需要一个没有功能内容的开放式AUTOSAR架构模型。
可以使用MATLAB指令直接创建:
% 创建一个AUTOSAR架构模型
modelName = "myArchModel";
archModel = autosar.arch.createModel(modelName);
指令执行完成后,创建了一个名为
myArchModel
的空白架构模型;
在架构模型中的
Modeling TBA
栏, 选择
Component menu
, 再选择
Import from ARXML
.
在AUTOSAR Importer app中,在
ARXML Files
选项中选择要导入的ARXML路径,可以选择同一路径下的一个或者多个文件。
解析该ARXML内容如下:
在
Composition name
选项框中列举了ARXML文件中解析出来的compositions。选择/Company/Components/ThrottlePositionControlComposition。
如果要要查看组合创建的其他建模选项,可以勾选上“Configure Modeling Options.”;
在这些选项中可以指定:
-
定义AUTOSAR软件Composition的行为,可以选择是否包含或不包含哪些解析出来的Components。默认情况下,导入解析出来的所有的Components。
-
Simulink data dictionary(数据字典),用于放置导入的AUTOSAR数据类型的数据对象。
-
为模型创建周期性runnable,可以选择Auto、AtomicSubsystem、FunctionCallSubsystem。
-
Component models选项中,可以为即将导入的AUTOSAR Components导入现有的Simulink对象模型,直接将二者关联起来。
如果所有设置均为默认,则生成如下形式的符合AUTOSAR规范的Simulink 模型,生成六个SWC模型;
上述过程也可以直接使用命令行导入:
先通过importer方法导入ARXML文件:
% Import composition from file ThrottlePositionControlComposition.arxml
importerObj = arxml.importer("ThrottlePositionControlComposition.arxml"); % Parse ARXML
返回的对象中包含了Composition、Component名称类型等;
importerObj =
The file "E:\Project\MatlabProject\importSWA\ppt\ThrottlePositionControlComposition.arxml" contains:
1 Composition-Software-Component-Type:
'/Company/Components/ThrottlePositionControlComposition'
2 Application-Software-Component-Type:
'/Company/Components/Controller'
'/Company/Components/ThrottlePositionMonitor'
3 Sensor-Actuator-Software-Component-Type:
'/Company/Components/AccelerationPedalPositionSensor'
'/Company/Components/ThrottlePositionActuator'
'/Company/Components/ThrottlePositionSensor'
再使用importFromARXML导入Composition:
importFromARXML(archModel,importerObj, "/Company/Components/ThrottlePositionControlComposition");
同样完成了模型的创建,生成了对应的SLX文件;
由于此Composition导入配置要包含AUTOSAR Components(相当于
Exclude internal behavior from import
没有勾选),因此导入为Composition中的每个Components创建了Simulink模型。
生成的Composition模型文件也需要在Simulink界面保存下;
至此,算是完成了AUTOSAR CP软件架构模型在MATLAB Simulink 中的导入。
#04
模型的配置
打开模型的Configuration,系统目标文件(Target Linking Configuration, TLC)被默认设置为autosar.tlc,这一操作预示着整个开发流程将围绕AUTOSAR标准展开,当模型搭建完成后,通过Simulink集成的代码生成工具,可以将模型自动转换成高质量的C代码。这一过程不仅包括将模型中的逻辑和算法转换为C语言代码,还会根据autosar.tlc中的配置,自动生成符合AUTOSAR标准的软件架构代码,包括RTE层代码、组件实现代码以及必要的配置和元数据文件。这样生成的代码将能够无缝集成到基于AUTOSAR的ECU中;
在“Code Generation”下的“AUTOSAR Code Generation”(AUTOSAR代码生成)选项中,我们需要特别关注架构XML文件的配置。架构XML文件是AUTOSAR软件架构描述(SW-AR)的核心组成部分,它定义了系统的软件组件、运行实体、通信接口以及它们之间的依赖关系。这些文件是自动代码生成流程中的关键输入,因为它们为代码生成器提供了关于系统架构的详尽信息。
需要确认当前配置中引用的架构XML文件的版本。由于AUTOSAR标准会定期更新,不同版本的架构XML文件可能支持不同的特性集和兼容性要求。因此,了解并选择与项目需求相匹配的XML文件版本至关重要,当前选择的是AUTOSAR CP 4.2版本。
#05
模型算法组入
创建AUTOSAR Composition的初始Simulink 模型后,可以开发Composition中的每个SWC。对于每个SWC,可以优化AUTOSAR配置并创建算法模型内容。
例如,ThrottlePositionControlComposition组合模型中的控制器组件模型包含一个原子子系统(atomic subsystem)Runnable_Step_sys,它表示AUTOSAR周期性Runnable。Runnable_Step_sys子系统包含控制器行为的初始stub实现。
这是节气门位置控制器行为的一种可能实现方式。该SWC将来自踏板位置传感器的APP传感器百分比值和来自油门位置传感器的TPS百分比值作为输入。基于这些值,控制器计算误差。错误是基于踏板传感器的操作员想要油门的位置与当前油门位置之间的差异。在此实现中,离散PID控制器块使用误差值来计算油门指令百分比值,以提供给油门执行器。示波器显示随时间变化的误差值和离散PID控制器块输出值。
在SWC视图下,从APP 菜单进入AUTOSAR组件;
在左下角的代码映射-组件接口(Code Mapping-SWC Interface)内可以查看当前simulink模型与AUTOSAR SWC之间各个元素的映射关系,刚才建立的Runnable_Step_sys 模块中Simulink系统模型,对应着名为Runnable_Step的Runnable;除此外,也可以查看输入、输出端口、参数、IRV数据等。
#06
代码与ARXML生成
在AUTOSAR菜单栏,点击代码生成,生成符合AUTOSAR规范的C代码;
返回主界面,在MODELING菜单栏中选择生成代码和ARXML文件(先修改配置:导出单个ARXML文件,而非模块化导出);
选择默认路径或者自己修改;
看诊断器提示完成编译;
生成了各个SWC的RTE代码与Composition的ARXML文件。
/ END /