统⼀诊断服务(UDS)-诊断会话控制(DiagnosticSessionControl)
统⼀诊断服务(UDS)- 诊断会话控制(Diagnostic Session Control)
  诊断会话控制服务(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
0x34
RequestDownload
0x36
数据传输TransferData
0x37
请求结束传输RequestTransferExit
0x3E
测试设备在线TesterPresent
服务ID SID
服务名称Service Name
诊断会话控制服务定义
诊断请求
诊断会话控制服务(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
#3P2Server_max⾼字节0x00-0xFF
#4P2Server_max低字节0x00-0xFF
#5P2*Server_max⾼字节0x00-0xFF
#6P2*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_max2  1 ms0 ms65535 ms50ms   P2*Server_max为当前诊断会话下从服务器(ECU)发出NRC为0x78的否定响应到开始发送最终的诊断响应报⽂的最长时间。
参数名称长度(Bytes)精度最⼩值最⼤值典型值
P2*Server_max2  1 ms0 ms65535 ms5000ms 否定响应
  如不能激活请求的诊断会话,则给出格式如下的否定响应。
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)。
1. 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求再次激活默认会话,则服务器(ECU)需要
重新初始化默认会话。之前在默认会话下的设置或激活的功能将失效。
2. 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求激活⼀个⾮默认会话(如扩展会话),则服
务器只需停⽌事件响应服务(ResponseOnEvent, SID 0x86)请求执⾏的功能,其它服务的执⾏不受影响。
3. 在⾮默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活⼀个⾮默认会话(包括当前激活的会话),则在上⼀会话下
事件响应服务(ResponseOnEvent, SID 0x86)请求执⾏的功能将停⽌;之前解锁的安全等级将重新锁定;诊断会话切换前后,两个会话都⽀持并且不需要解锁安全访问等级的服务将不受影响。上⼀会话⽀持但新的会话不⽀持的服务将终⽌执⾏。4. 在⾮默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活默认会话,则在⾮默认会话下事件响应服务
(ResponseOnEvent, SID 0x86)请求执⾏的功能将被停⽌,解锁的安全等级将被重新锁定,在默认会话下不⽀持的诊断服务将被终⽌。举个例⼦,如果ECU在⾮默认会话下,诊断仪请求了通信控制服务(CommunicationControl, SID 0x28)停⽌发送普通的通信报⽂。则当诊断仪成功请求激活默认会话后,之前停发的报⽂将恢复发送。
诊断会话定时参数
  在⾮默认会话下,如果服务器(ECU)在S3时间内未收到任何诊断服务,将会结束当前会话,进⼊默认会话。这种情况被称为诊断会话超时。通常在客户端没有诊断服务请求但⼜希望服务器(ECU)维持⾮默认会话时,需要定期发送诊断仪在线服务(Tester Present, SID 0x3E),以避免服务器(ECU)发⽣诊断会话超时。两次发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间由S3来规定。
定数参数
描述
推荐值
超时时间session如何设置和读取
S3为了同时维持多个服务器(ECU)的⾮默认会话,客户端通过功能寻址发送诊断仪在线服务
(Tester Present, SID 0x3E)的时间间隔。或为了维持⼀个服务器(ECU)的⾮默认会话,客户端通过物理寻址发送诊断请求的最⼤间隔。
2000 ms
4000 ms
S3在没有收到诊断服务请求的情况下,服务器(ECU)保持在⾮默认会话下的时间。
NA
5000 ms
  可以看出,诊断仪发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间最长为4000ms,⼩于服务器(ECU)的会话超时时间(5000ms)。通常建议2000ms发⼀次诊断仪在线服务(Tester Present, SID 0x3E)以保证可靠地维持服务器的诊断会话。
Server Client Client
Server

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。