[深入浅出AutoSAR] SWC 设计与应用

2023-12-20 18:31

本文主要是介绍[深入浅出AutoSAR] SWC 设计与应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

依AutoSAR及经验辛苦整理,原创保护,禁止转载

专栏 《深入浅出AutoSAR》

全文 3100 字, 包含

1. SWC 概念

2. 数据类型(Datatype)

3. 端口(Port)

4. 端口接口(Portinterface)

5. Component


前言

SWC (Software Component) 是 AutoSAR 架构中的核心概念之一。SWC主要包含的内容有以下几点:数据类型(datatype),端口接口(Portinterface),端口(Port),软件组件(SW-C)。


1. SWC 概念

SWC最形象的对比就是一个.C文件了,那么Composition SWC顾名思义就是.C文件的集合,体现在代码上,就是保存.C文件的文件夹。

SWC 是指软件组件,是一个独立的、可重用的、自我描述的、可替换的软件单元。它具有清晰的输入输出接口,相较于整个汽车电子系统来说,是一个更小的功能模块。SWC 可以是一个可执行的模块或者是一个库,它独立于其他组件工作,自带相应的状态和管理接口。SWC 之间的通信通过 AutoSAR 定义的接口进行。SWC一般位于AUTOSAR架构的Application层。

在使用 AutoSAR 架构下,开发人员首先需要将整个汽车电子系统分解为不同的 SWC。每个 SWC 都应该具有一些特定的功能,如传感器数据处理、控制算法、用户界面等等。每个 SWC 都需要定义其输入输出接口,以及其它自述和控制接口,这些接口都要符合 AutoSAR 定义的规范。然后,开发人员需要将这些 SWC 部署在具体的硬件平台上,并在系统级别上进行配置和管理。

SWC 内容

通常包括以下内容:

  1. 接口定义文件:用于描述SWC和其他SWC之间的接口,包括输入输出信号、服务等。

  2. 算法实现:包括控制算法、诊断算法、通信协议等。

  3. 状态机和事件驱动的代码实现:用于描述SWC内部的状态和事件处理逻辑。

  4. 代码生成工具链:用于将SWC部署到目标平台,例如生成可执行代码、配置文件等。

2. 数据类型(Datatype)

SWC主要是用于上层应用层设计,偏算法设计,那么既然是算法就涉及函数,函数就涉及变量,变量就自然涉及变量的数据类型。AUTOSAR架构中Datatype方面我们主要用到的一般是下面4个:

SwBaseType定义ECU软件中使用的基本数据类型
ApplicationDataType应用数据类型
ImplementationDataType实现数据类型
Data Type Mapping
将应用数据类型和实现数据类型Mapping上

为什么要Mapping呢?

代码生成是基于实现数据类型的,就算没有应用数据类型,也能生成。

新建数据类型顺序:

  1. 新建实现数据类型,然后关联基本数据类型
  2. 新建应用数据类型
  3. 将应用数据类型和实现数据类型进行Mapping上(这里有个细节,datamapping要在IB里调用的)

3. 端口 (Port)

Port是依附在SWC上的概念,比如配置工具配置SWC后,需要配置这个SWC的Port。其实也好理解,如果一个C文件孤零零的放在那里,与别的C文件没有任何数据交互,那么作为一套代码中的一个C文件,根本没法发挥作用,所以必然在SWC上需要配置上或者输入(R-Port)的或者输出(P-Port)的Port。

端口比作结婚的两家亲家方,接口比作结婚时男方给女方的彩礼。在通信中,端口相当于需要接收和发送的两方;接口就相当于通信的数据内容,大概可以这么理解。那么显而易见,Port就可以分为接收,发送和接发送,分别对应RPort,PPort和RPPort。

所以,我们要实现数据通信,就必须建立Port,然后配置他对应的接口。值得注意的是,我们在SWC连线的时候就知道了,要实现连线,就必须PPort和RPort所调用的接口是一样的,当然很好理解,彩礼肯定一定要一样呀,如果男方说8.8万,女方说18.8万,这样的彩礼对接,即通信是不可能成功的。

SWC 有很多Port, 是 SWC 的输入输出。 可作多个 SWC 的交互。实际上,在配置好的代码中,可以发现,如果我为SWC1和SWC2之间配置了一个SR的interface的话,SWC1中会有一个函数Rte_Write(),里面会对一个全局变量进行赋值。而另一边SWC2的里面会有一个Rte_Read()的函数,来读取这个全局变量。通过这种方式,达到了数据的交互。

Port分为require-port和provide-port,用来获取/提供某一服务或数据。当然,PortPrototype的定义需要先有PortInterface详细描述是有哪些信息交换,类似于面向对象的编程语言中的Interface定义。

当需要进行数据交换时,链接两个PortPrototype即可,R-P port成对连接(Assembly Connections)。

4. 端口接口(Portinterface)


Port之间具体传输何种信息,是由端口接口(PortInterface)定义的, 可以认为是Port所携带的内容。

PortInterface有以下几种种类

  • SenderReceiverInterface
  • NvDataInterface
  • ParameterInterface
  • ModeSwitchInterface
  • ClientServerInterface
  • TriggerInterface

常用的是SR接口(SenderReceiverInterface)和CS接口(ClientServerInterface),当然还有ModeSwitch接口(一般BswM和EcuM用),外部触发trigger接口,标定参数接口等。主要记录一下SR和CS这两种。

5. Component

Component表示系统的模块化部分。Component根据提供的和所需的接口定义其行为。 因此,Component作为一种类型,其一致性由这些提供和必需的接口定义(包括它们的静态和动态语义)。一个Component可以由多个类或组件拼凑而成。
 

Component 分类

图片来源: 【精选】AUTOSAR SWC详解-CSDN博客

Component 分类用途

6. Composition

CompositionSwComponentType用来将已有的SWC组合起来,作为一个功能组(也可以说是一个模块)来实现。这样的话内部逻辑对于集成人员来说不必关系,只需关心Composition级别暴露的port,由于CompositionSwComponentType本身也是SwComponentType,同样可以将它作为一部分,被包含于另一个CompositionSwComponentType当中。

当你需要暴露某一port时,应当在Composition上创建相同类型的Delegation port,并用Delegation Connection连接对应的SWC上的port。

Q/A

Q: Interface和port的关系和区别?

A: Interface与Implementation相对应,它有自己的规章制度,到我这里,要按我的标准做事。

port就象一个洞,到这里取/放东西,需要经过这个“洞”,因为其他地方是封住的,当然,也有可能存在其他的“洞”,重要的是,“洞”的后面黑黑一团,进出这个“洞”,可能有规则,可能有规则但不告诉你,还可能没规则。


参考

KimChan[Classic AUTOSAR学习] SWC设计与应用(一)-- 什么是SWC (Software Component) - 知乎
智能汽车小拿Autosar基本概念介绍: SWC/Runnable/Port和 Interface - 知乎 (zhihu.com)

Autosar Architecture (Learn from Scratch with Demo)

图片来源: COMIDOC

免责声明

本文根据公开信息整理,旨在介绍更多的汽车知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

这篇关于[深入浅出AutoSAR] SWC 设计与应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517038

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.