Bootstrap

【AutoSar_UDS服务】0x2F服务_IO控制

1. 术语解释

1.1 英文术语

英文术语解释
InputOutputControlByIdentifier通过ID控制输入输出
dataIdentifier数据标识符DID
inputOutputControlParameter输入输出控制参数
ControlState控制状态(字节集合,包含controlState#1~controlState#m)
controlEnableMaskRecord控制使能掩码记录(字节集合,包含controlMask#1~controlMask#r)
controlOptionRecord控制选项记录
sub-function子功能参数

1.2 缩写表

缩写描述解释
IOCPinputOutputControlParameter输入输出控制参数
CSControlState控制状态(字节集合,包含controlState#1~controlState#m)

2. 功能简介

2.1 功能概述

InputOutControlByIdentifier,0x2F服务作为输入输出控制服务,用于client主动请求server去对相关输入输出信号进行控制。所谓的输入输出控制简而言之就是屏蔽实际的输入输出信号值,取而代之的是client主动以某种指定的控制方式去设置这些信号值。

0x2F服务会对指定的DataIdentifier请求输入输出控制,其中可以通过IOCP来决定控制方式,如果IOCP等于0x3,那么需要加入CS值,重置受控信号的值,而该DID可能包含多个受控信号。当我们想对DID关联的一个或者多个受控信号进行控制时,需求在请求报文中加入controlEnableMask来指定受控信号。
注:其中CS和controlMask的个数(按字节)取决受控信号的个数。

为了验证0x2F服务是否生效效,此时要引入一个新的服务22(ReadDataByIdentifier),该服务可以通过信号所在的DID去获取对应的数值,然后与2F请求设置的数值比较是否相同,进而便可以知道2F控制是否生效。

2.2 应用场景

输入输出控制服务是用来控制ECU的某个外部执行器的状态(输出控制),或是替换ECU某个输入信号的值(输入控制) 。此服务在下线检测的时候经常会用到,e.g:

  • 用诊断仪命令雨刷动两下,来判断雨刷功能及安装是否正确;
  • 用诊断仪命令电机启动停止,来判断电机可以正常启停;

以上这两个例子是输出控制,在进行输出状态控制,即控制某个外部执行器的时候,要把ECU内部原来控制该执行器的上游逻辑切断,改为诊断控制,e.g:

  • 当我们想控制雨刷的时候,ECU内部要把雨刷开关对雨刷器的控制功能切断,改为诊断控制,雨刷开关不再起作用,诊断控制完毕后再返回给ECU控制,这就是这里所说的输出控制;
  • 而输入控制,则是当进行输入状态控制,即控制某个输入信号的时候,要把实际输入信号(如传感器检测信号)切断,用诊断仪发送的输入信号值来替代实际信号值,例如:在进行过压测试和欠压测试的时候,直接用诊断仪根据对应ID发出电压信号,根据是否报过压或欠压故障来判断软件逻辑是否有问题。

2.3 服务实现原理

收到0x2F执行输入替代或者输出控制时,ECU 收到请求后会有两个基本要求。

1、第 一个是断开 ID 参数上游控制策略的相应数据对象,否则将更新数据对象值。

2、第二个是替代控制策略所有下游活动所使用的相应数据对象值。例如,测试设备请求直接强制点亮头灯,需要阻止头灯开关位置影响头灯的 输出,并且将需求状态为“ON”的替代值赋给最终决定头灯状态期望输出功能所使用的数据对象。

3. 请求消息定义

3.1 0x2F请求消息格式

引用
诊断请求格式中包含四大部分:

  • SID: 诊断服务2F的标识符;
  • DataIdenfier: 服务请求受控信号所对应的DID;
  • ControlOptionRecord: 表示控制模式及控制的相关参数组成的数据集;
    • IOCP : 输入输出控制参数;
    • CS :需要被控制的参数(字节集合);
  • controlEnableMaskRecord: 若CS参数个数超过1个时,此时可以使用controlMask(字节集合)来实现对不同参数的控制,但只有1个CS参数时,则不应该使用controlMask参数,否则会回复NRC13表示请求的长度不满足要求

3.1.1 IO控制参数(IOCP)

IOCP有如下四种:

Byte data定义说明
00returnControlToECUTester取消某个的控制,将控制权归还给Server
01resetToDefaultTester请求ECU将指定DID下所有受控信号设置为默认值
02freezeCurrentStateTester请求ECU冻结指定DID下所有受控信号的当前值
03shortTermAjustmentTester请求ECU将DID下指定的受控信号设置成指定的值

注:1. 值得一提的是IOCP并非0x2F服务的子服务。
2. 在使用0x00,0x01,0x02参数请求服务时,不需要在报文中加入CS和controlMask,因为它们的操作对象是DID下所有受控信号的值。即请求报文只需是 2F DID(2 bytes) IOCP,而诊断回复报文中会带有所有受控信号的值。

3. 一般客户只会要求IOCP 0x00和0x03,并非全都支持。

3.1.2 CS

DID中的每个参数都可以是任意数量的Bit(可能存在跨字节的情况,e.g : DID的第一个参数长度为13bit,所以占了两个控制状态字节即ControlState#1-ControlState#2,还剩下3bit 数据可以被第二个参数使用,也可以空着。)
为了充分利用CS空间且能够避免使用多帧的情况,可以将数据长度小的参数放进同一个ControlState#n中,e.g :

  • DID下的受控信号参数#1(2 bits), 参数#2 (3 bits),可以将参数#1 参数#2放到同一个ControlState#1中,即参数#1 位于ControlState#1 (0-1 bit),参数#2 位于ControlState#1 (2-4 bit)。

当然,CS空间够用的话,也可以让一个受控参数占用一个或者多个ControlState字节。仅当控制的DID由多个参数组成时(即DID按照定义进行位映射或分组),才能支持控制使能掩码记录。
控制使能掩码记录中应该有一个位对应于DID中定义的每一个单独的参数。当要控制的DID只包含一个参数时,不能支持控制使能掩码记录

当诊断请求IOCP为0x03时,需要发送DID下所有的受控参数ControlState#1~ControlState#n

3.1.3 controlEnableMaskRecord

controlEnableMaskRecord 包含多个controlMask字节,(controlMask#1~controlMask#r),这取决于受控参数个数。仅当控制的DID由多个参数组成时(即DID按照定义进行位映射或分组), 才能支持控制使能掩码记录。

控制使能掩码记录中应该有一个位对应于DID中定义的每一个单独的参数。当要控制的DID只包含一个参数(可能包含多个ControlState字节)时,不能支持控制使能掩码记录。

controlEnableMaskRecord中每个位的值将决定DID中的相应参数是否会受到请求响应。

controlEnableMaskRecord的位值’0’表示相应的参数不受此请求响应,并且位值’1’表示相应的参数受此请求响应。

ControlMask#1的最高有效位应与ControlState(这里指的是controlState#1-controlState#m整体)中从最高有效位开始的第一个参数(这个参数就是DID的第一个参数,一定会包含controlState#1某些位)相对应。

controlMask#1的次高有效位对应于ControlState中的DID的第二个参数,并继续以这种方式利用尽可能多的ControlMask字节来屏蔽所有参数。 例如,controlMask#2的最低有效位将对应于controlState中的DID的第16个参数。 对于位映射的DID,不支持掩码的DID的参数,也应在controlEnableMaskRecord中具有相应的位,以便controlEnableMaskRecord中每个参数的掩码位位置应与ControlState中相应参数的位置精确匹配。

譬如下面2副图:
DID 0x0155下受控参数在CS中的位分布:
引用
CS#n 与controlEnableMaskRecord中ControlEnableMask#1的mapping关系如下。
引用

3.2 肯定响应定义

引用

3.3 否定响应定义

3.3.1 否定消息定义

A_Data 字节参数名称字节值Cvt助记符
#1否定响应SID0x7FMSIDNR
#2通信控制请求SID0x2FMSIDRQ
#3否定响应码0xXXMNRC_

3.3.2 否性响应码

引用

3.3.3 NRC评估序列

引用

4. 服务请求实例

4.1 进气门位置短期调整(单参数控制)

步骤如下:

  • Step1 :切换至扩展回话;
  • Step2 :使用通过DID读取数据的0x22服务,读取进气门位置的当前状态;
  • Step3 :短期调整;
  • Step4 :使用通过DID读取数据的0x22服务,读取进气门位置的当前状态;
  • Step5 :将控制权返回给ECU;
  • Step6 :冻结当前状态;
  • Step7 :使用通过DID读取数据的0x22服务,读取进气门位置的当前状态;
  • Step8 :将控制权返回给ECU;
  • Step9 :使用通过DID读取数据的0x22服务,读取进气门位置的当前状态;

整个实现过程如下图:

Tester ECU 03 10 83 (swtich session) 图中所有数值都为hex 03 22 9B 00(Read data) 04 62 9B 00 0A(Response) 05 2F 9B 00 03 3C(shortTermAjustment) 05 6F 9B 00 03 0C(Response) 03 22 9B 00(Read data) 04 62 9B 00 3C(Response) 04 2F 9B 00 00(returnControlToECU) 05 6F 9B 00 00 3A(Response) 04 2F 9B 00 02(freezeCurrentState) 05 6F 9B 00 02 32(Response) 03 22 9B 00(Read data) 04 62 9B 00 32(Response) 04 2F 9B 00 00(returnControlToECU) 05 6F 9B 00 00 2F(Response) 03 22 9B 00(Read data) 04 62 9B 00 0A(Response) 单参数控制 Tester ECU

4.2 EGR和IAC短期调整(多参数控制)

如下图,DID(0x0155)对应的受控参数有5个分别是IAC枢轴位置、发动机转速、踏板位置A、踏板位置B、EGR工作周期。其中,值得注意的是第三个和第四个参数的数据位置以及他们对应的controlMask。
在这里插入图片描述
在这里插入图片描述

4.3 仅控制IAC枢轴位置

Tester ECU 02 10 83 (swtich session) 图中所有数值都为hex 02 3e 80 (保持会话) 10 0A 2F 01 55 03 07 XX(首帧) 30 00 14(流控帧) 20 XX YZ XX 80 AA AA AA(连续帧) 10 09 6F 01 55 03 07 02 (肯定响应-首帧) 30 00 00(流控帧) 20 EE 12 59 AA AA AA AA(连续帧) Tester ECU

4.4 仅控制RPM

Tester ECU 02 10 83 (swtich session) 图中所有数值都为hex 02 3e 80 (保持会话) 10 0A 2F 01 55 03 XX 03(首帧) 30 00 14(流控帧) 20 E8 YZ XX 40 AA AA AA(连续帧) 10 09 6F 01 55 03 09 03 (肯定响应-首帧) 30 00 00(流控帧) 20 B6 12 59 AA AA AA AA(连续帧) Tester ECU

4.5 同时控制踏板位置A和EGR工作周期

Tester ECU 02 10 83 (swtich session) 图中所有数值都为hex 02 3e 80 (保持会话) 10 0A 2F 01 55 03 XX XX(首帧) 30 00 14(流控帧) 20 XX 3Z 72 28 AA AA AA(连续帧) 10 09 6F 01 55 03 07 03 (肯定响应-首帧) 30 00 00(流控帧) 20 52 32 69 AA AA AA AA(连续帧) Tester ECU

4.6 将所有受控参数控制权返还给ECU

Tester ECU 02 10 83 (swtich session) 图中所有数值都为hex 02 3e 80 (保持会话) 05 2F 01 55 00 FF(Req) 10 09 6F 01 55 00 09 03 (肯定响应-首帧) 30 00 00(流控帧) 20 52 12 59 AA AA AA AA(连续帧) Tester ECU

5. 配置说明

  1. 主要涉及DcmDsd中的DcmDsdServiceTable容器中进行2F服务的配置:
  • ServiceID的配置
    • 引用相关的会话模式
    • DID
  1. 涉及DcmDsp中的三个配置容器
  • DcmDspDid
    • DID中需要配置相应的Signals(引用DcmDspData)以及起始位
  • DcmDspData
    • a. 配置数据的大小端
    • b. IOCP 各个参数的函数功能回调,回读DidData的回调
    • c. 数据类型和size以及引用nvm block
  • DcmDspDidInfo
    • DcmDspDidControl中ControlMask及其Size,IOCP是否支持

参考资料

汽车UDS诊断之输入输出控制服务
UDS服务基础篇之2F
14229规范

;