统一诊断服务(UDS) - 诊断会话控制(Diagnostic Session Control)
统一诊断服务(UDS)- 诊断会话控制(Diagnostic Session Control)什么是诊断会话诊断会话控制服务定义诊断请求肯定响应否定响应诊断会话间的切换 诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)用于使能服务器(ECU)的诊断会话。什么是诊断会话 诊断会话关联了一系列的诊断服务或诊断功能。只有当前激活的诊断会话支
诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)用于使能服务器(ECU)的诊断会话。
什么是诊断会话
诊断会话关联了一系列的诊断服务或诊断功能。只有当前激活的诊断会话支持的诊断服务才能被响应。ECU通常有两个以上的诊断会话,包括:一个默认会话(Default Session)和若干非默认会话(Non Default Session)。非默认会话由用户自行定义。典型的ECU诊断会话定义如下:
诊断会话 | 描述 |
---|---|
默认会话 Default Session | ECU启动后默认进入此会话。只提供基本的诊断服务。 |
编程会话 Programming Session | ECU更新应用程序或标定数据时进入此会话。支持与程序更新相关的诊断服务。如0x34、0x36、0x37等。 |
扩展会话 Extended Session | 除支持默认会话下的诊断服务和功能外,还支持额外的诊断服务。具体由用户自行定义。 |
同一时刻只有一个诊断会话处于激活状态。此时ECU可以响应该诊断会话关联的诊断服务。如果客户端请求了当前诊断会话下不支持的诊断服务,则服务器需要给出NRC为0x7F的否定响应。激活新的诊断会话会关闭上一个诊断会话。
通常在默认会话(Default Session)下,允许如下的诊断服务
服务ID SID | 服务名称 Service Name |
---|---|
0x10 | 诊断会话控制 DiagnosticSessionControl |
0x11 | ECU复位 ECUReset |
0x14 | 清除诊断信息(清除DTC) ClearDiagnosticInformation |
0x19 | 读取诊断故障码信息 ReadDTCInformation |
非默认会话下支持的的诊断服务由用户自行定义。通常编程会话(Programming Session)下支持的诊断服务如下:
服务ID SID | 服务名称 Service Name |
---|---|
0x10 | 诊断会话控制 DiagnosticSessionControl |
0x11 | ECU复位 ECUReset |
0x27 | 安全访问 SecurityAccess |
0x31 | 例程控制 RoutineControl |
0x34 | 请求下载 RequestDownload |
0x36 | 数据传输 TransferData |
0x37 | 请求结束传输 RequestTransferExit |
0x3E | 测试设备在线 TesterPresent |
诊断会话控制服务定义
诊断请求
诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)请求报文定义如下:
A_Data byte | 参数名称 Parameter Name | 参数取值 Byte Value |
---|---|---|
#1 | 诊断会话控制服务请求SID DiagnosticSessionControl Request SID | 0x10 |
#2 | 诊断会话类型 DiagnosticSessionType | 0x00-0xFF |
其中:A_Data_byte #1为该服务的请求SID,值为0x10。
A_Data_byte #2为诊断会话类型(Diagnostic SessionType),既请求激活的诊断会话。取值如下:
注意,诊断会话类型(Diagnostic SessionType)仅占A_Data_byte #2的bit 0 ~ bit 6。Bit 7为肯定响应抑制位。
诊断会话类型 (Bit 6-0) | 描述 |
---|---|
0x00 | ISO/SAE预留 ISOSAEReserved |
0x01 | 默认会话 Default Session |
0x02 | 编程会话 Programming Session |
0x03 | 扩展会话 Externded Session |
0x04 | 安全系统诊断会话 Safety System Diagnostic Session |
0x05 - 0x3F | ISO/SAE预留 ISOSAEReserved |
0x40 - 0x5F | 整车厂定义 Vehicle Manufacturer Specific |
0x60 - 0x7F | 零部件供应商定义 System Supplier Specific |
0x7F | ISO/SAE预留 ISOSAEReserved |
肯定响应
如成功进入请求的诊断会话,则服务器给出如下的肯定响应。
A_Data byte | 参数名称 ParameterName | 参数取值 ByteValue |
---|---|---|
#1 | 诊断会话控制服务肯定响应SID DiagnosticSessionControl Response SID | 0x50 |
#2 | 诊断会话类型 DiagnosticSessionType | 0x00-0xFF |
#3 | P2Server_max高字节 | 0x00-0xFF |
#4 | P2Server_max低字节 | 0x00-0xFF |
#5 | P2*Server_max高字节 | 0x00-0xFF |
#6 | P2*Server_max低字节 | 0x00-0xFF |
其中,A_Data_byte #1为诊断会话控制服务响应SID,值为0x50。(0x10+0x40)
A_Data_byte #2为请求的诊断会话类型,与诊断请求中的参数相同。
ADatabyte #3 ~ #6为被激活的诊断会话参数。包括P2Server_max和P2*Server_max 。
P2Server_max为当前诊断会话下从服务器(ECU)接收到诊断请求到开始发送诊断响应报文的最长时间。
参数名称 | 长度(Bytes) | 精度 | 最小值 | 最大值 | 典型值 |
---|---|---|---|---|---|
P2Server_max | 2 | 1 ms | 0 ms | 65535 ms | 50ms |
P2*Server_max为当前诊断会话下从服务器(ECU)发出NRC为0x78的否定响应到开始发送最终的诊断响应报文的最长时间。
参数名称 | 长度(Bytes) | 精度 | 最小值 | 最大值 | 典型值 |
---|---|---|---|---|---|
P2*Server_max | 2 | 10 ms | 0 ms | 655350 ms | 5000ms |
否定响应
如不能激活请求的诊断会话,则给出格式如下的否定响应。
A_Data byte | 参数名称 Parameter Name | 参数取值 Byte Value |
---|---|---|
#1 | 否定响应SID Negative Response SID | 0x7F |
#2 | 诊断会话控制服务请求SID DiagnosticSessionControl Request SID | 0x10 |
#3 | 否定响应码 Negative Response Code | 取值见下文 |
诊断会话控制服务支持如下的否定响应码
否定响应码 NRC | 描述 |
---|---|
0x12 | 服务器不支持请求的诊断会话类型参数时,回复此NRC。 |
0x13 | 诊断请求报文中的数据长度不等于2时,回复此NRC。 |
0x22 | 请求的诊断会话激活条件不满足时,回复此NRC。 |
诊断会话间的切换
ECU上电后首先进入默认会话(Default Session)。如果没有收到诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)激活新的会话,将一直处于默认会话(Default Session)。
- 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求再次激活默认会话,则服务器(ECU)需要重新初始化默认会话。之前在默认会话下的设置或激活的功能将失效。
- 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求激活一个非默认会话(如扩展会话),则服务器只需停止事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能,其它服务的执行不受影响。
- 在非默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活一个非默认会话(包括当前激活的会话),则在上一会话下事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能将停止;之前解锁的安全等级将重新锁定;诊断会话切换前后,两个会话都支持并且不需要解锁安全访问等级的服务将不受影响。上一会话支持但新的会话不支持的服务将终止执行。
- 在非默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活默认会话,则在非默认会话下事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能将被停止,解锁的安全等级将被重新锁定,在默认会话下不支持的诊断服务将被终止。举个例子,如果ECU在非默认会话下,诊断仪请求了通信控制服务(CommunicationControl, SID 0x28)停止发送普通的通信报文。则当诊断仪成功请求激活默认会话后,之前停发的报文将恢复发送。
诊断会话定时参数
在非默认会话下,如果服务器(ECU)在S3Server时间内未收到任何诊断服务,将会结束当前会话,进入默认会话。这种情况被称为诊断会话超时。通常在客户端没有诊断服务请求但又希望服务器(ECU)维持非默认会话时,需要定期发送诊断仪在线服务(Tester Present, SID 0x3E),以避免服务器(ECU)发生诊断会话超时。两次发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间由S3Client来规定。
定数参数 | 描述 | 推荐值 | 超时时间 |
---|---|---|---|
S3Client | 为了同时维持多个服务器(ECU)的非默认会话,客户端通过功能寻址发送诊断仪在线服务 (Tester Present, SID 0x3E)的时间间隔。或为了维持一个服务器(ECU)的非默认会话, 客户端通过物理寻址发送诊断请求的最大间隔。 | 2000 ms | 4000 ms |
S3Server | 在没有收到诊断服务请求的情况下,服务器(ECU)保持在非默认会话下的时间。 | NA | 5000 ms |
可以看出,诊断仪发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间最长为4000ms,小于服务器(ECU)的会话超时时间(5000ms)。通常建议2000ms发一次诊断仪在线服务(Tester Present, SID 0x3E)以保证可靠地维持服务器的诊断会话。
更多推荐
所有评论(0)