首页 > 其他分享 >AUTOSAR笔记:AUTOSAR软件组件级设计与开发(三)

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

时间:2023-05-31 17:25:17浏览次数:57  
标签:AUTOSAR LightControlSWC SWC 配置 端口 Simulink 笔记 组件

目录

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系统级设计(四)

标签:AUTOSAR,LightControlSWC,SWC,配置,端口,Simulink,笔记,组件
From: https://www.cnblogs.com/fortunely/p/17446775.html

相关文章

  • Spring MVC官方文档学习笔记(二)之DispatcherServlet
    1.DispatcherServlet入门(1)SpringMVC是以前端控制器模式(即围绕着一个中央的Servelt,DispatcherServlet)进行设计的,这个DispatcherServlet为请求的处理提供了一个共用的算法,即它都会将实际的处理工作委托给那些可配置的组件进行执行,说白了,DispatcherServlet的作用就是统......
  • (动力节点)老杜零基础Java笔记-第一章 学前准备
    Java零基础教程视频(零基础学Java必刷,适合Java0基础,Java初学入门)课堂截图为什么使用截图工具在听课的过程中,有的时候老师操作的比较快,通过截图的方式将老师的操作保存下来,以便后期的操作。另外截图之后的图片也可以用于笔记的记录,在笔记当中最好采用图文并茂的方式,这样更加利于......
  • 7.4精读笔记
    逻辑结构设计概念结构是独立于任何一种数据模型的信息结构,逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。7.4.1E-R图向关系模型的转换E-R图向关系模型的转换要解决的问题是,如何将实体型和实体......
  • 使用NPOI组件简单实现导出
    首先我们在NuGet程序包管理中下载NPOI组件目前版本稳定的是:2.4.1这里可以看一下NPOI下载完成后生成的四个引用,其作用然后废话也不多说了,直接上代码然后我们在项目中进行引用usingNPOI.SS.UserModel;usingNPOI.XSSF.UserModel;usingNPOI.HSSF.UserModel;点......
  • 精读7.35读书笔记
    概念结构设计概念结构设计的第一步就是对需求分析阶段收集到的数据进行分类、组织,确定实体、实体的属性、实体之间的联系类型,形成E-R图。首先,如何确定实体和属性这个看似简单的问题常常会困扰设计人员,因为实体与属性之间并没有形式上可以截然划分的界限。实体与属性的划分原则......
  • SimpleAdmin手摸手教学之:基于Ant Design Tree组件实现树形结构数据的异步加载
    一、说明当有一个树形结构的数据有非常多个节点的时候,一次性加载所有节点会显得过于臃肿,可能会对性能造成影响,正好AntDesign的树(Tree)组件支持异步加载,于是我就想把异步加载封装为一个组件,可以减少接口数据返回,点击展开节点,动态加载数据。非常好用!二、前端实现需要接收一些......
  • 《重构》1-6章读书笔记
    《重构》1-6章读书笔记重构的定义所谓重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减小整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它......
  • python~发布自己的py组件
    你使用python写的东西,想让其它人直接使用,可以像java,.net一样,发到包管理平台即可,在python中,你可以使用twine这个工具来实现发布,就像.net里的nuget,java里的mvndeploy一样。本地自己用添加一个hello.py的文件,里面有个say方法,打印字符importsysdefsay(to):print('hel......
  • pytorch笔记
     @,torch.matmul,torch.mm:矩阵相乘,第一个矩阵的列和第二个矩阵的行维度相同      *,torch.mul:矩阵对应元素相乘,所以两个矩阵维数相同,同维矩阵torch.dot:一维的张量进行相乘再相加,结果是一个值 ......
  • solidworks笔记20230531
    CreatingaNewPipeorTubePart帮助里面规定的属性如下:$PRP@PipeIdentifier$PRP@SpecificationOuterDiameter@PipeSketchInnerDiameter@PipeSketchNominalDiameter@FilterSketch$PRP@PipeIdentifier$PRP@Specification......