UDS诊断系列之十二 输入输出控制(2F)服务 下

3.否定响应

输入输出控制的否定响应,是有子流程的,也就是说在前面第三篇介绍的主流程之后,有自己的单独的格式和参数检查,ISO标准里的流程截图如下。
在这里插入图片描述
按从上到下的顺序,每一步的检查内容列举如下:

  • Minimum length check:这里最小长度检查包括了SID,DID和inputOutputControlParameter,最少是4个字节;
  • 第一个NRC31:这里检查在当前诊断会话模式,是否支持请求的DID,以及inputOutputControlParameter是否支持;
  • Total length check:总长度检查,即包括SID,DID,inputOutputControlParameter,controlState和controlMask的总长度,注意仅当inputOutputControlParameter=shortTermAdjustment的时候需要controlState,以及是否包含controlMask也是需要看controlState个数的;
  • 第二个NRC31:如果需要使用controlState或者controlMask的话,检查请求里的这两个参数是否支持;
  • NRC34:如果服务支持安全传输,这里检查安全传输的验证结果是否通过;
  • NRC33:如果DID支持安全校验,这里检查安全校验服务是否已经验证通过;
  • NRC22:如果DID需要一些条件检查的话,这里验证条件是否都已经满足;

如果以上检查都通过了,那么就是肯定响应了☺

4.inputOutputControlParameter

输入输出控制服务没有子功能,注意这个服务没有子功能,没有子功能,重要的事情说三遍!
所以它有个控制参数,这个参数是为了表明,目前是要控制后面的状态参数还是冻结或者恢复请求的DID等。

inputOutputControlParameter功能
0恢复ECU控制,将请求中指定的输入输出状态恢复到ECU自身控制
controlState:请求里不需要包含,响应里必须包含
1恢复到默认值,将请求中指定的输入输出状态恢复到默认值
controlState:请求里不需要包含,响应里必须包含
2冻结当前值,将请求中指定的输入输出状态的当前状态进行冻结,不再改变
controlState:请求里不需要包含,响应里必须包含
3短时间调整,将请求中指定的输入输出状态设置成请求的状态
controlState:请求和响应里必须包含
4-0xFFReserved
5.controlMask

controlMask说起来麻烦,但实际它并不复杂,看下图示例,假设我们的一个DID有两个controlState,那么它们对应的就是controlMask的前两个位,那么这两个位是干嘛的呢?他们用来表示请求里每个位对应的controlState是否需要控制,如果是0就不需要控制,是1就需要控制。如果请求里,controlMask的bit7=1,bit6=0,那本次要设置的是controlState1,对controlState2没有影响。
简单理解,可以认为controlMask就是人名,每个名字只有一个身份证即一位,而它对应的controlState则代表每个人的房产,有的人有一套房,有的人有两套房等等,我们要控制的是每个人租出去了几套房,嗯这个例子是不是就印象深刻了,哈哈哈~

在这里插入图片描述
按照上面的规则,如果记录的人名太多了,那么controlMask就超过一个字节了,超出去的就新开一个字节,仍然按这个从左到右的顺序一一对应。如果没有占满一个字节也要按一个字节算,后面的位暂时都设置为0。
最后需要注意的是,如果DID只控制一个controlState,那么是不能支持controlMask的。

三、数据示例

下面采用ISO里给的一个示例再解释一下这个服务,在example#2里,有如下定义,DID 0x0155定义包含了5个参数,即5个controlState,下表注明了其从左到右每个controlState所占用的数据大小以及位置。
在这里插入图片描述
既然是有5个参数,那么必然要使用controlMask在每次shortTermAdjustment请求的时候注明要调整的controlState是哪个。按照上个章节所描述的规则,controlMask的定义如下。
在这里插入图片描述
所以,如果想控制 IAC Pintle Position的话,只需要按照下面的内容请求即可。SID和DID内容不做解释,inputOutputControlParameter=3表示是短时间调整,第一个controlState设置为07表示要控制到07这个数值,其他的controlState为任何值都可以,为什么这么写?因为后面的controlMask设置了0x80,即bit7=1,其余位都是0,按照controlMask章节所述,这样设置表示请求里除了第一个参数其余均不做控制,所以其余的controlState无论设置什么值都是不会有影响的。
在这里插入图片描述
响应的数据就比较简单了,可以看到IAC Pintle Position因为被控制所以当前值是7,因为要求响应里必须带controlState值,所以其他的状态参数也都返回了当前的状态。
在这里插入图片描述
至此,输入输出控制服务记录完毕,欢迎留言讨论,附上篇和汇总链接
UDS诊断系列之十一 输入输出控制(2F)服务 上
UDS诊断系列链接汇总

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChenglimK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值