1. 参数列表
2. 参数示意图
我们把这些时间参数放在通讯流程中,能更加清晰直观地看出各参数的作用:
3. 参数详解
我们按照上图中的顺序依次看一下各个参数。
(1)A_DoIP_Announce_Wait
这个时间参数应用场景有两个:
- DoIP节点在获取IP地址成功到发送第一个车辆声明报文的时间间隔
- DoIP节点在收到诊断设备发送的车辆信息请求报文后发送车辆信息响应报文的时间间隔
该参数是0-500ms的一个随机值,之所以设置为随机值是为了避免所有DoIP节点同时发送车辆声明报文或车辆信息响应报文,造成网络堵塞。
(2)A_DoIP_Announce_Interval
该参数是指三条车辆声明报文之间的时间间隔,为500ms。
(3)A_DoIP_Announce_Num
这个参数不是时间参数,是指DoIP节点发送车辆声明报文的次数,标准定义为3次。
(4)A_DoIP_Ctrl
该参数值诊断设备发送完上一个UDP报文后的等待响应的最长等待时间,注意两点:
- 如果该UDP报文以广播形式发送给多个DoIP节点,那么这个时间指等待所有节点响应的完成的时间。
- 该时间参数只针对UDP报文。
(5)A_Vehicle_Discovery_Timer
该参数是指留给车上DoIP节点做GID同步的时间,诊断设备只有在收到的车辆信息响应报文或车辆声明报文中带有**有效的 VIN/GID 且 VIN/GID sync. status 为 “incomplete(0x10)”**时,才会启动该定时器,等待车上的DoIP节点进行GID同步。该定时器超时时间为5s,超时后诊断设备可再次请求车辆信息。该参数的示意图如下图所示:
(6)T_TCP_Initial_Inactivity
该参数指DoIP节点在建立TCP连接后等待路由激活报文的最长等待时间,超时时间为2s,如果2S后仍没有收到路由激活报文,DoIP节点将关闭TCP连接。
(7)T_TCP_General_Inactivity
该参数指DoIP节点在收到路由激活报文后,且没有进行TCP数据交互的情况下,保持TCP连接的最长时间,超时时间为5min,超时后仍没有任何TCP数据交互的话将关闭TCP连接。
(8)A_DoIP_Diagnostic_Message
该参数指DoIP节点在诊断报文接收完成后,到发送诊断ACK/NACK的时间间隔,该参数有两层含义,对DoIP节点来说,它是对性能的要求,要求DoIP节点要在50ms内做出相应;对诊断设备来说,它是发送完诊断报文后的等待时间,超时时间为2s,超时后仍未收到诊断响应报文的话,应该重复发送该诊断报文。
(9)A_Processing_Time
有些UDS诊断请求是不需要诊断响应的(例如禁止肯定响应位为TRUE),诊断设备在发送完一个不需要响应的诊断报文后,应等待一段时间再发送下一个诊断请求,给ECU预留一段时间进行处理。A_Processing_Time就是指这个间隔时间。
(10)T_TCP_Alive_Check
该参数指DoIP节点在发送了一个诊断设备在线检查请求报文后等待响应的时间,超时时间为500ms,如果超时后未收到响应,则DoIP节点判断诊断设备已离线,关闭TCP连接。注意,当DoIP节点向TCP socket发送请求失败时也应该启动该定时器,应为这意味着诊断设备通信失败,可能已经离线。
4. DoIP节点内部状态机
DoIP节点在不同时刻处于不同的状态,其内部除了TCP socket连接状态外,还维护着一个DoIP逻辑连接状态,状态转换示意图如下图所示:
图中各个事件详解:
[DoIP-127]
当一个新的套接字建立,逻辑连接的状态就从“listen”跳转到“socket initialized”,同时启动定时器T_TCP_Initial_Inactivity。
[DoIP-128]
当DoIP节点接收到诊断设备发来的一个路由激活报文并被正确处理后,逻辑连接的状态就从“socket initialized”跳转到“Registered [Pending for Authentication]” ,此时定时器T_TCP_Initial_Inactivity被停止,启动T_TCP_General_Inactivity定时器。
[DoIP-129]
在完成Authentication之后,逻辑连接的状态就从“Registered [Pending for Authentication]”跳转到“Registered [Pending for Confirmation]” 。
[DoIP-130]
在完成Confrmation之后,逻辑连接的状态就从“Registered [Pending for Confirmation]”跳转到“Registered [Routing Active] ” 。
[DoIP-131]
当DoIP节点进入Registered [Routing Active] 状态前,除了路由激活报文、Authentication报文以及Confrmation报文,其余报文都不应该被处理和路由。
[DoIP-132]
如果T_TCP_Initial_Inactivity或T_TCP_General_Inactivity超时后仍没收到后续请求,或者authentication 和 confrmation 被拒绝了,又或者外部测试设备对alive check 消息没有响应,则逻辑连接进入“Finalize”状态。
[DoIP-133]
当DoIP节点返回“Finalize”状态后,此时TCP套接字将被关闭,并重新回到“listen”状态,相应的资源被释放,等待新的TCP连接。