网站首页 > 技术文章 正文
UDS是定义车载诊断的通用协议,包含不同的子类文件。不同的子类文件应用于车载不同总线通信介质:
从最低端物理层到最上端应用层对应不同的总线协议(其中占有主导地位的车载总线CAN、由于ADAS的兴起,车载以太网的引入到车载网络最为火热),从如上截图可以看出UDS协议也给新的车载总线做了预留,这样充分保证了该协议的灵活性。
本文重点是分享UDS协议中Service 10,试着以如下内容,在车载诊断范畴对Service 10有一个整体的了解:
- UDS协议对服务的定义(定义时间参数P2/P2*)
- 用图形说明Service 10
- CDD数据库编辑
- 手动测试
- CAPL(With CDD and without CDD)
一、UDS协议对服务的定义(定义时间参数P2/P2*)
UDS协议对Service 10开篇有语:
The DiagnosticSessionControl service is used to enable different diagnostic sessions in the server(s).
该服务是在服务器端使能不同的会话模式,而诊断会话模式在服务器中用于启用一组特定的服务或者功能(e.g. 刷写)。可以通过会话模式赋予不同诊断服务的执行权限。
关于Service 10有以下特性:
- 通过Service 10可以报告诊断会话有效的数据链路层特定的参数值(e.g.时间参数值P2/P2*)(至于目的,这里暂留一个悬念,同行们也可以先思考,本文后续会解释);
- 通过Service 10可以启用一组特定的诊断功能,以如下实例辅助说明:
(1)、比如进入Service 10 02(Programming Session编程会话模式),表明ECU进入了Software update功能模式;
(2)、比如OEM自定义一个会话模式Service 10 50(OEM Specific Session),在该会话模式下,所有诊断服务对诊断仪操作者不需要进行解锁等一系列操作,可以在车辆下线过程中提高下线效率。
- 对于ECU Server端,在诊断范畴内,ECU始终会处于一个诊断会话模式下(并且是唯一)。ECU上电后,一定处于默认会话模式;
- 在进行某些会话模式切换过程中,Server端可以设置必须满足某些条件,这些条件都是用户自定义,可以通过如下例子辅助理解:
A:Server端可以只允许特定客户端标识符(CAN ID)的Client端启动特定的新诊断会话模式(e.g.服务器要求具有Client端标识符CAN ID为 F4 XX才能启动Extended Diagnostic Session);
B:Server可以定义某些安全条件(e.g.车辆不得行驶或者发动机不得运行),因为过渡到例如Programming Session编程会话模式可能会导致正常功能丧失,因此某些车辆可能要求车辆处于安全状态。
不同服务的执行权限不同,在UDS协议中对该内容做了推荐,详细可参考下图:
如上只是建议,没有强制性。具体需求规范定义需要参照具体项具体定义。
关于Service在UDS协议中定义的格式,可参看如下链接文章:
- 用图形说明Service 10
对于通过会话模式区分服务执行权限,可参考下图:
通过会话模式来区分UDS服务的执行权限。比如:
- 在默认会话模式只支持Service 22对ECU进行数据读取;
- 上述一些服务除了需要进入非默认会话模式外,还需要ECU进入解锁状态(Service 27);
- 上述描述了一个特殊的诊断会话会话默认,进入该会话模式后,不需要解锁旧可以对ECU进行Service 2E/2F/31等服务,主要应用场景是OEM下线配置使用,提高工作效率(这个是自定义会话模式,按需使用,此处举例仅为说明由此功能)
Extended session
Service 22/2E/2F/31……
Programming session
Service 22/2E……
Default session
Service 22
OEM specific session
Service 22/2E/31……
而对于不同会话模式切换,可参考下图:
需要注意的点如下:
1、若ECU当前处于默认会话模式,Client发送10 01,ECU会重置所有激活/启动/更改的
在激活会话期间的设置/控制;
2、不同会话模式可以任意切换;
3、ECU为了自身安全,不允许长期处于非默认会话模式。在一定时间内(S3),若ECU没有收到任何诊断请求,会强制要求ECU从非默认会话模式,跳转到默认会话模式;
4、在S3时间内,若无需求发送诊断请求,但是还想要求ECU处于非默认会话模式,可以周期性发送Service 3E(Tester Present),让ECU保持当前非默认会话模式。
- CDD数据库编辑
在使用CANdelaStudio编辑数据库CDD过程中,本文以编辑Service 10 50(OEM specific session)为例,编写步骤如下:
- 、鼠标右击,选择新建一个New session:
(2)、编辑Session ID和名称:
先默认选择诊断服务都支持该会话模式:
(3)、接上面描述,该会话模式下2E服务不需要解锁就可以执行,对应在数据库中设置:
注意横坐标和纵坐标代表的含义,这块就不会编辑错误。
举一个例子:
ECU当前处于扩展会话模式,Tester发送Service 11 01,这个时候不应该编辑简单的这个服务支持与否,而是将执行Service 11 01后ECU的状态编辑(重启后为默认会话模式咯)
- 手动测试
使用CANoe加载诊断数据库,可以实现手动测试会话模式切换内:
(1)、新建CANOoe工程,加载诊断数据库CDD 文件:
(2)、若直接使用CDD数据库中参数,不需要改动;若需要改动参数,选择如下:
按需改动即可。
(3)在诊断控制台发送Service 10相应子服务,并在Trace显示:
这个时候回答前面留下的问题:
在UDS协议定义Service时,定义了时间参数P2/P2*
如前面Trace中参数值(转换为十进制):
P2=150 ms
P2*=2000 ms
作用是对于外部Tester只是通过加载诊断数据库或者需求规范获知该时间参数,但是与ECU内部时间参数是否一致不确定,通过该服务可以读取时间参数。
- 使用CAPL进行半自动测试
首先解释下半自动的意思,就是手动编辑测试脚本,自动化运行这些测试脚本,所以叫半自动化测试。
本文分享使用CDD数据库发送Service 10 01和不使用数据库发送Service 10 01两种情况:
A:使用数据库CDD文件
新建工程,并加载数据库CDD文件
编辑脚本如下:
void MainTest()
{
Testrequest();
}
Testrequest()
{
diagRequest ABS_ESP.DefaultSession_Start step1;
diagSetTarget ("ABS_ESP");
diagSendRequest (step1);
}
运行后Trace截图如下:
B:不使用CDD数据库进行诊断测试:
新建工程以及测试节点,加载OSEK.DLL文件
编写CAPL脚本:
源码如下:
void MainTest ()
{
long handle;
byte DefaultSession[2]={0x10,01};
handle =CanTpCreateConnection(0);
CanTpSetTxIdentifier(handle,0x610);
CanTpSetRxIdentifier(handle,0x612);
CanTpSendData(handle,DefaultSession,2);
testWaitForTimeout(2000);
}
Trace如下:
因为没有仿真ECU,所以只有请求没有响应。
如上是关于Service 10服务从UDS格式定义到数据库编辑,再到手动以及半自动化测试内容。
希望对你有所帮助!
愿你我相信时间的力量,
做一个长期主义者
-----------------------------------
作者简介 | 穿拖鞋的汉子
汽车电子工程师
公众号:车载诊断技术
chuantuoxiedehanzi@163.com
来,每天进步一点点!
猜你喜欢
- 2024-12-14 鉴源实验室:车载ECU嵌入式设备的诊断测试 - 会话和安全控制
- 2024-12-14 AUTOSAR学习笔记之服务层介绍
- 2024-12-14 大众汽车为所有ID.系列引入OTA无线更新
- 2024-12-14 纯电动汽车整车控制器软件设计
- 2024-12-14 AUTOSAR BSW介绍
- 2024-12-14 AUTOSAR概述
- 2024-12-14 什么是AUTOSAR(一)——AUTOSAR概述
- 2024-12-14 UDS网络层介绍
- 2024-12-14 CAN编程介绍
- 2024-12-14 想要快速进阶车载测试!这些基础问题你一定要知道
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)