本文参考自:ISO/DIS 14229-1
一、汽车诊断与OSI模型对比
注:OSI全称:Open System Interconnection Reference Model,即开放式系统互联通信参考模型
- 应用层:诊断服务
- 表示层:由制造厂商自行定义(数据交换格式)
- 会话层:UDS会话层部分
- 传输层与网络层:DoCAN、DoFR、DoIP【其中Do指的是 Diagnostics on,即诊断用的CAN网络和传输等】
- 数据链路与物理层:CAN、FlexRay、DoIP
二、UDS简介
UDS全称Unified diagnostic services,即统一诊断服务。
UDS主要对车载电子控制单元提供统一的诊断功能,如:自动变速箱、防抱死制动系统等。
UDS包含了对传输、数据处理、以及具体的诊断应用服务等各方面的要求,不单指某一方面的诊断服务而是包含了对传输方式、数据格式要求、具体诊断服务等一系列的标准和交互架构。
三、车辆诊断架构示例
四、应用层服务
(1)应用层服务简介
应用层服务通常称为诊断服务。应用层服务用于基于客户端-服务器的系统,对车载服务器执行测试、检测、监控或诊断等功能。
客户端(通常称为外部测试设备)使用应用层服务请求在一个或多个服务中执行诊断功能。
服务(通常是ECU的一部分)使用应用层服务将响应数据(由被请求的诊断服务提供)发送回客户端。
(2)通用服务原语
注:在同一开放系统中,(N+1)实体向N实体请求服务时,服务用户和服务提供者之间要进行交互,交互信息称为服务原语
诊断应用层的服务访问点提供了许多具有相同通用结构的服务。对于每个服务,都指定了六个服务单元
- a service request primitive (服务请求原语)
- a service request-confirmation primitive (服务 请求-确认原语)
- a service indication primitive(服务标识原语)
- a service response primitive(服务响应原语)
- a service response-confirmation primitive(服务 响应-确认原语)
- a service confirmation primitive(服务确认原语)
(3)服务原语格式
- 通用服务原语格式
- 服务请求原语格式
- 服务标识原语格式
- 服务响应原语格式
- 服务确认原语格式
- 服务请求-确认原语格式
- 服务响应-确认原语格式
在服务原语的格式中,数据类型以及数据大小均有作要求,在此不作详细阐述,具体内容请看标准手册
五、应用层协议
(1)一般定义
应用层协议应该始终是一个确认的消息传输,这意味着对于客户端发送的每个服务请求,都应该有一个或多个对应的响应从服务器端发送。
该规则的唯一例外是在少数情况下,例如使用功能寻址,或请求/指示指定不应生成响应/确认。为了避免过多不必要的消息给系统带来负担,在一些情况下,即使服务器没有完成所请求的诊断服务,也不应发送否定响应消息。
应用层协议应与会话层协议并行处理。这意味着,即使客户端正在等待对前一个请求的响应,它也应该保持适当的会话层时间。(如果需要在其他服务器中保持诊断会话,则发送一个TestPresent请求。实现取决于所使用的数据链路层)。
(2)协议数据单元规范
缩写介绍:
- A_PDU(Application layer Protocol Data Unit) 应用层协议数据单元
- A_SDU(Application layer Service Data Unit) 应用层服务数据单元
- A_PCI(Application layer Protocol Control Unit)应用层协议控制单元
- A_Data是为每个应用程序层服务定义的字节数据字符串
- SI(Service identifier) 服务id
- NR_SI(Negative service responses/comfimations)否定服务应答/确认的特殊参数
(3)SI,Service Identifier 服务ID
(4)否定 响应/确认 服务原语
每个诊断服务都有一条用message指定的否定响应/否定确认消息
(5)服务器响应实现规则
- 一般服务器的响应行为
- 服务器在接收到客户端请求的响应伪代码
六、服务描述的约定
(1)请求报文
- 带subFunction(子功能)的请求数据单元
- 不带子功能的请求数据单元
其中Cvt 表示convention
- M表示强制的,必须存在
- C表示在某些条件下
- S表示是必须的,可在参数列表选择
- U表示由用户定义的,可存在或者不存在
(2)请求报文的子功能参数定义
其中0-6位为具体参数值,第7位为抑制积极响应消息(当第7位置1时,即让服务不回复正响应)。