一种新的数据传输理念正通过SOME/IP(Scalable service-Oriented MiddlewarE over IP)进入汽车领域。经典的总线系统(CAN、LIN、FlexRay)使用面向信号的数据传输,而SOME/IP协议允许引入面向服务的信息传输。但需要注意的是, SOME/IP协议不仅仅限于描述通信。确切地说,SOME/IP是一种对ECU 软件组件产生影响的中间件。因此,AUTOSAR中有一个单独的软件路径,可连接到应用程序。
对于面向信号的数据传输来说,发送方会在有需要时(如数据更新或变更时)发送信息,而不管网络中的接收方当前是否需要这些数据。面向服务的数据传输则不同,只有当网络中至少有一个接收方需要这些数据时,发送方才会发送数据。这种传输方式的优点是网络和所有连接的节点不会被不必要的数据影响(导致负载上升)。因此,面向服务的数据传输要求服务器能够被告知哪些接收者在等待其数据。
客户端可以选择订阅服务器上的服务内容。如果有事件发生,客户端将从服务器接收更新数据。SOME/IP-SD 用于服务内容的订阅。如果客户端希望订阅服务器上的内容,则向服务器发送订阅事件组的报文。如果该内容可以被订阅,服务器将向客户端发送带有肯定确认的响应,表示订阅已激活。如果订阅内容无法访问,服务器通过发送否定确认来拒绝订阅。
多个客户端可以同时订阅同一个服务内容。服务器向客户端发送数据的方法取决于服务通过UDP还是TCP发送。使用UDP协议时,如果事件发生,服务器可以通过单播、组播或广播向所有已订阅的客户端发送数据。如果通过TCP协议提供内容,则每个客户端必须先与服务器建立连接,然后分别进行数据的发送。
服务器基于有效订阅发送的内容具有两种形式:事件通知和字段通知,两者都是基于事件驱动的。事件通知对应一个表单,包含表示快照的属性,而这些属性与之前的事件没有任何关系,而字段通知包含与之前内容相关的值,因而支持访问历史值。因此,可以扩展字段从而包括getter和setter方法,使客户端能够读写所需内容。这样,即使没有订阅,客户端也可以只读或读写服务器的内容。
另外一种数据交换的方式就是调用方法。客户端通过执行远程过程调用(RPC),来触发相关服务器上函数的启动。客户端通过向网络发送请求可以调用该函数,客户端的请求中还可以包含函数相关的参数数据。服务器执行函数后,会给客户端回复一个返回值。通常客户端调用方法表示该客户端希望使用生成的数据。但是客户端也可能调用服务器上没有任何返回值的方法。在这种情况下,当方法实际被调用时,客户端部分的操作已完成。
为了让客户端知道当前有哪些服务可用,SOME/IP-SD提供两种动态发现服务的机制:通过“提供服务”机制,服务器可向网络发布其所提供的所有服务;通过“查找服务”机制,客户端可以请求可用的服务。