车辆诊断协议

UDS协议的制定也是基于OSI七层架构的
在这里插入图片描述
在开放互联系统架构中,UDS的协议大部分是属于最顶层的应用层,除了ISO14229-2是会话层的内容,其余的全部属于应用层。而每一层都有自己不同的ISO标准。
总体的概览图如下:
在这里插入图片描述
应用层服务
在应用层服务中会有可以确认的服务和未确认的服务,从信息流上来看可以这样区分
在这里插入图片描述
这种可以产生响应的称为确认的服务
在这里插入图片描述
这种不产生响应的则称为未确认的服务
服务指令格式
通常来讲服务指令的格式如下

service_name.type(
    parameter A,parameter B,parameter c
    [,parameter 1,...]
)

service_name代表的是诊断服务的名称,例如,诊断会话控制;
type代表的是诊断服务指令的类型,例如,请求还是响应;
parameterA … 代表的是A_SDU,即一个服务数据单元,是由服务指令传递的一系列数据,比如地址信息等;
然后,后边的部分则是一些具体的服务所需要的参数;
请求指令的格式
一个请求指令的格式如下:

service_name.request(
    A_Mtype,                    //消息类型
    A_SA,                       //源地址    1字节无正负整数数值 (00-FF)
    A_TA,                       //目标地址  1字节无正负整数数值(00-FF)
    A_TA_type,                  //目标地址的类型 列举 
    [A_AE],
    A_Length,                   //传递或者接收的数据长度
    A_Data[,parameter 1,...]    //需要传递的数据
)

A_Mtype代表的是消息类型,例如diagnostics, remote diagnostics,目前也只有这两种情况,这是一个枚举类型的数据;
A_SA代表的是source address,即源地址,一般对于请求者来说本身就是源,比如在车载诊断设备和被诊断ECU建立的通讯系统中,请求一般都是由车载诊断设备发出的,所以车载诊断设备的地址通常就是源地址;
A_TA代表的是target address,即目标地址,这个地址和上面一个概念是成对存在的,如果使用上一个例子来说的话,那被诊断的ECU地址就是目标地址。
A_TA_type代表的是目标地址的类型,这里为什么会有这样一个概念呢,上面我们说源地址和目标地址时,只是举了一个简单的例子,但是在车辆的通讯网络中还是比较复杂的,通讯有可能是点对点的,也有可能是一对多的广播式传播,所以这里的地址类型存在两种,一种是物理地址,一种是功能地址。一般客户端和服务端点对点的通讯使用的是物理地址;而一个客户端到一个或者多个服务端的广播式通讯使用的是功能地址。
A_Length代表的就是被传递或者接收的数据长度;
最后的参数就是具体需要传递的数据;
通常与请求指令格式相同的还有一个指示指令

service_name.indication(
    A_Mtype,                    
    A_SA,                       
    A_TA,                      
    A_TA_type,                 
    [A_AE],
    A_Length,                   
    A_Data[,parameter 1,...]      
)

这个指示指令和请求指令有着同样的数据格式,但是它是诊断应用的一个重要内部事件,它会传递诊断请求数据到诊断应用层的服务函数。这两个指令的数据格式之所以一样,也是为了保证数据传递的准确性,不会因为数据传递的过程导致数据出现差错。
2. 响应指令的格式
响应指令的格式如下:

service_name.request(
    A_Mtype,                    //消息类型
    A_SA,                       //源地址
    A_TA,                       //目标地址
    A_TA_type,                  //目标地址的类型
    [A_AE],
    A_Length,                   //传递或者接收的数据长度
    A_Data[,parameter 1,...]    //需要传递的数据
)

确认指令

service_name.indication(
    A_Mtype,                    
    A_SA,                       
    A_TA,                      
    A_TA_type,                 
    [A_AE],
    A_Length,                   
    A_Data[,parameter 1,...]      
)

两个指令也是具有相同的数据结构,并且数据结构者前面提到的请求数据结构是一样的,这两个指令的关系和前面的请求指令和指示指令的关系类似,响应确认指令也是一个内部的重要事件。
除了上面的两组指令之外,还有另外的两个指令
请求确认指令

service_name.req_confirm(
    A_Mtype,                    
    A_SA,                       
    A_TA,                      
    A_TA_type,                 
    [A_AE],
    A_Result          //列举
)

响应确认指令

service_name.rsq_confirm(
    A_Mtype,                    
    A_SA,                       
    A_TA,                      
    A_TA_type,                 
    [A_AE],
    A_Result   
)

这两个都是重要的内部事件。
在这两个指令中出现了一个新的数据参数
A_Result,这个代表的是解决,表征数据是否正确的传输,还有数据是否成功的传输。

最后还有一个可选参数:
A_AE (远程地址(RA) 类型: 1字节无正负整数数值 )
这个是用来扩展客户端和服务端可用的地址,这个参数只用于存在本都服务和远程服务概念的车辆中,远程地址代表的是它自己的地址范围和主网路的地址是独立的。这个参数用来编码远程客户端或者服务端的标识符。根据数据的传输方向,确认表示远程的目标地址或者远程的源地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值