对于80后,你是否遇到过这样的场景:
在以往去街面上网吧玩,由于是花钱,恨不得充分利用手头电脑,比如在玩游戏时,会打开自己感兴趣的视频播放,在游戏空闲期或者开个小窗口两不误。这种场景下经常会遇到电脑屏幕蓝屏或者卡死😄。
这个时候第一反应就是大喊一声:“网管”,而对于网管,高兴的时候会跑到出问题电脑旁边查看问题,遇到正在起兴玩游戏的,则会回复一句:“重启”。
电脑重启,如同人在身心俱疲状态,大睡一觉后的满血复活,电脑在重启后也会将运行的各种程序进程中断,让CPU回复到初始值状态。
对于车载控制器范畴,作为行车电脑的ECU类同于电脑CPU,在运行过程中会出现非工况情况,这个时候经常也是ECU重置(重启),恢复至ECU初始状态。
此处也引申一个概念:在OEM对于DTC(故障码)需求定义时,会有一类故障是定义成车钥匙Ignition off-on可以解决的,这里就是通过ECU重置,解决该故障,不需要去往4S店进行保养修理。
本文分享如下内容,辅助了解UDS协议Service在汽车电子诊断范畴的应用
1. UDS协议中Service 11定义
2.用图形说明Service11
3.CDD数据库编辑
4. 手动测试
5.CAPL(with CDD and without CDD)
一、UDS协议中Service 11定义
UDS协议对Service 11开篇有云:
The ECUReset service is used by the client to request a serverreset.
ECU作为Server端,执行Client发送来ECU Reset请求中重启的类型(通过子服务区分)。对于UDS协议关于处理该请求的逻辑,没有强制性定义:
A:ECU收到ECUReset
request message后是先执行重启动作再ECUReset
positive response message;
B:ECU收到ECUReset
request message后,先回复ECUReset
positive response message再执行动作;
没有强制性定义,但是有强烈建议(注意语气词是强烈嗷):
ECU收到ECUReset request message后,先回复ECUReset positive response message再执行动作;
协议中关于该服务的请求格式如下:
其中关于子服务详细定义如下:
关于如上内容,有以下注意点:
1、 hardReset
硬重置,该诊断服务子服务执行策略时断开服务器与电源(汽车内部电池)的连接后再执行上电/启动顺序。该执行策略对于ECU带来的影响,在UDS协议中没有做定义,需要根据各家OEM的诊断需求自行定义(比如重置后对于掉电易失存储器和掉电非易失存储器的值是都初始化预定值)
2、 keyOffOnReset
该子服务对应的动作类似于驾驶员用车钥匙关闭打开点火钥匙的情况。在UDS协议中没有做定义,需要根据各家OEM的诊断需求自行定义,通常做法:
非易失性存储位置的值会保留;
易失性存储器将被初始化。
3、 softReset
该子服务将会使Server端立即启动应用程序。在UDS协议中没有做定义,需要根据各家OEM的诊断需求自行定义,典型的操作:
在不重新初始化先前的配置数据,自适应因素和其他长期调整的情况下重新启动应用程序。
4、 enableRapidPowerShutDown
该子功能适用于不是由点火驱动而是仅由电池驱动的ECU。因此,关机会强制进入睡眠模式,而不是关闭电源。睡眠表示电源已关闭,但仍准备唤醒(电池供电)。子功能的目的是减少点火开关转到关闭位置后ECU的待机时间。此值请求服务器启用并执行“快速关闭电源”功能。一旦“钥匙/点火开关”关闭,服务器应立即执行该功能;当服务器执行掉电功能时,应直接或在定义的待机时间后过渡到睡眠模式。响应消息,并且服务器已经准备好执行“快速关闭电源”功能,则服务器应在“快速关闭电源”功能启动之前发送肯定响应消息。或“点火开关打开”信号终止“快速电源关闭”功能。
注意此子功能仅适用于支持待机模式的服务器。
5、 User Specific
在OEM在定义诊断需求规范时,除了上述内容外,还有其他特殊ECU重启执行逻辑,可以在UDS规定的范围内自定义该子服务,并明确执行逻辑让Supplier实现即可!
对于该服务的响应格式如下:
其中PowerDownTime此参数向客户端表明ECU Server端在电源关闭序列中将保留的待机序列的最短时间。
二、用图形说明Service11
对于安全访问影响
三、CDD数据库编辑
首先在CANdelaStudio工具中勾选ECU Reset这个Class:
本文以新建11 02为例:
对该子服务命名:Key_off_on_Reset
编辑服务难度不大,只是该服务执行后对诊断范畴内两个重要的状态机影响比较大:
1、若ECU当前处于非默认会话模式,Client(Tester)发送Service 11,这个时候在会话模式状态设置不应该是“Yse”或者“No”,应该是编辑执行Service 11后ECU的状态——Default Session;
2、若ECU当前处于解锁状态,Client (Tester)发送Service,这个时候在安全访问模式状态设置不应该是“Yse”或者“No”,应该是编辑执行Service 11后ECU的状态——Locked;
四、手动测试
手动测试是将数据库加载到PC端测试设备,本文以CANoe为例:
首先将数据库加载到CANoe中
在诊断控制台发送Service 11并Trace显示:
五、CAPL(with CDD and without CDD)半自动化测试
WithCDD to test (CAPL)
首先解释下半自动的意思,就是手动编辑测试脚本,自动化运行这些测试脚本,所以叫半自动化测试。
本文分享使用CDD数据库发送Service10 01和不使用数据库发送Service10 01两种情况:
A:使用数据库CDD文件
新建工程,并加载数据库CDD文件
编辑脚本如下:
voidMainTest()
{
Testrequest();
}
Testrequest()
{
diagRequestABS_ESP.HardReset_Reset step1;
diagSetTarget ("ABS_ESP");
diagSendRequest (step1);
}
运行后Trace截图如下:
Without CDD to test (CAPL)
1、首先加载OSEK.dll文件:
2、在CAPL Browser中编辑所需脚本:
voidMainTest ()
{
longhandle;
byteDefaultSession[2]={0x11,01};
handle =CanTpCreateConnection(0);
CanTpSetTxIdentifier(handle,0x610);
CanTpSetRxIdentifier(handle,0x612);
CanTpSendData(handle,DefaultSession,2);
testWaitForTimeout(2000);
}
具体CAPL函数功能可以查询CANoe Help文档辅助学习,当然也可以发邮件给我,同行沟通!!!
相信时间的力量,
做一个长期主义者!
-----------------------------------
作者简介|穿拖鞋的汉子
汽车电子工程师
Wechat:车载诊断技术
chuantuoxiedehanzi@163.com
来,每天进步一点点!