UDS诊断系列之九 诊断仪在线(3E)服务

诊断仪在线服务是一个功能最简单的服务了,它的功能只有一个,就是告诉服务端,也就是ECU,诊断仪仍然还在连接着,服务端不要走神(切换状态)。

一、服务介绍

想象一个场景,我要用诊断仪给ECU发送一些数据,而填写数据的时候,我是没有操作诊断仪给ECU发送任何诊断请求的。而一般遵照ISO14229-2的要求,超过S3时间,ECU就会从非默认会话切换到默认会话。而我不希望发生这种情况,该怎么办呢?
方法就是在填写数据的时候,在S3时间之内发送诊断请求给ECU,那么每个服务都有对应的功能,如果随便选一个,就会执行其功能了。为了保持一个状态而执行一些不必要的服务,这是不太合理的,所以就有了诊断仪在线服务,它唯一的功能就是保持当前状态,不执行任何功能。

二、应用数据格式

1.请求报文

诊断仪在线的请求格式很简单,只有两个字节,第一个字节是它的服务ID,第二个字节是子功能00,是的,它有子功能。一个没有任何功能的服务为什么会有子功能呢?先卖个关子☺
在这里插入图片描述

2.响应报文

响应报文和请求报文一样简单,响应的服务ID和子功能,一共两个字节。
UDS诊断系列之九 诊断仪在线(3E)服务_第1张图片

3.子功能

诊断仪在线服务只有一个子功能,就是00,没有特定的含义,它存在的意义只是为了发送请求的时候可以将抑制肯定响应位置1,也就是子功能字节从00变成80。这一位有什么用,在这儿再复习一下,将名字断句为“抑制”和“肯定响应”,含义就很明显了,抑制就是压抑、控制,抑制的内容就是肯定响应,也就是说这一位表示控制肯定响应不要回了(但除部分特殊情况,否定响应是需要回的,具体参照系列之二)。
控制肯定响应的回复有什么用呢,主要就是为了减少不必要的带宽占用,因为有些服务大部分时候都是由功能寻址发出来的请求,如果要求所有节点都进行响应,就会出现很多响应报文发出来占用总线带宽,而这些响应是没必要的。所以,ECU在接收到抑制肯定响应位是1的请求报文时,如果处理结果是肯定响应,就不需要回复了,这个位适合所有带子功能的服务。
回到诊断仪在线服务,它的使用场景就是告诉ECU不要改变状态,在子功能的抑制肯定响应位设置成1之后,如果ECU的服务执行没有问题,就不需要给出肯定响应,也就是没有消息就是最好的消息。
这里还有个事情需要注意的就是,功能寻址的诊断仪在线服务,如果抑制肯定响应位设置为1,那么要求ECU使用旁路来处理这个请求,而不应该影响其他正在执行的服务。最常用的场景就是执行刷写发送大量数据的过程中,需要保持其他ECU的状态,这时候就会周期发送诊断仪在线请求,如果ECU能够旁路处理,那么就不会影响正在刷写的ECU。

你可能感兴趣的:(UDS诊断,网络,网络协议,汽车)