文章目录
- 5.1.4 Service Discovery Communication Behavior
- 5.1.4.1 Startup Behavior
5.1.4 Service Discovery Communication Behavior
[PRS_SOMEIPSD_00800]
SOME/IP-SD应尽可能减少Service Discovery message的数量,尽量将更多的entry放在一个Message中发出。
- 属于不同服务的entry可以一起发送
- 不同类型的entry可以一起发送
- Offer Service Entry 和 Find Service Entry
- Subscribe Eventgroup Ack Entry and Subscribe Eventgroup Nack entry
5.1.4.1 Startup Behavior
[PRS_SOMEIPSD_00395]
对于每个服务实例,至少考虑在以下三个阶段发送Service Discovery
- Initial Wait Phase
- Repetition Phase
- Main Phase
注意:
实际的状态机设计应不止以上三个状态。例如:本地服务还处于down的状态,而非本地服务已经被感知到,则本地服务启动后无需再去查询远程服务。(本地只当前ECU内的服务)
[PRS_SOMEIPSD_00397]
对于一个客户端为链接某个服务所创建的“客户端侧服务端实例”,当与服务端已建立链接,且已被Application层请求,“客户端侧服务端实例”应进入Initial Wait Phase状态
[PRS_SOMEIPSD_00133]
对于一个客户端为链接某个服务所创建的“客户端侧服务端实例”,当与服务端已建立链接,且服务端已可用时,“客户端侧服务端实例”应进入Initial Wait Phase状态
注意:
链接已经建立但服务端尚不可用的情况是存在的。
服务端可能会依赖其他应用、传感器、执行器等资源。当服务所需的所有基础资源都已齐备查询或提供服务接口才是合适的。
[PRS_SOMEIPSD_00399]
Service Discovery在进入Initial Wait状态后,应等待INITIAL_DELAY配置的时间后才能发送Service Instance的第一个消息。
[PRS_SOMEIPSD_00400]
INITIAL_DELAY应定义延迟的最大和最小值
[PRS_SOMEIPSD_00401]
实际的延迟时间应为INITIAL_DELAY规定的最小值和最大值之间的一个随机值。
[PRS_SOMEIPSD_00804]
如果ClientService和ServerService分别引用相同的ClientServiceTimer和ServerServiceTimer,并且确保引用的ClientService和Server Service分别在同一时间点被请求和释放,则服务发现应使用相同的随机值。
[PRS_SOMEIPSD_00805]
如果ClientServices和ServerService分别引用其自己的ClientServiceTimer和ServerServiceTimer,则服务发现应为每个ClientService和ServerService使用不同的随机值。因此,如果ClientService或ServerService进入初始等待阶段,他们应在初始等待阶段使用单独计算的随机值。
[PRS_SOMEIPSD_00404]
当第一个消息被发送后,服务实例应进入Repetition Phase状态。
[PRS_SOMEIPSD_00405]
Service Discovery需要在Repetition Phase状态下等待基于REPETITIONS_BASE_DELAY规定的时间