目录
1、0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)
Service description:
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)被客户端用于替换输入信号/内部服务函数的值,或者是强制控制电子系统执行器(输出)的值。通常,此服务用于相对简单的(例如,静态)输入替换/输出控制,而0x31(routineControl,例程控制服务)则用于需要更复杂的输入替换/输出控制。
客户端请求消息包含一个dataIdentifier(DID),用于引用服务端的输入信号、内部函数或输出信号(执行器)(在设备控制访问的情况下,它可能引用一组信号)。controlloptionrecord参数应包括服务端输入信号、内部函数和输出信号所需的所有信息。如果要控制的数据标识符(dataIdentifier(DID))引用多个参数(即数据标识符被打包或位映射),汽车制造商可能要求请求报文包含controlEnableMask。如果汽车制造商选择支持EnableMask概念,那么对于该服务的所有类型的InputOutputControlByIdentifier请求,controlEnableMask参数都是必需的。如果inputOutputControlByIdentifier请求的dataIdentifier(DID),其引用的是观测的输出或反馈值,则服务端应替换给控制策略中正确的目标值,以便服务端的控制策略能够正常到达目标状态。
如果请求的控制成功启动或达到了所需状态,服务端将发送一个肯定应答报文。即使数据标识符(dataIdentifier)目前不在测试者的控制下,服务端也应该向带有returnControlToECU的inputOutputControlParameter的请求报文发送一个肯定应答报文。此外,当接收到returnControlToECU请求时,服务端应该始终为客户端提供将controlMask(如果支持的话)的位全部设置为’1’的功能,以便将数据标识符的位映射的控制权完全返回给ECU。请求报文controlOptionRecord参数中的inputOutputControlParameter后面的controlState字节的格式和长度必须与被请求的dataIdentifier的dataRecord的长度和格式完全匹配。这样就可以确保使用0x22服务(ReadDatabyIdentifier)读取相同DID时,可以获取实际的输出或输入状态。
当使用inputOutputControlByIdentifier服务执行输入替换或输出控制时,在ECU接受请求时有两个基本。第一种是将dataIdentifier中参数引用的数据对象与所有上层控制策略断开连接,否则这些策略将更新数据对象值。第二种是将一个值替换到数据对象中,这些数据对象将用于控制策略的所有下游活动。例如,测试人员要求直接强制打开前照灯,需要防止前照灯的开关位置影响到了前照灯的输出,并将期望的“打开”状态替换到数据对象中,而这些数据对象会被函数调用,进而会最终决定前照灯的目标输出。
该服务允许在单个请求报文中控制单个数据标识符(dataIdentifier)及相应的参数。这样,服务端将使用单个应答报文进行响应,包括了请求报文的dataIdentifier和controlStatus信息。
2、请求报文格式
2.1 请求报文定义
下表定义了请求报文的格式:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | InputOutputControlByIdentifier Request SID | M | 0x2F |
#2 #3 | dataIdentifier [] = [ byte#1 (MSB) byte#2 (LSB) | M M | 0x00 – 0xFF 0x00 – 0xFF |
#4 . . #4+(m-1) | controlOptionRecord [] = [ inputOutputControlParameter controlState#1 . . controlState#m ] | M1 C1 . . C1 | 0x00 - 0xFF 0x00 - 0xFF . . 0x00 - 0xFF |
#4+m . . #4+m+(r-1) | controlOptionRecord [] = [ controlMask#1 . . controlState#r ] | C2 . . C2 | 0x00 - 0xFF . . 0x00 - 0xFF |
M1:inputOutputControlParameter参数的详细定义见下表;
C1:该参数的存在取决于dataIdentifier和inputOutputControlParameter;
C2:如果车辆制造商支持controlEnableMask概念,则如果dataIdentifier包含多个参数(参见controlEnableMaskRecord定义),则应包括此参数。
inputOutputControlParameter参数的详细定义见下表
Byte Value | 描述 | 约定 |
---|---|---|
0x00 | returnControlToECU 该值应向服务端表明,客户端不再控制由dataIdentifier引用的输入信号、内部参数和输出信号 请求中controlState字节的详细信息:0字节 肯定应答中controlState字节的详细信息:等于dataIdentifier的dataRecord的大小和格式 | U |
0x01 | resetToDefault 该值将向服务端表明,它被请求将dataIdentifier引用的输入信号、内部参数和输出信号重置为其默认状态 请求中controlState字节的详细信息:0字节 肯定应答中controlState字节的详细信息:等于dataIdentifier的dataRecord的大小和格式 | U |
0x02 | freezeCurrentState 该值将向服务端表明,请求冻结由dataIdentifier引用的输入信号、内部参数和/或输出信号的当前状态 请求中controlState字节的详细信息:0字节 肯定应答中controlState字节的详细信息:等于dataIdentifier的dataRecord的大小和格式 | U |
0x03 | shortTermAdjustment 此值应向服务端表明,请求将RAM中的数据标识符引用的输入信号、内部参数和受控输出信号调整为控制参数中包含的值(例如,将怠速空气控制阀设置为特定步长,将阀的脉宽设置为特定值/占空比) 请求中controlState字节的详细信息:等于dataIdentifier的dataRecord的大小和格式 肯定应答中controlState字节的详细信息:等于dataIdentifier的dataRecord的大小和格式 | U |
0x04 - 0xFF | ISOSAEReserved ISO保留 | M |
2.2 请求报文中子函数参数定义
该服务未使用子函数参数。
2.3 请求报文中数据参数定义
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
dataIdentifier 该参数表示了服务端的局部输入信号、内部参数和输出信号。 |
controlOptionRecord controlloptionrecord由一个或多个字节组成(inputOutputControlParameter和controlState#1到controlState#m)。controlloptionrecord参数细节应按照inputOutputControlParameter参数的详细规范来实现。 |
controlEnableMaskRecord controlEnableMaskRecord由一个或多个字节(controlMask#1到controlMask#r)组成。只有当控制的数据标识符包含多个参数(即,数据标识符是位映射的或按定义打包)时,才支持controlEnableMaskRecord。在controlEnableMaskRecord中应该有一个位对应于dataIdentifier中定义的每个单独的参数。当要控制的数据标识符(DID)仅由单个参数组成时,不支持controlEnableMaskRecord。 注意 数据标识符中的每个参数可以是任意位数 controlEnableMaskRecord中的每个位的值,将会决定dataIdentifier中相应的参数是否会受到请求的影响。controlEnableMaskRecord中的“0”表示对应的参数不受此请求的影响,“1”表示对应的参数受此请求的影响。ControlMask#1的最高有效位应对应ControlState中的第一个参数,从ControlState#1的最高有效位开始,ControlMask#1的第二个最高有效位应对应于ControlState中的第二个参数,并以这种方式继续利用尽可能多的ControlMask字节去屏蔽所有的参数。例如,ControlMask#2的最低有效位对应于controlState中的第16个参数。对于位映射的数据标识符(DID),不支持的位也应该在controlEnableMaskRecord中有相应的位,以便controlEnableMaskRecord中每个参数的掩码位的位置应该与相应参数在controlState中的位置完全匹配。 |
3、肯定应答报文
3.1 肯定应答报文格式定义
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | InputOutputControlByIdentifier Response SID | M | 0x6F |
#2 #3 | dataIdentifier [] = [ byte#1 (MSB) byte#2 (LSB) ] | M M | 0x00 - 0xFF 0x00 - 0xFF |
#2 #3 . . #5+(m-1) | controlStatusRecord [] = [ inputOutputControlParameter controlState#1 . . controlState#m ] | M C1 . . C1 | 0x00 - 0xFF 0x00 - 0xFF . . 0x00 - 0xFF |
C1:该参数的存在取决于dataIdentifier和inputOutputControlParameter。
3.2 肯定应答报文数据参数定义
该服务肯定应答报文中使用到的数据参数的定义见下表:
定义 |
---|
dataIdentifier 该参数为请求报文中的数据标识符(dataIdentifier)。 |
controlStatusRecord controlState参数由多个字节组成(InputOutputControlParameter,从controlState#1到controlState#m),其包括了反馈数据。 |
4、支持的否定应答码(NRC_)
本服务实施了如下否定响应代码,下表记录了每个否定应答码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应码。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 请求报文长度不正确时,会发送该NRC |
0x22 | conditionsNotCorrect 当根据标识符控制输入输出服务请求的标准不满足时,会发送该NRC |
0x31 | requestOutOfRange 以上情况会会发送该NRC: — 设备不支持请求的数据标识符的值; — inputOuptputControlParameter包含的值是无效的; — controlOptionRecord记录的一个或者多个controlState的值是无效的; — 在ControlEnableMaskRecord中使能控制位的结合不被设备所支持; |
0x33 | securityAccessDenied 客户端发送了一个请求,其带有有效安全的数据标识符,并且服务端的安全特征是激活的。 |
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)否定应答码(NRC)具体处理过程。
5、0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)案例说明
假设:以下案例展示了根据标识符控制输入输出服务被HVAC控制模块所使用,并且假设与单个服务端进行物理通讯。
Example #1 - ”Air Inlet Door Position” shortTermAdjustment
数据标识符(0x9B00),表示"进气门位置"。
转换:进气门位置 [%] = decimal(Hex) * 1 [%];
Step #1: ReadDataByIdentifier
该案例使用0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)来获取进气门位置的当前状态。
0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)的请求报文使用如下,由客户端发往服务端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Request SID | 0x22 |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)的应答报文使用如下,由服务端发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Response SID | 0x62 |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | dataRecord [ data#1 ] = 10% | 0x0A |
Step #2: shortTermAdjustment
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的请求报文使用如下,由客户端发往服务端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Request SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 #5 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = 60% | 0x03 0x3C |
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的应答报文使用如下,由服务端发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 #5 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = 12% | 0x03 0x0C |
注意:客户端已经发送了如上所述的inputOutputControlByIdentifier服务的请求报文。服务端已经发送了一个即时的肯定应答报文,其中包括controlState参数“进气门位置”,其值为12%。进气门需要一定的时间才能移动到所要求的60%的值。
Step #3: ReadDataByIdentifier
该案例使用0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)来获取进气门位置的当前状态。
0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)的请求报文使用如下,由客户端发往服务端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Request SID | 0x22 |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
0x22服务(ReadDataByIdentifier,根据标识符读取数据服务)的应答报文使用如下,由服务端发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Response SID | 0x62 |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | dataRecord [ data#1 ] = 60% | 0x3C |
注意:当inputOutputControlByIdentifier服务处于活动状态时,客户端已经发送了上面指定的readDataByIdentifier请求报文。服务端控制策略需要有限的时间才能最终达到期望的值。上面的示例反映了服务端最终达到期望的目标值的时间。
Step #4: returnControlToECU
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的请求报文使用如下,由客户端发往服务端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Request SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | controlOptionRecord [ inputOutputControlParameter ] = returnControlToECU | 0x00 |
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的应答报文使用如下,由服务端发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | controlOptionRecord [ inputOutputControlParameter ] = returnControlToECU | 0x00 |
#5 | controlStatusRecord [ controlState#1 ] = 58% | 0x3A |
Step #5: freezeCurrentState
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的请求报文使用如下,由客户端发往服务端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Request SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | controlOptionRecord [ inputOutputControlParameter ] = freezeCurrentState | 0x02 |
0x2F服务(InputOutputControlByIdentifier,根据标识符控制输入输出服务)的应答报文使用如下,由服务端发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x9B dataIdentifier [ byte#2 ] = 0x00 (“Air Inlet Door Position”) | 0x9B 0x00 |
#4 | controlOptionRecord [ inputOutputControlParameter ] = freezeCurrentState | 0x02 |
#5 | controlStatusRecord [ controlState#1 ] = 50% | 0x32 |
Example #2 – EGR and IAC shortTermAdjustment
Assumptions
该案例使用了打包的数据标识符0x0155,来展示单个参数或者多个参数在单条请求报文中的控制。
本小节指定了shortTermAdjustment函数的测试条件和示例dataIdentifier 0x0155的相关消息流。该数据标识符支持以下表中5种单个的数据。
Data Byte | Number | Size | Data Record Contents |
---|---|---|---|
#1 (all bits) | #1 | 8 bits | dataRecord [ data#1 ] = IAC Pintle Position (n = counts) |
#2 - #3 (all bits) | #2 | 16 bits | dataRecord [ data#2-#3 ] = RPM (0 = 0 U/min, 65 535 = 65 535 U/min) |
#4 (bits 7-4) | #3 | 4 bits | dataRecord [ data#4 (bits 7-4) ] = Pedal Position A: Linear Scaling, 0 = 0%, 15 = 120 % |
#4 (bits 3-0) | #4 | 4 bits | dataRecord [ data#4 (bits 3-0) ] = Pedal Position B: Linear Scaling, 0 = 0%, 15 = 120 % |
#5 (all bits) | #5 | 8 bits | dataRecord [ data#5 ] = EGR Duty Cycle: Linear Scaling, 0 counts = 0%, 255 counts = 100 % |
DataIdentifier 0x0155 按照定义封装,由五个基本参数组成。出于单独控制的目的,它们中的每一个元素参数可以通过ControlEnableMaskRecord中的单个位进行选择。如果给定的dataIdentifier不具有打包或位映射的定义,则请求报文中不存在ControlEnableMaskRecord。ControlMask#1的最高有效位总是需要对应于从ControlState#1的最高有效位开始的dataIdentifier中的第一个参数。下表展示了这一点。
Bit Position | ControlEnableMask#1 – Bit Meaning (1 = affected, 0 = not affected) |
---|---|
7 (Most Significant Bit) | #1 |
6 | 决定参数#2(RPM)是否会受到请求的影响; |
5 | 决定参数#3(Pedal Position A)是否会受到请求的影响; |
4 | 决定参数#4(Pedal Position B)是否会受到请求的影响; |
3 | 决定参数#5(EGR Duty Cycle)是否会受到请求的影响; |
2 | 无参数因此无影响 |
1 | 无参数因此无影响 |
0 (Least Significant Bit) | 无参数因此无影响 |
Case #1: Control IAC Pintle Position only
下表定义了InputOutputControlByIdentifier请求报文,example #2 – Case #1,由客户端发往服务端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(7 counts) controlOptionRecord [ controlState#2 ] = RPM (XX) controlOptionRecord [ controlState#3 ] = RPM (XX) controlOptionRecord [ controlState#4 ] = Pedal Position A (Y) and B (Z) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (XX) | 0x03 0x07 0xXX 0xXX 0xYZ 0xXX |
#10 | controlEnableMask [ controlMask#1 ] = Control IAC Pintle Position ONLY | 0x80 |
注意:在controlState#2 - #5中传输的RPM、踏板位置A、踏板位置B和EGR占空比的值是不相关的,因为controlMask#1参数指定只有dataIdentifier中的第一个参数将受到请求的影响。
下表定义了InputOutputControlByIdentifier肯定应答报文,example #2 – Case #1,由服务端发往客户端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(7 counts) controlOptionRecord [ controlState#2 ] = RPM (750 U/min) controlOptionRecord [ controlState#3 ] = RPM controlOptionRecord [ controlState#4 ] = Pedal Position A (8%) and B (16%) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (35%) | 0x03 0x07 0x02 0xEE 0x12 0x59 |
注意:在controlState#1 - controlState#5中传输的所有参数的值应反映系统的当前状态。
Case #2: Control RPM Only
下表定义了InputOutputControlByIdentifier请求报文,example #2 – Case #2,由客户端发往服务端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(XX counts) controlOptionRecord [ controlState#2 ] = RPM (0x03E8 = 1000 U/min) controlOptionRecord [ controlState#3 ] = RPM controlOptionRecord [ controlState#4 ] = Pedal Position A (Y) and B (Z) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (XX) | 0x03 0xXX 0x03 0xE8 0xYZ 0xXX |
#10 | controlEnableMask [ controlMask#1 ] = Control RPM ONLY | 0x40 |
注意:在controlstate# 1和controlstate# 4 - #5中,为IAC销位、踏板位置A、踏板位置B和EGR占空比传输的值是不相关的,因为controlMask#1参数指定只有dataIdentifier中的第二个参数将受到请求的影响。
下表定义了InputOutputControlByIdentifier肯定应答报文,example #2 – Case #2,由服务端发往客户端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(9 counts) controlOptionRecord [ controlState#2 ] = RPM (950 U/min) controlOptionRecord [ controlState#3 ] = RPM controlOptionRecord [ controlState#4 ] = Pedal Position A (8%) and B (16%) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (35%) | 0x03 0x09 0x03 0xB6 0x12 0x59 |
注意:在controlState#1 - controlState#5中传输的所有参数的值应反映系统的当前状态。
Case #3: Control both Pedal Position A and EGR Duty Cycle
下表定义了InputOutputControlByIdentifier请求报文,example #2 – Case #3,由客户端发往服务端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(XX) controlOptionRecord [ controlState#2 ] = RPM (XX) controlOptionRecord [ controlState#3 ] = RPM(XX) controlOptionRecord [ controlState#4 ] = Pedal Position A (0x3 = 24 %) and B (Z) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (45 %) | 0x03 0xXX 0xXX 0xXX 0x3Z 0x72 |
#10 | controlEnableMask [ controlMask#1 ] = Control Pedal Position A and EGR | 0x28 |
注意:在controlState#1 - #3和controlState#4(位3-0)中传输的IAC销的位置、RPM和踏板位置B的值是不相关的,因为controlMask#1参数指定只有dataIdentifier中的第三和第五个参数会受到请求的影响。
下表定义了InputOutputControlByIdentifier肯定应答报文,example #2 – Case #3,由服务端发往客户端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = shortTermAdjustment controlOptionRecord [ controlState#1 ] = IAC Pintle Position(7 counts) controlOptionRecord [ controlState#2 ] = RPM (850 U/min) controlOptionRecord [ controlState#3 ] = RPM controlOptionRecord [ controlState#4 ] = Pedal Position A (24%) and Pedal Position B (16%) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (41%) | 0x03 0x07 0x03 0x52 0x32 0x69 |
注意:在controlState#1 - controlState#5中传输的所有参数的值应反映系统的当前状态。
Case #4: Return control of all parameters to the ECU
下表定义了InputOutputControlByIdentifier请求报文,example #2 – Case #4,由客户端发往服务端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x2F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 | controlOptionRecord [ inputOutputControlParameter ] = returnControlToECU | 0x00 |
#10 | controlEnableMask [ controlMask#1 ] = All elemental parameters | 0xFF |
下表定义了InputOutputControlByIdentifier肯定应答报文,example #2 – Case #4,由服务端发往客户端。
字节顺序 | Description | 字节值 |
---|---|---|
#1 | InputOutputControlByIdentifier Response SID | 0x6F |
#2 #3 | dataIdentifier [ byte#1 ] = 0x01 dataIdentifier [ byte#2 ] = 0x55 (IAC / RPM / PPA / PPB / EGR) | 0x01 0x55 |
#4 #5 #6 #7 #8 #9 | controlOptionRecord [ inputOutputControlParameter ] = returnControlToECU controlOptionRecord [ controlState#1 ] = IAC Pintle Position(9 counts) controlOptionRecord [ controlState#2 ] = RPM (850 U/min) controlOptionRecord [ controlState#3 ] = RPM controlOptionRecord [ controlState#4 ] = Pedal Position A (8%) and Pedal Position B (16%) controlOptionRecord [ controlState#5 ] = EGR Duty Cycle (35%) | 0x00 0x09 0x03 0x52 0x12 0x59 |
注意:在controlState#1 - controlState#5中传输的所有参数的值应反映系统的当前状态。