AUTOSAR笔记:AUTOSAR软件组件级设计与开发(三)
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中。
Simulink-AUTOSAR Mapping配置
完成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系统级设计(四)