我们前文讲过,非默认会话下,如果ECU长时间没有收到诊断仪发送的诊断请求,会自动返回默认会话。UDS中为了使ECU保持在非默认会话,专门设置了一个诊断服务——诊断仪在线服务0x3E,我们通常也称为3E报文或心跳报文。它不会使ECU执行任何诊断操作,就是单纯的告诉ECU诊断仪仍处于连接状态。每当ECU收到这个服务指令,就会把返回默认会话的定时器清零。
这是最简单的一个诊断服务。
1. 请求报文格式
3E服务的请求报文格式很简单,就是SI+子功能参数,这里列出的0x00和0x80两个参数的作用是一样的,不同的是0x80的禁止肯定响应标志位置为了1,即不需要ECU发送肯定响应。
使用物理寻址时,通常使用参数0x00,这种情况下诊断仪需要设置一个定时器S3Client,当任一诊断指令发送完成后,启动S3Client,当S3Client超时后(通常是2S或4S),发送一条3E报文。任何诊断指令都会使S3Client重置。
使用功能寻址时,通常使用参数0x80,也需要一个定时器S3Client,但诊断仪只需要以S3Client为周期持续向所有ECU发送3E报文即可,不需要依据是否发送了其它诊断请求。
2. 肯定响应报文格式
肯定响应报文中的子功能参数只有0x00一种,因为0x80不需要肯定响应。