6.1总览
应用层服务通常被当作诊断服务。应用层服务用于在基于客户端-服务器的系统(Client-Server base System)中执行一些功能,例如针对车载服务器(ECU)的检测、检查、监控和诊断。客户端通常指外部测试设备。应用层服务向若干ECU发出诊断功能的请求。ECU的部分功能在诊断服务被请求时,通过应用层服务将诊断数据反馈给客户端。客户端一般是接入CAN总线的非车载测试仪,在某些系统中也会由车载测试仪担任该角色。应用层服务用例独立于作为客户端的车载或非车载诊断仪。可能有超过一个的诊断仪同时存在于同一车辆系统中。
诊断应用层接入点规定了规定量的、具有相似整体结构的服务,又针对每个服务定义了六个服务原语:
——服务请求原语(a service request primitive),被用于客户端诊断程序,传递诊断服务的请求数据到诊断应用层的功能。
——服务请求确认原语(a service request-confirmation primitive),被用于客户端诊断程序,用于指示请求服务原语数据被完整的传送至服务器。
——服务指示原语(a service indication primitive),用于诊断应用层传递数据到服务器的ECU诊断应用的功能。
——服务响应原语(a service response primitive),用于服务器中ECU诊断应用传递从请求诊断服务到诊断应用层的数据。
——服务响应确认原语(a service response-confirmation primitive),用于服务器的ECU诊断应用功能,该功能指明响应服务原语发出的数据完好的传输到客户端。
——服务确认原语(a service confirmation primitive),用于诊断应用层发送数据到诊断仪。
Figure 4--Application layer service primitives--confirm service(应用层服务原语——确认服务)
Figure 5 -- Application layer service primitive -- unconfirmed service(应用层服务原语——非确认服务)
对给定的服务,请求原语和指示原语通常拥有相同的服务数据单元(Service Data Unit)。ISO 14229仅列举了特隶属于每个请求原语的服务数据单元的参数。用户应假设相同的参数确切地对应每个相应的服务指示原语。
对于给定的服务,响应原语和确认原语通常拥有相同的服务数据单元。ISO 14229仅列举了特隶属于每个响应原语的服务数据单元SDU的参数。用户应假设相同的参数确切地对应每个相应的指示服务原语。
对于每个响应服务原语(和响应的服务确认原语)制订了两个不同的SDU(两个服务数据单元,即两组不同的参数)。当诊断服务请求被ECU的诊断程序成功执行,一组参数被该服务原语的正响应所使用;如果诊断服务请求未被ECU的诊断程序及时且成功执行,另一组用于否定响应的参数则会被使用到。
对于给定的服务,请求-服务确认原语和响应-服务确认原语一般都有相同的SDU。这些服务原语的目的在于表明完成了之前的请求/响应服务原语的调用。ISO14229所描述的服务不使用这些服务原语,但数据链路的具体实现文档可能会用到这些服务原语来定义,例如服务执行的基准点(比如ECUReset服务会在ECU响应完全送达客户端后才执行ECU重置,那么ECUReset就是在服务器中被响应-确认服务声明了)。
6.2应用层服务格式定义
应用层服务拥有两种不同的格式,这取决于配置了车辆诊断系统。
如果各服务器和客户端直接相连于一个已配置好的车辆系统诊断网络,那么默认(普通、标准)的应用层诊断服务格式就会派上用场。此格式兼容于运行于K或L线的诊断系统格式。默认的应用层服务格式将在6.3种介绍。
应用层服务远程格式适用于车辆系统落实本地和远程服务器概念。远程格式带有一个附加的地址参数,称为远程地址。远程格式用于访问那些不直接连入主诊断网的服务器。在6.4中定介绍了应用层服务远程格式。
6.3标准服务原语的格式描述
6.3.1一般定义
所有的应用层服务都具有相同的一般格式,服务原语按写成如下形式:
service_name.type(
parameter A, parameter B, parameter C
[,parameter 1, ...]
)
解释:
——"service_name"是指诊断服务的名字(如:诊断回话控制DiagnosticSessionControl)
——"type"指示服务原语类型(如:请求)
——"parameter
A, parameter B, parameter C"服务调用所包含的必要参数
——"[parameter
1, ...]"依赖于特定服务的一些参数(例如:parameter1作为DiagnosticSessionControl服务的diagnosticSession小项)。括号说明该部分参数为可选参数。
6.3.2服务请求和服务指示原语
针对每一个应用层服务,服务请求和服务指示原语是根据以下一般格式指定:
service_name.request(
SA,
TA,
TA_type,
[,parameter 1, ...],
)
请求原语用于诊断仪应用功能,说明请求诊断服务到应用层的服务和数据发送。
service_name.indication(
SA,
TA,
TA_TYPE,
[,parameter 1, ...]
)
指示原语被用于应用层指定一个从应用层到ECU诊断应用程序的内部事件,并传输请求诊断功能到ECU诊断应用程序的服务器功能的数据。
具体的应用层服务的请求和指示原语通常具有相同的参数和参数值,这意味着当数据从客户端传输到服务器时,各个各个参数的值不应被应用层的通信对等端协议实体所改变。相同的值在服务请求中被客户端应用程序的客户端功能传输到应用层,并将被诊断应用程序的服务器功能所接收,(诊断应用程序隶属于诊断应用程序端的服务确认。)
6.3.3服务响应和服务确认原语
针对每一个确定的应用层服务,服务响应原语和服务确认原语根据以下格式指定:
service_name.response(
SA,
TA,
TA_type
Result
[,parameter 1, ...]
)
响应原语被用于ECU诊断应用程序的服务器功能,以启动该服务并传送请求诊断服务到应用层的响应数据。
service_name.confirm(
SA,
TA,
TA_type,
Result,
[,parameter 1, ...]
)
确认原语用于应用层指定一个从应用层到客户端应用的内部事件,并且该事件传送有关上一个服务请求诊断仪中客户端功能的结果。它不一定指示任何活动的远程接口,例如:请求服务不被服务器支持,或者通信中断。
对于一个特定的应用层,响应原语和确认原语常具有相同的参数和参数值。这意味着当数据从服务器传输到客户端时,各个参数的值不应被应用层的通信对等端协议实体所改变。相同的值在服务请求中被客户端应用程序的客户端功能传输到应用层,并将被诊断应用程序的服务器功能所接收,(诊断应用程序隶属于诊断应用程序端的服务确认。)
针对每一个响应和确认原语两个不同的服务数据单元[SDU](两组参数)被定义:
——如果ECU的服务器功能正确执行了请求诊断服务,肯定的响应和确认原语应被用于第一个服务数据单元。
——如果请求诊断服务失败或者没有在规定的时间没有被ECU的服务器功能完成,一个负响应原语和确认原语将被用于第二个服务数据单元。
6.3.4服务请求确认原语和服务响应确认原语
对于每一个应用层服务,服务请求确认原语和服务响应确认原语根据以下一般格式指定。
service_name.req_confirm(
SA,
TA,
TA_Type,
Result
)
请求确认原语是应用层定义的一个应用层到客户端的内部事件,该事件传送有关上一次服务请求到诊断仪——客户端功能的结果。
service_name.rsp_confirm(
SA,
TA,
TA_Tpye,
Result
)
响应确认原语用于应用层指定一个由应用层到客户端、并传输关于上一个服务响应到ECU应用程序——服务器功能的结果的内部事件,
6.4远程服务原语的格式说明
6.4.1一般定义
如果使用应用层远服务的程格式,就可以诊断本地客户端和远程服务器之间的通信。所有定义的作为应用层服务的默认格式都适用。