本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$3E TesterPresent,其为Tester提供了向目标ECU指示设备仍处于连接状态的能力。
目录
1 服务介绍
$3E服务用于向一个或多个ECU指示Tester仍连接在车辆网络上,并保持先前已激活的诊断服务功能一直处于激活状态。
关键点:
- 在没有其它诊断服务的情况下,Tester需要周期性地发送$3E TesterPresent诊断请求以向ECU指示保持连接状态。
- 其常用于将一个或多个ECU保持在non-defaultSession。因为当ECU处于non-defaultSession时,若超出S3server时间没有任何诊断通信,则其会自动回到defaultSession。由于$3E服务可重置S3server计时器,因此可以通过定期发送$3E服务,防止ECU在没有进行其他诊断服务的情况下,自动返回到defaultSession。
2 服务数据格式
2.1 请求数据格式
以下是$3E服务的请求数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | TesterPresent SID | 0x3E | 必选 |
#Byte2 | sub-function = [zeroSubFunction] | 0x00 / 0x80 | 必选 |
2.1.1 zeroSubFunction
zeroSubFunction是$3E服务的sub-function参数,其具体定义如下表所示:
zeroSubFunction | Description |
---|---|
0x00 | zeroSubFunction 此参数指示该诊断服务不支持除suppressPosRspMsgIndicationBit外的子功能a |
0x01 – 0x7F | ISOSAEReserved |
- a:当 suppressPosRspMsgIndicationBit = 0 时,$3E服务的sub-function为0x00,表示ECU需要给出正响应;当 suppressPosRspMsgIndicationBit = 1 时,$3E服务的sub-function为0x80,表示ECU不需要给出正响应。
2.2 肯定响应数据格式
以下是$3E服务的肯定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | TesterPresent SID + 0x40 | 0x7E | 必选 |
#Byte2 | sub-function = [zeroSubFunction] | 0x00 | 必选 |
2.2.1 zeroSubFunction
zeroSubFunction是对应$3E服务请求报文中的zeroSubFunction参数回显。
2.3 否定响应数据格式
以下是$3E服务的否定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | Negative Response SID | 0x7F | 必选 |
#Byte2 | TesterPresent SID | 0x3E | 必选 |
#Byte3 | NRC | supportedNRC | 必选 |
supportedNRC的可选值如下表所示:
supportedNRC | NRC define | 描述 |
---|---|---|
0x12 | sub-functionNotSupported | ECU不支持该诊断请求服务的子功能 |
0x13 | incorrectMessageLengthOrInvalidFormat | 诊断请求指令的长度或格式不对 |
3 服务通信示例
3.1 维持非默认诊断会话
本例展示了Tester如何通过$3E服务维持ECU非默认诊断会话,其中,存在以下条件:
- sub-function bit7: SPR = 0
3.1.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | TesterPresent SID | 0x3E |
#Byte2 | sub-function = [zeroSubFunction] | 0x00 |
3.1.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | TesterPresent SID + 0x40 | 0x7E |
#Byte2 | sub-function = [zeroSubFunction] | 0x00 |