SOMEIP SD介绍

SOME/IP SD的通信行为

SD(Service Discovery)属于SOME/IP协议中非常核心的内容,主要提供检测和提供可用服务的功能。

SD的优点如下:

  1. 上电启动时,车内各ECU的启动电压和启动时间各不相同,ECU通过SD就可以灵活的官宣其Service的可用状态
  2. 车辆变形(可以是同款车型的不同配置,或者是车型沿用)时,可以灵活的适应功能/配置的变化,减少前期的配置工作
  3. 错误处理,当提供的Service出现问题时,可以通过SD即刻了解Service的不可用状态,接收方就可以做出相应的处理了
  4. 能源效率,需要的时候才会提供/订阅服务,减少能力消耗

SD通信主要涉及到3类报文:Find Service、Offer Service和Subscribe报文。

服务端和客户端的通信行为包含以下几个阶段:

image-20220523102953168

服务端的通信行为

Down Phase

在这个阶段,Service是不可用的,即服务端无法提供服务。

Initial Wait Phase

当服务准备完毕(Available)后,进入此阶段;

如果此阶段收到Find Service报文,服务端忽略此消息,不做任何处理;

如果服务不可用了,将返回进入Down Phase;

此阶段需要定义时间参数INITIAL_DELAY_Min和INITIAL_DELAY_Max,初始化时间取其之间的随机值,当定时器超时后,发送第一帧Offer Service,标志着进入下一个阶段。

Repetition Phase

为了让客户端快速找到有哪些Service,此阶段重复发送Offer Service,重复次数由REPETITIONS_MAX决定;

发送间隔以REPETITIONS_BASE_DELAY为基本时间,每发送一次,间隔是前一间隔的2倍;

如果收到某客户端的Find Service,不影响当前阶段的发送计数和计时,延迟一定时间(REQUEST_RESPONSE_DELAY)后,单独发送单播Offer Service给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;

如果收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

如果服务不可用,离开此阶段进入Down Phase,并发送StopOfferService通知所有客户端。

Main Phase

此阶段将周期性发送Offer Service,周期时间为CYCLIC_OFFER_DELAY;

如果收到某客户端的Find Service,不影响发送计数,延迟一定时间(REQUEST_RESPONSE_DELAY)后,发送单播Offer Service给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;

收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

如果服务不可用,离开此阶段进入Down Phase,并发送StopOfferService。

image-20220523104305865

image-20220523104315919

客户端的通信行为

Down Phase

服务未被应用请求;

收到Offer Service,存储当前服务实例状态,启动TTL计时,此时服务若被应用请求,直接进入Main Phase。

Initial Wait Phase

服务被请求后,进入此阶段;

等待INITIAL_DELAY时间(最大和最小值之间的随机值);

如果此时收到Offer Service,则取消计时器,直接进入Main Phase;

如果服务请求被释放,进入Down Phase;

计时器超时后,发送第一个Find Service,进入下一阶段。

image-20220523104032674

Repetition Phase

重复发送Find service,重复次数由REPETITIONS_MAX决定;

发送间隔以REPETITIONS_BASE_DELAY为基时间,每发送一次间隔加倍;

收到Offer Service,停止发送计数和计时,立即进入Main Phase;触发发送SubscribeEventgroup(延迟一定时间);

如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。

image-20220523104117104

Main Phase

不再周期发送Find Service;

收到Offer Service,触发发送SubscribeEventgroup(延迟一定时间);

如果收到StopOfferService,则停止所有计时器;

如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。

image-20220523104148935
文章参考上海怿星科技。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CAPL仿真是一种基于Vector公司的CANoe工具,用于独立自主的编写仿真环境的脚本语言工具。而SomeIP是一种常见的用于网络通讯的协议。因此,本文将会介绍如何使用CAPL仿真来实现SomeIP SD的相关功能。 首先,针对SomeIP SD的特性,我们可以设计出如下的代码框架: on start { // SomeIP SD Initialization } on timer 1 ms { // Message sending and receiving } 根据这个框架,我们可以编写相应的CAPL脚本程序,实现SomeIP SD的仿真。 在实现SomeIP SD Initialization的过程中,我们需要定义相应的SomeIP SD报文。例如: message ETHERNET_FRAMES txFrame; txFrame.FRAME_ID = 0x3EB; txFrame.LENGTH = 9; txFrame.DATA = "\x00\x00\x00\x00\x00\x00\x00\x00\x00"; 使用以上代码,我们可以定义一条长度为9字节的框架报文,并将其发送出去。 对于如何实现Message sending and receiving的功能,我们可以使用以下的代码: message ETHERNET_FRAMES rxFrame; if (CANoe_GetValue("SysTimingTest.Testcases_StartStopValues.vehicleSpeed", &value) == 1) { // Message receiving } if (this.simTime > myLastMsgTime + 100) { // Message sending } 使用以上代码,我们可以通过CANoe的时间同步机制来实时获取车速数据,并进行SomeIP SD协议的消息收发。 总之,通过使用CAPL仿真技术,我们可以在CANoe系统中实现SomeIP SD协议相关的仿真测试,验证相应的程序算法、模型和硬件电路设计等方面的可行性和有效性,因此可以提高产品的可靠性和稳定性,同时也能节约开发时间和开发成本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钢琴上的汽车软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值