SOME/IP 详解系列(3)—— 通信方式

前言

前面的文章给大家介绍了SOME/IP的功能、标准和报文格式,接下来我们开始介绍更多和实际应用相关的内容。首先,是通信方式。看看SOME/IP是如何通信的,节点之间是如何通过SOME/IP进行交互的。

通信方式

在SOME/IP中,一共有三种通信方式,分别是Method、Event和Field。

Method

Method有两种类型,Request/Response(RR)和Fire&Forget(FF),Request/Response即请求/响应,是最常见的,Client(客户端)发送请求,Server(服务器)回复响应,属于同步调用,对应的报文类型为0x00 REQUEST(报文类型在上篇文章中有介绍)和0x80 RESPONSE。Fire&Forget,可以直译成点火即忘,触发了但不在乎结果,Client发送请求,但不需要服务器的响应,属于异步调用,对应的报文类型为0x01 REQUEST_NO_RETURN,如下图。
在这里插入图片描述
当需要等待Server响应时,比如需要Server中的某些数据、信息,或者需要获取请求的执行结果等,都可以使用Request/Response,意味着发出请求后,需要等待响应。而当只需要将请求发送到Server,而不需要对方的响应时,可以使用Fire&Forget,发送请求后,可继续执行下面的操作,无需等待响应。相比较而言,Request/Response的可靠性和数据一致性更高,因为请求和响应是一一对应的,如果发现响应错误或超时,可以采取一些处理措施。而Fire&Forget的优势则在于可以节省时间和资源,同时无需等待也可以提高系统的响应速度。在实际设计中,需要根据具体的功能需求和系统性能来选择合适的Method类型。

举个例子,【场景一】Client想获取Server端的网络配置信息,【场景二】Client想将自己的错误日志发送给Server,这两个场景中,【场景一】可以使用Request/Response,因为需要Server返回信息,当Server接收到请求后,可以通过响应来传输。而【场景二】可以使用Fire&Forget,对于Client来说,只需要把错误日志发送给Server即可。

Event

Event为事件类型,基于发布/订阅的机制,是当Client订阅了某个事件组后,在该事件发生时,Server发送通知给Client的通信方式,报文类型为0x02 NOTIFICATION,如下图。
在这里插入图片描述
图中Event报文上方还有两个SD报文,SD是服务发现Service Discovery,也是SOME/IP的一个模块,Event类型通信的前提是通过SOME/IP SD进行发布和订阅,SD会在后面的文章中详细介绍,本文主要介绍用于数据传输的SOME/IP协议。在SOME/IP中,定义了三种通知发送的策略:

  1. Cyclic update
    周期发送,以一定的周期发送通知。
  2. Update on change
    变化后发送,当该事件发生变化时,进行发送。
  3. Epsilon change
    变化超过阈值发送,当较上一次的变化超过预先设置的阈值时,进行发送。

Event 发送策略示例

大家都会用银行卡,无论是储蓄卡还是信用卡,都有消费提醒和余额或者额度查询的服务。

场景1,Cyclic update

银行会定期给我们发送账单,比如信用卡账单,都是固定在每个月的某一天,叫做账单日。无论账户是否有变动,无论这个月的消费金额是多还是少,银行都会按照既定的周期发送账单。这就是Cyclic update,周期发送策略。
在这里插入图片描述

场景2,Update on change

如果设置了消费提醒服务(专业点叫储蓄/信用卡账户变动通知),每当账户发生变动时,比如消费、发工资后,就会收到一条通知信息,告诉我们账户变动的时间、对方账户和金额。这就是Update on change,发生变化后发送。
在这里插入图片描述

场景3,Epsilon change

如果设置的账户变动通知服务可以选择通知起点金额,那么每当账户发生变动时,只有变动金额超过起点金额,才会收到通知信息。比如设置的起点金额是500,当账户变化小于500时,不会有通知,只有金额大于500时才会通知。这就是Epsilon change,变化超过一定阈值时,才会发送。
在这里插入图片描述

场景4,Request/Response

为了更好地理解,我们继续举个请求/响应的例子,假如我们想主动查询下储蓄卡的余额或者信用卡的额度,通常会发送一条查询请求给银行,然后银行回复我们余额或者额度等信息,这一来一回就是Request/Response的通信方式。
在这里插入图片描述
以上四种,前三种都需要预先设置,可以类比为SOME/IP中需要预先通过SOME/IP SD进行订阅,而最后一种只需要在想获取信息的时候主动请求即可。

Field

最后一种通信方式叫Field,可以用来表示具体的“属性”,比如状态、模式或者数值等。Field是一个合集,里面包含了Getter、Setter和Notifier三种方式,Client可以用Getter去主动获取,可以用Setter去设置,也支持当满足一定触发条件时,Server主动发出通知,即Notifer。定义Filed时,可以选择只包含Getter、Setter还是Notifer,或者包含其中两个以及全部。

  1. Setter
    通过Request/Response的方式来实现,Request中为空,不携带数据,Response返回Field的值。
  2. Getter
    通过Request/Response的方式来实现,Request携带想要将Field设置的值,Response返回Field设置好的值。
  3. Epsilon change
    通过Event的方式来实现,发送策略与Event一致,不同的是当第一次订阅成功后,Server会主动发送一次Notifier,携带当前Field的值,即订阅成功后,Client可以立刻获得Field的初始值,而不用等待事件触发。除此之外,相较于Evnet,Notifier更适合具有“属性”的值。举个例子,开门、碰撞、报警等瞬间发生的事件,一般可以定义成Event;而车速、温度、音量等即便没有事件触发,本身也有含义的内容,用Notifer会更加合适。
    在这里插入图片描述

今天就先分享到这,本文介绍了SOME/IP如何通信,下一篇文章将会继续介绍SOME/IP的数据类型和格式。


欢迎关注王师傅的微信公众号“汽车以太网”

在这里插入图片描述

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
雪云飞扬是一款基于AUTOSAR(汽车开放系统架构)标准的软件通信协议栈,主要用于构建车联网系统中的实时通信。它采用了Some/IP(Scalable Service-Oriented Middleware over IP)协议作为通信协议,在汽车行业得到了广泛应用。 Some/IP是一种面向服务的通信协议,它基于IP网络实现了汽车电子控制单元(ECU)之间的高性能实时通信。它支持多种网络传输层协议,如TCP/IP、UDP/IP和CAN。通过Some/IP,不同ECU之间可以通过消息进行异步通信,实现了可扩展的服务架构。 Some/IP协议栈包括两个主要组件:Some/IP客户端和Some/IP服务器。Some/IP客户端是发送请求消息并接收响应消息的一方,而Some/IP服务器则是接收请求消息并发送响应消息的一方。这两个组件通过Some/IP协议进行通信,实现了ECU之间的数据交换。 Some/IP协议的特点有: 1. 灵活性:Some/IP支持不同服务的动态注册和发现,可以在运行时添加、删除和修改服务。 2. 高性能:Some/IP协议采用异步消息传输方式,具有较低的延迟和较高的吞吐量,能够满足车联网系统对高性能通信的需求。 3. 安全性:Some/IP支持数据的加密和身份认证,保障通信的安全性和可靠性。 4. 可扩展性:Some/IP协议允许添加和管理多个服务,每个服务可以有多个方法和事件,实现了灵活的扩展性。 总之,雪云飞扬是一款采用Some/IP协议的软件通信协议栈,主要用于构建车联网系统中不同ECU之间的实时通信。它通过Some/IP协议实现了高性能、灵活性、安全性和可扩展性,为车联网系统的开发和应用提供了可靠的通信解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值