大连全瓷种植牙齿制作中心 发表于 7 天前

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. 概述

客户端使用 肉体呢Control(例程控制)服务以:
– 启动例程,
– 制止例程,并
– 请求例程效果
可由 2 字节的 routineIdentifier(例程标识符)引用例程。
下述末节规定了启动例程、制止例程以及请求 routineIdentifier(例程标识符)引用例程的效果。
2. 启动 routineIdentifier 引用的例程

若相应消息是肯定或否定的表示请求已经实行或即将实行,则须在完成 StartRoutine(启动例程)请求消息和完成首个相应消息之间的某段时间内涵服务器内存中启动例程。
例程既可以是非正常运行代码的运行测试,也可以是在运行正常运行代码时启用和实行的例程。尤其是在第一种情况下,可能要求在使用 StartRoutine 服务之前,用 DiagnosticSessionControl(诊断会话控制)服务在一个特定的诊断会话中切换服务器,或用 SecurityAccess(安全访问)服务解锁服务器。
3. 制止 routineIdentifier 引用的例程

若相应消息是肯定或否定的表示制止例程的请求已经实行或即将实行,则须在完成 StopRoutine(制止例程)请求消息和完成首个相应消息之后的某段时间内涵服务器内存中制止服务器例程。
注:须在服务器内存中按编程或先前初始化随时制止服务器例程。
4. 请求 routineIdentifier 引用例程的效果

客户端使用该子功能请求 routineIdentifier 引用例程的效果(如退出状态信息),该效果是服务器内存内实行的例程所产生的效果。
若 stopRoutine 子功能参数的肯定相应消息接收到例程效果(如正常 / 非常退出效果),则须使用 requestRoutineResults(请求例程效果)子功能。
示例中的 routineResult(例程效果)可以是服务器网络的数据,但由于服务器性能的限定,这在实行例程期间无法进行传输。
二、请求消息

1. 请求消息定义

字节参数名称Cvt字节值#1RoutineControl 请求 SIDM0x31#2sub-function = M0x00 - 0xFF
#3
#4routineIdentifier[] = [
         byte#1(MSB)      
byte#2(LSB) ]   
M
M
0x00 - 0xFF
0x00 - 0xFF
#5

#nroutineControlOptionRecord[] = [
         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
#4routineIdentifier[] = [
         byte#1(MSB)      
byte#2(LSB) ]   
M
M
0x00 - 0xFF
0x00 - 0xFF#5routineInfoC10x00 - 0xFF
#6

#nroutineStatusRecord[] = [
         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 处置惩罚。
https://i-blog.csdnimg.cn/direct/e9c3c4b40caa4e158eb3887342fe94ab.png
   图例
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 (点火开关打开,发动机熄火,车辆速率为 0)。
客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求相应消息。
req31 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 (点火开关打开,发动机熄火,车辆速率为 0)。
客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求相应消息。
req31 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 (点火开关打开,发动机熄火,车辆速率为 0)。
客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求相应消息。
req31 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 (点火开关打开,发动机熄火,车辆速率为 0)。
客户端通过将 suppressPosRspMsgIndicationBit 设置为 “假” 来请求相应消息。
req31 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: UDS 诊断 - RoutineControl(例程控制)(0x31)服务