来自:ISO 14229-1-2020.pdf
目录
14.2.1 服务描述
14.2.1.1 概述
14.2.1.2 通过引用routineIdentifier来启动一个例程
14.2.1.3 通过引用routineIdentifier来停止一个例程
14.2.1.4 通过引用routineIdentifier来请求例程结果
14.2.2请求消息
14.2.2.1请求消息定义
14.2.2.2请求消息子功能参数$Level (LEV_)定义
14.2.2.3 请求消息数据参数定义
14.2.3 积极响应信息
14.2.3.1 积极响应消息定义
14.2.3.2 积极响应消息数据参数定义
14.2.4 支持的否定响应码(NRC_)
14.2.5 消息流示例
14.2.5.1 示例#1: SubFunction = startRoutine
14.2.5.2 例#2: SubFunction = stopRoutine
14.2.5.3 示例#3:SubFunction = requestRoutineResults
14.2.1 服务描述
客户端使用RoutineControl服务执行定义的步骤序列并获得任何相关结果。该服务具有很大的灵活性,但典型的使用可能包括诸如擦除内存、重置或学习自适应数据、运行自检、覆盖正常的服务器控制策略以及控制服务器值以随时间改变,包括预定义序列(例如关闭可转换屋顶)等等。一般来说,当用于控制输出时,该服务用于更复杂的类型控制,而inputOutputControlByIdentifier用于相对简单的(例如静态)输出控制。
14.2.1.1 概述
客户端使用RoutineControl服务用来:
- 开始例程;
- 结束例程;
- 请求例程结果。
例程由一个2字节的routineIdentifier引用。
下面的子句指定由routineIdentifier引用的启动例程、停止例程和请求例程结果。
重要:服务器和客户端必须满足8.7中规定的请求和响应消息行为。
14.2.1.2 通过引用routineIdentifier来启动一个例程
在StartRoutine请求消息完成和第一个响应消息完成之间的一段时间内,例程应在服务器的内存中启动,如果响应消息是积极的或消极的,表明请求已经执行或正在执行中。
例程可以是代替正常操作代码运行的测试例程,也可以是在正常操作代码运行时启用并执行的例程。特别是在第一种情况下,可能需要使用DiagnosticSessionControl服务在特定的诊断会话中切换服务器,或者在使用StartRoutine服务之前使用SecurityAccess服务解锁服务器。
14.2.1.3 通过引用routineIdentifier来停止一个例程
如果响应消息是积极的或消极的,表明停止例程的请求已经执行或正在执行中,则在StopRoutine请求消息完成和第一个响应消息完成后,服务器例程应在服务器的记忆中停止一段时间。
在任何时候(像在服务器的内存中进行编程或初始化等)服务器例程都应该关闭。
14.2.1.4 通过引用routineIdentifier来请求例程结果
此子功能用于由客户端通过引用routineIdentifier来请求例程结果(例如,退出状态信息),并由在服务器内存中执行的例程生成。
基于例程结果,可能已经在stopRoutine子函数参数的积极响应消息中收到(例如,正常/异常退出结果)requeststroutinerresults子函数应使用。
例程结果的一个例子可能是服务器收集的数据,由于服务器性能限制,这些数据无法在例程执行期间传输。
14.2.2请求消息
14.2.2.1请求消息定义
表425指定了请求消息。
注:
- #1: 例程控制请求诊断服务标识符,值为31
- #2: 子功能 = [例程控制类型],例如值为01
- #3/#4: 例程标识符[]=[字节#1 字节#2],例如值为01 02
- #5...#n: 例程控制选项记录[]=[例程控制选项#1 ... 例程控制选项#m ],例如值为06
14.2.2.2请求消息子功能参数$Level (LEV_)定义
该服务使用子功能参数来选择对例程的控制。可能标准的解释和使用在表426中详细说明(未显示suppressPosRspMsgIndicationBit(位7))。
注:
- 00: ISOSAEReserved,此值由本文档保留,以供将来定义。
- 01: startRoutine,该参数指定服务器将启动由routineIdentifier指定的例程。
- 02: stopRoutine,该参数指定服务器停止由routineIdentifier指定的例程。
- 03: requestRoutineResults,该参数指定服务器将返回由routineIdentifier指定的例程的结果值。
- 04-7F: ISOSAEReserved,此值由本文档保留,以供将来定义。
14.2.2.3 请求消息数据参数定义
表427指定了请求消息的数据参数。
注:
- routineIdentifier:这个参数应该标识一个服务器本地例程,并且不在表F.1中定义的dataIdentifiers的范围内。
- routineControlOptionRecord:这个参数记录包含:
- 例程条目选项参数,可选地指定例程的启动条件(例如timeToRun, startUpVariables等);
- 例程退出选项参数,可选地指定例程的停止条件(例如:timeToExpireBeforeRoutineStops, 变量等);
- request Routine Results选项参数。
14.2.3 积极响应信息
14.2.3.1 积极响应消息定义
表428指定了积极响应消息。
注:
- #1: 例程控制响应诊断服务标识符,值为71
- #2: 例程控制类型,例如值为01
- #3/#4: 例程标识符[]=[字节#1 字节#2],例如值为01 02
- #5: 例程信息,例如值为01
- #6...#n: 例程状态记录[]=[例程状态#1 ... 例程状态#m ],例如值为06
-
C1: RoutineInfo字节指定了一个方案(例如StartRoutine, StopRoutine, RequestRoutineResults),以允许任何例程的通用外部测试设备处理。对于任何由ISO/SAE规范(例如ISO 27145-3, SAE J1979-DA, ISO 26021)定义routineStatusRecord的例程,即使ISO/SAE定义的routineStatusRecord的大小等于“0”数据字节,该参数也是必需的。对于那些routineStatusRecord完全由车辆制造商定义的例程,该参数的支持是可选的。这个字节的定义应该留给汽车制造商。
U: 如果车辆制造商为routineIdentifier (RID)指定了RoutineStatusByte #m,则只能包含在routineStatusRecord[]中。
14.2.3.2 积极响应消息数据参数定义
表429指定了积极响应消息的数据参数。
注:
- routineControlType:该参数是请求消息中SubFunction参数的第6 - 0位的回显。
- routineIdentifier:该参数是请求消息中的routineIdentifier的回显。
- routineInfo:RoutineInfo字节编码是特定于车辆制造商的,并根据此返回值为车辆制造商提供了一种机制,以支持通用的外部测试设备处理所有实现的例程(例如,如果需要stopRoutine或requestRoutineResults)。
- routineStatusRecord:这个参数记录被用来给客户端:
- - 关于例程开始后服务器状态的附加信息,或者
- - 关于例程停止后服务器状态的附加信息(例如,总运行时间,例程在停止前生成的结果等), 或
- - 例程的结果(退出状态信息),该例程之前已经在服务器中停止。
14.2.4 支持的否定响应码(NRC_)
本服务应实施以下否定响应代码。表430记录了每个响应代码发生的情况。如果错误场景适用于服务器,则列出的否定响应应使用。
计算序列如图30所示。
注:
- SubFunctionNotSupported(12-SFNS):如果请求的子函数通常不被支持,或者请求的RoutineIdentifier不被支持,这个NRC将被发送。
- incorrectMessageLengthOrInvalidFormat(13-IMLOIF):如果信息长度错误,则应发送此NRC。
- conditionsNotCorrect(22-CNC):如果请求RoutineControl的条件不满足,这个NRC将被返回。
- requestSequenceError(24-RSE):在下列情况下,应退还NRC:
- -程序目前处于激活状态,当接收到'startRoutine'子函数时不能重新启动(由车辆制造商决定给定的程序是否可以在激活状态下重新启动)
- -当接收到stopRoutine子函数时,这个例程目前不是活动的。
- -当接收到'requestRoutineResults'子函数时,例程结果不可用(例如,请求的routineIdentifier从未启动过)。
- requestOutOfRange(31-ROOR):在下列情况下,应退还NRC:
- -服务器不支持请求的routineIdentifier,
- -用户可选的routineControlOptionRecord包含了请求的routineIdentifier的无效数据。
- securityAccessDenied(33-SAD):如果客户端发送带有有效安全routineIdentifier的请求,并且服务器的安全特性当前处于激活状态,则发送NRC。
- GeneralProgrammingFailure(72-GPF):如果服务器在执行访问服务器内部内存的例程时检测到错误,则应返回此NRC。例如,当例程擦除或编程永久存储器设备(例如闪存)中的某个存储器位置时,对该存储器位置的访问失败。
注:例程控制服务处理流程。
14.2.5 消息流示例
14.2.5.1 示例#1: SubFunction = startRoutine
本小节规定了在服务器中启动一个例程以连续地(尽可能快地)对所有输入和输出信号进行信号间歇测试的测试条件。然后,技术人员可以“摆动”被测系统的所有线束连接器。完成此操作后,服务器中的例程将停止。routineIdentifier通过routineIdentifier 0201引用这个例程。
试验条件:点火=开,发动机=关,车速= 0 [kph]。
通过将suppressPosRspMsgIndicationBit (SubFunction参数的第7位)设置为"FALSE"('0'),客户端请求有一个响应消息。
表431指定了RoutineControl请求消息流—示例#1。
表432指定了积极响应消息流—示例#1。
14.2.5.2 例#2: SubFunction = stopRoutine
本小节规定了在服务器中启动一个例程以连续地(尽可能快地)对所有输入和输出信号进行信号间歇测试的测试条件。然后,技术人员可以“摆动”被测系统的所有线束连接器。完成此操作后,服务器中的例程将停止。routineIdentifier通过routineIdentifier 0201引用这个例程。
试验条件:点火=开,发动机=关,车速= 0 [kph]。
通过将suppressPosRspMsgIndicationBit (SubFunction参数的第7位)设置为"FALSE"('0'),客户端请求有一个响应消息。
表433指定了RoutineControl请求消息流—示例#2。
表434指定了RoutineControl正向响应消息流—示例#2。
14.2.5.3 示例#3:SubFunction = requestRoutineResults
本小节规定了在服务器中启动一个例程以连续地(尽可能快地)对所有输入和输出信号进行信号间歇测试的测试条件。然后,技术人员可以“摆动”被测系统的所有线束连接器。完成此操作后,服务器中的例程将停止。routineIdentifier通过routineIdentifier 0201引用这个例程。
试验条件:点火=开,发动机=关,车速= 0 [kph]。
通过将suppressPosRspMsgIndicationBit (SubFunction参数的第7位)设置为"FALSE"('0'),客户端请求有一个响应消息。
表435指定了RequestRoutineResults请求消息流——示例#3。
表436指定RequestRoutineResults积极响应消息流—示例#3。
14.2.5.4 例4:SubFunction = 带routineControlOption的startRoutine
本款规定了在变速箱控制单元中启动例行程序以在特殊模式下校准某一档位的换挡的测试条件。
档位可以是#1到#20的任何档位,模式可以是工作台,独立和车载。routineIdentifier通过routineIdentifier 0202引用这个例程。
试验条件:点火=开,发动机=关,车速= 0 [kph]。
通过将suppressPosRspMsgIndicationBit (SubFunction参数的第7位)设置为"FALSE"('0'),客户端请求有一个响应消息。
表437指定了RoutineControl请求消息流—示例#4。
表438指定了RoutineControl正向响应消息流—示例#4。