1 0x3E功能描述
这个服务的目的是确保诊断服务或者之前激活的通信还处在激活的状态,可以保持当前的非默认(Default Session)会话,通过周期地发送请求帧来阻止自动跳转回默认(Default Session)会话。
2 0x3E应用场景
想象一个场景,我要用诊断仪给ECU发送一些数据,而填写数据的时候,我是没有操作诊断仪给ECU发送任何诊断请求的。而一般遵照ISO14229-2的要求,超过S3时间,ECU就会从非默认会话切换到默认会话。而我不希望发生这种情况,该怎么办呢?
方法就是在填写数据的时候,在S3时间之内发送诊断请求给ECU,那么每个服务都有对应的功能,如果随便选一个,就会执行其功能了。为了保持一个状态而执行一些不必要的服务,这是不太合理的,所以就有了诊断仪在线服务,它唯一的功能就是保持当前状态,不执行任何功能。
3 0x3E服务请求和响应
3.1 服务请求报文定义
sub-function定义
注意上图为Bit 6 ~ 0的定义,Bit 7(supportPosRspMsgIndicationBit)未在这里定义。
本服务不支持有数据参数的报文。
诊断仪在线服务只有两个子功能,就是00/80,没有特定的含义。实际使用中一般使用80子功能,子功能参数的最高位就是诊断服务肯定响应抑制位SuppressPosRspMsgIndicationBit,ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。
控制肯定响应的回复有什么用呢,主要就是为了减少不必要的带宽占用,因为有些服务大部分时候都是由功能寻址发出来的请求,如果要求所有节点都进行响应,就会出现很多响应报文发出来占用总线带宽,而这些响应是没必要的。
回到诊断仪在线服务,它的使用场景就是告诉ECU不要改变状态,在子功能的抑制肯定响应位设置成1之后,如果ECU的服务执行没有问题,就不需要给出肯定响应,也就是没有消息就是最好的消息。
3.2 肯定响应
3.3 支持的NRC
4 3E例子
例子
supportPosRspMsgIndicationBit = FALSE时:不禁止肯定响应报文的发送 supportPosRspMsgIndicationBit = TRUE时:禁止发送肯定响应的报文
(1)supportPosRspMsgIndicationBit=0
发送请求:3E 00
肯定响应:7E 00
(2)supportPosRspMsgIndicationBit=1
发送请求:3E 80
肯定响应:无肯定响应报文回复
一般在实际应用中,比如在写DID的时候,可能会要求进入用户自定义的Session,还有可能会通过0x27服务进入一定安全等级,为了使这些服务在写DID的时候是在激活状态,就会使用0x3E使这些服务保持在激活状态,以完成写DID的操作。