基于信号的通讯方式,即信息发送者不Care谁接收而只负责将信号发送出去,接收者也不Care是谁发送的而只负责接收自己的想要的即可。基于信号的通讯可将某节点的某信息通过总线传送给需要该信息的其他节点,信息主要为一些物理状态值及一些控制值,如发送机转速、车速等,信号有周期、事件或混合触发方式。
基于信号的通讯是目前车载总线普遍采用的,如控制器之间通过CAN总线进行的信息传输,我们关注的是通讯矩阵上的帧、帧中所包含的信号、周期和交互的节点等信息。
SOA是一种软件架构,同时也是一种软件设计方法和理念,在IT领域已有数十年的应用经验。SOA具备 “松耦合”、”接口标准可访问”和”易于扩展”等特点,使得开发人员能以最小的软件变更应对迭代多变的客户需求。迄今为止,对于面向服务的架构(Service-Oriented Architecture,SOA)还没有一个公认的定义,许多组织从不同的角度对 SOA 进行了描述,较为典型的有以下三个:
(1)W3C 的定义:SOA 是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
(2)Service-architecture.com 的定义:服务是精确定义、封装完善、独立于其他服务所处环境和状态的函数。SOA 本质上是服务的集合,服务之间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务之间需要某些方法进行连接。
(3)Gartner 的定义:SOA 是一种 C/S 架构的软件设计方法,应用由服务和服务使用者组成,SOA 与大多数通用的 C/S 架构模型不同之处,在于它着重强调构件的松散耦合,并使用独立的标准接口。
那如何理解SOA呢?理解SOA要以下面的例子先了解服务、服务接口和服务相关角色三个概念:
服务指的是某种功能的函数或方法,如上面的Weather Service和Map Service可分别提供天气和地图信息,就是一种服务。而服务接口则是服务与外界联系的窗口,及作为服务模块与外界能够进行信息交互的API。
常用的服务接口有方法Method、事件Event和字段Feild(可参考本公众号车载以太网那两篇),如下:
服务相关角色我们常接触的有服务器端Server、客户端Client和服务注册和代理方,首先服务注册和代理实现服务的注册/订阅/发布等;客户端用于使用服务接口调用使用服务,而服务器端则用于实现服务。
汽车为何要引入SOA?首先基于SOA的通讯方式有如下优点:
1、服务高内聚,软件易重用:一个服务往往只关注一件事并把这件事做好,这件事的内容(功能)需要从业务的角度进行梳理,
2、服务的灵活部署:通过服务发现机制,可在控制器运行时获取服务的位置和提供方,并可在整车生命周期内调整服务角色的部署位置,使功能分配更灵活。
3、软件更新升级更快捷:一个功能改变可能只需要升级和更新一个服务,而且服务是一个独立可执行单元可单独安装升级,因此软件维护和扩展更容易。
因此基于上面的优势,伴随着汽车智能化、网联化、共享化的趋势,终端用户对车辆功能的预期也悄然发生着改变,汽车在实现高等级自动驾驶/辅助驾驶功能的同时,也更趋向于提升用户体验,例如满足快速的功能更新和升级,可以提供个性化、人性化、差异化的功能与服务等。面向服务的软件架构(Service-Oriented Architecture)正为未来的车辆软件服务提供良好的解决方案。不同于传统汽车电子电气架构中面向信号的架构,面向服务的软件架构(SOA)通过标准化的服务接口,松耦合的服务机制以及可组合扩展的服务特性
基于上面的介绍,基于信号的通讯仅支持发送和接收模式,支持的数据类型简单且可扩展性差,适用于有限大小数据交互的应用场景。而诸如自动驾驶等先进应用场景加入后,大量数据的动态交互必须采用面向服务的通讯方式以提高通讯效率降低负载,在该种方式下,接收者作为客户端,只需要查找、订阅服务等待接收信息即可,而发送者作为服务提供者只需要给订阅者提供服务和信息即可,因基于SOA的通讯支持请求/响应模式,可扩展性强且支持复杂数据的传输,因此应发挥各自优势。