随着汽车“新四化”的深入发展,电子电气系统越来越复杂,电子电气架构革新和拓展势在必行。汽车面向服务的架构(SOA)、基于模型的开发方式(MBD)、AUTOSAR和以太网等已成为电子电气架构的发展趋势。
DDS(Data Distribution Service),是目前国防、航空等领域广泛应用的通信中间件技术,其核心规范有两个,分别是DDS specification和DDSI-RTPS specification。DDS specification定义了DDS的应用程序接口和基本行为,DDSI-RTPS specification定义了DDS的传输实现,目的是实现不同DDS产品的互操作性。除此之外,DDS在2017年发布了DDS-RPC规范,使得DDS能够基于发布-订阅模型实现远程过程调用(RPC),满足SOA架构的需求。
PREEvision是汽车行业的分布式系统开发工具,主要面向需求工程、AUTOSAR系统、软硬件设计以及线束开发,覆盖电子电气设计全流程。PREEvision依托于模型开发方式,能够提供多人协同的工作环境,支持系统元素的抽象、分解和复用;对于多平台复杂车型的设计过程,提供变型管理、一致性校验、动态评估等一系列解决方案,帮助工程师提前发现设计缺陷,缩短车型开发周期。
图片来源Vector
汽车以太网凭借其带宽和时效性,成为车内首选网络技术。PREEvision支持符合AUTOSAR 标准的汽车以太网网络设计;支持采用基于信号的AUTOSAR Classic平台以及面向服务的AUTOSAR Adaptive平台;支持常见的以太网高层协议,如SOME/IP和DoIP;对于面向服务的以太网设计(SOA),支持定义服务接口和相应的软件组件。虽然PREEvision暂时不支持DDS协议,但是可以利用PREEvision的SOA Diagram来展现服务、服务接口以及各个参与者之间的依赖及关联关系,然后使用PREEvision的二次开发功能,导出我们想要的IDL格式文件,用于后续的开发使用。
服务的建模:
PREEvision以服务为导向的设计流程,可以提供SOA Diagram来展示服务和服务接口及其参与者之间的关联关系。
图片来源PREEvision demo
以下为SOA Diagram会使用到的构件及解释。
Service:在服务中,可以定义服务提供者、服务消费者和服务接口,一个服务可以由一个或多个服务接口组成。
Participant:参与者可以通过服务端口提供服务,也可以通过请求端口使用服务。
SOA Port:参与者通过端口进行通信。端口由Service的Service Provider / Service Consumer进行分类。端口上的圆圈表示与Service Provider的连接,半圆表示与Service Consumer的连接。
Service Provider:提供一个服务。
Service Consumer:消费一个服务。
Service Contract:表示兼容的SOA端口,这些端口可以相互通信。
Service Usage:服务消费者和服务提供者之间的连接。
SOA Port to Service/ Request:SOA端口与服务提供者或服务消费者之间的连接。端口上的圆圈表示与服务提供者的连接,半圆表示与服务消费者的连接。
Dependency: A Dependency can be set between:
Service Provider and Service Provider
Service Provider and Service
Service and Service Provider
Service and Service
设置服务接口的具体内容如下图所示:
图片来源PREEvision Manual
下图展示了一个例子:当开始下雨的时候,车辆天窗应该关闭:
图片来源PREEvision Manual
接口的建模:
类图可用于面向对象建模,并使用统一建模语言(UML)。在类图的帮助下,系统的不同方面可以被可视化、描述和记录。系统的结构可以借助classes、attributes、methods and relations来建模。此外,类图可以用于正向和逆向工程,可使用该图进行服务接口的设计。
图片来源PREEvision demo
Class:类代表一个对象,它可以是适用于你的系统的任何人、事物、概念等。
Interface:接口是类元素的特殊化,可以由几个类实现。通常,接口和类是通过实现连接起来的。
Property:Property描述类的属性,可以添加到类、接口或服务接口中。可以将数据类型分配给Property。此外,您还可以为Property创建一个Qualifier。
Method:Method描述类的操作,可以添加到类、接口或服务接口中。您可以为Method创建UML参数。
Parameter:Parameter是Method的子构件。
Event:Event描述了在某个时间点发生的一件值得注意的事情。您可以为服务接口创建Event。
Fire and Forget Method:Fire and Forget Method描述了服务接口的操作,可以添加到服务接口中。您可以为Fire and Forget Method创建一个UML参数。
Association:Association是两个类之间的连接。关联总是假定为双向的,这意味着两个类都知道彼此及其关系。
Realization:描述两个元素之间的关系,其中一个元素实现另一个元素指定的行为。例如,类实现接口提供的操作。
Generalization:描述两个类之间的继承。这意味着父类被认为是子类的Generalization。例如,父类person有两个子类student和professor。
数据类型的建模:
在类图中,可以对复杂的数据类型进行建模和可视化。建议仅为数据类型创建单独的类图,可使用该图对服务接口使用到的复杂数据类型进行设计。
图片来源PREEvision demo
以下展示了复杂数据类型的类图中能使用到连接方式:
Application Record Connection:使用一个Application Record Connection关联Application Record 和另一个Application Data Type。
Application Array Connection:使用一个Application Array Connection关联Application Array Type和另一个Application Data Type。
Application Type Implementation Type Mapping:使用Application Type Implementation Type Mapping来映射ADT和IDT。
Implementation Record Connection:使用一个Implementation Record Connection关联Implementation Record和另一个Implementation Data Type。
Implementation Array Connection:使用一个Implementation Array Connection关联Implementation Array和另一个Implementation Data Type。
通过以上3种形式的图形建模,可以完成从功能定义到功能实现的详细设计,将功能转换成一个个独立的服务,对每个服务进行服务接口和数据类型的设计,若该服务绑定SOME/IP协议,可使用PREEvision自带的导出功能导出ARXML文件。
若该服务绑定DDS协议,可使用PREEvision二次开发功能导出完成该功能所需的服务、服务接口以及接口所带的数据;运行Metric后可生成预先定义好格式的IDL/vCDL文件。
综上所述,通过使用 UML 进行汽车 SOA 服务设计,可以提高汽车软件系统的可理解性、可维护性和可扩展性。它有助于在汽车软件系统的开发过程中更好地组织服务、明确服务之间的关系以及满足不同角色的需求,从而推动汽车软件技术向更加智能、高效和可靠的方向发展。