抑制肯定响应消息指示位(SPRMIB)

Posted 诊断协议那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抑制肯定响应消息指示位(SPRMIB)相关的知识,希望对你有一定的参考价值。

诊断协议那些事儿

本文为诊断协议那些事儿专栏文章,在某些情况下,当我们使用诊断设备请求后,通过观察物理现象(指示灯闪烁、雨刷摆动)可判断执行情况,而不需要响应报文,以此降低总线负载率。


文章目录


抑制肯定响应消息指示位

抑制肯定响应消息指示位是在Subfunction这个字节的最高位,我们把它叫做肯定响应抑制位。只有服务支持Subfunction的时候,才有可能支持肯定响应抑制位,当肯定响应抑制位置1的时候,要求所有的肯定响应的抑制将不再发送。当肯定响应抑制位为0的时候,肯定响应是不被抑制的。这里要注意的是它只是抑制肯定响应,而否定响应是不被抑制的。
否定响应的抑制可参考:服务响应的执行规则一文

Suppress Positive Response Message Indication Bit(SPRMIB)

Suppress positive response message indication bit(SPRMIB) only support in sub-function services with sub-function bytes.This bit defines whether a positive response of ECU is required or not.

SF的Bit7(SPRMIB)描述
0Positive Answer——not suppressed
1Positive Answer——suppressed(exception NRC 0x78)

ECU在响应某些诊断服务时,由于执行时间较长,无法立即给出肯定响应。此时ECU会先给出NRC为0x78的否定响应,然后等到所请求的服务执行完成后,给出最终的肯定响应或否定响应。在这种情况下,即使ECU收到的诊断服务请求中子功能参数肯定响应抑制位为1,最终的肯定响应也不会被抑制!报文举例:

/* ECU收到了子功能为0x82的诊断会话控制服务,最终仍然给出了肯定响应 */
Tester : 02 10 82
ECU : 03 7F 10 78
ECU : 06 50 02 00 32 01 F4

作用

当肯定响应抑制位置1时,要求所有的肯定响应将不再发送。可降低车载总线的负载,一般用于功能寻址的情况下。比如Bootloader升级流程中,诊断设备通过功能寻址请求所有ECU进入扩展会话,这时所有收到功能寻址请求的ECU都会执行进入扩展会话的操作,成功执行的ECU不给出肯定响应,只有没有成功进入扩展会话的ECU才会给出否定响应。【在实际使用时,若ECU不反馈否定响应即代表请求被成功执行】

注:有时诊断仪不关心肯定响应(收到这些肯定响应也不会做额外的处理),更关系哪些ECU没有成功执行(给出否定响应)


总结

以上就是今天要讲的内容,一般情况下如果这个服务支持Sub-function,就存在支持肯定响应抑制位的可能,如10、11、27、28、3E、83、85、86、87、2C、19、31。
仅供参考:一般支持SPRMIB的服务10、11、28、3E、85【均支持功能寻址】

以上是关于抑制肯定响应消息指示位(SPRMIB)的主要内容,如果未能解决你的问题,请参考以下文章

二十一CANdelaStudio深入-SPRMIB的配置

有没有办法抑制 Xcode 中的警告?

代码生成器生成文件的代码分析 - 如何抑制警告?

C#Excel Interop - 在调用Worksheet.ExportAsFixedFormat时抑制“发布”对话框

wordlist 4

C#:有啥方法可以抑制编译器错误,类似于抑制警告消息?