AUTOSAR笔记:AUTOSAR软件组件级设计与开发(三)

发布时间 2023-05-31 17:17:29作者: 明明1109

AUTOSAR软件组件级设计、开发针对应用层软件,有2种方法:
1)基于Matlab/Simulink进行应用层软件组件的模型建立,并配置生成符合AUTOSAR规范的arxml描述文件——”自上而下“的工作流程;
2)还有一种”自上而下“的工作流程。

Matlab/Simulink与Embedded Coder工具

Matlab/Simulink工具简介

Simulink是Matlab重要组件,提供一个动态系统建模、仿真、综合分析的集成环境。特点:无需大量编码,只需要简单直观的鼠标操作,就能构造出复杂的系统。

Stateflow提供了一个编辑器和一些用于绘制状态机和流程图的图形对象。通过选择状态、转移和结点,然后将其拖入Stateflow编辑器,即构建状态机。

Embedded Coder工具

Embedded Coder工具可以生成可读、紧凑且快速的C和C++代码,以便于嵌入式处理器、目标系统快速原型板和量产中使用的MCU。Embedded Coder工具丰富了Matlab Coder和Simulink Coder的配置选项,并对其进行高级优化,从而可对生成代码段函数、文件和数据进行细粒度控制。

基于上述工具可以实现基于模型的设计(Model-Based Design,MBD),具有如下优势:
1)图形化设计;
2)早期验证;
3)代码自动生成;
4)文档自动化等。


基于Matlab/Simulink软件组件开发

主要是对AUTOSAR软件组件内部行为的实现,即实现内部算法。

Matlab/Simulink与AUTOSAR基本概念的对应关系

Embedded Coder可基于Matlab/Simulink模型生成符合AUTOSAR规范的代码、描述文件(arxml),但在建模过程中,需要按一定的对应关系设计AUTOSAR软件组件的各个组成元素,所以在使用Matlab/Simulink进行基于模型的设计前,首先要清理AUTOSAR与Matlab/Simulink元素的对应关系。

常用元素对应关系:

AUTOSAR与Matlab/Simulink数据类型的对应关系:

软件组件内部行为建模方法

Simulink中,可以直接进行软件组件内部行为设计,利用Function Call Subsystem(函数调用子系统)来表征AUTOSAR软件组件的Runnable Entity(运行实体);利用Function Call(函数调用)来表征AUTOSAR软件组件的RTE Event(RTE事件)。
基于这一思路,以LightControlSWC为例,进行内部行为建模方法及注意点介绍。

首先,需要新建一个函数调用子系统,如下所示。Function Call Subsystem表示一个运行实体,内部模型为运行实体所封装的算法,而function()就是运行实体店RTE事件。

根据需求,对LightControlSWC进行内部行为建模:

由于Inport 1(Event_JudgeLightState)和Inport 2(Event_LightControl)作为RTE事件,所以需要勾选Output function all。并且,对于周期性触发的RE_JudgeLightState,作为RTE事件的Inport 1中的Sample time则对应该运行实体的调用周期。

如下所示:

其次,由于LightControlSWC中2个运行实体(RE)涉及运行实体间变量(IRV),所以建模过程中需要对相关信号进行标示,这样才能在后续模型配置过程中被识别为Inter-Runnable Variables。

同理,LightRequestSWC模型如下:

AUTOSAR客户端/服务器机制的实现方法

Simulink中可以实现AUTOSAR客户端/服务器机制。因为该机制本质是函数调用关系,即客户端调用服务器的函数。根据AUTOSAR与Simulink元素对应关系表中C/S PPort(C/S供型端口),即Server端,对应Simulink Function(Simulink函数模块);C/S RPort(C/S需型端口),即Client端,对应Function Caller(函数调用模块)。

与IOAbstractionSWC交互的应用层软件组件需要用到C/S通信,这里以RE_JudgeLightState运行实体中的Client端设计为例。该端口需要调用IOAbstractionSWC中的函数,并从中读取灯的状态信息,对于A车灯是读取AD值,对于B车灯是读取ICU捕获的PWM输入值。

RE_JudgeLightState Client端实现:

Function Caller配置:


软件组件(SWC)代码及描述文件配置生成

Simulink可生成符合AUTOSAR规范的代码与arxml描述文件,但在生成之前,需要对SWC相关信息进行配置,如端口接口、端口、运行实体等,并且需要和模型中的元素进行映射。

求解器及代码生成相关属性配置

1)进行代码配置生成前,要保证当前求解器(Solver)所选取的步长模式是定步长(Fixed-step)的,即Solver options选为Fixed-step模式,如下图:

2)要配置系统目标文件,Simulink主菜单点击Code,选择C/C++ Code中的Code Generation Options选项,在弹出界面中选Solver配置,把System target file改为autosar.tlc。

注:tlc是target language compiler(目标语言编辑器)的全称,类似于脚本语言,可控制代码生成的格式。默认存放路径:
matlab根目录\toolbox\rtw\targets\AUTOSAR\AUTOSAR\AUTOSAR.tlc

此时,Code Generation根目录下会出现AUTOSAR Code Generation配置选项:

①Generate XML file for schema version选项中,可以选择生成描述文件的AUTOSAR版本,从2.1 -> 4.2。

②Maxium SHORT-NAME length属性可以设置命名的最大长度,即之后在配置SWC特性时自定义名字的最大长度。注意AUTOSAR命名规则:对于名称标识符,最多包含32个字符,以字母开头,包含字母、数字、下划线;对于路径识别符,至少含1个“/”,分隔符之间的字符串最多包含32个字符,以字符开头,包含字母、数字、下划线。

③Use AUTOSAR compiler abstraction macros选项则是开启或关闭AUTOSAR规范中定义的一些宏,如FUNC等。

模型配置

Simulink中设计完SWC内部行为,并且完成上述准备工作后,可以进行模型的配置,即将模型配置成AUTOSAR SWC。点菜单Code>C/C++ Code>Configure Model as AUTOSAR Component...

会弹出Configure AUTOSAR Interface界面:

①Simulink-AUTOSAR Mapping可以将Simulink所建模型的元素与AUTOSAR SWC相关元素进行对应,可参考Matlab/Simulink与AUTOSAR基本概念的对应关系。

Simulink Mapping菜单下,可见到模型的名字,如上图是LightControlSWC模型,这里默认将其映射到一个同名的SWC。下面几种,均能与AUTOSAR SWC元素进行映射:
1)Inports:输入端口;
2)Outports:输出端口;
3)Entry Point Functions:入口点函数;
4)Function Callers:函数调用模块;
5)Data Transfers:数据传递。

当切换到AUTOSAR Properties配置界面时,可配置与AUTOSAR SWC相关元素及arxml文件生成选项,可配置内容:

1)原子组件(AtomicComponents)配置
①ReceiverPorts(接收者端口);
②SenderPorts(发送者端口);
③SenderReceiverPorts(发送者接收者端口);
④ModeReceiverPorts(模式接收者端口);
⑤ClientPorts(客户端端口);
⑥ServerPorts(客户端端口);
⑦NvReceiverPorts(非易失性数据接收者端口);
⑧NvSenderPorts(非易失性数据发送者端口);
⑨NvSenderReceiverPorts(非易失性数据发送者接收者端口);
⑩Runnables(运行实体);
⑪IRV(运行实体间变量);

2)端口接口(Port Interfaces)配置
①S-R Interfaces(发送者-接收者接口);
②M-S Interfaces(模式转换接口);
③C-S Interfaces(客户端-服务器接口);
④NV Interfaces(非易失性数据接口);

3)计算方法(CompuMethods)配置

4)XML文件选项(XML Options)配置
下面以LightControlSWC模型配置为例,介绍SImulink配置成AUTOSAR SWC的具体方法。建议先在AUTOSAR Properties界面完成SWC元素的定义与相关配置,再切换到Simulink-AUTOSAR Mapping界面完成AUTOSAR SWC元素与Simulink元素的映射。

AUTOSAR Properties配置

先配置端口接口:LightControlSWC涉及S-R Interfaces和C-S Interfaces,先配置这2个。

对于S-R Interfaces,点击“+”新建接口,点击每个新建的S-R Interfaces,完成数据元素(DataElements)的添加:

对于C-S Interfaces,点击“+”新建接口,完成操作(Operations)和参数(Arguments)的添加:

LightControlSWC的设计。根据需求,LightControlSWC主要涉及ReceiverPorts、SenderPorts、ClientPorts、Runnables和IRV。

对于所有Port配置,总体上都是先新建一个Port,再引用一个上述定义的端口接口。LightControlSWC原子软件组件的ReceiverPorts,SenderPorts、ClientPorts的配置,如下图。

接着,定义运行实体及其RTE事件。Event界面,点击Add Event新建一个RTE事件,按需可知,LightControlSWC包含2个运行实体:周期性触发 + 收到端口数据后触发。

周期性触发运行实体配置:

对于收到端口数据后触发的运行实体,可以选择DataReceivedEvent,并且需要选择一个触发源,即选择一个端口数据元素:

Runnable_Init运行实体是Simulink自动创建,用于完成Simulink模型初始化,一般单次运行。

注:AUTOSAR 4.0以上才支持InitEvent配置。

SWC配置最后是IRV——运行实体间变量的配置:

最后,XML Options(XML文件选项)配置,建议Export XML file packaging选择Single file,这样描述文件可以集中在一个arxm中。

完成AUTOSAR Properties配置后,需要进行Simulink-AUTOSAR Mapping配置——将Simulink模型元素与AUTOSAR SWC元素映射。

1)Inports/Outports
Simulink中Inports、Outports需要与前面定义的SWC端口映射,且要选择端口的数据元素,尤其体现在多个端口引用同一个端口接口,且该端口接口中定义了多个数据元素。

如下图:

2)Entry Point Functions
入口点函数主要配置模型中函数与AUTOSAR SWC运行实体的映射关系。每个运行实体本质是一个函数,Simulink中如果用函数调用子系统(Functions Call Subsystem),在映射时就能将其看作一个运行实体。

LightControlSWC各运行实体与模型元素的映射配置结果:

函数调用(Function Callers)主要是配置Simulink模型元素与Client端口调用的映射。Client/Server模式本质是函数的调用关系;其中,函数是Client-Server Interface中定义的操作(Operations)。

LightControlSWC各Client端口与模型元素的映射结果:

4)Data Transfers
数据传递指2个函数调用子系统间传递的数据,由于函数调用子系统对应运行实体,所以各组数据传递关系需要和AUTOSAR SWC中运行实体间变量(IRV)进行映射。

LightControlSWC各运行实体间变量与模型元素的映射结果:

符合AUTOSAR规范的代码及描述文件生成

Simulink进行SWC设计开发,主要分为2阶段:
①第一阶段:Simulink建模阶段。必须遵循AUTOSAR SWC概念与Simulink模型概念的对应关系进行模型设计,为后续配置做准备。
②第二阶段:模型配置阶段。进行AUTOSAR Properties配置和Simulink-AUTOSAR Mapping配置,即完成AUTOSAR SWC元素的设计及其与Simulink模型元素的映射。

完成①②,可以生成代码+描述文件。生成文件位于Current Folder。

最终,该SWC生成11个文件,主要内容与作用描述如下:
①LightControlSWC.c:包含所有SWC运行实体的模型算法实现代码,每个运行实体分别对应一个函数。

FUNC(void, LIGHTCONTROLSWC_CODE) RE_JudgeLightState(void)
{
    ...
}

②LightControlSWC.h:包含系统的数据结构、函数外部声明。
③LightControlSWC_private.h:包含SWC私有函数的定义和数据声明。
④LightControlSWC_types.h:包含用typedef定义的模型中所有的参数结构体。
⑤rtwtypes.h:定义Matlab/Simulink的数据类型格式。
⑥LightControlSWC.arxml:这个arxml描述文件里描述了LightControlSWC的端口、端口接口、数据类型和内部行为等AUTOSAR SWC中的元素。
⑦LightControlSWC_external_interface.arxml:描述了LightControlSWC所包括的C/S接口信息。
⑧其他:主要都是一些RTE相关的定义文件。


在Simulink中导入SWC描述文件——“自上而下”的工作流程

“自上而下”的工作流程需要先在AAT(AUTOSAR Authoring Tool)工具(如ISOLAR-A)中完成SWC框架设计,并将arxml描述文件导入Simlink完成内部算法的实现,然后再生成符合AUTOSAR规范的代码及arxml描述文件。
这里以EcuAliveIndicatorSWC进行讲解。

这里假设已基于ISOLAR-A工具完成EcuAliveIndicatorSWC框架设计,且得到arxml文件,在Matlab中编写如下脚本>Run,即可完成描述文件导入、模型创建。

// SWCArxmlImport.m
obj = arxml.importer({'EcuAliveIndicatorSWC.arxml', 'ISOLAR_PlatformTypes.arxml'})
createComponentAsModel(obj, '/IoHwAbstraction/EcuAliveIndicatorSWC', 'CreateInternalBehavior', true)

这样,Simulink会根据SWC描述文件信息自动生成组件模型,可以基于SWC模型框架进行内部算法的实现:


上一篇:AUTOSAR笔记:AUTOSAR系统解决方案示例(二) 下一篇:AUTOSAR笔记:AUTOSAR系统级设计(四)