根据AUTOSAR标准开发用于建模软件组件的特定领域语言
bigegpt 2025-03-06 12:19 7 浏览
来源:智能汽车开发者平台 作者:Sasa
摘要
开发支持符合AUTOSAR标准的软件组件的建模特定领域的语言。支持建模软件组件的应用是基于TextX python模块和内部开发的建模框架。通过应用程序建模带来了更安全和更快的方式来应对各种模型的变化。在这篇论文中,我们展示了应用程序工作的基本算法、应用程序的部分功能和使用特定领域语言的例子,其结果显示了模型的一些变化。
I.简介
在现代汽车行业中,软件和电子控制单元正变得越来越多。如果我们观察一下现代新车,我们会注意到大量的电子控制单元(ECUs),它们基本上是车辆的思想,完成所有的逻辑和驱动工作。汽车行业的目标是提高司机、乘客和其他交通参与者的整体安全,这正是软件进入汽车行业的原因和方式。由于车辆中有大量的ECU,有非常复杂的系统,随着新的安全功能和技术的实施,这些系统变得更加复杂。
现代汽车甚至可以包含超过100个ECU,其中每个ECU都负责和执行特定的任务。每项任务都必须在准确规定的时间内执行。也就是说,任何应用于硬件层面的变化都会影响到软件,需要对软件进行额外的修改和校准,以使其按预期工作。面对这个问题,行业内领先的汽车公司已经建立了合作关系,他们将使硬件开发和软件开发相互独立。
II.AUTOSAR标准
AUTOSAR(汽车开放系统架构)是一个由汽车制造商、供应商、服务提供商和来自汽车E/E、软件行业的公司组成的全球开发合作伙伴关系。它成立于2003年。一个目标是使硬件开发独立于软件。
AUTOSAR架构由4层组成,如图1所示。这4个层是:应用层、运行时间环境(RTE)层、基本软件层(BSW),最下面是硬件(微控制器)层。
A.应用层
应用层是架构中最顶端的部分,由特定数量的软件组件组成,每个组件执行规定的任务。
1) 软件组件
软件组件代表了有明确任务的应用程序。组件的类型可以根据其目的而变化,例如,它可以是应用程序、传感器、执行器、输入/输出组件和更多。两个或多个组件之间可以通过连接的端口进行通信(只有连接的端口可以交换数据)。
有两种类型的端口可用,发送者/接收者(S/R)通信或客户端/服务器(C/S)通信。S/R通信主要用于定期传输数据,C/S通信仅用于按要求提供数据或操作。软件组件可以有1个或多个S/R或C/S类型的端口,这就是组件之间相互通信的方式。
除了端口,每个软件组件还有一个主要部分,那就是它的可运行性。Runnable代表软件组件的实现,它们可以被多种类型的触发器所触发。触发器可以是初始化触发器(启动时执行)、周期性触发器(在定义的时间段内执行)、客户端请求(请求操作)等等。
B.运行时间环境 (RTE)
RTE实现了虚拟功能总线,有助于ECU内的SWC和ECU外的SWC的连接。它使用端口和接口实现通信路径,用于连接软件组件和下层的基本软件(BSW)模块。
C.基础软件 (BSW)
基础软件(BSW)是标准化的软件模块,提供运行上层软件的功能部分所需的各种服务。
III.建模中的应用
AUTOSAR模型描述的是将被集成到汽车ECU中的软件。有了模型,软件的配置就有了很多可能性,也就是说,通过模型我们可以定义将被使用和传输的数据类型、组件的端口数量、组件的执行时间等。为了改变模型(改变一些配置),必须要有专门的软件和使用许可才能做到这一点。使用特定领域语言(DSL)进行建模的应用程序可以大大简化和加快建模阶段。使用应用程序进行建模,归根结底就是把模型中需要的变化写到一个文件中,然后执行该应用程序。
使用这种应用程序进行建模的优势很多。最重要的优势之一是,如果存在人为错误,应用程序将不允许对模型进行修改。除此以外,应用变化所需的时间应更短,所使用的语言应简化并对用户友好(易于阅读和理解),等等。为了开发这种建模应用程序,使用了名为TextX的python模块来创建特定领域的语言,并在模型中使用内部开发的建模框架来操作AUTOSAR对象。
A.TextX 模块
TextX 模块是一个用于创建domaing specific语言(DSL)的工具。创建的DSL将被用于编写模型中想要的变化。在这个模块的帮助下,我们定义了DSL的语法,这意味着每一个动作(模型中的变化)都必须以特定的方式编写,以使变化成功应用于模型。
B.建模框架
建模框架是开发的工具,能够更容易地操纵模型内的对象。该工具遵循AUTOSAR标准,模型中的每个字段/属性都被视为应用程序中的一个对象。
IV.使用建模应用程序
上述TextX模块与建模框架相结合,提供了对各种模型进行修改的可能性。图片2显示了应用程序的工作情况。有三个输入文件,语法定义变化应该如何写才能成功应用,文件包含对模型的实际需要的变化和模型本身。
作为应用程序的输出,对已经修改过的模型,只有在符合标准和规则的情况下,才会对其进行需要的修改。
在图片3中,显示了应用程序的工作原理(核心算法)。
在建模应用程序的开始阶段,所有的输入都被加载(语法、包含变化和模型的文件)。
在语法检查中,它被分析为书面变化是否符合定义的语法。如果在这里出现一些错误,这意味着该变化不被支持或书写错误,在这种情况下,不应采取进一步行动。
语法检查成功后,在建模框架的协助下,模型被加载为输入。模型的所有属性和配置都被作为对象加载到应用程序中,一旦完成,加载的模型就可以用输入文件中描述的变化进行修改。
如果改变需要修改模型中已经存在的部分(例如,想改变现有端口的名称),首先将在建模框架的帮助下找到代表该确切部分的对象。之后,当它被找到时,基本上变化将作为修改对象的一个属性来执行。在其他情况下,如果需要创建新的东西,将有必要定义创建这种对象所需的强制性信息(例如,如果创建新的组件,需要的信息是名称,它应该有哪些端口和可运行性)。在提供这些信息后,建模框架将创建对象并将其添加到模型中。
完成对象操作(创建新对象或修改现有对象)后,有必要根据AUTOSAR标准和约束条件进行检查。这样做的目的是为了消除人为错误因素,并保证应用于模型的变化是有效的。如果有任何形式的违反,更改将不会被应用到模型上。
在应用结束时,只有当所有条件都得到满足时,模型才会完成修改。
V.建模应用实例
出于测试目的,一些AUTOSAR模型被作为输入,并将对其进行某些修改。我们将定义如下变化,在现有的两个组件(CtApTest1_SH00和CtCdMiddlewareQM_SH00)上,将增加两个新的端口,由两个数据元素组成。创建端口后,它们将被连接起来,以便在新创建的端口之间实现通信。
图4它展示了如何编写更改以完成上面描述的所需更改。
根据写入修改的输入文件,可以看到名称为PpTestInterface的端口被添加到两个不同的组件CtApTest1_SH00和CtCdMiddlewareQM_SH00。端口内的数据元素数量或将添加的端口数量没有严格规定,只要符合AUTOSAR标准,由用户决定。
在执行建模应用程序后,将看到书面修改应用在输入模型上。
在图片5和图片6中,显示了建模应用的结果。正如在图片5中所看到的,在arxml文件中,想要添加的端口很容易被添加到组件CtApTest1_SH00中,使用建模应用程序,它包含为该端口定义的所有数据元素。
在CtApTest1_SH00组件上,我们定义了端口为生产者(图像中的P-端口),意味着数据将从这里被进一步发送,而在另一个组件CtCdMiddleware_SH00上,我们创建了相反的接收器(R-端口),它将接收从生产者发送的任何数据,使这些端口兼容连接。
图片6显示了新创建的端口之间的连接器。基本上这种连接为它们提供了通信和交换数据的能力。
VI.总结
建模本身越来越复杂,越来越耗时。此外,为了对模型进行任何改变,必须要有使用软件的许可证和知识。这个建模应用程序的主要目标是完成简单和快速的建模,在对模型进行修改时犯错误的风险很低。
建模应用的主要优势体现在简单、快速和可靠的模型更改上。在一个文件中编写简单的、人类可读的变化,应足以执行一些复杂的模型更新。
进一步改进建模应用程序的下一步可能是可视化地展示书面更改。一旦编写了更改,终端用户将更容易直观地看到和理解将要进行的更改。这可以通过使用对象图或组件图来实现。
参考文献:
[1]M. Staron, “Automotive Software Architecture. An introduction”,Chapter, pp 1-19
[2]Vector Academy: AUTOSAR fundamentals
[3]Robert Warschofsky, AUTOSAR Software Architecture, Hasso- Plattner-Institute for Softwaresystemtechnik, https://hpi.de/fileadmin/user_upload/fachgebiete/giese/Ausarbeitungen_ AUTOSAR0809/Software_Architecture_Warschofsky.pdf
[4]BSW modul, https://automotive.wiki/index.php/Basic_Software_Module
相关推荐
- 程序员请收好:10个非常有用的 Visual Studio Code 插件
-
一个插件列表,可以让你的程序员生活变得轻松许多。作者|Daan译者|Elle出品|CSDN(ID:CSDNnews)以下为译文:无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人...
- PADS在WIN10系统中菜单显示不全的解决方法
-
决定由AD转PADS,打开发现菜单显示不正常,如下图所示:这个是由于系统的默认字体不合适导致,修改一下系统默认字体即可,修改方法如下:打开开始菜单-->所有程序-->Windows系统--...
- 一文讲解Web前端开发基础环境配置
-
先从基本的HTML语言开始学习。一个网页的所有内容都是基于HTML,为了学好HTML,不使用任何集成工具,而用一个文本编辑器,直接从最简单的HTML开始编写HTML。先在网上下载notepad++文...
- TCP/IP协议栈在Linux内核中的运行时序分析
-
本文主要是讲解TCP/IP协议栈在Linux内核中的运行时序,文章较长,里面有配套的视频讲解,建议收藏观看。1Linux概述 1.1Linux操作系统架构简介Linux操作系统总体上由Linux...
- 从 Angular Route 中提前获取数据
-
#头条创作挑战赛#介绍提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用resolver,在AngularApp中应用re...
- 边做游戏边划水: 基于浅水方程的水面交互、河道交互模拟方法
-
以下文章来源于腾讯游戏学堂,作者Byreave篇一:基于浅水方程的水面交互本文主要介绍一种基于浅水方程的水体交互算法,在基本保持水体交互效果的前提下,实现了一种极简的水面模拟和物体交互方法。真实感的...
- Nacos介绍及使用
-
一、Nacos介绍Nacos是SpringCloudAlibaba架构中最重要的组件。Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS...
- Spring 中@Autowired,@Resource,@Inject 注解实现原理
-
使用案例前置条件:现在有一个Vehicle接口,它有两个实现类Bus和Car,现在还有一个类VehicleService需要注入一个Vehicle类型的Bean:publicinte...
- 一文带你搞懂Vue3 底层源码
-
作者:妹红大大转发链接:https://mp.weixin.qq.com/s/D_PRIMAD6i225Pn-a_lzPA前言vue3出来有一段时间了。今天正式开始记录一下梗vue3.0.0-be...
- 一线开发大牛带你深度解析探讨模板解释器,解释器的生成
-
解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...
- Nacos源码—9.Nacos升级gRPC分析五
-
大纲10.gRPC客户端初始化分析11.gRPC客户端的心跳机制(健康检查)12.gRPC服务端如何处理客户端的建立连接请求13.gRPC服务端如何映射各种请求与对应的Handler处理类14.gRP...
- 聊聊Spring AI的Tool Calling
-
序本文主要研究一下SpringAI的ToolCallingToolCallbackorg/springframework/ai/tool/ToolCallback.javapublicinter...
- 「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作
-
一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...
- 在MySQL登录时出现Access denied for user ~~ (using password: YES)
-
Windows~~~在MySQL登录时出现Accessdeniedforuser‘root‘@‘localhost‘(usingpassword:YES),并修改MySQL密码目录适用...
- mysql 8.0多实例批量部署script
-
背景最近一个项目上,客户需要把阿里云的rdsformysql数据库同步至线下,用作数据的灾备,需要在线下的服务器上部署mysql8.0多实例,为了加快部署的速度,写了一个脚本。解决方案#!/bi...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- skip-name-resolve (63)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)