UDS 诊断 - RoutineControl(例程控制)(0x31)服务

UDS 诊断服务系列文章目录

诊断和通信管理功能单元
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
数据传输功能单元
UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务
UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务
UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务
UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务
UDS 诊断 - DynamicallyDefineDataIdentifier(动态定义数据标识符)(0x2C)服务
UDS 诊断 - WriteDataByIdentifier(按标识符写数据)(0x2E)服务
UDS 诊断 - WriteMemoryByAddress(按地址写内存)(0x3D)服务
存储数据传输功能单元
UDS 诊断 - ClearDiagnosticInformation(清除诊断信息)(0x14)服务
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(1) - 服务说明
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(2) - 请求消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(3) - 响应消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(4) - 示例
输入输出控制功能单元
UDS 诊断 - InputOutputControlByIdentifier(按标识符的输入输出控制)(0x2F)服务
例程功能单元
UDS 诊断 - RoutineControl(例程控制)(0x31)服务


一、服务说明

客户端使用 RoutineControl(例程控制)服务执行指定的步骤顺序并获取任何相关结果。该服务具有较大的灵活性,但一般应用可以包括清除内存、重置或学习自适应数据、运行自检、覆盖正常的服务器控制策略和控制服务器值随时间而变化,以及预定义序列(如关闭敞篷车顶)等。在一般情况下,将该服务用于控制输出时,该服务可用于更为复杂类型的控制,而 inputOutputControlByIdentifier(按标识符的输入输出控制)却用于相对简单(如静态)的输出控制。

1. 概述

客户端使用 RoutineControl(例程控制)服务以:

– 启动例程,

– 停止例程,并

– 请求例程结果

可由 2 字节的 routineIdentifier(例程标识符)引用例程。

下述小节规定了启动例程、停止例程以及请求 routineIdentifier(例程标识符)引用例程的结果。

2. 启动 routineIdentifier 引用的例程

若响应消息是肯定或否定的表示请求已经执行或即将执行,则须在完成 StartRoutine(启动例程)请求消息和完成首个响应消息之间的某段时间内在服务器内存中启动例程。

例程既可以是非正常运行代码的运行测试,也可以是在运行正常运行代码时启用和执行的例程。尤其是在第一种情况下,可能要求在使用 StartRoutine 服务之前,用 DiagnosticSessionControl(诊断会话控制)服务在一个特定的诊断会话中切换服务器,或用 SecurityAccess(安全访问)服务解锁服务器。

3. 停止 routineIdentifier 引用的例程

若响应消息是肯定或否定的表示停止例程的请求已经执行或即将执行,则须在完成 StopRoutine(停止例程)请求消息和完成首个响应消息之后的某段时间内在服务器内存中停止服务器例程。

注:须在服务器内存中按编程或先前初始化随时停止服务器例程。

4. 请求 routineIdentifier 引用例程的结果

客户端使用该子功能请求 routineIdentifier 引用例程的结果(如退出状态信息),该结果是服务器内存内执行的例程所产生的结果。

若 stopRoutine 子功能参数的肯定响应消息接收到例程结果(如正常 / 异常退出结果),则须使用 requestRoutineResults(请求例程结果)子功能。

示例中的 routineResult(例程结果)可以是服务器收集的数据,但由于服务器性能的限制,这在执行例程期间无法进行传输。

二、请求消息

1. 请求消息定义

字节参数名称Cvt字节值
#1RoutineControl 请求 SIDM0x31
#2sub-function = [RoutineControlType]M0x00 - 0xFF

#3
#4
routineIdentifier[] = [
byte#1(MSB)
byte#2(LSB) ]

M
M

0x00 - 0xFF
0x00 - 0xFF

#5

#n
routineControlOptionRecord[] = [
routineControlOption#1

routineControlOption#m]

C/U

C/U

0x00 - 0xFF

0x00 - 0xFF

C:用户可以为子功能参数 StartRoutine 和 stopRoutine 使用该参数。

2. 请求消息子功能参数定义

第 6 至 0 位说明
0x00保留
0x01StartRoutine(启动例程)
该参数规定了服务器须启动 routineIdentifier 指定的例程。
0x02stopRoutine(停止例程)
该参数规定了服务器须停止 routineIdentifier 指定的例程。
0x03requestRoutineResults(请求例程结果)
该参数规定了服务器须返回 routineIdentifier 指定例程的结果值。
0x04 - 0x7F保留

3. 请求消息数据参数定义

定义
routineIdentifier(例程标识符)
该参数标识服务器本地例程,并且超过了指定 dataIdentifier 的范围。
RoutineControlOptionRecord(例程控制选项记录)
该参数记录包括下述两者之一。
- 例程入口选项参数,可以选择性地指定例程的启动条件(如 timeToRun、startUpVariables 等),或者
- 例程退出选项参数,可以选择性地指定例程的停止条件(如 timeToExpireBeforeRoutineStops、variable 等)。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称Cvt字节值
#1RoutineControl 响应SIDM0x71
#2RoutineControlTypeM0x00 - 0x7F

#3
#4
routineIdentifier[] = [
byte#1(MSB)
byte#2(LSB) ]

M
M

0x00 - 0xFF
0x00 - 0xFF
#5routineInfoC10x00 - 0xFF

#6

#n
routineStatusRecord[] = [
routineStatus#1

routineStatus#m ]

U

U

0x00 - 0xFF

0x00 - 0xFF

C1:RoutineInfo 字节指定了任一程序的通用外部测试设备的处理方案(如 StartRoutine、StopRoutine、RequestRoutineResults)。在 ISO/SAE 规范定义了 routineStatusRecord(例程状态记录)的情况下,任一程序都必须有该参数,即使定义了 routineStatusRecord 大小的 ISO/SAE 是 “0” 数据字节。在车辆制造商完全定义了例程 routineStatusRecord 的情况下,可以选择性的支持该参数。须由车辆制造商定义该字节。

U:若车辆制造商在 routineIdentifier(RID)中规定,则须仅在 routineStatusRecord[] 中含有 RoutineStatusByte #m。

2. 肯定响应消息数据参数的定义

定义
RoutineControlType
该参数是对来自请求消息的子功能参数第 6 至 0 位的回显。
routineIdentifier(例程标识符)
该参数是请求消息的 routineIdentifier 的回显。
routineInfo
有车辆制造商负责 routineInfo 字节编码,并根据返回值为车辆制造商提供一种支持所有执行例程的通用外部测试设备处理的机制(若要求 StopRoutine 或 RequestRoutineResults)。
routineStatusRecord(例程状态记录)
该参数记录用于向客户端提供下述两者之一:
- 启动例程后有关服务器状态的其他信息,或者
- 停止例程后有关服务器状态的其他信息(如总运行时间、停止例程前后所产生的结果等),或者
- 服务器先前停止的例程的结果(退出状态信息)。

四、受支持的 NRC

NRC说明
0x12不受支持的子功能
0x13消息不正确或格式无效
0x22条件不正确
若不符合请求 RoutineControl 的要求,则须返回该 NRC。
0x24请求序列错误
下述情况,应返回此 NRC:
- 当接收到 StartRoutine 子功能时例程当前处于激活状态且无法重启(由车辆制造商决定是否能够重启激活状态下的指定例程),
- 当接收到 StopRoutine 子功能时例程当前处于未激活状态,
- 当接收到 RequestRoutineResults 子功能时没有例程结果(如从未启动过所请求的 routineIdentifier)。
0x31请求超过限值
下述情况下,应返回此 NRC:
- 服务器不支持请求的 routineIdentifier,
- 用户选用的 routineControlOptionRecord 包括请求的 routineIdentifier 的无效数据。
0x33安全访问被拒绝
若客户端发送带有效、安全的 routineIdentifier 的请求且服务器安全功能当前是激活的,则发送此 NRC。
0x72常规编程失败
若服务器在执行访问服务器内存的例程时发现错误,则须返回该 NRC。例如在例程清除或编程永久存储设备的特定内存位置(如内存)和访问该内存位置失败时。

下图为 0x31 服务的 NRC 处理。

0x31 服务的 NRC 处理

图例

1 至少 4(SI + SubFunction + RID Parameter)

2 特定 RID 所需的 1 字节 SI + 1 字节 SF + 2 字节 RID + 第 n 字节 RoutineControlOptionRecord(例程控制选项记录)

五、示例

1. 示例 1:子功能 = StartRoutine

本小节说明了在服务器中启动例程的测试条件,在技术员 “扭动” 所有受试系统线束接头时,间歇性的不断测试(尽可能快的)所有输入和输出信号。通过 routineIdentifier 0x0201 引用该程序。

测试条件:ignition = on,engine = off,vehicle speed = 0 [kph](点火开关打开,发动机熄火,车辆速度为 0)。

客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求响应消息。

req  31 01 02 01
resp 71 01 02 01 
	 32 - routineStatusRecord[ routineStatus#1 ] = vehicle manufactuer specific

2. 示例 2:子功能 = StopRoutine

本小节说明了在服务器中停止例程的测试条件,在技术员 “扭动” 所有受试系统线束接头是,间歇性的不断测试(尽可能快的)所有输入和输出信号。通过 routineIdentifier 0x0201 引用该程序。

测试条件:ignition = on,engine = off,vehicle speed = 0 [kph](点火开关打开,发动机熄火,车辆速度为 0)。

客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求响应消息。

req  31 02 02 01
resp 71 02 02 01
	 30 - routineStatusRecord[ routineStatus#1 ] = vehicle manufactuer specific

3. 示例 3:子功能 = RequestRoutineResults

本小节说明了如何在结束例程后获取结果值,在技术员 “扭动” 所有受试系统线束接头是,间歇性的不断测试(尽可能快的)所有输入和输出信号。通过 routineIdentifier 0x0201 引用该程序。

测试条件:ignition = on,engine = off,vehicle speed = 0 [kph](点火开关打开,发动机熄火,车辆速度为 0)。

客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求响应消息。

req  31 03 02 01
resp 71 03 02 01
	 30 - routineStatusRecord[ routineStatus#1 ] = vehicle manufactuer specific
	 33 - routineStatusRecord[ routineStatus#2 ] = inputSignal#1
	 ..
	 8F - routineStatusRecord[ routineStatus#m ] = inputSignal#m

4. 示例 4:子功能 = startRoutine with routineControlOption

本小节规定了在传输控制单元中启动例程的测试条件,以在特殊模式下对特定党委校准换挡。档位范围为 #1 至 #20,模式可以是工作台、架台和车上。通过 routineIdentifier 0x0202 引用该程序。

测试条件:ignition = on,engine = off,vehicle speed = 0 [kph](点火开关打开,发动机熄火,车辆速度为 0)。

客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求响应消息。

req  31 01 02 02 
	 06 - routineControlOption#1[ selected gear ] = vehicle manufactuer specific
	 01 - routineControlOption#2[ test condition ]
resp 71 01 02 02
	 32 - routineStatusRecord[ routineStatus#1 ] = vehicle manufactuer specific
	 33 - routineStatusRecord[ routineStatus#2 ] = response time
	 ..
	 8F - routineStatusRecord[ routineStatus#m ] = inputSignal#m
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值